Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MetVB.doc
Скачиваний:
15
Добавлен:
17.02.2016
Размер:
420.86 Кб
Скачать
    1. Общие процедуры

Общими называются процедуры, которые вызываются неоднократно из нескольких мест программы и/или используются совместно несколькими объектами.

      1. Рисование домика

Задание

Разработать программу рисования домика.

Добавить в проект приложения стандартный модуль и разместить в нём следующие процедуры.

'Процедура рисования стены (один прямоугольник)

Sub Wall(x1 as Single, x2 as Single, y1 as Single, y2 as Single, c as Long)

Line(x1, y1)-(x2, y2), c, b 'Прямоугольник

End sub

'Процедура рисования крыши (фигура из пяти отрезков)

Sub Roof(x1 as Single, x2 as Single, x3 as Single, y1 as Single, y2 as Single, c as Long)

Line(x1, y1)-(x3, y1), c

Line((x2-x1)/2, y2)-(x3-(x2-x1)/2, y2), c

Line(x1, y1)-((x2-x1)/2, y2), c

Line(x3, y1)-(x3-(x2-x1)/2, y2), c

Line(x2, y1)-((x2-x1)/2, y2), c

End Sub

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

Sub cmdGo_Click()

Call House(0, 10, 20, 0, 5, 10) ‘Вызов процедуры рисования домика

End Sub

Тело процедуры (House) разместить, как и процедуры (Wall) и крыши (Roof), в стандартном модуле.

'Процедура рисования домика

Sub House(x1 as Single, x2 as Single, x3 as Single, y1 as Single, y2 as Single, y3 as Single)

Call Wall(x1, x2, y1, y2, vbRed) 'Рисование одной стены

Call Wall(x2, x3, y1, y2, vbRed) 'Другой стены

Call Roof(x1, x2, x3, y1, y2, y3, vbGreen) 'Рисование крыши

End Sub

Вопросы к заданию

  1. Добиться работоспособности программы для рисования единственного домика. В отчёте привести иллюстрацию результата работы программы и сделанные изменения и/или дополнения кода.

  2. Дополнить программу возможностью рисования нескольких домиков. Для этого следует каждый раз вызывать процедуру рисования домика с различными входными параметрами.

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

Sub cmdGoMulty_Click()

Scale(-5, 12)-(22, -2)

'Рисование нескольких домиков

Call House(0, 2, 5, 0, 2, 3)

Call House(6, 10, 13, 0, 3, 5)

Call House(14, 17, 21, 0, 2, 4)

Call House(2, 4, 6, 4, 8, 10)

Call House(8, 14, 20, 6, 9, 11)

End Sub

Добиться работоспособности процедуры (числа в вызовах процедур исправлять нельзя). В отчёте описать сделанные изменения.

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

      1. Рисование окружностей

Задание

Требуется нарисовать концентрические (с одним и тем же центром) окружности уменьшающегося радиуса. Радиус каждой следующей окружности равен 9/10 радиуса предыдущей. Рисование прекращается, когда радиус становится равным минимальному значению Rmin = 1.

В модуле кода формы написать следующее.

Sub Go_Click()

Scale(-10, 10)-(10, -10)

R = 8

Rmin = 1

Call ConcentricCircles(R, Rmin)

End Sub

В стандартном модуле написать следующее.

Sub ConcentricCircles(R as Single, Rmin as Single)

If R > Rmin Then

Circle(0, 0), R

R = 0.9 * R

Call ConcentricCircles(R, Rmin) 'Рекурсивный вызов

End If

End Sub

Вопросы к заданию

  1. Разработать интерфейс пользователя. В отчёте привести иллюстрацию интерфейса и описать назначение всех используемых объектов. Добиться работоспособности программы.

  2. Задать случайное изменение цвета каждой рисуемой окружности. В отчёте привести соответствующий фрагмент текста программы.

  3. Увеличить число выводимых окружностей в рекурсивной программе до получения сообщения об ошибке переполнения стека (Out of stack space). В отчёте указать способ увеличения числа окружностей, привести соответствующий фрагмент текста программы и иллюстрацию сообщения об ошибке.

  4. Преобразовать программу, заменив рекурсию на цикл с условием. Привести в отчёте алгоритм цикла.

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