Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

9.5. Используем в рисовании переменные величины

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

Как заставить Паскаль короткой программой рисовать множество элементов? Ответ: применять циклы, используя в обращениях к графическим процедурам вместо чисел переменные величины и арифметические выражения.

Задача. Нарисовать горизонтальный ряд окружностей радиусом 10 на расстоянии 100 от верхнего края экрана и с такими горизонтальными координатами: 50, 80, 110, 140, ..., 290.

Как видим, центры соседних окружностей отстоят друг от друга на 30. Вот примитивный фрагмент, решающий эту задачу:

Circle( 50,100,10);

Circle( 80,100,10);

Circle(110,100,10),

Circle(140,100,10);

Circle(170,100,10);

Circle(200,100,10);

Circle(230,100,10);

Circle(260,100,10);

Circle(290,100,10);

При вводе этой программы вас будет раздражать необходимость вводить много раз почти одно и то же. Воспользуйтесь копированием, которое объяснено в параграфе "Копирование и перемещение фрагментов текста" из части 4.

Мы видим, что Паскаль здесь 9 раз выполнит одну и ту же процедуру, причем при каждом следующем обращении первый параметр вырастает на 30.

А теперь решим эту же задачу при помощи цикла.

Придумаем для первого параметра переменную величину, например х. Чтобы X изменялся, организуем цикл repeat. Вот программа решения задачи:

USES Graph;

VAR x, Device, Mode :Integer;

BEGIN

Device:=0;

InitGraph(Device, Mode, '<путь к графическим драйверам>');

x:=50;

repeat

Circle(x,100,10);

x:=x+30;

until x>290;

ReadLn;

CloseGraph

END.

Задание 69

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

Задание 70

Удлините трубу налево и направо до краев экрана.

Задание 71

Увеличьте толщину трубы.

Заставим окружности вести себя сложнее. Например, расположим их не по горизонтали, а по диагонали экрана в направлении от левого верхнего угла к правому нижнему. Для этого организуем еще одну переменную - вертикальную координату у - и заставим ее тоже изменяться одновременно с х.

USES Graph;

VAR x, y, Device, Mode: Integer;

BEGIN

Device:=0;

InitGraph(Device, Mode, '<путь к графическим драйверам:>');

x:=50;

y:=20;

repeat

Circle(x,y,10);

x:=x+30;

y:=y+20;

until x>290;

ReadLn;

CloseGraph

END.

Если мы захотим менять радиус, то организуем переменную R, тоже типа Integer.

Задание 72

Нарисуйте ряд точек по направлению из левого нижнего угла в правый верхний.

Задание 73

"Круги на воде". Нарисуйте пару десятков концентрических окружностей, то есть окружностей разного радиуса, но имеющих общий центр.

Задание 74

"Компакт-диск". Если радиус самого маленького "круга на воде" из задания 73 будет порядка 50, а самого большого - во весь экран и если радиусы соседних окружностей будут различаться на 2-3 пиксела, то на экране вы увидите привлекательный "компакт-диск". Сделайте его золотым (Yellow).

Задание 75

Не трогая х, а меняя только у и R, вы получите коническую башню.

Задание 76

Меняя все 3 параметра, вы получите трубу, уходящую в бесконечность.

Задание 77

Разлинуйте экран в линейку.

Задание 78

А теперь в клетку.

Задание 79

А теперь в косую линейку.

Указание. Вы можете задавать координаты и за пределами экрана

Задание 80

Начертите ряд квадратов.

Чтобы получить "богатые рисунки", нужно использовать богатые возможности Паскаля: вложенные циклы, ветвление внутри цикла и т. д.

Задание 81

Нарисуйте, применяя эти средства, шахматную доску.

Задание 82

"Ковер". В задании 69 вы рисовали горизонтальный ряд пересекающихся окружностей. Теперь нарисуйте один под другим много таких рядов.

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

Задание 83

Пусть у этого ковра будет вырезан левый нижний угол.

Задание 84

...И вдобавок вырезан квадрат посередине.