Упорядочивание строк матрицы по неубыванию элементов столбца (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     

На главную страницу.