Фрактал, кривая Госпера. Ошибка, видимость переменных. Перевод с Паскаля на VB6

Узнай цену своей работы

Формулировка задачи:

Задача была такая написать программу на VB переведя ее с Pascal ABC. Эта программа рисует фрактал Госпера. Сначала я перевел программу на Turbo Pascal. Запустил. Все работает верно. Потом перевел на VB6. Он тоже что-то нарисовал - на фрактал не похож. Анализ. В программе на Паскале одна процедура вложена в другую Там ИНОЙ УРОВЕНЬ ВИДИМОСТИ ПЕРЕМЕННЫХ. Мне такое первый раз встретилось. Не пошел на поклон к Паскалю. Подумал. Чем наши ребята хуже - помогут и подскажут в чем ошибка. Привожу обе программы. Как на Паскале, так и на Бейсике. Верю. Будет фрактал "кривая Госпера" и у нас!!
Листинг программы
  1. uses crt, graph;
  2. Var Driv : Integer;
  3. Mode : Integer;
  4. procedure D(x, y, l, u: real; t, q: integer);
  5. procedure D2(var x, y: real; l, u: real; t, q: integer);
  6. begin
  7. D(x, y, l, u, t, q);
  8. x:= x + l * cos(u);
  9. y:= y - l * sin(u)
  10. end;
  11. begin
  12. if t > 0 then begin
  13. if q = 1 then begin
  14. x:= x + l * cos(u);
  15. y:= y - l * sin(u);
  16. u:= u + pi
  17. end;
  18. u:= u - 2 * pi / 19;
  19. l:= l / sqrt(7);
  20. D2(x, y, l, u, t - 1, 0);
  21. D2(x, y, l, u + pi / 3, t - 1, 1);
  22. D2(x, y, l, u + pi, t - 1, 1);
  23. D2(x, y, l, u + 2 * pi / 3, t - 1, 0);
  24. D2(x, y, l, u, t - 1, 0);
  25. D2(x, y, l, u, t - 1, 0);
  26. D2(x, y, l, u - pi / 3, t - 1, 1);
  27. end
  28. else
  29. line(round(x), round(y), round(x + l * cos(u)), round(y - l * sin(u)))
  30. end;
  31. BEGIN
  32. clrscr;
  33. Driv:= Detect;
  34. InitGraph(Driv, Mode, '');
  35. D(100,355,400,0,4,0);
  36. repeat until KeyPressed;
  37. CloseGraph;
  38. END.
Это программа на VB6 (перевод с Turbo Pascal)
Листинг программы
  1. Option Explicit
  2. Const pi = 3.14159265
  3. Dim x!, y!, l!, u!, t!, q!
  4. Private Sub cmdD_Click()
  5. Scale (0, -100)-(640, 480)
  6. Call D(300, 155, 400, 0, 4, 0)
  7. End Sub
  8. Private Sub D(x, y, l, u, t, q)
  9. If t > 0 Then
  10. If q = 1 Then
  11. x = x + l * Cos(u)
  12. y = y - l * Sin(u)
  13. u = u + pi
  14. End If
  15. u = u - 2 * pi / 19
  16. l = l / Sqr(7)
  17. Call D2(x, y, l, u, t - 1, 0)
  18. Call D2(x, y, l, u + pi / 3, t - 1, 1)
  19. Call D2(x, y, l, u + pi, t - 1, 1)
  20. Call D2(x, y, l, u + 2 * pi / 3, t - 1, 0)
  21. Call D2(x, y, l, u, t - 1, 0)
  22. Call D2(x, y, l, u, t - 1, 0)
  23. Call D2(x, y, l, u - pi / 3, t - 1, 1)
  24. Else
  25. Line (x, y)-(x + l * Cos(u), y - l * Sin(u))
  26. End If
  27. End Sub
  28. Sub D2(ByVal x, ByVal y, ByVal l, ByVal u, ByVal t, ByVal q)
  29. Call D(x, y, l, u, t, q)
  30. x = x + l * Cos(u)
  31. y = y - l * Sin(u)
  32. End Sub
  33. Private Sub Form_DblClick()
  34. SavePicture Image, "1.bmp"
  35. End Sub

Решение задачи: «Фрактал, кривая Госпера. Ошибка, видимость переменных. Перевод с Паскаля на VB6»

textual
Листинг программы
  1. Private Sub D(ByVal x!, ByVal y!, ByVal l!, ByVal u!, ByVal t&, ByVal q&)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы