Паскаль Как написать программу, которая уменьшала бы ВСЕ максимальные элементы в два...

0 голосов
42 просмотров

Паскаль
Как написать программу, которая уменьшала бы ВСЕ максимальные элементы в два раза?

Так?

max:=a[1,1];
if a[i,j] > max then
max:= a[i,j];
end;
max:= max div 2;

Просто в данном случае, уменьшает только один максимальный элемент и то не всегда выдает правильный ответ.(делю квадратную матрицу 2*2 с элементами: 2 4 6 8 выводит max=2)


Информатика (205 баллов) | 42 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

Const m=4; n=5;
var 
a:array[1..m,1..n] of real;
i,j:integer; max:real;
begin
Randomize;
writeln('Исходный массив:');
for i:=1 to m do
 begin
 for j:=1 to n do
  begin
   a[i,j]:=random(10);
   write(a[i,j]:5:1);
  end;
  writeln;
 end;
max:=a[1,1];
for i:=1 to m do
 for j:=1 to n do
  if a[i,j]>max then max:=a[i,j];
writeln('max = ',max);
for i:=1 to m do
 for j:=1 to n do
  if a[i,j]=max then a[i,j]:=a[i,j]/2;
writeln('Полученный массив:');
for i:=1 to m do
 begin
 for j:=1 to n do write(a[i,j]:5:1);
 writeln;
 end;
end.

Пример:
Исходный массив:
  1.0  9.0  1.0  9.0  8.0
  4.0  4.0  5.0  9.0  9.0
  6.0  3.0  6.0  0.0  6.0
  6.0  7.0  3.0  6.0  9.0
max = 9
Полученный массив:
  1.0  4.5  1.0  4.5  8.0
  4.0  4.0  5.0  4.5  4.5
  6.0  3.0  6.0  0.0  6.0
  6.0  7.0  3.0  6.0  4.5

(194k баллов)
0 голосов

Судя по всему вы понимаете, поэтому подсказки будет достаточно. Немного не так. Вы не сдвигаете элемента массива. Вам нужен отдельные циклы для увеличения i и j. Тогда программа будет сама переходить к нужному элементу массива на каждой итерации.

0

У вас первый элемент хранит в себе значение 2 и дальше него программа не видит.