Изменить статический массив на динамический - Free Pascal
Формулировка задачи:
Нужно сделать так, чтобы программа была написана через динамический массив
Program A14_4;
uses crt;
const n=5;
m=10;
var a : array [1..n,1..m] of integer;
i,j,jn,jx : byte;
max,min,tm : integer;
begin
clrscr; randomize;jn:=1;jx:=1;
writeln('Исходная матрица:');writeln;
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=random(50);
write(a[i,j]:3,' ');
end;
writeln;
end;
min:=a[1,1];max:=min;
for i:=1 to n do
for j:=1 to m do
begin
if a[i,j]>max then
begin
max:=a[i,j];jx:=j;
end;
if a[i,j]<min then
begin
min:=a[i,j];jn:=j;
end;
end;
Writeln;
Writeln('максимальное число ',max:4,' в столбце ',jx:3);
Writeln('минимальное число ',min:4,' в столбце ',jn:3);
if jx=jn then
begin
writeln('максимум и минимум в одном столбце, ничего не меняем');
end
else
begin
for i:=1 to n do
begin
tm:=a[i,jn];a[i,jn]:=a[i,jx];a[i,jx]:=tm;
end;
end;
writeln;writeln('Выводим результат обмена столбцов ',jn:3,' и ',jx:3);
writeln;
for i:=1 to n do
begin
for j:=1 to m do
begin
write(a[i,j]:3,' ');
end;
writeln;
end;
readln;
end.Решение задачи: «Изменить статический массив на динамический»
textual
Листинг программы
Program A14_4;
uses crt;
const n=5;
m=10;
var a : array of array of integer;
i,j,jn,jx : byte;
max,min,tm : integer;
begin
clrscr; randomize;jn:=1;jx:=1;
writeln('Исходная матрица:');writeln;
setlength(a, n, m);
for i:=0 to pred(n) do
begin
for j:=0 to pred(m) do
begin
a[i,j]:=random(50);
write(a[i,j]:3,' ');
end;
writeln;
end;
min:=a[0,0];max:=min;
for i:=0 to pred(n) do
for j:=0 to pred(m) do
begin
if a[i,j]>max then
begin
max:=a[i,j];jx:=j;
end;
if a[i,j]<min then
begin
min:=a[i,j];jn:=j;
end;
end;
Writeln;
Writeln('максимальное число ',max:4,' в столбце ',jx:3);
Writeln('минимальное число ',min:4,' в столбце ',jn:3);
if jx=jn then
begin
writeln('максимум и минимум в одном столбце, ничего не меняем');
end
else
begin
for i:=0 to pred(n) do
begin
tm:=a[i,jn];a[i,jn]:=a[i,jx];a[i,jx]:=tm;
end;
end;
writeln;writeln('Выводим результат обмена столбцов ',jn:3,' и ',jx:3);
writeln;
for i:=0 to pred(n) do
begin
for j:=0 to pred(m) do
begin
write(a[i,j]:3,' ');
end;
writeln;
end;
setlength(a, 0, 0);
readln;
end.
Объяснение кода листинга программы
- Объявление переменных:
- a: массив массивов целых чисел (динамический массив)
- i, j, jn, jx: булевые переменные для управления циклом
- max, min, tm: целочисленные переменные для хранения максимального, минимального и временного значений
- n: количество строк в исходной матрице (константа)
- m: количество столбцов в исходной матрице (константа)
- Инициализация переменных и заполнение матрицы случайными числами.
- Нахождение минимального и максимального значений в матрице.
- Поиск столбцов с минимальным и максимальным значениями и сохранение их номеров в jn и jx.
- Проверка, являются ли столбцы с минимальным и максимальным значениями одним и тем же. Если да, то ничего не менять.
- Если столбцы разные, то производится обмен значениями в этих столбцах.
- Вывод исходной и измененной матрицы.
- Освобождение памяти, выделенной под динамический массив.
- Ввод с клавиатуры для завершения работы программы.