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.
Другие языки программирования и технологии
выдает ошибку неверная вещественная операция при выполнении действия: s:=round(s/n);
Расскажу тебе о всех ошибках твоего кода.
Смотрим код по мере его выполнения:
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
Смотрим код по мере его выполнения:
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
в Паскаль АВС НЕТ все проходит верно. s:=5.3; n:=2; s:=round(s/n);writeln(s);
ответ = 3
ответ = 3
ошибка из-за неверного указания способа деления и несовместимости типов данных :)
прочти сначала учебник по паскалю :)
прочти сначала учебник по паскалю :)
в
s:=round(s/n);
n имеет тип byte по описанию seredne
в вызове
s:=seredne(s,n,a);
n имеет тип word
разные паскали чуть по разному могут преобразовывать и чуть по разному относятся к преобразованиям типов по умолчанию -можно влипнуть в деление на ноль или в несоответствие типов аргументов.
тут для обоих n явно напрашивается тип int.
(паскали задела только краешком и могу ошибаться.)
s:=round(s/n);
n имеет тип byte по описанию seredne
в вызове
s:=seredne(s,n,a);
n имеет тип word
разные паскали чуть по разному могут преобразовывать и чуть по разному относятся к преобразованиям типов по умолчанию -можно влипнуть в деление на ноль или в несоответствие типов аргументов.
тут для обоих n явно напрашивается тип int.
(паскали задела только краешком и могу ошибаться.)
Похожие вопросы
- Вопрос по программированию на паскале Выдаёт ошибку Program1.pas(6) Операция = не применима к типам boolean и integer
- 3d max выдаёт ошибку...
- Синий экран смерти выдает ошибку 0х0000008е
- Комп при включении выдаёт ошибку . Что то за ошибка и как её исправить _посмотрите пож_ста скрин .
- Почистил комп от пыли и теперь выдаёт ошибку....
- Почему PASCAL выдает ошибку?
- Код c++ выдает ошибку
- C++ как обратиться к элементу находящемуся в privatе? компилятор выдает ошибку
- Комп выдает ошибку. Постоянно. Вот Фото. Че это такое вообще???
- Pascal. Почему выдает ошибку? Помогите отладить