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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2013, 19:35   #1
CopperNickel
 
Регистрация: 13.08.2013
Сообщений: 6
По умолчанию Фрактал Ньютона(Pascal.)

Задача.
Реализовать программу, строящую фрактал с заданными границами расчета x0<=x<=xn, y0<=y<=yn.
Где x0=-1.0, xn=0.7, y0=-0.7, yn=1.0.
Нашел на форуме тему 3 летней давности , те же данные все тоже, мне бы радоваться. Одно но, там ошибка в одном из корней. Сам решить не могу. Почитал про комплексные числа, про бассейн ньютона, комплексную функцию. Ошибка 207 что-то про плавающую запятую. Что я пробывал, я менял знаки, удалял часть переменных из строки, удалял саму строку, все чего добился половина фрактала и половина экрана желтая. Помогите плиз.
Код:
program N3;
uses Graph, Crt;
type Complex = Record
                x : Real;
                y : Real;
               end;
const iter = 50;
      max  = 1e+6;
      min  = 1e-6;
var  z, t, d : Complex;
     y, x, p : Real;
   xc, yc, n : Integer;
     Cancel  : Boolean;
     gd, gm  : Integer;
     mx, my  : real;
 x0,xn,y0,yn : real;
begin
Cancel := False;
Randomize;
gd := Detect;
InitGraph(gd,gm,'c:\bp\bgi');
{дипазон по х,у}
x0:=-1;xn:=0.7;
y0:=-0.7;yn:=1.0;
{начало экранных координат, смещено влево и вверх}
xc := round(GetMaxX/(xn-x0));
yc := round(GetMaxY*(-y0)/(yn-y0));
{масштаб для перевода координат в экранные}
mx:=xc;
my:=yc/-y0;
y:=y0;{цикл по у}
repeat
 x:=x0; {цикл по х}
  repeat
   n := 0;
   z.x := x;
   z.y := y;
   d := z;
   while (sqr(z.x)+sqr(z.y) < max) and (sqr(d.x)+sqr(d.y) > min)
   and (n < iter) do
    begin
     t := z;
     {z^3 - 1}
     p := sqr(sqr(t.x)+sqr(t.y));
     z.x := 2/3*t.x + (sqr(t.x)-sqr(t.y))/(3*p);{ в этой строке ошибка}
     z.y := 2/3*t.y*(1-t.x/p);{}
     d.x := abs(t.x - z.x);
     d.y := abs(t.y - z.y);
     Inc(n);
     if keypressed then Cancel := true;
    end;
   PutPixel(xc + round(x*mx),yc + round(y*my),16 - (n mod 16));
   if cancel then exit;
   x:=x+0.005;{если 0.001 то картинка лучше, но рисует долго}
  until x>xn;
 y:=y+0.005;
until y>yn;
Readkey;
end.
CopperNickel вне форума Ответить с цитированием
Старый 13.08.2013, 20:13   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так, бреда ради, попробуйте записать так:
Код:
    z.x := 2.0/3.0*t.x + (sqr(t.x)-sqr(t.y))/(3.0*p);{ в этой строке ошибка}
    z.y := 2.0/3.0*t.y*(1.0-t.x/p);{}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.08.2013, 20:38   #3
CopperNickel
 
Регистрация: 13.08.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так, бреда ради, попробуйте записать так:
Код:
    z.x := 2.0/3.0*t.x + (sqr(t.x)-sqr(t.y))/(3.0*p);{ в этой строке ошибка}
    z.y := 2.0/3.0*t.y*(1.0-t.x/p);{}
Попробовал, ничего не изменилось. Я удалял эту строку z.x. Дальше ошибок нет, удается запустить и получить полфрактала. Ошибка именно в этой строчке.
CopperNickel вне форума Ответить с цитированием
Старый 13.08.2013, 22:41   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,381
По умолчанию

У меня Free Pascal.
Скопировал и запустил. Все сработало нормально, без ошибки.
Закоментировал строку, которая у Вас выдает ошибку.
Наблюдаю только левую половину фрактала.




Так что, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.08.2013, 22:59   #5
CopperNickel
 
Регистрация: 13.08.2013
Сообщений: 6
По умолчанию

У меня выдает только правую. Спасибо, попробую фри паскаль.

Последний раз редактировалось CopperNickel; 13.08.2013 в 23:03.
CopperNickel вне форума Ответить с цитированием
Старый 14.08.2013, 09:55   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

странно. у меня ваш код из пост #1 сработал без ошибок.
Turbo Pascal 7.1.
Изображения
Тип файла: jpg w907_002.jpg (85.5 Кб, 133 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2013, 13:12   #7
CopperNickel
 
Регистрация: 13.08.2013
Сообщений: 6
По умолчанию

Спасибо всем я нашел ошибку.
CopperNickel вне форума Ответить с цитированием
Старый 14.08.2013, 13:56   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от CopperNickel Посмотреть сообщение
Спасибо всем я нашел ошибку.
интересно, и в чём же она заключалась?
Почему она проявлялась только у Вас?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2013, 15:47   #9
CopperNickel
 
Регистрация: 13.08.2013
Сообщений: 6
По умолчанию

Там запятая вместо точки.
CopperNickel вне форума Ответить с цитированием
Старый 14.08.2013, 15:51   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

простите... не понял...
где запятая вместо точки?! в вашем код из пост #1 ?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение уравнения методом Ньютона Pascal 2Dletti Помощь студентам 1 22.01.2013 22:44
Составить фрактал Ньютона на VB Prozelokvo Помощь студентам 0 24.12.2012 21:03
Фрактал. Pascal. stas45rus Помощь студентам 3 05.06.2012 11:12
Фрактал Ньютона bloker Паскаль, Turbo Pascal, PascalABC.NET 0 28.10.2011 10:11
Pascal, метод Ньютона, вычисление корня ф-ии. Qousio Помощь студентам 2 02.05.2009 19:47