Использование рекурсии в графике

  • Вид работы:
    Тип работы
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    4,91 Мб
  • Опубликовано:
    2014-03-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Использование рекурсии в графике

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ "СРЕДНЯЯ ШКОЛА № 1 г. ПИНСКА"







НАУЧНО-ИССЛЕДОВАТЕЛЬСКАЯ РАБОТА ПО ИНФОРМАТИКЕ

ТЕМА: ИСПОЛЬЗОВАНИЕ РЕКУРСИИ В ГРАФИКЕ

Выполнила:

Селюжицкая Юлия Васильевна

Класс 11 "А"

Научный руководитель:

Трушевич Елена Жоржевна, учитель информатики






г. Пинск 2013 год

Оглавление

 

Введение

1. Использование рекурсии в различных предметных областях

2. Рекурсия в программировании

3. Использование рекурсии в графике

4. Решение задач

Заключение

Список использованной литературы

Приложения

 

Введение


Как герой Мольера не знал, что он разговаривает прозой, так и мы зачастую не знаем, что пользуемся рекурсией.

В жизни нам не раз приходилось сталкиваться с рекурсией. Вспомнить хотя бы стихотворение "У попа была собака <#"700049.files/image001.gif">

Рис. 1. Прямая рекурсия

При косвенной рекурсии одна процедура вызывает другую, которая сама либо посредством других процедур вызывает исходную процедуру: А → В → А (рис. 2).

Рис. 2. Косвенная рекурсия

В рекурсивном определении должно присутствовать ограничение, граничное условие, при выходе на которое дальнейшая инициация рекурсивных обращений прекращается.

Обращение к рекурсивной подпрограмме ничем не отличается от вызова любой другой подпрограммы. При этом при каждом новом рекурсивном обращении в памяти создается новая копия подпрограммы со всеми локальными переменными. Такие копии будут порождаться до выхода на граничное условие. Очевидно, в случае отсутствия граничного условия, неограниченный рост числа таких копий приведет к аварийному завершению программы за счет переполнения стека (стек - область памяти, в которой хранится состояние вызывающей подпрограммы).

Порождение все новых копий рекурсивной подпрограммы до выхода на граничное условие называется рекурсивным спуском. Максимальное количество копий рекурсивной подпрограммы, которое одновременно может находиться в памяти компьютера, называется глубиной рекурсии. Число рекурсивных вызовов в каждый конкретный момент времени, называется текущим уровнем рекурсии. Завершение работы рекурсивных подпрограмм, вплоть до самой первой, инициировавшей рекурсивные вызовы, называется рекурсивным подъемом.

Существуют три разных формы рекурсивных подпрограмм:

) Форма с выполнением действий до рекурсивного вызова (с выполнением действий на рекурсивном спуске).

procedure рекурсия;

Действия на входе в рекурсию;

if условие then рекурсия;;

) Форма с выполнением действий после рекурсивного вызова (с выполнением действий на рекурсивном возврате).

procedure рекурсия;условие then рекурсия;

Действия на выходе в рекурсию;;

) Форма с выполнением действий как до, так и после рекурсивного вызова (с выполнением действий как на рекурсивном спуске так и на рекурсивном возврате.Рекурсия;

Действия на входе в рекурсию;Условия then Рекурсия;

Действия на выходе из рекурсии;;

Рекурсию следует применять тогда, когда алгоритм с применением рекурсии значительно упрощает программу.

 

3. Использование рекурсии в графике


Рекурсия часто используется в графике. Рассмотрим некоторые примеры.

а) Канторово множество

Множество Кантора придумал Георг Кантор - один из основателей теории множеств. На Западе подобные множества иногда называют пылью.

Рис. 3. Канторово множество

При детальном рассмотрении можно заметить, что данный рисунок образован квадратами. Каждый следующий квадрат в четыре раза меньше предыдущего. Центр каждого следующего квадрата расположен в вершине предыдущего квадрата и т.д. Так как рисунок состоит из однотипных элементов, и есть явная зависимость, как размеров, так и положения, следовательно, при создании данного рисунка можно использовать в программе рекурсию.

Алгоритм рисования "множества Кантора":

