Представление о программе

Вид материалаДокументы

Содержание


Цикл с постусловием
Цикл с предусловием
Подобный материал:
1   2   3   4   5   6   7   8   9

Цикл с постусловием

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

Цикл с неизвестным числом повторений, в котором выход из цикла осуществляется при выполнении условия, принято назы­вать «циклом с постусловием» или «циклом ПРИ».

Рассмотрим алгоритмы решения циклических задач с неиз­вестным числом повторений.

Пример 12.13

После соревнований по бегу рекомендуется измерить пульс. Из­мерение пульса можно описать следующим алгоритмом.

Алгоритм «Пульс»
  1. Удобно положите левую руку ладонью вверх.
  2. Два пальца правой руки положите на запястье левой руки
  3. Заметьте положение секундной стрелки.
  4. Сосчитайте очередной удар.
  5. Посмотрите на часы.
  6. Если секундная стрелка прошла полный круг, то закончит» действия, иначе перейдите к п. 4.
  7. Конец алгоритма

В этом примере действия закончатся, когда секундная стрелка пройдет полный круг, то есть условие «Стрелка прошла полный круг» будет выполнено, в противном случае действия буду продолжаться. На рисунке 12.10 приведена блок-схема этого алгоритма. На блок-схеме видно, что проверка условия стоит в конце цикла.



Рис. 12.10. Блок-схема алгоритма «Пульс»

Пример 12.14

Требуется рассчитать время работы батарейки в часах с кукуш­кой, если известно, что заряда хватает примерно на 1000 зву­ковых сигналов «ку-ку». Однократный звуковой сигнал звучит, когда минутная стрелка показывает 30 минут. Начало каждого часа сопровождается повторением сигнала столько раз, сколько показывает часовая стрелка (от 1 до 12).

Расчетными данными для этой задачи являются:

t — обозначение текущего часа;

к — количество звуковых сигналов.

Алгоритм «Кукушка» представим на школьном алгоритмиче­ском языке в таблице 12.4.

В этом алгоритме повторяются следующие действия:
  • определение значения текущего часа;
  • определение количества звуковых сигналов.

Эти действия составляют тело цикла.

Цикл заканчивается, если количество поданных звуковых сигналов превысило 1000, что является признаком выработки ресурса батарейки.

Таблица 12.4. Алгоритм «Кукушка» на школьном алгоритмическом языке


Алгоритм

Пояснения

алг Кукушка

Заголовок алгоритма

нач цел t, k

Описание типов переменных

t:=0; k:=0

Начальные значения переменных t, k

нц

Начало цикла

t:= t + 1

Тело цикла

Значение текущего часа

к:= к + 1 + mod(t,12)

Общее количество сигналов на текущий час. mod(t,12) — остаток от деления t на 12

кц_при к>=1000

Проверка условия окончания цикла

вывод "Количество часов =", t

Вывод количества часов на экран

КОН

Конец алгоритма

Из рассмотренных примеров 12.13 и 12.14 видно, что цикл с постусловием имеет следующие особенности:
  • проверка условия осуществляется в конце цикла, поэтому тело цикла выполняется хотя бы один раз;
  • цикл заканчивается по выполнению условия.


Цикл с предусловием

Рассмотрим другой тип цикла, в котором проверка условия осу­ществляется в начале цикла. Для организации циклической по­следовательности действий и выхода из нее к другому фрагмен­ту алгоритма используется условие, которое ставится в начале тела цикла. Цикл с неизвестным числом повторений, в котором цикл продолжается, пока выполняется условие, принято назы­вать «циклом с предусловием» или «циклом ПОКА».

Пример 12.15

На даче требуется наполнить бочку водой. Действия по наполне­нию бочки можно описать следующим алгоритмом.




Рис. 12.11. Блок-схема алгоритма «Бочка»


Алгоритм «Бочка»
  1. Подойдите к бочке.
  2. Если бочка неполная (есть место для воды), то перейдите к п. 3, иначе конец алгоритма.
  3. Наберите ведро воды.
  4. Вылейте ведро в бочку.
  5. Перейдите к п. 2.
    Конец алгоритма

На блок-схеме (рис. 12.11) видно, что условие проверки стоит в самом начале цикла.

Такой цикл получил на­звание цикла с предусловием.

Возможна ситуация, что цикл закончится так и не начавшись, например, если бочка наполнилась из-за прошедшего накануне дож­дя. В этом цикле при выпол­нении условия «есть место для воды» действия продол­жаются, при невыполне­нии — заканчиваются.

Пример 12.16

Требуется проверить число на симметричность (примеры сим­метричных чисел: 12321, 8668).

Исходными данными для этой задачи является введенное число п.

Для промежуточных вычислений будут использоваться пере­менные:

