В данной статье я разберу следующую задачку:
• С помощью динамических переменных реализуйте вещественную матрицу размером 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 мы сделали. Было написано заполнение массива случайными числами, сортировка и вывод подматрицы на экран пользователя.
Автор: Евтеев Евгений Александрович
Email: evteev_e2003@mail.ru