Pascal ABC Ошибка: неверное количество фактических параметров

программирование pascal

объясните, в чём ошибка, и как её исправить


program fractions;

type fraction=record
a,b,integ:integer; end;

function min(a,b:integer):integer; // наим из 2 чисел
begin
if a<b then min:=a else min:=b;
end;

function max(a,b:integer):integer; // наиб из 2 чисел
begin
if a>b then max:=a else max:=b;
end;

function nod(a,b:integer):integer; //НОД
var x,i:integer;
begin
x:=max(a,b) div 2;
for i:=1 to x do
if (a mod i=0) and (b mod i=0) then nod:=i;
end;

function nok(a,b:integer):integer;
var i:integer;
begin
for i:=a*b downto min(a,b) do
if (i mod a=0) and (i mod b=0) then nok:=i;
end;


procedure red(var fr:fraction); //сокращение дроби
var d:integer;
begin
d:=nod(fr.a,fr.b);
if d<>1 then begin
fr.a:=fr.a div d;
fr.b:=fr.b div d;
end;
end;

procedure r2w(var fr:fraction); //из прав в неправ
begin
fr.a:=fr.a+fr.b*fr.integ;
fr.integ:=0;
end;

procedure w2r(var fr:fraction); //из неправ в прав
begin
fr.integ:=fr.integ+fr.a div fr.b;
fr.a:=fr.a-(fr.a div fr.b)*fr.b;
end;

procedure ob_zn(var fr1,fr2:fraction); //приведение к ощбщему знаменателю
var m1,m2:integer; //доп. множители 1 и 2
begin
m1:=nok(fr1.b,fr2.b) div fr1.b;
m2:=nok(fr1.b,fr2.b) div fr2.b;
fr1.a:=fr1.a*m1; fr1.b:=fr1.b*m1;
fr2.a:=fr2.a*m2; fr2.b:=fr2.b*m2;
end;

function _plus(fr1,fr2:fraction):fraction; //сложение
begin
ob_zn(fr1,fr2);
_plus.integ:=fr1.integ+fr2.integ; //РУГАЕТСЯ НА ЭТУ СТРОЧКУ!!!
_plus.a:=fr1.a+fr2.a;
_plus.b:=fr1.b;
red (_plus);
w2r (_plus);
end;



var fr,fr1,fr2:fraction;

begin
// ввод дроби в виде
// "1 5 8" - это
// одна целая пять восьмых
readln (fr1.integ,fr1.a,fr1.b);
readln (fr2.integ,fr2.a,fr2.b);
fr:=_plus(fr1,fr2);
writeln (fr.integ,' ',fr.a,' ',fr.b);
end.

Примечание:
строчка с ошибкой выделена в комментариях
Ответы:
Не знаю, как насчет Pascal ABC, но в Turbo Pascal функции могут возвращать только простые, перечислимые, строковые типы и указатели. Записи - не могут.
Можете использовать процедуру с var-параметром.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.