Помогите решить двумерный массив на Paskal

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Anton_XXX
Сообщения: 108
Зарегистрирован: 21 дек 2006, 17:15

Привет всем! :D
Очень простая задача, решена не до конца... Проблема состоит в том, что у меня не получается поменять местами максимальный и минимальный элемент в массиве!!!

Помогите пожалуйста!!!

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


Код: Выделить всё

program Ex_3;
uses crt;
const
n=10;
m=10;
var
mas:array[1..n,1..m] of integer;
i,j,maxi,maxj,b,c,d,mini,minj,max,a,min:integer;
p,o:integer;
begin
randomize;
writeln('ЗАДАНИЕ: найти в двумерном массиве максимальный и минимальный элемент и поменять их местами');
writeln;
writeln('Массив заполняется случайными числами!');
writeln;
for i:=1 to n do
for j:=1 to m do
begin
mas[i,j]:=random(50)-20;
end;
for i:=1 to n do
begin
for j:=1 to m do
write(mas[i,j]:4);
writeln;
end;
readln;
max:=mas[1,1];
maxi:=1; mini:=1;
maxj:=1; minj:=1;
min:=mas[1,1];
for i:=1 to n do
for j:=1 to m do
if max<mas[i,j] then begin max:=mas[i,j];
maxi:=i; maxj:=j;
a:=i; b:=j;
end;
for i:=1 to n do
for j:=1 to m do
if min>mas[i,j] then begin min:=mas[i,j];
mini:=i; minj:=j;
c:=i; d:=j;
end;
writeln;
writeln('максимальный: ',max,' индексы: [',maxi,',',maxj,']');
writeln('минимальный: ',min,' индексы: [',mini,',',minj,']');
readln;
mas[mini,minj]:=mas[maxi,maxj]; {Здесь происходит замена элементов max и min}
mas[a,b]:=mas[c,d];
for i:=1 to n do
begin
for j:=1 to m do
write(mas[i,j]:4);
writeln;
end;
readln;
end.
Вложения

[Расширение txt было запрещено, вложение больше недоступно.]

Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

1. Переменные (a,b,c,d: intger) здесь лишние. Не стоит менять два элемента "пузырьковым методом".
2. [quote="Anton XXX"]

Код: Выделить всё

...
for i:=1 to n do
for j:=1 to m do
begin
mas[i,j]:=random(50)-20]
[/quote]
Для "однооперационных" процедур не нужно использовать [B]begin end;[/B]
[code]
for i:=1 to n do
for j:=1 to m do mas[i,j]:=random(50)-20;
3. И наконец, меняем местами:

Код: Выделить всё

....
mas[mini,minj]:=max; {Здесь происходит замена элементов max и min}
mas[maxi,maxj]:=min;
....
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

И ещё, переменные (p,o: integer ;) здесь тоже лишние. Вот весь код программы:

Код: Выделить всё

program Ex_3;
uses crt;
const
n=10;
m=10;
var
mas:array[1..n,1..m] of integer;
i,j,maxi,maxj,mini,minj,max,min:integer;
begin
randomize;
writeln('ЗАДАНИЕ: найти в двумерном массиве максимальный и минимальный элемент и поменять их местами');
writeln;
writeln('Массив заполняется случайными числами!');
writeln;
for i:=1 to n do
for j:=1 to m do mas[i,j]:=random(50)-20;
for i:=1 to n do
begin
for j:=1 to m do
write(mas[i,j]:4);
writeln;
end;
readln;
max:=mas[1,1];
maxi:=1; mini:=1;
maxj:=1; minj:=1;
min:=mas[1,1];
for i:=1 to n do
for j:=1 to m do
if max<mas[i,j] then begin max:=mas[i,j];
maxi:=i; maxj:=j;
end;
for i:=1 to n do
for j:=1 to m do
if min>mas[i,j] then begin min:=mas[i,j];
mini:=i; minj:=j;
end;
writeln;
writeln('максимальный: ',max,' индексы: [',maxi,',',maxj,']');
writeln('минимальный: ',min,' индексы: [',mini,',',minj,']');
readln;
mas[mini,minj]:=max; {Здесь происходит замена элементов max и min}
mas[maxi,maxj]:=min;
for i:=1 to n do
begin
for j:=1 to m do
write(mas[i,j]:4);
writeln;
end;
readln;
end.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

А можно еще сократить. Обойтись вообще без max и min, а нахождение максимума и минимума свести в один цикл. Замену максимума и минимума тогда провести путем сложения-вычитания.

Код: Выделить всё

program Ex_3;
uses crt;
const
n=10;
m=10;
var
mas:array[1..n,1..m] of integer;
i,j,maxi,maxj,mini,minj:integer;
begin
randomize;
writeln('ЗАДАНИЕ: найти в двумерном массиве максимальный и минимальный элемент и поменять их местами');
writeln;
writeln('Массив заполняется случайными числами!');
writeln;
for i:=1 to n do
for j:=1 to m do mas[i,j]:=random(50)-20;
for i:=1 to n do
begin
for j:=1 to m do
write(mas[i,j]:4);
writeln;
end;
readln;
maxi:=1; mini:=1;
maxj:=1; minj:=1;
for i:=1 to n do
  for j:=1 to m do
  begin
     if mas[maxi,maxj]<mas[i,j] then begin maxi:=i; maxj:=j; end;
     if mas[mini,minj]>mas[i,j] then begin mini:=i; minj:=j; end;
   end;
writeln;
writeln('максимальный: ',mas[masi,masj],' индексы: [',maxi,',',maxj,']');
writeln('минимальный: ',mas[mini,minj],' индексы: [',mini,',',minj,']');
readln;
inc(mas[mini,minj],mas[maxi,maxj])
mas[maxi,maxj]:=mas[mini,minj]-mas[maxi,maxj];
mas[mini,minj]:=mas[mini,minj]-mas[maxi,maxj];
for i:=1 to n do
begin
for j:=1 to m do
write(mas[i,j]:4);
writeln;
end;
readln;
end.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Anton_XXX
Сообщения: 108
Зарегистрирован: 21 дек 2006, 17:15

ААААА!!! Понятно, блин... А я то сижу тут думаю какую-то ерунду сочиняю.....!!!)))
Спасибо народ!!!!)))
Ответить