Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2010, 22:29   #1
Wild_klas
Форумчанин
 
Аватар для Wild_klas
 
Регистрация: 13.10.2010
Сообщений: 109
Вопрос Не пойму в чем ошибка. Кто подскажет?

Здраствуйте. У меня есть задание: Дано дійсне число х. Не. користаючись ніякими іншими арифметичними операціями, крім множення, додавання і віднімання, обчислити 1-2x+3x^2-4x^3 та 1+2x+3x^2+4x^3. Я написал на него такую программу:

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,math;

Function Input(x:real):real;
begin
 Write('Input x= ');
 Readln(x);
end;
Procedure Calculation1(x,Y1:real);
 Begin
   Y1:=1-2*x+3*Sqr(x)-4*Power(x,3);
   Writeln('Y1= ',Y1:4:2);
 end;
Procedure SecondCalculation(x,Y2:real);
 Begin
    Y2:=1+2*x+3*Sqr(x)+4*Power(x,3);
    Writeln('Y2= ',Y2:4:2);
 end;
Var x,Y1,Y2:real;
Begin
     Input(x);
     Calculation1(x,Y1);
     SecondCalculation(x,Y2);
     Readln;
End.
Но считает она не правильно. При вводе любого числа Y1 и Y2 равны 1. Почему так? где ошибка? Подскажите пожалуйста.
Учусь учиться.

Последний раз редактировалось Stilet; 20.10.2010 в 12:03.
Wild_klas вне форума Ответить с цитированием
Старый 19.10.2010, 22:49   #2
filvika
Пользователь
 
Аватар для filvika
 
Регистрация: 25.08.2010
Сообщений: 25
По умолчанию

Код:
Function Input(var x:real):real;
должно помочь
filvika вне форума Ответить с цитированием
Старый 19.10.2010, 22:56   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
Function Input(var x:real):real;
должно помочь
угу. должно помочь.
Но, чтобы уж совсем правильно было, нужно вместо описания функции сделать процедуру (т.к. здесь всё равно вызов идёт как процедуры). Вот так лучше:
Код:
procedure Input(var x:real);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.10.2010, 22:57   #4
Wild_klas
Форумчанин
 
Аватар для Wild_klas
 
Регистрация: 13.10.2010
Сообщений: 109
По умолчанию

filvika, благодарю!

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
угу. должно помочь.
Но, чтобы уж совсем правильно было, нужно вместо описания функции сделать процедуру (т.к. здесь всё равно вызов идёт как процедуры). Вот так лучше:
Код:
procedure Input(var x:real);
А в чем разница?, объясните пожалуйста.

И еще 1 вопрос:
Она, работает, но выбивает такие ошибки:

Как их убрать? (превод знаю, не знаю как их убрать, подскажите пожалуйста)
Учусь учиться.

Последний раз редактировалось Stilet; 20.10.2010 в 12:03.
Wild_klas вне форума Ответить с цитированием
Старый 19.10.2010, 23:12   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Она, работает, но выбивает такие ошибки:
Это не ошибки, а предупреждения.
И первое уберётся, если Вы сделаете так, как я сказал.
Текст предупреждения гласит: Возвращаемое значение функции Input может быть неопределённым!
а второе и третье предпреждение.
вы вызываете процедуру. Передаёте туда Y1 и Y2.
А зачем?! Вы же всё равно их там внутри вычисляете?! Там их и опишите и не передавайте их.
Но вообще, паскаль в данном случае хочет, чтобы Вы их перед вызовом проиницилизировали:
Код:
   Y1:=0;
   Calculation1(x,Y1); 
   Y2:=0;
   SecondCalculation(x,Y2);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.10.2010, 23:29   #6
Wild_klas
Форумчанин
 
Аватар для Wild_klas
 
Регистрация: 13.10.2010
Сообщений: 109
По умолчанию

Огромное спасибо, за то что объяснили мне. Вот только я не понял что вы мели введу когда говорили
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А зачем?! Вы же всё равно их там внутри вычисляете?! Там их и опишите и не передавайте их.
]
Как их "там описать и не передавать"??
Учусь учиться.
Wild_klas вне форума Ответить с цитированием
Старый 19.10.2010, 23:34   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Как их "там описать и не передавать"??
так:
Код:
Procedure Calculation1(x); 
 var Y1 : real;
 Begin 
   Y1:=1-2*x+3*Sqr(x)-4*Power(x,3); 
   Writeln('Y1= ',Y1:4:2); 
 end; 
Procedure SecondCalculation(x:real); 
 var Y2 : real;
 Begin 
    Y2:=1+2*x+3*Sqr(x)+4*Power(x,3); 
    Writeln('Y2= ',Y2:4:2); 
 end; 
Var x : real; 
Begin 
     Input(x); 
     Calculation1(x); 
     SecondCalculation(x); 
     Readln; 
End.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.10.2010, 00:00   #8
Wild_klas
Форумчанин
 
Аватар для Wild_klas
 
Регистрация: 13.10.2010
Сообщений: 109
По умолчанию

Serge_Bliznykov, огромное спасибо за ясное объяснение.

Но самый понятный вариант для паскаля это когда Y1,Y2 проинициализированы.
(если их описывать самой процедуре, тогда программа делает некий намек что переменные Y1 и Y2 использованы в проекте )
Учусь учиться.

Последний раз редактировалось Stilet; 20.10.2010 в 12:04.
Wild_klas вне форума Ответить с цитированием
Старый 20.10.2010, 09:05   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы Автор программы — Вам и решать, как лучше.

я лично считаю, что не имеет смысла объявлять переменные Y1 и Y2, иницилизировать их и передавать в процедуру, раз Вы их значение там не используете и, важно, вычисленное значение не возвращаете.
Но раз Вы считаете, что так понятнее, нагляднее и лучше - воля Ваша, Вы же программист.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Может кто подскажет? uzerman2007 Софт 5 30.09.2010 19:22
не пойму в чем ошибка Анастасия123456789 Помощь студентам 3 23.03.2009 15:53
Не пойму в чем ошибка Machete PHP 2 08.12.2008 10:09
может кто подскажет u3Bepr Microsoft Office Excel 2 04.10.2008 06:57