Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 25.12.2009, 20:56   #1 (permalink)
Sergei47
Member
 
Аватар для Sergei47
 
Регистрация: 05.10.2009
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Unhappy Отредактируйте пожалуйста... Что-то у меня не получается.

Program C12;
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.
Sergei47 вне форума   Ответить с цитированием

Старый 25.12.2009, 20:56
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Интересующие вас ответы могут содержаться в этих темах

Помогите, у меня не получается паять
Не получается открыть файл
Не получается освоить ЛУТ
Не получается установить XP
Почему у меня ничего не получается?
Не получается восстановить систему

Старый 25.12.2009, 21:35   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Sergei47 Посмотреть сообщение
Program C12;
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.
Естественно, выдает! Так функции в Паскале не задаются. А как правильно - есть в любом учебнике и руководстве. Кстати, в знаменателе еще и общая скобка не закрыта. Но это так, мелочь.
Vladimir_S вне форума   Ответить с цитированием
Старый 25.12.2009, 23:01   #3 (permalink)
DDS
Member
 
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
По умолчанию

Вы бы задание выложили...
DDS вне форума   Ответить с цитированием
Старый 25.12.2009, 23:18   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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.
Vladimir_S вне форума   Ответить с цитированием
Старый 26.12.2009, 07:49   #5 (permalink)
Sergei47
Member
 
Аватар для Sergei47
 
Регистрация: 05.10.2009
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Function f(xf,yf:real):real;
Вот здесь ошибку выдает...
Sergei47 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 26.12.2009, 09:55   #6 (permalink)
DDS
Member
 
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
По умолчанию

Цитата:
Сообщение от Sergei47 Посмотреть сообщение
Вот здесь ошибку выдает...
Да, здесь он действительно выдаёт ошибку 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}
DDS вне форума   Ответить с цитированием
Старый 26.12.2009, 10:07   #7 (permalink)
Sergei47
Member
 
Аватар для Sergei47
 
Регистрация: 05.10.2009
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спс попробую..
Sergei47 вне форума   Ответить с цитированием
Старый 26.12.2009, 17:27   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Сижу красный, как рак. От стыда. Извините - не надо ничего переименовывать, а надо просто убрать f из раздела описания переменных.
А вот что касается второй ошибки (floating)... Я предполагаю, что либо значения параметров заданы неверно, либо вид функции. А если уж вставлять условный оператор, то надо бы продолжить чем-нибудь типа ELSE выдать сообщение о неподходящих значениях параметров и осуществить прерывание программы (HALT). Иначе значение функции останется неопределенным, что некрасиво.
Vladimir_S вне форума   Ответить с цитированием
Старый 26.12.2009, 17:53   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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.
Vladimir_S вне форума   Ответить с цитированием
Старый 26.12.2009, 20:50   #10 (permalink)
DDS
Member
 
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
По умолчанию

Vladimir_S, да ладно Вам! Предстваьте какой я должен был сидеть, после ваших постов и сообщений от Long Cat
DDS вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 19:25.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.