25.12.2009, 20:56 | #1 (permalink) |
Member
Регистрация: 05.10.2009
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Отредактируйте пожалуйста... Что-то у меня не получается.
var C,f,x,y,k: real; Begin writeln ('A BoT BaM u PEzyJIbTAT'); read (x,y,k); x:=2.64; y:=0.138; k:=8; f(x,y):=(1-exp(x)+sqr(y))/(sqrt(x)+sqrt(y); (там выдает ошибку) C:=f(x,y)+2*f(x+2,y-k)+f(x-y,k); WRITELN ('C=',C); READLN; END. |
25.12.2009, 20:56 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Интересующие вас ответы могут содержаться в этих темах Помогите, у меня не получается паять Не получается открыть файл Не получается освоить ЛУТ Не получается установить XP Почему у меня ничего не получается? Не получается восстановить систему |
25.12.2009, 21:35 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Естественно, выдает! Так функции в Паскале не задаются. А как правильно - есть в любом учебнике и руководстве. Кстати, в знаменателе еще и общая скобка не закрыта. Но это так, мелочь.
|
25.12.2009, 23:18 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да задание-то понятно! Ладно уж, выложу как надо:
Код:
Program C12; var C,f,x,y,k: real; Function f(xf,yf:real):real; begin f:=(1-exp(xf)+sqr(yf))/(sqrt(xf)+sqrt(yf)); end; {f} Begin writeln ('A BoT BaM u PEzyJIbTAT'); x:=2.64; y:=0.138; k:=8; C:=f(x,y)+2*f(x+2,y-k)+f(x-y,k); WRITELN ('C= ',C); READLN; END. |
26.12.2009, 07:49 | #5 (permalink) |
Member
Регистрация: 05.10.2009
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
26.12.2009, 09:55 | #6 (permalink) |
Member
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
|
Да, здесь он действительно выдаёт ошибку duplicat identifier(2 одинаковых имени). Так переменуйте переменную f на f1 или что-нибудь подобное.
Но далее он всё равно выдаст ошибку invalid floating operation. Для борьбы с этим я предлагаю поставить перед вычислением f поставить if. Тогда функция будет иметь вид Код:
Function f(xf,yf:real):real; begin if (xf>0)and(yf>0) then f:=(1-exp(xf)+sqr(yf))/(sqrt(xf)+sqrt(yf)); end; {f} |
26.12.2009, 17:27 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Сижу красный, как рак. От стыда. Извините - не надо ничего переименовывать, а надо просто убрать f из раздела описания переменных.
А вот что касается второй ошибки (floating)... Я предполагаю, что либо значения параметров заданы неверно, либо вид функции. А если уж вставлять условный оператор, то надо бы продолжить чем-нибудь типа ELSE выдать сообщение о неподходящих значениях параметров и осуществить прерывание программы (HALT). Иначе значение функции останется неопределенным, что некрасиво. |
26.12.2009, 17:53 | #9 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну вот вариант с полной защитой. Отлаженный:
Код:
Program C12; var C,x,y,k: real; Function f(xf,yf:real):real; begin f:=(1-exp(xf)+sqr(yf))/(sqrt(xf)+sqrt(yf)); end; {f} Begin Repeat Repeat Write('x= '); ReadLn(x); If x<0 then WriteLn('x<0 !!!'); until x>=0; Repeat Write('y= '); ReadLn(y); If y<0 then WriteLn('y<0 !!!'); until y>=0; If (x-y)<0 then Writeln('(x-y)<0 !!!'); until (x-y)>=0; Repeat Repeat Write('k= '); ReadLn(k); If k<0 then WriteLn('k<0 !!!'); until k>=0; If (y-k)<0 then Writeln('(y-k)<0 !!!'); until (y-k)>=0; writeln ('A BOT BAM u PE3YJIbTAT:'); {x:=2.64; y:=0.138; k:=8;} C:=f(x,y)+2*f(x+2,y-k)+f(x-y,k); WRITELN ('C= ',C); READLN; END. |
26.12.2009, 20:50 | #10 (permalink) |
Member
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
|
Vladimir_S, да ладно Вам! Предстваьте какой я должен был сидеть, после ваших постов и сообщений от Long Cat
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|