s — для записи цифр числа п в обратном порядке;

nl — для дублирования введенного числа п.

В алгоритме используются функции:

mod — вычисление остатка от деления на 10;

div — определение целой части числа.

Решение этой задачи представим в виде программы на школь­ном алгоритмическом языке в таблице 12.5.

Таблица 12.5. Алгоритм «Симметричное число» на школьном алгоритмическом языке


Алгоритм

Пояснения

алг Симметричное число

Заголовок алгоритма

нач цел n, nl, s

Описание типов переменных

вывод "Введите число"

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

ввод п

Ввод проверяемого числа

s:=0: nl:=n

Начальные значения

нц пока п1<>0

Начало цикла

k:= mod(nl,10)

Тело цикла

Получение младшей цифры числа

s:=s*10 + к

Очередной шаг получения цифр числа п в обратном порядке

nl:=div(nl,10)

Уменьшение числа в 10 раз (целочисленное деление)

кц

Конец цикла

если n=s

Проверка симметричности и вывод сообщений на экран

то вывод "Число симметричное"

иначе

вывод "Число несимметричное"

кон

Конец алгоритма

В этом алгоритме в цикле получается перевернутое число, ко­торое затем сравнивается с введенным. Если они равны, то вве­денное число симметрично. Цикл выполняется до тех пор, пока nl при целочисленном делении на 10 не превратится в 0. Если введенное число равно 0, то цикл не выполнится ни разу, но бу­дет выдан ответ «Число симметричное».

Из рассмотренных примеров 12.15 и 12.16 видно, что цикл с предусловием имеет следующие особенности.
  • проверка условия осуществляется в начале цикла, поэтому тело цикла может не выполниться ни одного раза;
  • цикл заканчивается при невыполнении условия;
  • цикл является универсальным, так как с помощью этого цикла можно решить любую циклическую задачу.


12.7. Вспомогательный алгоритм

Вспомните рассмотренный ранее алгоритм «Приготовление греч­невой каши». Он начинался с пункта «Обратитесь к алгоритму „Разжигание костра"».

Процесс разведения костра был описан заранее и явился вспо­могательным алгоритмом в данной задаче. При обращении к это­му алгоритму достаточно было указать его название — имя. Этот вспомогательный алгоритм может быть использован и в других алгоритмах, например в алгоритмах «Сушка одежды», «Запека­ние картошки» и др.

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

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

Алгоритм, из которого производится вызов вспомогательного алгоритма, получил название основного алгоритма.

Например, для набора текста песни, содержащей три купле-с припевом, можно воспользоваться основным алгоритмом п< названием «Набор текста песни».

Алгоритм «Набор текста песни»
  1. Набрать название песни.
  2. Набрать первый куплет.
  3. Набрать припев.
  4. Набрать второй куплет.
  5. Скопировать припев.
  6. Набрать третий куплет.
  7. Скопировать припев.
  8. Конец алгоритма

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

Здесь слово скопировать является именем алгоритма, определенного ранее, то есть вспомогательного алгоритма. Слово: «припев» обозначает конкретный объект, над которым нужно произвести действие копирования.

Рассмотрим, что представляет собой алгоритм копирования который является вспомогательным по отношению к ochobhoi алгоритму «Набор текста песни». Назовем такой вспомогательный алгоритм «Скопировать (объект копирования)».

Алгоритм «Скопировать (объект копирования)»
  1. Выделить объект.
  2. Выбрать команду Правка/Копировать.
  3. Указать щелчком мыши место вставки.
  4. Выбрать команду Правка/Вставить.
  5. Конец алгоритма

При записи данного вспомогательного алгоритма мы указа, его имя и в скобках — название параметра, с которым алгоритм работает. В данном случае параметр один — объект копирования. У параметра «объект копирования» могут быть разные значения. При наборе песни в качестве объекта копирования будет использоваться припев. При рисовании в качестве объекта копи­рования будет использоваться заранее созданный графический элемент. При создании формулы в качестве объекта копирования может использоваться, например, функция или ранее созданное простое математическое выражение.

После выполнения вспомогательного алгоритма вы возвраща­етесь в основной алгоритм для его продолжения.

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

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

На рисунке 12.12 приведен пример создания сложной графи­ческой композиции на одном из языков программирования. Программирование ведется от простого к сложному. Предвари­тельно разрабатываются вспомогательные алгоритмы, позво­ляющие нарисовать: а) дугу, б) лепесток, в) группу лепестков. Каждый из этих вспомогательных алгоритмов содержит два па­раметра, указывающие радиус и направление рисования (по ча­совой или против часовой стрелки):
  • алгоритм Дуга (радиус, направление);
  • алгоритм Лепесток (радиус, направление);
  • алгоритм Группа (радиус, направление).

