СРОЧНО!Пишу прогу с процедурами, которая считает количество "особых "элементов матрицы,...

0 голосов

СРОЧНО!Пишу прогу с процедурами, которая считает количество "особых "элементов матрицы, но в конце проги не работает writeln, в чём может быть проблема?
Вот задача.
Заданная целочисленная матрица размером NXM. Определить k-количество "особых" элементов матрицы, считая элемент "особым", если в его строке слева от него находятся элементы, меньшие его, а справа - большие.
Вот мой код.И если уж у меня все плохо,то предложите свой код программы.
program samost;
const n=5;
m=5;
type tmatr = array[1..n, 1..m] of integer;
var a:tmatr;
i,j,k:integer;
procedure PrintMatrix(var g:tmatr);
begin
var i,j,k:integer;
for i:=1 to n do
begin
for j:=1 to n do
write(g[i,j]:4);
writeln
end;
end;
procedure MakeMatrix;
begin
var i,j,k:integer;
randomize;
for i:=1 to n do
for j:=1 to n do
begin
a[i,j]:=random(10)-5;
end;
end;
begin
MakeMatrix;
writeln('matrica A: ');
PrintMatrix(a);

k:=0;
for i:=1 to n do
for j:=1 to m do
begin
if (a[i,j]a[i-1,j]) then inc(k)
end;
writeln('kolichestvo elementov = ',k);
end.


спросил от Начинающий (166 баллов) в категории Информатика
оставил комментарий от Начинающий (346 баллов)

ну 1 readln;-удаляй,после PrintMatrix(a);,это задерживает программу.2.if (a[i,j]a[i-1,j]) then inc(k) тут 2 ошибки:1)Пропущен знак,как я понял там должно быть "<"2)"i-1"-так писать нельзя,т.к. когда i=1 то у тебя получается 0,а такого не может быть.Исправь программу,и она у тебя не полностью,допиши и измени,попробую помочь еще!

оставил комментарий от Начинающий (166 баллов)

я не полностью код поставил, уже и сам понял.Помоги, что делать дальше?

оставил комментарий от Начинающий (166 баллов)

Как я и говорил writeln не работает и пишет что "К" нигде не используется

оставил комментарий от Архангел (142k баллов)

т.е. первый и последний элементы в строке особыми быть не могут по определению (нет соседа справа или слева)?

оставил комментарий от Начинающий (166 баллов)

получается что да

оставил комментарий от Начинающий (346 баллов)

да,тоже хотел заметить,то есть j:=2,а не 1,чтобы не рассматривать 1 элемент,и m:=m-1

оставил комментарий от Архангел (142k баллов)

Было много ошибок, поисправлял.

2 Ответы
0 голосов
ответил от Архангел (142k баллов)
 
Лучший ответ

Program samost;

const
  n = 5;
  m = 5;

type
  tmatr = array[1..n, 1..m] of integer;

procedure PrintMatrix(g: tmatr);
var
  i, j: integer;
begin
  for i := 1 to n do
  begin
    for j := 1 to n do Write(g[i, j]:4);
    Writeln
  end
end;

procedure MakeMatrix(var a: tmatr);
var
  i, j: integer;
begin
  Randomize;
  for i := 1 to n do
    for j := 1 to n do a[i, j] := random(10) - 5;
end;

var
  a: tmatr;
  i, j, k: integer;

begin
  MakeMatrix(a);
  Writeln('matrica A: ');
  PrintMatrix(a);
  k := 0;
  for i := 1 to n do
    for j := 2 to m-1 do
      if (a[i, j] < a[i, j+1]) and (a[i, j] > a[i, j-1]) then inc(k);
  Writeln('kolichestvo elementov = ', k);
end.

Тестовое решение:

matrica A:
   4   4   0  -2  -3
   1  -4   4  -5   0
   2   4  -2   1  -2
  -4  -5  -4  -2   4
   1   0   0  -3   2
kolichestvo elementov = 2



0 голосов
ответил от Начинающий (346 баллов)

Program samost;
const n=5; 
m=5; 
type tmatr = array[1..n, 1..m] of integer;
var a:tmatr; 
i,j,k:integer; 
procedure PrintMatrix(var g:tmatr);
begin 
var i,j:integer; 
for i:=1 to n do 
begin 
for j:=1 to n do 
write(g[i,j]:4); 
writeln 
end;
end; 
procedure MakeMatrix;
begin 
var i,j,k:integer; 
randomize; 
for i:=1 to n do 
for j:=1 to n do 
begin 
a[i,j]:=random(10)-5; 
end;
end; 
begin 
MakeMatrix; 
writeln('matrica A: '); 
PrintMatrix(a); 
k:=0; 
for i:=1 to n do 
for j:=2 to m-1 do 
begin 

if (a[i,j]>a[i,j-1])and(a[i,j]begin
k:=k+1; ;
writeln(i,j);
end;
end; 
writeln('kolichestvo elementov = ',k);
end.

оставил комментарий от Начинающий (346 баллов)

это чтобы знать какой элемент,можешь удалить

оставил комментарий от Начинающий (346 баллов)

writeln(i,j);-это чтобы знать какой элемент,можешь удалить

...