Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Использование процедуры

Автор: forMator 29.09.2006 19:59

Изучаю процедуры! Не могу понять в задании зачем используется 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 29.09.2006 20:40

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

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 29.09.2006 22:45

Большое СПАСИБО!!

Автор: forMator 29.09.2006 23:37

Вроде написал...Но не уверен что правильно!!!ПРоверьте аожалуйста!!

Код

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 29.09.2006 23:51

Цитата
Вроде написал...Но не уверен что правильно!!!ПРоверьте аожалуйста!!

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

Попробуй ввести в твою прогу два одинаковых числа, например 3 и 3. Увидишь для чего надо делать проверку.

Автор: forMator 1.10.2006 18:51

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

Код

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

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

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

Для чего здесь вообще Var нужен??

Автор: klem4 1.10.2006 19:10

при использовании функции

X := F(a, b);


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

F(a, b, X);

Автор: volvo 1.10.2006 19:11

Цитата
Для чего здесь вообще Var нужен?
А как ты собрался БЕЗ Var вернуть результат из процедуры?

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

Автор: forMator 1.10.2006 19:29

А результат res чему присваивать?

Автор: volvo 1.10.2006 19:31

Тому же, чему и в функции... Ты ж писал, что функцию сделал. Вот и переведи в процедуру...

Автор: forMator 3.10.2006 20:27

До меня так и не дошло чему присваивать результат!

Автор: forMator 3.10.2006 20:57

Я не знаю, но я присваиваю результат следующему:

Код

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.


А мне выдаётся ошибка!

Автор: мисс_граффити 3.10.2006 22:47

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

а ты обещаешь передать (real,real,real), а передаешь (integer,integer)
я бы на месте процедуры тоже такой обман не простила.

Автор: forMator 4.10.2006 1:16

Всем БОЛЬШОЕ СПАСИБО!!!!
Хотя с процедурами я так и не разобрался!!

Код

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 5.10.2006 22:58

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

Код

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.

Всем СПАСИБО ЗА ПОМОЩЬ!!