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

выдает ошибку неверная вещественная операция при выполнении действия: s:=round(s/n);

Program laba;

const

 k=10;

 type mas=array[1..k,1..k] of real;

var   a:mas;

 n:word; i,j:byte;   f,r:text; c:byte;   s:real;

 procedure vvod2 (name:string; n:integer; var a:mas);

var i,j:integer; f:text;

begin

   write('n='); readln(n);

assign (f, 'laba.txt');

reset(f);

for i:=1 to n do

    for j:=1 to n do

  begin

   Write('a[' ,i, ',' ,j, ']=');

   read (f, c);

   writeln(c);

  end;

close(f);

end;

function seredne (s:real;n:byte;a:mas):real;

  begin

  for j:=1 to n do

   begin

    j:=j+1;

    for i:=1 to n do

     s:=s+a[i,j];

   end;

    s:=round(s/n);

 end;

 procedure vuvod (name:string; r:text; j:integer; s:real);

 begin

   assign (r, 'rez.txt');

   rewrite(r);

 writeln(r,'середнє арифметичне ',j,' стовпчика s=', s);;

 close(r);

 read;

 end;

 Begin

  vvod2('laba.txt',n,a);

  s:=seredne(s,n,a);

  vuvod('rez.txt',r,j,s);

 end.
KI
Kaloyan Iliev
107
Расскажу тебе о всех ошибках твоего кода.
Смотрим код по мере его выполнения:
  Begin — начало основного модуля программы

    vvod2('laba.txt',n,a); — вызываем процедуру. Хорошо.

В процедуре:

    write('n='); readln(n); — зачем вводить значение, если всё остальное берётся из файла?

    — после отработки процедуры, значение n для программы становится неопределённым! Те, кто запустит программу в PascalABC, будут иметь дело с 0, а для остальных – любое значение.

Далее в основном модуле:

    s:=seredne(s,n,a); — значение s и n не определены и, в лучшем случае, равны 0!

Поэтому в функции, в лучшем случае, программа спотыкается на строке

    s:=round(s/n);

не исполняя строки цикла.

Опять же, программа наверняка споткнулась бы на строке

    j:=j+1;

которая изменяет параметр цикла

    for j:=1 to n do
Кос-Тя Воробьёв
Кос-Тя Воробьёв
80 426
Лучший ответ
в Паскаль АВС НЕТ все проходит верно. s:=5.3; n:=2; s:=round(s/n);writeln(s);
ответ = 3
ошибка из-за неверного указания способа деления и несовместимости типов данных :)
прочти сначала учебник по паскалю :)
в
s:=round(s/n);
n имеет тип byte по описанию seredne

в вызове
s:=seredne(s,n,a);
n имеет тип word

разные паскали чуть по разному могут преобразовывать и чуть по разному относятся к преобразованиям типов по умолчанию -можно влипнуть в деление на ноль или в несоответствие типов аргументов.
тут для обоих n явно напрашивается тип int.
(паскали задела только краешком и могу ошибаться.)