Вещественная матрица размером 100 x 200 на Pascal

19 апреля 2009

В данной статье я разберу следующую задачку:
• С помощью динамических переменных реализуйте вещественную матрицу размером 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” для случайной генерации чисел. Массив 100x200 заполняем случайно генерируемыми числами, сортируем массив, запустив написанную процедуру “sort”. Последнее, что мы делаем, выводим подматрицу 10x13 на экран, используя внешний и внутренний циклы.

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 мы сделали. Было написано заполнение массива случайными числами, сортировка и вывод подматрицы на экран пользователя.

Автор: Евтеев Евгений Александрович