Найти среднее арифметическое положительных и отрицательных в столбце элементов

Vilgelm

Доброго времени суток.Прошу помощи с программой:
program kontrvar7;
uses crt; 
  const  
     n=5;
     m=7;
  var        
     A : array[1..n,1..m] of integer;
     B : array [1..n,1..2] of real;
     {sumotr,sumpol:real;}
     sumotr,sumpol,otr,pol:LongInt;
     i,j:integer;
 
procedure vichisl; 
 begin                     
  otr:=0;
  pol:=0;
  if a[i,j]<0 then otr:=otr+1; {вычисляем количество отрицательных элементов}
  if a[i,j]>0 then pol:=pol+1; {вычисляем количество положительных элементов}
  if a[i,j]<0 then sumotr:=(sumotr+a[i,j]) div otr; {вычисляем сумму отрицательных элементов и делим на количество}
  if a[i,j]>0 then sumpol:=(sumpol+a[i,j]) div pol; {как выше, но с положительными :)}
  if j=n then begin
    b[j,1]:=sumotr; 
    b[j,2]:=sumpol; 
    sumpol:=0; 
    sumotr:=0; 
  end;
 end; 
 
begin   
clrscr; 
writeln; 
writeln('Sgenerirovan massiv:'); 
writeln; 
randomize;
    for i:=1 to n do   
     for j:=1 to m do begin    
      a[i,j]:=round(random*10000-5000); 
      if j=m then writeln(a[i,j]) else write(a[i,j],'     '); 
      vichisl; 
      end; 
writeln; 
writeln('Otvet:'); 
writeln; 
writeln('Srednee Otricatelnix        Srendee Pologitelnix '); 
for i:=1 to n do  
for j:=1 to 2 do begin   
if j=2 then writeln(b[i,j]:0:0) else write(b[i,j]:0:0,'                     '); 
end; 
 readkey; 
end.
Сейчас программа компилируется, но выводит какую-то ересь (сгенерированную матрицу и среднее арифметическое в виде нуля для всех столбцов). Как это исправить?Заранее огромное спасибо!PS Само задание звучит так:
Сформировать двумерный массив А размером 5*7 с помощью генератора случайных чисел и вывести элементы массива на экран. Найти средние значения положительных и отрицательных элементов каждого столбца матрицы отдельно и вывести их на экран и в файл. Определение средних значений положительных и отрицательных элементов столбца матрицы оформить в виде процедуры.
2 ответа

Vilgelm

Что-то я заблудился в вашем коде, потому с нуля сделал задачу. Вывод ответов и второй массив у вас позаимствовал..
const
  n=5;
  m=7;
type
  tAr1=array[1..n,1..m] of integer;
  tAr2=array[1..m,1..2] of real;
 
procedure count(var a: tAr1; var b: tAr2);
var i,j,k1,k2,s1,s2: integer;
begin
  for j:=1 to m do
  begin
    k1:=0; k2:=0; s1:=0; s2:=0;
    for i:=1 to n do
    begin
      if a[i,j]>0 then 
      begin
        inc(k1);
        s1:=s1+a[i,j];
      end;
      if a[i,j]<0 then 
      begin
        inc(k2);
        s2:=s2+a[i,j];
      end;
    end;
    if k1=0 then b[j,1]:=0 else b[j,1]:=s1/k1;
    if k2=0 then b[j,2]:=0 else b[j,2]:=s2/k2;
  end;
end;
 
var
  a: tAr1;
  b: tAr2;
  i,j: integer;
begin
  randomize;
  writeln('Массив:');
  for i:=1 to n do
  begin
    for j:=1 to m do
    begin
      a[i,j]:=random(199)-99;
      write(a[i,j]:4);
    end;
    writeln;
  end;
  writeln;
  
  writeln('Ответы:');
  writeln;
  writeln('             Среднее положительных     Среднее отрицательрных');
  count(a,b);
  for j:=1 to m do
  begin
 
    writeln(j,'й столбец:',b[j,1]:23:2,'     ',b[j,2]:22:2);
  end;
  readln;
end.


Vilgelm

Спасибо огромное!