• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Отредактируйте пожалуйста... Что-то у меня не получается.

Sergei47

Новые
Регистрация
5 Окт 2009
Сообщения
21
Реакции
0
Баллы
0
Отредактируйте пожалуйста... Что-то у меня не получается.

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.
 
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.

Естественно, выдает! Так функции в Паскале не задаются. А как правильно - есть в любом учебнике и руководстве. Кстати, в знаменателе еще и общая скобка не закрыта. Но это так, мелочь.
 
Вы бы задание выложили...
 
Да задание-то понятно! Ладно уж, выложу как надо:
Код:
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.
 
Вот здесь ошибку выдает:(...
Да, здесь он действительно выдаёт ошибку 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}
 
спс попробую..
 
Сижу красный, как рак. От стыда. Извините - не надо ничего переименовывать, а надо просто убрать f из раздела описания переменных.
А вот что касается второй ошибки (floating)... Я предполагаю, что либо значения параметров заданы неверно, либо вид функции. А если уж вставлять условный оператор, то надо бы продолжить чем-нибудь типа ELSE выдать сообщение о неподходящих значениях параметров и осуществить прерывание программы (HALT). Иначе значение функции останется неопределенным, что некрасиво.
 
Ну вот вариант с полной защитой. Отлаженный:
Код:
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, да ладно Вам! Предстваьте какой я должен был сидеть, после ваших постов и сообщений от Long Cat :)
 
Назад
Сверху