Реализовать возврат в меню - Pascal ABC
Формулировка задачи:
Решение задачи: «Реализовать возврат в меню»
Uses Crt;
Procedure proc1;
const nmax=20;
type str=array[1..nmax] of integer;{массив=строка матрицы}
matr=array[1..nmax] of str;{матрица=массив строк}
const p:array[1..5] of byte = (9,5,3,2,1);{вспомогательный массив для сортировки}
var a:matr;
m,n,i,j,k,g:integer;
x:str;{переменная типа массив=буфер для обмена при сортировке}
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' m=');
readln(m);
until m in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i][j]:=-20+random(71);
write(a[i][j]:4);
end;
writeln;
end;
writeln;
{Перестановка строк сортировкой Шелла}
for k:=1 to 5 do
begin
g:=p[k];
for i:=g to m-1 do
begin
x:=a[i];
j:=i-g;
while (x[1]>a[j][1]) and (j>=g) do
begin
a[j+g]:=a[j];
j:=j-g;
end;
a[j+g]:=x;
end;
end;
writeln('Перестановка строк по убыванию элементов первого столбца:');
for i:=1 to m do
begin
for j:=1 to n do
write(a[i][j]:4);
writeln;
end;
readln
end;
Procedure proc2;
const
n = 10;
var
i, c, j,ind: integer;
min:real;
mas: array [1..n]of real;
begin
clrscr;
writeln('Исходный массив');
for i := 1 to n do
begin
c := random(71) - 50;
mas[i] := c;
write(mas[i], ' ');
end;
writeln;
for i := 1 to n - 1 do
begin
min := mas[i];
ind := i;
for j := i + 1 to n do
if mas[j] < min then
begin
min := mas[j];
ind := j;
end;
mas[ind] := mas[i];
mas[i] := min;
end;
writeln('Сортировка');
for i := 1 to n do
write(mas[i], ' ');
readln;
end;
Procedure proc3;
var a:array [1..100] of integer;
x,i,j,n: integer;
begin
clrscr;
randomize;
write ('размер масива => ');
readln(n);
for i := 1 to n do
begin
a[i] := random(71)-50;
write(a[i]:4);
end;
writeln;
for i:=2 to n do
begin
x:=a[i];
j:=i-1;
while (j>0) and (x<a[j]) do
begin
a[j+1]:=a[j];
j:=j-1;
end;
a[j+1]:=x;
end;
for i:=1 to n do
write (a[i],' ');
readln;
end;
var n:byte;
begin
repeat
ClrScr;
WriteLn('Program 1 - 1');
WriteLn('Program 2 - 2');
WriteLn('Program 3 - 3');
WriteLn('Exit - 0');
Write('Select program: ');
ReadLn(n);
Case n of
1: proc1;
2: proc2;
3: proc3;
end;
until n = 0;
end.
Объяснение кода листинга программы
В представленном коде реализованы три программы. В первой программе используется массив строк типа str и массив типа byte для вспомогательной сортировки. Программа позволяет пользователю выбрать количество строк и столбцов для создания матрицы, затем заполняет матрицу случайными числами. После этого выполняется перестановка строк матрицы по убыванию элементов первого столбца. Во второй программе используется массив типа real для хранения чисел. Программа создает случайный массив чисел, сортирует его по возрастанию, а затем выводит отсортированный массив на экран. В третьей программе используется массив типа integer. Программа создает случайный массив чисел, сортирует его по возрастанию, а затем выводит отсортированный массив на экран. Все программы используют функции из библиотеки Crt для очистки экрана перед началом работы и чтения/записи ввода/вывода.