ПОНЯТНО О Visual Basic NET (том 2)



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


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



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

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

Рис. 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).
Вложенные циклы – «Небоскреб»

Рис. 10.5
Ковер сделан   из пересекающихся окружностей. Если центры соседних окружностей отстоят друг от друга на одинаковое расстояние как по горизонтали, так и по вертикали, и если удачно подобраны размеры, то ковер у вас получится красивым и с аккуратными краями. Дополнение А: Если ковер получился, сделайте, чтобы у него был вырезан правый верхний угол.  Дополнение Б: Если и это получилось, сделайте, чтобы у него был вырезан вдобавок и квадрат посередине.
Задание 56.        
«Шахматная доска». Нарисуйте шахматную доску (Рис. 10.6).
Вложенные циклы – «Небоскреб»

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

Содержание раздела