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

Вопрос по двумерному массиву в Pascal?

Дан массив F:array [1..n,1,m] of byte определить кол-во "особых элементов в нем. Элемент считаеться "особым", если он больше суммы остальных элементов своего столбца. Вот код программы: Program lab7_z1; Uses crt; CONST n=3;m=3; Var i,j:byte; f:array [1..n,1..m] of byte; sum:word; BEGIN randomize; CLRSCR; sum:=0; for i:=1 to n do for j:=1 to n do f[i,j]:=random(18)+1; Writeln('Вывод массива :'); for i:=1 to n do begin for j:=1 to m do Write(' ',f[i,j]); Writeln; end; For j:=1 to m do begin For i:=1 to n do if f[i,j]>(f[i,j]+f[i,j]) then inc(sum) else if f[i,j]>(f[i,j-1]+f[i,j+2]) then inc(sum) else if f[i,j]>(f[i,j]+f[i,j+1]) then inc(sum) end; Writeln('Кол-во "особых" элементов в нем: ',sum); READLN; END. Считает не совсем правильно. То выведет на 1 больше кол-во, то на 1 меньше а то вообще не увидит. помогите плз с условием. Где и ошибка или что бы мне дополнить?
Вот здесь ты вообще вылазишь за границы массива:
if f[i,j]>(f[i,j-1]+f[i,j+2]) then inc(sum)
else
if f[i,j]>(f[i,j]+f[i,j+1]) then inc(sum)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Я себе алгоритм представляю примерно следующий:
- организуем цикл по столбцу:
Sum := 0; Max := f[1, j]; { предположим, что максимальный элемент в 1 позиции столбца }
- проходим циклом с подсчётом общей суммы и нахождением максимального элемента:
for i := 1 to n do
begin
Sum := Sum + f[i, j];
if f[i, j] > Max then Max := f[i, j];
end;
- теперь выясняем на сколько больше максимальный элемент суммы всех элементов столбца
if Sum - Max > Max then
Inc(Unical);
- в итоге результат будет:
Writeln('Кол-во "особых" элементов в нем: ', Unical);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ну уж саму программу переписывать не буду!
Галина Васильева
Галина Васильева
89 019
Лучший ответ
Скажи пожалуйста что ты хочеш получить етой строчкой if f[i,j]>(f[i,j]+f[i,j]) then inc(sum), орсобенно интересно как элемент может быть больше удвоенного себя (if f[i,j]>(f[i,j]+f[i,j]))

Ты имел в виду что элемент с коородинатами "и","жи" должен быть больше елемента с индексом "И+И", "жи+жи"????

Да и в сторочке
if f[i,j]>(f[i,j-1]+f[i,j+2]) then inc(sum)
else
if f[i,j]>(f[i,j]+f[i,j+1]) then inc(sum)
end; - Это возможно только для первого (1,1) элемента, если номер элемента больше - у тебя получится выход за граници диапазона 1-3; Поставь отдельное условие для элементов, у которых при данном условии будет переполнение.