.        построить большой квадрат, внутреннюю часть которого закрасим каким-либо цветом;

2.       на его вершинах, как на центрах рисуются квадраты, в четыре раза меньшие первоначального;

.        это повторяется для каждого оставшегося квадрата (n), причем бoльшие квадраты перекрывают меньшие.

            

Рис. 4. Построение множества Кантора

Программа приведена в Приложение 5.

б) Треугольник Серпинского

В 1915 году польский математик Вацлав Серпинский придумал занимательный объект, известный как решето Серпинского. Этот треугольник один из самых ранних известных примеров фракталов. Существует несколько способов построения этого фрактала. Треугольник Серпинского также называют салфеткой Серпинского.

Рис. 5. Треугольник Серпинского

Алгоритм построения треугольника Серпинского довольно прост:

.        строится большой внешний треугольник (А);

2.       строится треугольник, получающийся при соединении середин сторон большого треугольника (Б);

.        строятся треугольники, получающиеся аналогично элементу Б, но в качестве большого треугольника берутся треугольники, образованные элементами А и Б.

Рис. 6. Построение треугольника Серпинского

Программа приведена в Приложение 6.

в) Дерево Пифагора

Пифагор, доказывая свою знаменитую теорему, построил фигуру, где на сторонах прямоугольного треугольника расположены квадраты. В наш век эта фигура Пифагора выросла в целое дерево. Впервые дерево Пифагора построил Босман А.Е. (голландский учитель математики) во время второй мировой войны, используя обычную чертёжную линейку.

Рис. 7. Дерево Пифагора

Алгоритм построения дерева Пифагора:

.        построить квадрат;

.        к каждому катету добавить по 3 отрезка так, чтобы получился квадрат. Потом всё повторяем для каждого квадрата.

Рис. 8. Построение дерева Пифагора

Программа приведена в Приложение 7.

г) Кривая Дракона

Кривая дракона впервые была описана в популярной литературе в журнале Scientific American в 1967 году. Заметка о ней появилась в колонке "Математические игры", которую вел Мартин Гарднер. Первоначально использовалось полное название кривой - "дракон Хартер - Хейтуэя", которое ей дал основатель компьютерной фрактальной геометрии Бенуа Мандельброт, именем которого названо знаменитое множество. В дальнейшем стали говорить просто о кривой дракона. Приведем описание алгоритма построение кривой, близкое к тому, которое использовалось Мартином Гарднером.

Рис. 9. Кривая Дракона

а)               б)                        в)                         г)

Рис. 10. Построение кривой Дракона

рекурсия графика программирование алгоритм

Рассмотрим горизонтальный отрезок как кривую дракона нулевого порядка. Разделим отрезок пополам и построим на нем прямой угол, как показано на рисунке 10 а). Получим кривую дракона первого порядка.

На сторонах прямого угла снова построим прямые углы (рис. 10 б).

При этом вершина первого угла всегда находится справа, если смотреть из точки A (начала кривой) вдоль первого отрезка кривой, а направления, в которых строятся вершины остальных углов, чередуются. На рисунке 10 в) и 10 г) показаны кривые дракона третьего и четвертого порядков соответственно.

Программа приведена в Приложение 8.

д) Снежинка

Рис. 11. Снежинка

Алгоритм построения снежинки (n - количество звеньев снежинки, p - количество ветвей снежинки, l - длину (в точках) ветви внутреннего звена, t - коэффициент уменьшения каждого звена):

.        центр снежинки расположить в центре экрана монитора;

2.       начать рисовать из центра снежинки: нарисовать первый (длины l) отрезок, далее, если это не последнее звено, то рисуем отрезок длины l*t следующего звена, и так до тех пор, пока не нарисуем отрезок последнего звена (l*t, n-1);

.        на последнем звене дорисовать самую маленькую снежинку;

.        вернуться на предпоследний отрезок и дорисовать самое маленькое звено со снежинкой;

.        продолжать до тех пор, пока не нарисуется вся снежинка.

Программа приведена в Приложение 9.

 

4. Решение задач


Задача 1. Напишите программу построения изображения, представленного на рисунке 12.

Рис. 12

Задача 2. Напишите программу построения изображения, представленного на рисунке 13.

