Pascal: в двумерном массиве поменять местами максимальный и минимальный элементы

Задача в полной мере описана в заголовке.

Суть сводится к следующему:

  1. Заполнить массив
  2. Вывести массив
  3. Найти минимальный элемент
  4. Найти максимальный элемент
  5. Произвести обмен значений по индексам

Предлагаю вот такую реализацию на Pascal:


program change;
var
A : Array [1..10,1..10] of integer;
i,j, mini, minj, maxi, maxj, min,max, temp: integer;
begin
for i := 1 to 10 do
begin
writeln();
for j := 1 to 10 do
begin
A[i,j] := random(100);
write(A[i,j], ' ');
end;
end;
min := A[1,1];
max := A[1,1];
for i := 1 to 10 do
for j := 1 to 10 do
begin
if A[i,j] < min then
begin
min := A[i,j];
mini := i;
minj := j;
end;
if A[i,j] > max then
begin
max := A[i,j];
maxi := i;
maxj := j;
end;
end;
temp:= max;
A[maxi,maxj] := A[mini,minj];
A[mini,minj] := temp;

writeln();
for i := 1 to 10 do
begin
writeln();
for j := 1 to 10 do
begin
write(A[i,j], ' ');
end;
end;
readln();
end.

Демонстрация:

Демонстрация обмена

Если будет необходимо, могу реализовать на C++/ C#/ VB.Net и прочих :)

6 Responses

  1. Александр 04.12.2011 / 00:14

    В данной программе переменные min и max лишние.
    Если наша программа хранит значения mini, minj, то значение минимума лежит в A[mini, minj]. Заводить для этого отдельную переменную не имеет смысла.

  2. Владимир 28.11.2014 / 20:59

    Как быть, если мин>1 и макс >1?
    Данный алгоритм работает только с одним мин и одним макс в массиве.
    А, если мин или макс первый элемент, то тоже не работает.

  3. Владимир 29.11.2014 / 17:23

    program min_max;
    const n=2;
    m=3;
    var a,a1:array[1..n,1..m] of integer;
    i,j,b,z,max,min:integer;
    begin
    For i:=1 to n do
    for j:=1 to m do
    begin
    read (a[i,j]);
    a1[i,j]:=a[i,j];
    end;
    max:=a[1,1];
    min:=a[1,1];
    For i:=1 to n do
    for j:=1 to m do
    begin
    if max=a[i,j] then
    min:=a[i,j];
    end;
    writeln;
    For i:=1 to n do
    for j:=1 to m do
    if max=a[i,j] then
    a[i,j]:=min;
    For i:=1 to n do
    for j:=1 to m do
    if (min=a[i,j])and (a1[i,j]=a[i,j]) then
    a[i,j]:=max;

    For i:=1 to n do
    begin
    for j:=1 to m do
    write (a[i,j],’ ‘);
    writeln;
    end;
    end.

Добавить комментарий