В строках, где число четных элементов превышает число нечетных, нечетные элементы заменить максимумом матрицы - Turbo Pascal
Формулировка задачи:
Не пойму что не так сделал. Программа выводит не правильный результат. Прошу помочь с задачей.
Ввести матрицу А NxM, вывести ее. В строках, где число четных элементов превышает число нечетных, нечетные элементы заменить максимальным элементом всей матрицы.
Листинг программы
- program abc2;
- var a:array[1..5,1..4]of integer;
- n,l,m,i,j,max,k,s:integer;
- begin
- writeln('введите сначала n, потом m');
- readln(n,m);
- max:=-999;
- for i:=1 to n do
- for j:=1 to m do
- begin
- write('a[i,j]=');
- readln(a[i,j]);
- end;
- for i:=1 to n do
- begin
- for j:=1 to m do
- write(a[i,j]:4);
- writeln;
- end;
- for i:=1 to n do
- for j:=1 to m do
- begin
- if a[i,j]>max then
- max:=a[i,j];
- end;
- for i:=1 to n do
- begin
- k:=0;
- s:=0;
- for j:=1 to m do
- if a[i,j] mod 2=0 then
- k:=k+1;
- if a[i,j] mod 2=1 then
- s:=s+1;
- if k>s then
- begin
- for l:= 1 to m do
- if( a[i,l]mod 2=1) then a[i,l]:= max;
- end;
- end;
- for i:=1 to n do
- begin
- for j:=1 to m do
- write(a[i,j]:4);
- writeln;
- end;
- end.
Решение задачи: «В строках, где число четных элементов превышает число нечетных, нечетные элементы заменить максимумом матрицы»
textual
Листинг программы
- for i:=1 to n do for j:=1 to m do
- if a[i,j]>max then max:=a[i,j];
- for i:=1 to n do begin
- k:=0;
- for j:=1 to m do if Odd(a[i,j]) then Inc(k);
- if m-k>k then
- for j:=1 to m do if Odd(a[i,j]) then a[i,j]:=max;
- end;
- for i:=1 to n do begin
- for j:=1 to m do Write(' ',a[i,j]:3); WriteLn;
- end;
- end.
Объяснение кода листинга программы
- В первой строке кода используется цикл
for
, который выполняется от 1 доn
(количество строк) и от 1 доm
(количество столбцов). - Внутри первого цикла
if
проверяется условиеa[i,j] > max
. Если это условие истинно, то значениеmax
присваивается значениюa[i,j]
. Это происходит для каждой строки и каждого столбца. - Во втором цикле
for
также используется циклfor
, который выполняется от 1 доm
(количество столбцов). - Внутри второго цикла
if
проверяется условиеOdd(a[i,j])
. Если это условие истинно, то значение переменнойk
увеличивается на единицу. - Затем проверяется условие
m-k > k
. Если это условие истинно, то для каждой строки и каждого столбца значениеa[i,j]
присваивается максимальному значениюmax
. - В конце кода используется третий цикл
for
, который выполняется от 1 доn
(количество строк). - Внутри третьего цикла
Write
выводится пробел, а затем выводится значение каждой ячейки матрицыa[i,j]
(используется формат с разделителем 3 пробелов). - Код завершается вызовом функции
WriteLn
, которая выводит новую строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д