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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2010, 12:31   #1
Йохан Шмидт
 
Регистрация: 26.07.2010
Сообщений: 6
По умолчанию Задача в паскале. Работа с циклом while do.

Здравствуйте! Я недавно начал изучать pascal. Взял для изучения книгу "Алгоритмизация и программирование на Турбо Паскале".
В 5 главе столкнулся с небольшой проблемой: Паскаль выдаёт ошибку. К тому же не совсем понимаю задание.




До цикла мы вычисляем погрешность
eps:=exp(ln(10)*(-3));

Потом сравниваем
abs(y1-y) и eps

В цикле мы вычисляем примерно следующее:
while abs(y1-y)<=eps do
begin
y:=y1;
y1:=y1+(1/n)*(((x/(exp(ln(y1)*(n-1)))))-y1);
end;

При попытке запуска, паскаль выдаёт ошибку:
error 207 invalid floating point operation
Если я правильно понимаю, то значения y,x равны нулю?
Как исправить проблему, подскажите пожалуйста.

Последний раз редактировалось Йохан Шмидт; 26.07.2010 в 13:11.
Йохан Шмидт вне форума Ответить с цитированием
Старый 26.07.2010, 13:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если мне не изменяет память y1 должен быть больше нуля. Логарифм от отрицательного не бывает.
И кстати,
Цитата:
eps:=exp(ln(10)*(-3));
Дюж расточительно, я бы это убрал, а писал так:
Код:
while abs(y1-y)<=0.001 do
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.07.2010, 13:50   #3
Йохан Шмидт
 
Регистрация: 26.07.2010
Сообщений: 6
По умолчанию

Спасибо, точно...

Код:
var
z,y,x,eps,y1:real;
i,n:integer;
Begin
clrscr;
eps:=0.001;
y1:=1;
y:=1;
x:=PI/3;
n:=1;
while abs(y1-y)<=eps do
begin
y:=y1;
y1:=y1+(1/n)*(x/(exp(ln(y1)*(n-1))-y1));
end;
readkey;
End.
Сейчас паскаль ругается на строчку
y1:=y1+(1/n)*(x/(exp(ln(y1)*(n-1))-y1));
Пишет что деление на 0. Как это возможно исправить?
Йохан Шмидт вне форума Ответить с цитированием
Старый 26.07.2010, 13:56   #4
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

попробуйте в блоке
Код:
try 

except

end
обрабатывать ошибку DivByZero
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 26.07.2010, 14:09   #5
Йохан Шмидт
 
Регистрация: 26.07.2010
Сообщений: 6
По умолчанию

error 3 unknown identifier
Нужно что-то прописывать чтобы использовать try..except?

Я так понимаю, что деление на 0 происходит тут:
(x/(exp(ln(y1)*(n-1))))
Можно как-то без try..except исправить деление на 0. Вот вопрос как.
У меня такое чувство, что скобка где-то не так стоит. А где найти не могу.
А можно сделать так?
Код:
while abs(y1-y)<=eps do
begin
y:=y1;
z:=x/(exp(ln(y1)*(n-1)));
if z<>0 then
y1:=y1+(1/n)*(z-y1);
WriteLn(y1);
end;
Йохан Шмидт вне форума Ответить с цитированием
Старый 26.07.2010, 14:45   #6
Ol'ga_new
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 125
По умолчанию

Ноль получается в скобке: n-1 на первом шаге. Наверное нужно просто начинать с 2!
Ol'ga_new вне форума Ответить с цитированием
Старый 26.07.2010, 14:52   #7
Йохан Шмидт
 
Регистрация: 26.07.2010
Сообщений: 6
По умолчанию

Ну допустим... А как теперь определить корень 2 и 4 степени из числа PI/3?
Йохан Шмидт вне форума Ответить с цитированием
Старый 26.07.2010, 16:07   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Exp(2*ln(pi/3)) и Exp(4*ln(pi/3)) если не ошибаюсь
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.07.2010, 16:58   #9
Йохан Шмидт
 
Регистрация: 26.07.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Exp(2*ln(pi/3)) и Exp(4*ln(pi/3)) если не ошибаюсь
Скорее Exp(ln(pi/3)/2) и Exp(ln(pi/3)/4)
Но это всё не то.
Наверняка это надо сделать как-то через цикл, тоесть вместо 2 и 4 подставить n. Я просто не совсем понимаю задание корректно. Может кто-то изложит более ясно?

помогите пожалуйста...

Последний раз редактировалось Stilet; 27.07.2010 в 12:41.
Йохан Шмидт вне форума Ответить с цитированием
Старый 27.07.2010, 12:41   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я просто не совсем понимаю задание корректно
А мы его тем паче не понимает не видя глазами
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с циклом на Паскале Карабин Помощь студентам 2 02.04.2009 00:26
задача с циклом в паскале баста Помощь студентам 6 10.02.2009 22:16
Задача в паскале, работа со списком. Cartman18 Помощь студентам 1 30.04.2008 12:44
Задача с циклом POPOV Общие вопросы Delphi 13 01.02.2008 20:33