Помощь - Поиск - Пользователи - Календарь
Полная версия: Использование процедуры
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
forMator
Изучаю процедуры! Не могу понять в задании зачем используется a и b!!

U=(f(x,y)+f(x+y,x-y))/f(x^2-y,x^3),где
f(a,b)=(a+b)/|a-b|

Помогите пожалуйста!!
volvo
Скорее всего, надо использовать функции, а не процедуры... Но это не имеет особого значения, для процедур все будет точно так же...

A и B - это так называемые формальные параметры... То есть, ты говоришь компилятору примерно следующее: "я когда-нибудь передам в эту функцию значения... Какие бы они не были, произведи над ними те же действия, что и над этими формальными параметрами..." И пишешь код:

Function F(a, b: real): real;
begin
F := (a + b) / abs(a - b); { <-- не забудь проверить знаменатель на 0 !!! }
end;


Теперь ты должен вызвать эту функцию, но вызываешь-то ты ее с фактическими параметрами... И вот тут срабатывает то, что ты говорил компилятору: вместо формальных параметров подставляются фактические значения, и функция вычисляется именно с этими значениями...

U=(f(x,y)+f(x+y,x-y)) / f(sqr(x)-y,sqr(x)*x); { <--- Вызов функции }
forMator
Большое СПАСИБО!!
forMator
Вроде написал...Но не уверен что правильно!!!ПРоверьте аожалуйста!!
Код

Program primer;
Var x,y:integer;
u:real;
Function F(a,b:real):real;
begin
F:=(a+b)/abs(a-b);
end;
begin
writeln('vvod x,y');
readln(x,y);
u:=(f(x,y)+f(x+y,x-y))/f(sqr(x)-y,sqr(x)*x);
writeln('u=',u:3:2);
readln;
end.
Bokul
Цитата
Вроде написал...Но не уверен что правильно!!!ПРоверьте аожалуйста!!

Цитата
не забудь проверить знаменатель на 0

Попробуй ввести в твою прогу два одинаковых числа, например 3 и 3. Увидишь для чего надо делать проверку.
forMator
Пытался сделать эту же задачку с помощью процедуры не выходит!!
В программе с функцией
Код

Function f(a,b:real):real;

а в процедуре
Код

Procedure f(a,b:real; Var ???)

Для чего здесь вообще Var нужен??
klem4
при использовании функции

X := F(a, b);


при использовании процедуры

F(a, b, X);
volvo
Цитата
Для чего здесь вообще Var нужен?
А как ты собрался БЕЗ Var вернуть результат из процедуры?

Procedure f(a,b: real; Var res: real);
forMator
А результат res чему присваивать?
volvo
Тому же, чему и в функции... Ты ж писал, что функцию сделал. Вот и переведи в процедуру...
forMator
До меня так и не дошло чему присваивать результат!
forMator
Я не знаю, но я присваиваю результат следующему:
Код

Program prod;
Var x,y:integer;
u:real;
Procedure f(a,b:real;Var res:real);
begin
res:=(a+b)/abs(a-b);
end;
begin
writeln('vvod x,y');
readln(x,y);
u:=(f(x,y)+f(x+y,x-y))/f(sqr(x)-y,sqr(x)*x);
writeln('u=',u:3:2);
readln;
end.


А мне выдаётся ошибка!
мисс_граффити
фактические и формальные параметры должны быть одного типа - раз.
количество формальных и фактических параметров должно сопадать - два.

а ты обещаешь передать (real,real,real), а передаешь (integer,integer)
я бы на месте процедуры тоже такой обман не простила.
forMator
Всем БОЛЬШОЕ СПАСИБО!!!!
Хотя с процедурами я так и не разобрался!!
Код

Program primer;
Var x,y,u:real;
Procedure f(a,b:real;Var res:real);
begin
res:=(a+b)/abs(a-b);
end;
begin
writeln('vvod x,y');
readln(x,y);
u:=(f(x,y)+f(x+y,x-y))/f(sqr(x)-y,sqr(x)*x);
writeln('u=',u:3:2);
readln;
end.

Выдаётся ошибка! TP указывает на следующее:
Код

u:=(f(x,y)+f(x+y,x-y))/f(sqr(x)-y,sqr(x)*x);

А в чём ошибка разобраться не могу!Помогите пожалуйста!
forMator
Решил задачку!!! Разобрался!! Выкладываю код!! Может кому-нибудь пригодится!!
Код

Program primer;
Var x,y,u,t1,t2,t3:real;
Procedure f(a,b:real;Var res:real);
begin
res:=(a+b)/abs(a-b);
end;
begin
writeln('vvod x,y');
readln(x,y);
f(x,y,t1);
f(x+y,x-y,t2);
f(sqr(x)-y,sqr(x)*x,t3);
u:=(t1+t2)/t3;
writeln('u=',u:3:2);
readln;
end.

Всем СПАСИБО ЗА ПОМОЩЬ!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.