Рис. 13

Задача 3. Напишите программу построения изображения, представленного на рисунке 14.

Рис. 14

Задача 4. Напишите программу построения изображения, представленного на рисунке 15.

Рис. 15

Задача 5. Напишите программу построения изображения, представленного на рисунке 16.

Рис. 16

Задача 6. Напишите программу построения изображения, представленного на рисунке 17.

Рис. 17

Задача 7. Напишите программу построения изображения, представленного на рисунке 18.

Рис. 18

Задача 8. Напишите программу построения изображения, представленного на рисунке 19.

Рис. 19.

Задача 9. Напишите программу построения изображения, представленного на рисунке 20.

Рис. 20

Решения задач приведены в Приложение 10.

Заключение


В ходе научно-исследовательской работы мы рассмотрели следующие теоретические вопросы:

.        рекурсия в различных предметных областях;

2.       рекурсия в программировании;

.        использование рекурсии в графике.

В процессе изучения теоретических вопросов я познакомилась с понятием рекурсии, ее использованием в различных предметных областях. Изучила готовые алгоритмы построения графических изображений с применением рекурсии.

В практической части я реализовала алгоритмы построения нескольких изображений в системе программирования Pascal ABC, сравнив программы, написанные с использованием рекурсии и без нее. В результате чего убедилась, что при создании сложных графических объектов использование рекурсии может сделать программу более компактной, красивой и читабельной. Конечно, многие задачи, которые решаются при помощи рекурсии можно решить и при помощи циклов. Однако есть и задачи, которые решаются только при помощи рекурсии или их решение другим способом значительно сложнее.

В процессе исследования была проделана следующая работа:

.        Проанализирована и проработана литература по теме исследования.

2.       Рассмотрены и изучены алгоритмы построения графических изображений с использованием рекурсии.

.        Составлены программы построения графических изображений двумя способами: с использованием рекурсии и без нее.

В своём исследовании использовала следующие методы:

·        изучение литературы, обработка данных;

·        анализ и синтез собранных данных;

·        реализация алгоритмов создания графических изображений.

Думаю, что материал данной работы будет интересен ученикам, желающим более глубоко изучить программирование, а также может быть использован учителями информатики на факультативных занятиях.

Лично для меня изучение темы "Использование рекурсии в графике" оказалось очень интересным. В процессе исследования я сама для себя сделала массу новых открытий, связанных не только с темой проекта, но и с окружающим миром в целом.


Список использованной литературы


1.       Златопольский Д.М. Замечательные кривые /. - -М.: Чистые пруды, 2008. - 32 с. (Библиотека "Первое сентября", серия "Информатика", Вып.23).

2.       Павловский А.И., Пупцев А.Е., Гращенко П.Л. Информатика: Учеб. пособие для 10-го кл. с углубл. изучением информатики общеобразоват. шк. с рус. яз. обучения. - Мн.: Нар. асвета, 2000. - 223 с.: ил.

.        Паволоцкий А.В. Геометрические фракталы и L-системы. Информатика // № 20, с.12. - М.: Чистые пруды, 2010. - 32 с.

ИНТЕРНЕТ-ИСТОЧНИКИ

4.       Фестиваль педагогических идей "Открытый урок". Изучение темы "Рекурсивные графические алгоритмы". Лусникова Е.С. <#"700049.files/image026.gif">

Приложение 2

       

    

Приложение 3

        

Приложение 4

 

   

    

Приложение 5

ПРИМЕР РЕКУРСИВНОЙ ПРОГРАММЫ "КАНТОРОВО МНОЖЕСТВО"

program mnogestvo_Kantora;crt, graphabc;n: integer;kvadrat (x, y, n: integer; size: word);

var s: word;n-1>0 then: = size div 2;(x-size, y+size, n-1, s);(x-size, y-size, n-1, s);(x+size, y+size, n-1, s);(x+size, y-size, n-1, s);;(x-size, y-size, x+size, y+size);;(800, 800);(n);

kvadrat (400, 400, n, 100);.

На рисунке представлено изображение, состоящее из четырех уровней, а данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

Приложение 6

