В данной статье я разберу следующую задачку:
• С помощью динамических переменных реализуйте вещественную матрицу размером 100 x 200. Каждому элементу матрицы присвойте случайное значение из заданного диапазона. Отсортируйте элементы массива по сквозному порядку их размещения в матрице как в одномерном массиве. Выдайте на экран первую подматрицу размером 10 x 13. Для сортировки используйте метод пузырька.
Реализовать программный код будем на языке Pascal. Сначала подключим модуль “CRT” для работы с экраном, объявим необходимые переменные, нужные для выполнения поставленной задачи.
Program massive; uses CRT; type str = array[1..100] of real; {описываем тип массив из 100 элементов} var mas: array[1..200] of ^str; {Описываем массив указателей на массивы строк} i, j: integer; s: real;
Далее, напишем процедуру “Sort”, в которой будет выполняться сортировка элементов каждой строки в массиве по возрастанию. Потом сортируем строки также в порядке возрастания, сравнивая первые элементы каждой строки.
Procedure Sort; {Сортировка методом обмена} var min, buf: real; i, j, i1, j1, pr1, pr2, ik, jk: integer; en: boolean; bf, mn: str; begin i:=1; while i <= 200 do begin {Сортировка внутри строк} j:=1; while j <= 99 do begin {перебираем элементы строк} ik:= 0; jk:= 0; min: =mas[i]^[j]; {Делаем текущий элемент минимальным} j1:=j+1; while j1<=100 do begin {перебираем элементы от текущего до конца строки} if min>mas[i]^[j1] then begin {ищем наименьший элемент, который меньше текущего} min:=mas[i]^[j1]; pr1:=j1; end; inc(j1); end; mas[i]^[pr1]:=mas[i]^[j]; {меняем текущий элемент и наименьший местами} mas[i]^[j]:=min; inc(j); end; inc(i); end; i:=1; while i< =199 do begin {Сортировка строк по первому элементу} mn:=mas[i]^; {запоминаем строку} min:=mas[i]^[1]; {и минимальный элемент} i1:=i+1; while i1<=200 do begin {перебираем все строки и сравниваем первые элементы} if min>mas[i1]^[1] then begin {если находим элемент меньше текущего} mn:=mas[i1]^; {то записываем строку} min:=mas[i1]^[1]; {и делаем его минимальным} pr1:=i1; {запоминаем номер строки} end; inc(i1); end; mas[pr1]^:=mas[i]^; {меняем строки местами} mas[i]^:=mn; inc(i); end; end;
Все, что нам осталось, это написать главную процедуру. В ней сначала очищаем экран от распечатанного ранее текста, запустим процедуру “Randomize” для случайной генерации чисел. Массив 100×200 заполняем случайно генерируемыми числами, сортируем массив, запустив написанную процедуру “sort”. Последнее, что мы делаем, выводим подматрицу 10×13 на экран, используя внешний и внутренний циклы.
begin clrscr; {/////////////////////////////////////////////////////////////////////} writeln; Randomize; i:=1; while i< =200 do begin {Заполняем массив случайными числами} New(mas[i]); j:=1; while j<=100 do begin s:=Random(40)+Random; mas[i]^[j]:=s; inc(j); end; inc(i); end; sort; {Сортируем} i:=1; while i<=10 do begin {Выводим подматрицу} j:=1; while j<=13 do begin write((mas[i]^[j]):5:2,'|'); inc(j); end; inc(i); writeln; end; readln; end.
Все, что нужно для выполнения задачи и реализации ее на Pascal мы сделали. Было написано заполнение массива случайными числами, сортировка и вывод подматрицы на экран пользователя.
Автор: Евтеев Евгений Александрович