Другие языки программирования и технологии

Pascal помогите исправить код

Написал код, но вот с решением первой задачи справиться не могу. Создавать новый массив нельзя... Сказано было сделать так: Вместо этого формирования min присвойте любое кратное 3 значение (это у вас формирование нового массива). А дальше просто поиск минимального .

{Вариант 19
1.Определение наибольшего из элементов, кратных 3.
2.Вычитание из значений элементов четных строк значений элементов нечетных строк. }

const n = 5;
const z= 10;
type TMyArray = array[1..n,1..n] of integer;

{заполенение массива случайными числами}
procedure FillArrayByRandom(var A : TMyArray);
var i, j : integer;
begin
Randomize;
For i:=1 to n do
For j:=1 to n do
A[i,j]:=Random(21);
end;

{печать содержимого массива}
procedure PrinArray(A : TMyArray);
var i, j : integer;
begin
For i:=1 to n do
begin
For j:=1 to n do Write(A[i,j]:2,' ');
WriteLn
end;
end;

{Вычитание из значений элементов четных строк значений элементов нечетных строк. }
procedure minus(var A : TMyArray);
var i, j: integer;
begin
For i:=1 to n do
For j:=1 to n do
If i mod 2=0 then
begin
A[i,j]:=A[i,j]-A[i+1,j];
end;
end;

{функция нахождения элементов кратных 3 и перенос их в иной массив}
Function kratno3(max:integer): integer;
var A : TMyArray;
var i, j: integer;
begin
for i := 1 to N do
if (A[i,j] mod 3) = 0 then {ВОТ ТУТ ВЫДАЁТ ОШИБКУ, НЕ МОГУ ПОНЯТЬ ПОЧЕМУ}
begin
max := A[i,j];
break;
end;
i:=0;
for i := i + 1 to N do
if ((A[i,j] mod 3) = 0) and (A[i,j] > max) then {ТУТ ТОЖЕ ОШИБКА, ПОЧЕМУ ???}
max := A[i,j];
end;

var p: TMyArray;
c: array[1..5,1..5] of integer;
i,j,k,max: integer;
begin

{ заполним массив случайнымии числами }
FillArrayByRandom(P);

{ выведедем содержимое массива на экран }
WriteLn('Начальный массив:');
PrinArray(P);
WriteLn;

{Вычтем из значений чётных строк значения нечётных}
minus( P );

{ выведедем содержимое массива на экран }
WriteLn('Массив после обработки:');
PrinArray(P);
WriteLn;

{Нахождение максимального элемента кратного 3-ём}
max:=kratno3(max);
writeln('Максимальный элемент кратный 3-ём после обработки ',max);

end.
Функции в паскале дело мутное, поэтому лучше юзать процедуру
Procedure kratno3( A : TMyArray);
// min имя системной функции, что бы избежать конфликтов лучше дать другое имя
var i, j,emin: integer;
begin
я бы решал в два прохода. Так как наличие хотя бы одного элемента кратного трем не очевидно, надо проверить это на первом проходе и запомнить значение.
for i:=1 to N do
for j:=1 to N do begin
if (A[i,j] mod 3)=0 then begin emin:= A[i,j]; break; end;
writeln('Массив не содержит элементов кратных 3');
exit;
end;
вторым проходом найдем минимальный элемент
for i:=1 to N do
for j:=1 to N do
if (emin>A[i,j]) and ((A[i,j] mod 3) = 0) then emin:=A[i,j];
writeln('Минимальное значение кратное 3 = ',emin);
вуаля!
Виталий Шевченок
Виталий Шевченок
20 235
Лучший ответ
Аян Аяпов writeln('Минимальное значение кратное 3 = '.emin); {Тут выдаёт ошибку ( .emin) не объявлен в типе string } ...И надо бы определить наибольшее из элементов, кратных 3.
Виталий Шевченок Исправил ответ
Procedure kratno3( A : TMyArray);
// min имя системной функции, что бы избежать конфликтов лучше дать другое имя
var i, j,emin: integer;
begin
я бы решал в два прохода. Так как наличие хотя бы одного элемента кратного трем не очевидно, надо проверить это на первом проходе и запомнить значение.
for i:=1 to N do
for j:=1 to N do begin
if (A[i,j] mod 3)=0 then begin emin:= A[i,j]; break; end;
writeln('Массив не содержит элементов кратных 3');
exit;
end;
вторым проходом найдем минимальный элемент
for i:=1 to N do
for j:=1 to N do
if (emin>A[i,j]) and ((A[i,j] mod 3) = 0) then emin:=A[i,j];
writeln('Минимальное значение кратное 3 = ',emin);
end
вот и всё вроде