ПРИМЕР РЕКУРСИВНОЙ ПРОГРАММЫ "ТРЕУГОЛЬНИК СЕРПИНСКОГО"

program treugol_Serpinskogo;crt, graphabc;x1, y1, x2, y2, x3, y3, a, b, n: integer;tri (x1, y1, x2, y2, x3, y3, N: integer);x12, y12, x23, y23, x31, y31: integer;N<>0 then: = (x1+x2) div 2; y12: = (y1+y2) div 2;: = (x2+x3) div 2; y23: = (y2+y3) div 2;: = (x3+x1) div 2; y31: = (y3+y1) div 2;(x31, y31);(x12, y12);(x23, y23);(x31, y31);(x1, y1, x12, y12, x31, y31, N-1);(x2, y2, x12, y12, x23, y23, N-1);(x3, y3, x31, y31, x23, y23, N-1);;(800, 600);(n);: =350; y1: =30;: =669; y2: =509;: =30; y3: =509;(x1, y1);(x2, y2);(x3, y3);(x1, y1);(x1, y1, x2, y2, x3, y3, n);

END.

На рисунке представлено изображение, состоящее из шести уровней, а данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

Приложение 7

ПРИМЕР РЕКУРСИВНОЙ ПРОГРАММЫ "ДЕРЕВО ПИФАГОРА"

program derevo_Pifagora;crt, graphabc;n: integer;draw (x, y, l, a: real);rect (x1, y1, l: integer; a1: real);(x1, y1);(x1 + round (l * cos (a1)), y1 - round (l * sin (a1)));(x1 + round (l * sqrt (2) * cos (a1 + pi/4)),- round (l * sqrt (2) * sin (a1 + pi/4)));(x1 + round (l * cos (a1 + pi/2)), y1 - round (l * sin (a1 + pi/2)));(x1, y1);;l > 4 then(round (x), round (y), round (l), a);(x - l*sin (a), y - l * cos (a), l / sqrt (2), a + pi / 4);(x - l * sin (a) + l / sqrt (2) * cos (a + pi/4),- l * cos (a) - l / sqrt (2) * sin (a + pi/4), l / sqrt (2), a - pi/4);;

end;(670,500);(n);(280, 460, n, 0);.

На рисунке представлено изображение, состоящее из ста уровней, а данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

Приложение 8

ПРИМЕР РЕКУРСИВНОЙ ПРОГРАММЫ "КРИВАЯ ДРАКОНА"

program drakon;crt, graphabc;k, d, m: integer;ris (x1, y1, x2, y2, k: integer);xn, yn: integer;k > 0 then: = (x1 + x2) div 2 - (y2 - y1) div 2;

yn: = (y1 + y2) div 2 + (x2 - x1) div 2;(x1, y1, xn, yn, k-1);(x2, y2, xn, yn, k-1);begin line (x1,y1,x2,y2); end;; (k);

ris (200, 100, 400, 300, k);

END.

На рисунке представлено изображение, состоящее из двадцати уровней, а данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

Приложение 9

ПРИМЕР РЕКУРСИВНОЙ ПРОГРАММЫ ПОСТРОЕНИЯ СНЕЖИНКИ

program sneginka;crt, graphabc;n, p: integer;: real;snow (x, y: integer; l: real; k: integer);x1, y1, i: integer;k = 0 then exit;i: =1 to 6 do: =trunc (x + l * cos (2*pi* (i-1) /6));: =trunc (y + l * sin (2*pi* (i-1) /6));

line (x, y, x1, y1);(x1, y1, l*t, k-1);;;(1000, 1000);(n);

t: =0.25;(400, 400, 200, n);.

На рисунке изображена снежинка, состоящая из 3 звеньев и 6 ветвей, а данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней (звеньев).

Приложение 10

ПОСТРОЕНИЕ ИЗОБРАЖЕНИЙ В СИСТЕМЕ ПРОГРАММИРОВАНИЯ PASCAL ABC

Задача 1

Пример рекурсивной программы

program zadacha_1;

uses crt, graphabc;n, r: integer;krug (x,y,r,n: integer);k: real; p: integer;(x,y,r); k: =0.3;n=1 then exit;(x-2*r, y, round (k*r), n-1);(x+2*r, y, round (k*r), n-1);(x, y-2*r, round (k*r), n-1);(x, y+2*r, round (k*r), n-1);;(800, 800);(n); (400, 400, 120, n);

