
Приложение б Текст программы
Program KurRab;
Uses Crt;
Type
strmenu=record {Структура горизонтального меню}
x: integer; {Позиция вывода пункта меню}
s: string[14]; {Название пункта меню}
end;
Const
kol=4;
mas:array[1..kol] of strmenu=
((x:6; s:'Ввод данных'),
(x:25; s:'Сортировка'),
(x:42; s:'Вывод данныч'),
(x:63; s:'Выход'));
Var
AS, A: array [1..5,1..5] of integer;
A1:array[1..10] of integer;
PV, PS: byte;
i,j: integer;
n: integer; {Текущий активный пункт меню}
ch: char;
procedure InputDan;
Label M1, M2;
var n:integer;
begin
clrscr;
writeln('+__________________________+');
writeln('|1. Ручной ввод |');
writeln('|2. Автоматический ввод |');
writeln('|3. Выход в главное меню |');
writeln('+__________________________+');
M1:writeln(' Введите пункт меню');
readln(n);
case n of
1: begin
for i:=1 to 5 do
for j:=1 to 5 do
begin
write('A [',i,',',j,']=');
readln(A [i,j]);
end;
writeln('Данные введены');
goto M1;
PV:=1;
end;
2:begin randomize;
for i:= 1 to 5 do
for j:= 1 to 5 do
A[i,j]:= random(100)-50;
writeln('Данные введены');
goto M1;
PV:=1;
end;
3:begin
writeln('Для выхода в главное меню нажмите Enter');readln;end
else
goto M1;
end;
end;
procedure SortDan;
var
k,buf:integer;
p,min:byte;
begin
clrscr;
if PV=1 then begin
writeln('Сортировка элементов выше боковой диагонали методом выбора');
k:=1;
for i:=1 to 5 do
for j:=1 to 5 do
if((i+j)<6) then begin
A1[k]:=A[i,j];
k:=k+1;
end;
for i:= 1 to 9 do
begin
min:= i; p:=0;
for j:=i+1 to 10 do
if A1[j]<A1[min] then begin
min:= j; p:=1;
end;
if p=1 then begin
Buf:=A1[i];
A1[i]:=A1[min];
A1[min]:=Buf;
end;
end;
PS:=1;
writeln('Сортировка данных выполнена, для выхода в главное меню нажмите Enter');
end
else
writeln('Данные не введены, для выхода в главное меню нажмите Enter');
readln;
end;
procedure OutputDan;
var
i,j,min:integer;
begin
clrscr;
if PV=0 then
writeln('Данные не введены,для выхода в главное меню нажмите Enter')
else
begin
writeln('Исходная матрица');
for i:=1 to 5 do
begin
for j:=1 to 5 do
write(A[i,j]:5);
writeln;
end;
writeln('Поиск минимального элемента матрицы');
for i:=1 to 5 do
for j:=1 to 5 do
if(i>j) and (A[i,j]<min) then min:= A[i,j];
writeln('Деление положительных элементов матрицы на min=',min);
if min<>0 then begin
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
if A[i,j]>0 then A[i,j]:=A[i,j] div min;
write (A[i,j]:5);
end;
writeln;
end;
end
else
writeln ('Минимальное значение min=0, деление невозможно');
if ps=1 then begin
writeln('Отсортированный массив');
for i:=1 to 10 do
write(a1[i], ' ');
writeln;
end;
writeln('Для выхода в меню нажмите Enter');
end;
readln;
end;
Begin
n:=1;
repeat {Основной цикл по меню}
textattr:=7;
clrscr;
for i:=1 to kol do
begin
gotoxy(mas[i].x,3);
write(mas[i].s);
end;
textattr:=87; { цвет активного пункта меню}
gotoxy(mas[n].x,3);
write (mas[n].s); {вывод активного пункта меню}
ch:=readkey; {ввод символа с клавиатуры}
case ch of {определить код нажатой клавиши}
#13: case n of {клавиша Enter}
1: InputDan; {ввод данных}
2: SortDan; {сортировка данных}
3: OutputDan; { вывод данных}
end;
#0:begin
ch:=readkey;
case ch of {анализ функциональных клавиш}
#77:
if n<kol then
n:=n+1
else
n:=1;
#75:
if n>1 then
n:=n-1
else
n:=kol;
end;
end;
end;
until(ch= #13)and(n=4)or(ch= #27); {цикл, пока не нажата клавиша Esc или не выбран пункт ?Выход?}
textattr:=7;
clrscr;
end.