Вложенные циклы – «Небоскреб»

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

Задача. Нарисовать небоскреб (см. Рис. 10.4) с заданным числом этажей и подъездов (условимся: один столбец окон – один подъезд).

Вложенные циклы – «Небоскреб» - student2.ru

Рис. 10.4

Начнем с малого – пусть нужно нарисовать одно единственное окно:

Фрагмент 1

Ширина = 5 'Ширина окна

Высота = 10 'Высота окна

y = 30 'Вертикальная координата окна

x = 20 'Горизонтальная координата окна

Граф.DrawRectangle(Pens.Black, x, y, Ширина, Высота)

Пусть этот фрагмент рисует левое верхнее окно небоскреба.

Рисуем этаж. Попробуем заставить компьютер нарисовать верхний этаж. Кстати, мы с вами ведь уже рисовали «квадратную трубу» в 8.5? Это то же самое.

Замечаем, что здесь нам нужно решить несколько элементарных задач на рисование окна, первую из которых решает фрагмент 1. Все задачи очень похожи и различаются лишь значением координаты x. Таким образом, для решения каждой из этих задач подошла бы последняя строчка фрагмента 1, если бы в ней x равнялся не 20, а нужному числу. В данном случае идеально подходит оператор For:

Фрагмент 2

Зазор_х = 4 'Зазор между окнами на этаже

Ширина = 5 : Высота = 10

П = InputBox("Введите количество подъездов")

y = 30

x = 20

For j = 1 To П

Граф.DrawRectangle(Pens.Black, x, y, Ширина, Высота)

x = x + Ширина + Зазор_х 'Вычисляем горизонтальную координату следующего окна

Next

Рисуем весь небоскреб. Следующая ступень усложнения – последняя – нарисовать все этажи небоскреба. Для этого 5 нижних строчек фрагмента 2 должны быть выполнены заданное число раз, каждый раз – с новым значением y. Чтобы этого достичь, «обнимем» эти строчки оператором For:

Программа

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Зазор_х = 4

Зазор_у = 6 'Зазор между окнами соседних этажей

Ширина = 5 : Высота = 10

Э = InputBox("Введите количество этажей")

П = InputBox("Введите количество подъездов")

y = 30

For i = 1 To Э

x = 20

For j = 1 To П

Граф.DrawRectangle(Pens.Black, x, y, Ширина, Высота)

x = x + Ширина + Зазор_х

Next j

y = y + Высота + Зазор_у 'Вычисляем вертикальную координату следующего окна

Next i

Граф.DrawRectangle(Pens.Black, 8, 15, x, y) 'Рисуем контур небоскреба

End Sub

Задание 55.

«Ковер» (Рис. 10.5).

Вложенные циклы – «Небоскреб» - student2.ru

Рис. 10.5

Ковер сделан из пересекающихся окружностей. Если центры соседних окружностей отстоят друг от друга на одинаковое расстояние как по горизонтали, так и по вертикали, и если удачно подобраны размеры, то ковер у вас получится красивым и с аккуратными краями. Дополнение А: Если ковер получился, сделайте, чтобы у него был вырезан правый верхний угол. Дополнение Б: Если и это получилось, сделайте, чтобы у него был вырезан вдобавок и квадрат посередине.

Задание 56.

«Шахматная доска». Нарисуйте шахматную доску (Рис. 10.6).

Вложенные циклы – «Небоскреб» - student2.ru

Рис. 10.6

Указание: Здесь основные трудности возникнут при раскраске клеток в шахматном порядке. У Волчёнкова (См. Список литературы) я встретил следующую идею относительно того, как закрашивать клетки: Те клетки, у которых сумма номеров строки и столбца четная, закрашивать одним цветом, остальные – другим.

Задание 57.

«Таблица умножения». Нарисовать на форме таблицу умножения, как на Рис. 10.3.

Наши рекомендации