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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2008, 17:44   #1
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию Деление на ноль!

Вот код проги, по которой вычисляется sqrt(sqr(a) +b) по формуле разложения в ряд!
Код:
 program Lab03;
Uses Crt;
var
   m, n: integer;
   F, F1,F2, Toch, a, b, c: real;
begin
     clrscr;
     Writeln ('Введите значения a,b и Точность');
     Read (a, b, Toch);
     m:=1;
     n:=2;
     c:= (b/sqr(a));
     if (c>-1) and (c<1) Then
     repeat
           F2:= (1+((1/2)*(b/sqr(a))));
           F1:= ((m*c)/n);
           F:= (F2+F1);
           m:= (m+2);
           n:= (n+2);
           c:=c*c;
     until F < Toch
     Else Writeln ('Error');
     Writeln('F=',F);
end.
Вот вэтом месте пишет что у меня деление на ноль
Код:
 F1:= (((-1)*(m*c))/n);
Почему?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 01.10.2008, 18:05   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Извените народ Вот код
Код:
program Lab03;
Uses Crt;
var
   m, n: integer;
   F, F1,F2, Toch, a, b, c: real;
begin
     clrscr;
     Writeln ('Введите значения a,b и Точность');
     Read (a, b, Toch);
     m:=1;
     n:=2;
     c:= (b/sqr(a));
     if (c>-1) and (c<1) Then
     repeat
           F2:= (1+((1/2)*(b/sqr(a))));
           F1:= (((-1)*(m*c))/n);
           F:= (F2+F1);
           m:= (m+2);
           n:= (n+2);
           c:=c*c;
     until F < Toch
     Else Writeln ('Error');
     Writeln('F=',F);
end.
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 01.10.2008, 18:10   #3
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Памагите пажалуйста
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 01.10.2008, 20:21   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

у Вас переполнение происходит....
либо формулы не те и ряд не сходится,
либо Вы точность не с той переменной сравниваете...
ну, например, попробуйте изменить на
Код:
     until abs(F1) < Toch
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.10.2008, 21:09   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Проверил несколько шагов в Excel, формула некорректная, сумма колеблется близко к 0,98-0,99 и никогда не дойдет до точности даже 0,1. При точности 1,0 программа выполняет один шаг и выдает результат.
puporev вне форума Ответить с цитированием
Старый 01.10.2008, 21:54   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Понятно! Значит не корректная формула! Спасибо! Кстати не подскажите мне фомулу! Если можно! Я с самого начала так думал! Большое спасибо!!!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 01.10.2008, 22:41   #7
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Если построить итерационный процесс вычисления функции y=sqrt(x) по методу Ньютона, то получим следующее: y(n+1)=(y(n)+x/y(n))/2
Код:
function Radical(x,eps: double): double;
var
  y0,y: double;
begin
  y:=1; {начальное приближение корня}
  repeat
    y0:=y;
    y:=(y0+x/y0)/2;
  until abs(y-y0) <= eps;
  Radical:=y;
end;
_Dmitry вне форума Ответить с цитированием
Старый 01.10.2008, 22:59   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Спасибо _Dmitry!формула в учебнике не правильная! я короче сразу заметил , что там нет зависимости между 2 и 3 членом ряда! Там короче следующий член ряда после 1 имеет в числителе 1, потом второй тоже имеет 1, а третий сразу 3! поэтому и хотел 1 и второй член объединить в одну переменную F2! ну апотом просто увеличивать там m и n!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача в паскале, помогите пожалуйста я полный ноль Arsenal777 Помощь студентам 8 03.06.2008 22:22
Дюди добрые помогите по ПАСКАЛЮ. Я полный ноль в нем )) Jey_RO Помощь студентам 4 24.05.2008 13:06
Проверка деления на ноль (Как проверить?) Moonka Помощь студентам 10 23.04.2007 19:41
Я-ноль: нужны проги для начала. Где? kypto8 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 31.03.2007 09:29
деление natasha Общие вопросы Delphi 6 22.01.2007 12:39