Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическая работа №8,9.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
366.63 Кб
Скачать

Жизнь без goto

Задача исключения, рассматриваемая в приложении, — это не та задача, которую придется решать в повседневной жизни. Нет необходимости писать программу с goto, а потом последовательно исключать этот оператор из программы. Следует ясным способом строить нашу программу, непосредственно применяя высокоуровневые структуры управления, которые доказали свою адекватность при построении алгоритмов, простых и сложных.

Наша вторая структура управления — цикл — отражает одно из самых замечательных свойств компьютеров: их способность повторять операцию или варианты этой операции много раз, по человеческим меркам —очень много раз.

Типичным примером цикла является схема анимации, подсвечивающая линию метро и отображающая красную точку на каждой станции поочередно через каждые полсекунды. Система Show_line в поставке Trafficреализует этот сценарий. Вы можете выполнить ее, если желаете. Эффект выполнения одного из промежуточных шагов показан на рисунке:

увеличить изображение Рис. 7.4. Подсветка станции

Этот эффект достигается благодаря циклу. Он использует show_spot (p) для отображения красной точки в точке p на экране через каждые полсекунды (значение, предопределенное для Spot_time). Для понимания деталей нам необходимы концепции, которые предстоит еще ввести по ходу обсуждения, так что пока просто посмотрите, как выглядит цикл.

Рис. 7.5. Тело цикла

Цикл передвигает курсор (виртуальный маркер) к началу линии (start); затем, пока курсор не достиг последней позиции (is_after), он выполняет для каждой станции (item) следующие действия: отображает красное пятно в точке расположения станции — location, и передвигает курсор командой forth к следующей станции.

Каждое такое выполнение тела цикла называется итерацией цикла.

Рассмотрим ключевые составляющие циклаинициализация (from), условие выхода (until) и повторно выполняемые действия (loop). Для получения полного понимания работы цикла следует предварительно проанализировать лежащие в его основе концепции.

Анимация

Поместите приведенный цикл в метод класса (пример класса для этой лекции). Для этого примера и последующих вариаций обновите класс и запустите систему, чтобы увидеть результаты выполнения.

Цикл как аппроксимация

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

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

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

  1. Положить max равным  . После этого справедливо, что max является максимумом множества, состоящего ровно из одного значения,  .

  2. Затем для каждого последовательного i = 2, 3,..., n выполнять следующее: если   больше чем текущее значении max, переопределить max, сделав его равным  .

Из этого следует, что на i-м шаге (где первый шаг соответствует случаю I1, а последующие шаги — случаю I2 для i = 2, i = 3 и т.д.) действует следующее свойство, называемое инвариантом цикла.