Упорядочивание строк матрицы по неубыванию элементов столбца (15.15)
Упорядочить строки матрицы B(m,n) по неубыванию элементов её k-го столбца
Архив программы.
Код программы.
Исходная матрица.
Результат работы программы.
Описание программы на языке СИ.
Процедура
void ordered() открывает текстовый файл
"dat.txt" для чтения данных. Этот файл должен располагаться в той же самой папке, в которой находится файл исполняемой программы
order.zip (Папка
Output\MingW ).
Указатель устанавливается в начало файла, первоначально переменной
n присваивается значение
-1, и до тех пор, пока не будет достигнут конец файла, значение
n увеличивается на единицу при считывании одного вещественного числа из файла в переменную вещественного типа
x. Таким способом находится число всех вещественных чисел, содержащихся в текстовом файле
"dat.txt". (Файл
"dat.txt" содержит в конце символ переноса на новую строку).
После этого файл
"dat.txt" закрывается и снова открывается для чтения, указатель устанавливается в начало файла. Первоначально переменной
m присваивается значение
0, и до тех пор, пока не будет достигнут конец файла, значение
m увеличивается на единицу при считывании одной строки файла в переменную строкового типа максимальной длины в 200 символов
s.
Таким способом будет найдено число строк матрицы
B(m,n), равное
m. Для нахождения числа столбцов надо найденное количество действительных чисел
n разделить на количество строк
m, то есть присвоить переменной
n значение
n/m
После этого файл
"dat.txt" закрывается и снова открывается для чтения, указатель устанавливается в начало файла. Выделяется память под двумерный массив действительных чисел
B(m,n), имеющий
m строк и
n столбцов. Этот массив
B(m,n) заполняется числами
b(i,j)из файла во внешнем цикле по строкам (
i меняется от
0 до
m-1), а во внутреннем цикле по столбцам (
j меняется от
0 до
n-1), то есть сначала считывается вся первая строка, потом вся вторая строка и т.д.
После этого, файл
"dat.txt" закрывается, а файл
"sort.txt" открывается для записи, перезаписи или создаётся в той же папке, в которой находится файл исполняемой программы
order.zip (Папка
Output\MingW ).
Сначала в файл
"sort.txt" записывается исходная таблица чисел по строкам (номер строки
i меняется от
0 до
m-1).
После записи
i-й строки (
j меняется от
0 до
n-1) в файл добавляется символ переноса на новую строку
"\n"
После этого для каждого номера столбца
k (
k меняется от
0 до
n-1) производится упорядочивание строк матрицы
B(m,n) по неубыванию элементов её
k-го столбца, и матрица, упорядоченная по неубыванию элементов её
k-го столбца записывается в файл
"sort.txt"
Для каждого значения
i, (где
i меняется от
0 до
m-1) переменной
min присваивается значение
i, после чего элементы
k-го столбца всех строк с номерами, большими
i, то есть элементы
b[j][k] сравниваются с элементом
b[min][k], и если выполняется неравенство
b[j][k] < b[min][k] , то переменной
min присваивается значение
j, после чего строки с номером
i и с номером
min меняются местами:
for (l=0; l<n; l++) { buf=b[i][l]; b[i][l]=b[min][l]; b[min][l]=buf; }
В файл
"sort.txt" записывается отсортированная по неубыванию элементов
k-го столбца таблица чисел по строкам (номер строки
i меняется от
0 до
m-1).
После записи
i-й строки (
j меняется от
0 до
n-1) в файл добавляется символ переноса на новую строку
"\n"
После завершения цикла по
k файл
"sort.txt" закрывается. Результаты работы программы можно просмотреть в текстовом файле
"sort.txt".
Основная программа
int main(int argc, char *argv[]) проверяет, имеется ли в папке с выполняемой программой
order.zip текстовый файл
"dat.txt" . Если этот файл есть, то выполняется процедура
void ordered(), а если этот файл отсутствует, то запускается процедура void cr2mf(), создающая тестовый файл
"dat.txt", содержащий таблицу из случайных действительных чисел отрезка
[-1000, 1000], имеющую
m строк и
n столбцов. Числа
m и
n пользователь вводит с клавиатуры.
Функция
p=(float) rand()*2000/RAND_MAX -1000; даёт действительное число из отрезка
[-1000, 1000], которое записывается в
i-ю строку и
j-й столбец матрицы
B(m,n)
Содержание файла "dat.txt"
-789.361267 919.614258 568.285156 970.641174 -306.253235
806.878845 -599.536133 -520.004883 -317.545105 684.499634
-947.386108 218.787201 -272.255615 -279.274872 556.260864
-515.793335 -237.037262 640.125732 -835.566284 236.487930
-251.564072 39.094212 655.201904 -560.411377 898.434387
955.748169 872.310547 -312.112793 52.217171 5.584887
-432.172607 -70.528275 752.922119 396.588043 607.104736
Содержание файла "sort.txt"
Исходная таблица чисел
-789.36127 919.61426 568.28516 970.64117 -306.25323
806.87885 -599.53613 -520.00488 -317.54510 684.49963
-947.38611 218.78720 -272.25562 -279.27487 556.26086
-515.79333 -237.03726 640.12573 -835.56628 236.48793
-251.56407 39.09421 655.20190 -560.41138 898.43439
955.74817 872.31055 -312.11279 52.21717 5.58489
-432.17261 -70.52827 752.92212 396.58804 607.10474
Таблица, упорядоченная по неубыванию 1 столбца:
-947.38611 218.78720 -272.25562 -279.27487 556.26086
-789.36127 919.61426 568.28516 970.64117 -306.25323
-515.79333 -237.03726 640.12573 -835.56628 236.48793
-432.17261 -70.52827 752.92212 396.58804 607.10474
-251.56407 39.09421 655.20190 -560.41138 898.43439
806.87885 -599.53613 -520.00488 -317.54510 684.49963
955.74817 872.31055 -312.11279 52.21717 5.58489
Таблица, упорядоченная по неубыванию 2 столбца:
806.87885 -599.53613 -520.00488 -317.54510 684.49963
-515.79333 -237.03726 640.12573 -835.56628 236.48793
-432.17261 -70.52827 752.92212 396.58804 607.10474
-251.56407 39.09421 655.20190 -560.41138 898.43439
-947.38611 218.78720 -272.25562 -279.27487 556.26086
955.74817 872.31055 -312.11279 52.21717 5.58489
-789.36127 919.61426 568.28516 970.64117 -306.25323
Таблица, упорядоченная по неубыванию 3 столбца:
806.87885 -599.53613 -520.00488 -317.54510 684.49963
955.74817 872.31055 -312.11279 52.21717 5.58489
-947.38611 218.78720 -272.25562 -279.27487 556.26086
-789.36127 919.61426 568.28516 970.64117 -306.25323
-515.79333 -237.03726 640.12573 -835.56628 236.48793
-251.56407 39.09421 655.20190 -560.41138 898.43439
-432.17261 -70.52827 752.92212 396.58804 607.10474
Таблица, упорядоченная по неубыванию 4 столбца:
-515.79333 -237.03726 640.12573 -835.56628 236.48793
-251.56407 39.09421 655.20190 -560.41138 898.43439
806.87885 -599.53613 -520.00488 -317.54510 684.49963
-947.38611 218.78720 -272.25562 -279.27487 556.26086
955.74817 872.31055 -312.11279 52.21717 5.58489
-432.17261 -70.52827 752.92212 396.58804 607.10474
-789.36127 919.61426 568.28516 970.64117 -306.25323
Таблица, упорядоченная по неубыванию 5 столбца:
-789.36127 919.61426 568.28516 970.64117 -306.25323
955.74817 872.31055 -312.11279 52.21717 5.58489
-515.79333 -237.03726 640.12573 -835.56628 236.48793
-947.38611 218.78720 -272.25562 -279.27487 556.26086
-432.17261 -70.52827 752.92212 396.58804 607.10474
806.87885 -599.53613 -520.00488 -317.54510 684.49963
-251.56407 39.09421 655.20190 -560.41138 898.43439
На главную страницу.