END.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

               =2n=3

               =4 n=5

Пример программы с использованием циклов

program zadacha_1;

uses crt, graphabc;

var x, y, r, x1, y1, r1, x2, y2, r2, x3, y3, r3: integer;, k: real; i, j, f: integer;(800, 800);: =400; y: =400; r: =120; k: =0.3;(x,y,r); r1: =round (k*r);: =round (k*r1); r3: =round (k*r2);i: =1 to 4 do: =x+ round (2*r*cos (a));: =y+ round (2*r*sin (a));(x1, y1, r1);j: =1 to 4 do: =x1+ round (2*r1*cos (a));: =y1+ round (2*r1*sin (a));(x2, y2, r2);f: =1 to 4 do: =x2+ round (2*r2*cos (a));: =y2+ round (2*r2*sin (a));(x3, y3, r3);: =a+pi/2;;: =a+pi/2;;: =a+pi/2;;.

Программа рисует такое же изображение, как и рекурсивная при n= 4.

Задача 2.

Пример рекурсивной программы

program zadacha_2;crt, graphabc;r, n: integer;krug (x, y, r, n: integer);(x, y, r);n=1 then exit;(x-r, y, r div 2, n-1);(x+r, y, r div 2, n-1);(x, y-r, r div 2, n-1);(x, y+r, r div 2, n-1);;(800,800);(n);(bsclear);(400, 400, 100, n);.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

                   =2 n=3

                =4 n=5

Пример программы с использованием циклов

uses crt, graphabc;x, y, r, x1, y1, r1,x2, y2, r2: integer;, j: integer; a: real;(800,800);(bsclear);: =400; y: =400; r: =100;(x,y,r);: =r div 2;: =r1 div 2;i: =1 to 4 do: =x+ round (r*cos (a));: =y+ round (r*sin (a));(x1, y1, r1);j: =1 to 4 do: =x1+ round (r1*cos (a));: =y1+ round (r1*sin (a));(x2, y2, r2);: =a+pi/2;

end;: =a+pi/2;.

Программа рисует такое же изображение, как и рекурсивная при n= 3.

Задача 3.

Пример рекурсивной программы

program zadacha_3;crt, graphabc;r, n: integer;krug (x, y, r, n: integer);k: real;(x,y,r);: =0.35;n=1 then exit;(x+round (1.9*r), y, round (k*r), n-1);(x-round (1.9*r), y, round (k*r), n-1);(x+r, y+round (1.8*r), round (k*r), n-1);(x-r, y-round (1.8*r), round (k*r), n-1);(x+r, y-round (1.8*r), round (k*r), n-1);(x-r, y+round (1.8*r), round (k*r), n-1);;(800, 800);(n);(400, 400, 100, n);.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

            =2 n=3

=4 n=5

Пример программы с использованием циклов

program zadacha_3;

uses crt, graphabc;x, y, r, x1, y1, r1, x2, y2, r2, x3, y3, r3: integer;, j, f: integer; q, k, a: real;(800, 800);: =1.9; k: =0.35;: =400; y: =400; r: =100;(x,y,r);: =round (k*r);: =round (k*r1);: =round (k*r2);i: =1 to 6 do: =x+ round (q*r* cos (a));: =y+ round (q*r* sin (a));(x1, y1, r1);j: =1 to 6 do: =x1+ round (q*r1* cos (a));: =y1+ round (q*r1* sin (a));(x2, y2, r2);f: =1 to 6 do: =x2+ round (q*r2* cos (a));: =y2+ round (q*r2* sin (a));(x3, y3, r3);: =a+pi/3;;: =a+pi/3;;: =a+pi/3;;.

Программа рисует такое же изображение, как и рекурсивная при n= 4.

Задача 4.

Пример рекурсивной программы