Алгоритм Дуга используется в качестве вспомогательного для рисования лепестка. Алгоритм Лепесток используется в каче­стве вспомогательного для рисования группы лепестков. Алго­ритм Группа используется в качестве вспомогательного в основ­ном алгоритме для рисования цветка. В результате сложный алгоритм рисования цветка был составлен из простых цикличе­ских алгоритмов рисования его элементов.



Рис. 12.12. Этапы создания сложной графической композиции

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


12.8. Стадии создания алгоритма

Человек легко читает и печатный, и рукописный текст. Однако написать алгоритм этого процесса так, чтобы он стал понятен компьютеру, — чрезвычайно непростая задача. В настоящее вре­мя уже разработан алгоритм распознавания компьютером печат­ного текста. А вот создать алгоритм, в соответствии с которым компьютер мог бы прочесть (распознать) рукописный текст, пока не удается. Компьютер воспринимает такой текст как картинку.



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

Существует определенный алгоритм поведения водителей ав­томашин на дороге. Этот алгоритм определяется правилами до­рожного движения, которые должен знать каждый водитель. Кроме того, шоферы особыми знаками предупреждают друг дру­га об опасности на дороге или подают сигналы помощи.

Те же самые люди в другой обстановке будут общаться между собой совершенно по-иному, в соответствии с принятыми для этой обстановки правилами поведения.

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

Разрабатывая алгоритм, вы всегда будете проходить минимум две стадии — сначала алгоритм должен быть понятен тому, кто его разрабатывает, а затем его следует преобразовать с учетом специфики среды.

Таким образом, в общем случае алгоритм претерпевает изме­нения по стадиям:
  • первая стадия — алгоритм должен быть представлен в фор­ме, понятной человеку, который его разрабатывает;
  • вторая стадия — алгоритм должен быть представлен в фор­ме, понятной тому объекту (в том числе и человеку), ко­торый будет выполнять описанные в алгоритме действия. В том случае, если эти действия станет выполнять сам разра­ботчик алгоритма, вторая стадия будет отсутствовать.



Поясним стадии создания алгоритма на примере. Предполо­жим, вы с другом хотите в жаркий летний день покататься на велосипедах. Вы должны продумать план подготовки и осущест­вления задуманного путешествия, то есть его алгоритм:
  1. Достать карту местности.
  2. Оговорить продолжительность путешествия.
  3. Проложить предстоящий маршрут.

Это первая стадия разработки алгоритма. На этом этапе вы обдумываете план и намечаете для себя промежуточные цели.

В дальнейшем, исследуя карту, вы обнаруживаете, что наибо­лее привлекательным местом является берег речки, расположен­ный довольно далеко. Ваша цель меняется. Теперь вы мечтаете совершить путешествие именно к этому месту. Поэтому вы вы­нуждены откорректировать намеченный план действий:
  1. Подготовить перечень необходимых продуктов, которые вы возьмете с собой.
  2. Подготовить велосипед к длительному пути — смазать мас­лом, накачать шины и т. д.
  3. Собрать необходимые вещи — купальные принадлежности, удочку и т. д.

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

Это вторая стадия разработки алгоритма, когда необходимо ориентироваться на тот объект, который будет этот алгоритм ис­полнять. На этом этапе выбираются среда и инструменты — объ­екты, которые могут осуществить ваш план.

Кто-то обратится к взрослым, которые все сделают за него, другой сам будет готовить велосипед и покупать продукты. Ре­зультаты при этом могут оказаться разными.




Если вы решите обратиться за помощью к взрослым, то долж­ны уметь договариваться с ними и представлять их возможности. А если захотите подготовиться к походу самостоятельно, вам понадобится умение обслуживать и чинить велосипед.

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

Рассмотрим другой пример. Вы хотите поздравить друзей с Но­вым годом. Для этого вы наметили подготовить красочные от­крытки. На первой стадии вы разрабатываете алгоритм для себя:
  1. Придумать сюжет.
  2. Нарисовать картинку по сюжету.
  3. Написать стихи по сюжету.
  4. Подготовить открытки с адресами.
  5. На каждую открытку поместить рисунок и текст.



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

Вы также можете найти человека, который способен помочь вам. Тогда необходимо объяснить помощнику, что надо делать. Таким образом, вы проходите вторую стадию разработки алго­ритма, когда он должен быть переориентирован на другого чело­века. Если вам помогает специалист по изготовлению открыток, владеющий компьютерной технологией, то достаточно перечис­лить, кому и какие открытки надо сделать, и алгоритм окажет­ся достаточно простым. Если вы имеете дело с новичком, то вам придется достаточно подробно описать алгоритм его действий по созданию поздравительных открыток.

Запомните правила разработки любого алгоритма.