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

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

  • Реклама сайта
  • Категории