program zadacha_4;crt, graphabc;dx, dy, n: integer;otrezok (l, ug, n: integer);: =dx+round (l*cos (ug*pi/180));: =dy+round (l*sin (ug*pi/180));(dx, dy);n=1 then exit;(l+20, ug+90, n-1);;(800, 800);(n);(380, 400);: =400; dy: =400;(20, 0, n);.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней. Если в процедуре к переменной ug (угол поворота прямой) добавлять другую градусную меру, то можно получить дополнительные интересные изображения.

n=2 n=4

=8 n=16

Пример программы с циклом

program zadacha_4;crt, graphabc;x, y, I, v, a, n: integer;(500, 500);(n);: =250; y: =250;: =20;(x, y);i: =1 to 2*n doi mod 2 = 1 then: =x+i*a;(x, y);: =y+i*a;(x, y);: =x- (i+1) *a;(x, y);: =y- (i+1) *a;(x, y);;.

Программа позволяет рисовать изображение в зависимости от введённого пользователем n - один виток спирали.

n=1 n=2

=4 n=16

Задача 5.

Пример рекурсивной программы

program zadach_5;

uses crt, graphabc;

var n: integer;

procedure tr (xa, ya, xb, yb, xc, yc, xd, yd, n: integer);x1, x2, x3, x4, y1, y2, y3, y4: integer;n>0 then begin: = (xa+xb) div 2; y1: = (ya+yb) div 2;: = (xb+xc) div 2; y2: = (yb+yc) div 2;: = (xc+xd) div 2; y3: = (yc+yd) div 2;: = (xa+xd) div 2; y4: = (ya+yd) div 2;(x1, y1, x2, y2); line (x2, y2, x3, y3);(x3, y3, x4, y4); line (x4, y4, x1, y1);(x1, y1, x2, y2, x3, y3, x4, y4, n-1);;;(500,500);(n);(0, 50, 50, 0, 800, 50, 50, 800, n);.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

=2 n=5

=8 n=13

Пример программы с циклом

program zadach_5;crt, graphabc;x0, y0, x1, y1, x2, y2, x3, y3, x4, y4: integer;, n: integer;(500,500);(n);: =0; y1: =50;: =50; y2: =0;: =800; y3: =50;: =50; y4: =800;: =0; y0: =50;i: = 1 to n do: = (x1+x2) div 2; y1: = (y1+y2) div 2;: = (x2+x3) div 2; y2: = (y2+y3) div 2;: = (x3+x4) div 2; y3: = (y3+y4) div 2;: = (x0+x4) div 2; y4: = (y0+y4) div 2;(x1, y1, x2, y2);(x2, y2, x3, y3);(x3, y3, x4, y4);(x4, y4, x1, y1);: =x1; y0: =y1;;.

Программа так же как и рекурсивная позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

Задача 6.

Пример рекурсивной программы

program zadacha_6;

uses crt, graphabc;n: integer; m: real;vetka (x, y, l, n: integer; a: real);b=5*pi/6;x0, y0: integer;n+1<>0 then(x, y);: =x+round (l*cos (a));: =y+round (l*sin (a));(x, y);(x, y, round (l*m), n-1, a-b/2);(x, y, round (l*m), n-1, a+b/2);(x, y, round (l*m), n-1, a);;;(800, 600);(n);: =0.6;(300, 450, 150, n, - pi/2);.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

=1 n=2

=3 n=10

Пример программы с использованием циклов

program zadacha_6;

uses graphabc;

const b=5*pi/6;

var x, y, x1, y1, dx1, dy1, dx2, dy2, n: integer;, dl1, i, j: integer; m, a, a1, a2, c, c1: real;(800, 600);: =150; a: =-pi/2; m: =0.6;: =300; y1: =450;: =300; y: =300;(x1, y1);(x, y);: =round (dl*m);: =round (dl*m);i: =1 to n do(x, y);: =a+ (b/2) *cos (c);: =x+round (dl*cos (a1));: =y+round (dl*sin (a1));(dx1, dy1);j: =1 to n do begin(dx1, dy1);: =a1+ (b/2) *cos (c1);: =dx1+round (dl1*cos (a2));: =dy1+round (dl1*sin (a2));(dx2, dy2);: =c1+pi/2;;: =c+pi/2; c1: =0;;.

Программа рисует такое же изображение, как и рекурсивная при n= 3.

Задача 7.

