Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТPascal Сборник конспектов.doc
Скачиваний:
24
Добавлен:
10.11.2018
Размер:
924.67 Кб
Скачать

13. Двойные и тройные циклы.

У двойных циклов должно быть два изменяющихся параметра:

For параметр1:=НЗ1 To КЗ1 Do

For параметр2:=НЗ2 To КЗ2 Do Оператор(блок);

У тройных циклов должно быть три изменяющихся параметра:

For параметр1:=НЗ1 To КЗ1 Do

For параметр2:=НЗ2 To КЗ2 Do

For параметр3:=НЗ3 To КЗ3 Do Оператор(блок);

Примеры:

For n1:=1 To 15 Do Begin x:=n1*40;Circle(x,40,10); End;

Даст следующую картину:

For n1:=1 To 15 Do

For n2:=1 To 11 Do Begin x:=n1*40;y:=n2*40; Circle(x,y,10); End;

Даст следующую картину:

For n1:=1 To 15 Do

For n2:=1 To 11 Do

For n3:=1 To 4 Do Begin x:=n1*40;y:=n2*40;r:=n3*10;Circle(x,y,r); End;

Даст следующую похожую на салфетку картину:

14. Решение задач на двойные циклы.

Задача 1. Построить изображение дома с помощью двойного цикла.

Задача 2. «Шахматная доска». Построить следующее изображение.

Схема решения:

Введем два параметра:

n1 – номер столбца, n1=1,2,3,….8

n2 – номер строки, n2=1,2,3,…8

Тогда координаты левого верхнего угла каждой клетки можно найти как:

x=n1*40, y=n2*40

а координаты нижнего правого угла будут на 40 пикселей больше:

xk=x+40; yk=y+40;

Таким образом, используя двойной цикл, мы можем нарисовать всю доску:

Для всех n1 от 1 До 8 Делать

Для всех n2 от 1 До 8 Делать блок (x=n1*40; y=n2*40; xk=x+40; yk=y+40; bar(x,y,xk,yk))

Проблема: как закрасить клетки в шахматном порядке?

Обратим внимание на то, что сумма n1+n2 для черных клеток всегда четная, а для белых нечетная.

Можно поступить так:

Если (n1+n2) mod 2=0 То черный цвет Иначе белый цвет

Теперь можно написать программу:

Program Chess;

Uses Graph;

Var gd,gm,n1,n2,x,y,xk,yk: Integer;

Begin

gd:=Detect; InitGraph(gd,gm,’’);

SetFillStyle(1,2); Bar(20,20,380,380);

For n1:=1 To 8 Do

For n2:=1 To 8 Do Begin

x:=n1*40;y:=n2*40;xk:=x+40;yk:=y+40;

If (n1+n2) mod 2=0 Then SetFillStyle(1,0) Else SetFillStyle(1,15);

Bar(x,y,xk,yk); End;

ReadLn;

CloseGraph;

End.

Изо зеленой доски

Координаты углов

Выбор цвета заливки

Изо клетки

Задача 3. «Шашки». Построить следующее изображение.

Задача 4. «Уголки». Построить следующее изображение.

Задача 5. «Трехцветная доска». Построить следующее изображение.

15. Решение задач на циклы по окружности.

Задача 1. «Одуванчик». Построить следующее изображение:

Схема решения:

В качестве параметра цикла возьмем номер лепестка, который будет принимать значения 0,1,2,3,4,….,21 (всего 22 лепестка)

Угол отклонения от оси абсцисс для лепестка номер 0 будет равен -45 градусов (-/4)

Угол отклонения от оси абсцисс для лепестка номер 21 будет равен 225 градусов (5*/4)

Угол между соседними лепестками будет (5*/4-(-/4))/21=/14

Формула для угла лепестка номер n будет U=n*/14-/4

Зная угол можно найти координаты центра лепестка:

x=320+100*cos(u) и y=240-100*sin(u)

Так как координаты получатся нецелыми числами, то их нужно будет округлить до целых с помощью функции Round (Round(3.762)=4).

Теперь можно написать программу:

Program Oduvan;

Uses Graph;

Var gd,gm,n,x,y: Integer; u: Real;

Begin

gd:=Detect; InitGraph(gd,gm,’’);

For n:=0 To 21 Do Begin

u:=n*Pi/14-Pi/14;

x:=Round(320+100*Cos(u));y:=Round(240-100*Sin(u));

SetColor(2);Line(320,240,x,y);

SetColor(15); Circle(x,y,10);

SetFillStyle(1,15); FloodFill(x,y,15); End;

SetColor(2);Line(320,240,320,480);

ReadLn;

CloseGraph;

End.

Вычисляем угол

Находим координаты

Рисуем отрезок

Рисуем окружность

Заливаем окружность

Рисуем стебель

Задача 2. «Ромашка». Построить следующее изображение:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]