Пример рекурсивной программы

program zadacha_7;crt, graphabc;k, n: integer;kvadr (x, y, k, n: integer);(x, y, x+k, y+k);n=1 then exit;(x+k div 3, y-k div 3, k div 3, n-1);(x+k, y+k div 3, k div 3, n-1);(x-k div 3, y+k div 3, k div 3, n-1);(x+k div 3, y+k, k div 3, n-1);;(800, 800);(n);(250, 250, 300, n);.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

=2 n=3

=4 n=5

Пример программы с использованием циклов

program zadacha_7;crt, graphabc;x, y, x1, y1, x2, y2, x3, y3, x4, y4, k, k1, k2, k3: integer;, j, f, dl: integer; a, a1, a2: real;

BEGIN(800, 800);: =250; y: =250; k: =300;

rectangle (x, y, x+k, y+k);: =350; y1: =350;: = k div 3;: =k1 div 3;: = k2 div 3;: =33;i: =1 to 4 do: =x1+2*k1*round (cos (a));: =y1+2*k1* round (sin (a));(x2, y2, x2+k1, y2+k1);j: =1 to 4 do: =x2+2*k2*round (cos (a1)) +dl;: =y2+2*k2*round (sin (a1)) +dl;(x3, y3, x3+k2, y3+k2);f: =1 to 4 do: =x3+2*k3*round (cos (a2)) +dl div 3;: =y3+2*k3* round (sin (a2)) +dl div 3;(x4, y4, x4+k3, y4+k3);: =a2+pi/2;;: =a1+pi/2;: =0;: =a+pi/2;: =0;;

END.

Программа рисует такое же изображение, как и рекурсивная при n= 4.

Задача 8.

Пример рекурсивной программы

program zadacha_8;crt, graphabc;x, y, n, r, l: integer;okr (x, y: integer; r, l: real; n: integer);i, x1, y1: integer;i: =1 to 8 do begin: =trunc (x+l*cos (2*pi* (i-1) /8));: =trunc (y+l*sin (2*pi* (i-1) /8));(x1, y1, trunc (r)); end;n=1 then exit;(x, y, r*1.5, l+r*2.8, n-1);;(1000,1000);(n);(500, 500, 18, 50, n);.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

=1 n=2

=3 n=4

Пример программы с использованием циклов

end;.

Программа так же как и рекурсивная позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

Задача 9.

Пример рекурсивной программы

program zadacha_9;crt, graphabc;n, dl: integer;figura (dx, dy, n: integer);i: integer;(dx,dy);i: =1 to 6 do: =dx+round (dl*cos (2*pi* (i-1) /6));: =dy+round (dl*sin (2*pi* (i-1) /6));(dx,dy);;n=1 then exit;(dx,dy+round (1.75*dl),n-1);(dx,dy-round (1.75*dl),n-1);(dx-round (1.5*dl),dy-round (0.85*dl),n-1);(dx+round (1.5*dl),dy-round (0.85*dl),n-1);(dx-round (1.5*dl),dy+round (0.85*dl),n-1);(dx+round (1.5*dl),dy+round (0.85*dl),n-1);;(800, 800);(n); dl: =30;(400, 400,n);.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

=1 n=2

=3 n=5

Пример программы с использованием процедуры

program zadacha_9;

uses graphabc;

var dx, dy, dl, i, j: integer; a: real;, h2, h3, k: integer;figura (dx,dy: integer);i: =1 to 6 do: =dx+round (dl*cos (2*pi* (i-1) /6));: =dy+round (dl*sin (2*pi* (i-1) /6));(dx,dy);;;(800,800);: =400; dy: =400;: =30;(dx,dy);(dx,dy);: =round (1.75*dl);: =round (1.5*dl);: =round (0.85*dl);j: =1 to 2 do: =400;: =400+round (h1* cos (a));(dx,dy);(dx,dy);: =400+round (h2* cos (a));: =400+round (h3* cos (a));(dx,dy);(dx,dy);: =400-round (h2* cos (a));: =400+round (h3* cos (a));(dx,dy);(dx,dy);: =a+pi;

end;

END.

Программа рисует такое же изображение, как и рекурсивная при n= 2.


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!