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

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

Содержание


Разветвляющийся алгоритм — алгоритм, содержащий структуру ветвления
Циклический алгоритм — алгоритм, содержащий типовую конструкцию «цикл».
Подобный материал:
1   2   3   4   5   6   7   8   9

Приведем алгоритм решения задачи, представив его в разных формах.

Пример 12.5

Требуется рассчитать необходимое количество рулонов обоев для оклейки комнаты. Заданы параметры комнаты: длина (а), ши­рина (Ъ) и высота (п). Заданы параметры рулона обоев: длина (I), ширина (d). Считаем, что площадь окон и дверей составляет 15 % от площади стен.



Мы используем для представления алгоритма разные формы: словесно-формульное описание, блок-схему, программу.

Словесно-формульное описание ал­горитма «Оклейка обоями» представ­ляется в виде нумерованной последо­вательности действий, понятных чело­веку.

Алгоритм «Оклейка обоями»
  1. Рассчитать периметр комнаты: р=2*(а+Ъ).
  2. Рассчитать площадь стен с учетом дверей и окон: sl=0,85*p*h.
  3. Рассчитать площадь одного рулона обоев: s2=l*d.
  4. Вычислить количество рулонов: k=div(sl/s2)+l, где div — функция определения целой части числа.
  5. Конец алгоритма

Для описания алгоритма той же задачи может быть использована графическая форма представления, например в виде блок-схемы. Блок-схема, в виде блок-схемы. Блок-схема, алгоритма «Оклейка обоями так же как и словесная форма, должна быть понятна человеку, но в то же время в ней должна быть учтена специфика компьютера, которая часто связана с вводом исходных данных и выводом результатов.

Алгоритм «Оклейка обоями» представлен в виде блок-схемы на рисунке 12.4.

Пояснения к блок-схеме:
  • действия, указанные в блоках 1-4, соответствуют действи­ям, указанным в словесном алгоритме в пп. 1-4;
  • дополнительно введены блоки для ввода исходных данных в компьютер и вывода результата вычислений;
  • дополнительно введены блоки начала и конца алгоритма.

Приведем форму представления того же алгоритма «Оклейка обоями» в виде программы на школьном алгоритмическом язы­ке в таблице 12.2.

Таблица 12.2. Алгоритм «Оклейка обоями» в виде программы на школьном алгоритмическом языке

Школьный алгоритмический язык

Пояснения

алг Оклейка обоями

Начало алгоритма

нач вещ a, b, h, 1, d, p,sl,s2, цел k

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

вывод "Введите длину, ширину, высоту комнаты, длину, ширину обоев"

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

ввод a, b, h, 1, d

Ввод информации с клавиатуры

p:=2*(a+b)

Вычисление периметра комнаты

sl:=0.85*p*h

Вычисление площади стен

s2:=l*d

Вычисление площади рулона

k:=div(sl,s2)+l

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

вывод k

KOH

Вывод ответа на экран Конец алгоритма

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

Любой, даже самый сложный алгоритм, можно представить с помощью трех типовых конструкций (структур): последователь­ности, ветвления, цикла. Каждая структура имеет один вход и один выход.

На рисунке 12.5 представлены блок-схемы этих базовых струк­тур, из которых видно, что:
  • в структуре «последовательность» действия выполняются последовательно, сверху вниз, без возвратов (рис. 12.5, о);
  • в структуре «ветвление» выполняется либо одна, либо дру­гая группа действий в зависимости от истинности (выполне­ния) или ложности (невыполнения) условия (рис. 12.5, б);
  • в структуре «цикл» действия повторяются до тех пор, пока выполняется заданное условие (рис. 12.5, в).



Рис. 12.5. Типовые алгоритмические структуры

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

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


12.4. Линейный алгоритм

В основе линейных алгоритмов лежит структура «последователь­ность». Покажем это на примерах.

Пример 12.6

В своей книге «Арифметика» Леонтий Филиппович Магницкий привел следующий способ отгадывания задуманного двузначно­го числа: «Если кто задумает двузначное число, то ты скажи ему, чтобы он увеличил число десятков задуманного числа в 2 раза, к произведению прибавил бы 5 единиц, полученную сумму уве­личил в 5 раз и к новому произведению прибавил сумму 10 еди­ниц и числа единиц задуманного числа, а результат произведен­ных действий сообщил бы тебе. Если ты из указанного тебе ре­зультата вычтешь 35, то узнаешь задуманное число».

Представим предлагаемые Л. Ф. Магницким действия в виде алгоритма в словесной форме. В предлагаемом процессе должны участвовать два человека: загадывающий число и отгадываю­щий его. Поэтому алгоритмов тоже будет два.



Алгоритм для загадывающего число
  1. Задумайте двузначное число.
  2. Умножьте число десятков на 2.
  3. К полученному произведению при­бавьте 5.
  4. Полученную сумму умножьте на 5.
  5. К полученному произведению при­бавьте 10.
  6. К полученной сумме добавьте коли­чество единиц задуманного числа.
  7. Сообщите полученное число отгадывающему.
  8. Конец алгоритма

Алгоритм для отгадывающего число
  1. Отнимите от сообщенного числа 35.
  2. Сообщите результат.
  3. Конец алгоритма

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

Пример 12.7

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

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

п — норма расхода продукта на человека в сутки;

k — количество участников похода;

о — количество дней.

Результат работы алгоритма (рассчитанный вес продукта) бу­дет занесен в переменную т (рисунок 12.6).




Рис. 12.6. Алгоритм решения задачи «Вес продукта» в двух формах представления: в виде блок-схемы и в виде программы на школьном алгоритмическом языке

блока

Программа

1

алг Масса продукта нач цел d, k, m, n

2

вывод "Введите количество человек, дней, норму расхода на человека"

3

ввод k, d, n

4

m:=n*d*k

5

вывод вес продукта , m

Приведенные ранее в п. 12.3 алгоритмы разведения костра, приготовления каши, измерения расстояния до предмета явля­ются линейными или последовательными.

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


12.5. Разветвляющийся алгоритм

Вспомним сюжет из русской сказки. Царевич останавливается у развилки дороги и видит камень с надписью: «Пойдешь напра­во — коня потеряешь, налево — сам пропадешь...»



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

Здесь условиями, позволяющими делать выводы или влияю­щими на принятие решений, являются слова, расположенные между «если» и «то»:
  • в первом примере — красный закат;
  • во втором примере — дым;
  • в третьем примере — окончание работы;
  • в четвертом примере — муравейник.

Условие может принимать значение «истина», когда оно вы­полнено, или «ложь», когда оно не выполнено. От значения ус­ловия зависит наше дальнейшее поведение. Например, в предло­жении «Если закат красный, то жди ветреной погоды» условие «закат красный» может быть или истинным, или ложным. Если условие истинно, то следует ждать ветреной погоды, иначе (если условие ложно) ничего о погоде сказать нельзя.

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

Рассмотрим примеры алгоритмов, содержащих анализ условия.

Пример 12.8

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

Алгоритм проверки можно записать так:

Если гриб съедобный, то положить его в котелок для варки, иначе — выбросить в костер.

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



Рис. 12.7. Алгоритм проверки грибов, в котором использована полная форма ветвления

Пример 12.9

Вы идете в гости и вам необходимо перевязать коробку с подар­ком красивой лентой, длина которой d. Но хватит ли этой ленты?

Представим решение этой задачи на школьном алгоритми/ ческом языке. Исходными данными для решения этой задачи являются размеры коробки и длина ленточки. Примем для них следующие обозначения: а, Ъ, с — соответственно длина, шири­на и высота коробки; d — длина ленточки.

алг Подарок

нач вещ a,b,c,d

вывод "Введите размеры коробки"

ввод а,Ь,с

вывод "Введите размеры ленты"

вводе!

если (a+b+2*c)*2 <= d

то

вывод "Ленты хватит" иначе

вывод "Ленты не хватит"

все

кон

В примерах 12.8 и 12.9 при описании алгоритмов в виде блок-схемы и программы на школьном алгоритмическом языке ис­пользовалась конструкция «ветвление».



Различают полную и неполную форму ветвления.

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

В рассмотренных выше примерах использовалась полная фор­ма ветвления, которой соответствует выражение

если <условие>, то <действие 1>, иначе <действие 2>.

Неполной форме ветвления соответствует выражение

если <условие>, то <действия>.

Неполная форма предполагает отсутствие действий в случае невыполнения условия. Например: среднесуточная температура воздуха ниже +8 °С, приступить к протапливанию помещений.

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



Рис. 12.8. Алгоритм тушения костра, в котором используется неполная форма ветвления

Пример 12.10

Известно, что в аэропорту существуют ограничения на бесплат­ный провоз багажа. Если вес багажа превышает норму, то за каждый килограмм сверх нормы необходимо доплачивать. Ис­ходными данными для решения задачи являются: v — вес бага­жа; vn — разрешенная норма провоза багажа; st — стоимость килограмма сверх нормы. Результат будем записывать в пере­менную s — сумму выплат сверх нормы.

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

алг Доплата за багаж

нач вещ v, vn, st, s

вывод "введите вес багажа, норму, стоимость кг"

ввод v, vn, st

если v>vn

то s:=(v-vn)*st

вывод "Доплата составляет", s

все

кон



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

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

Разветвляющийся алгоритм — алгоритм, содержащий структуру ветвления


12.6. Циклический алгоритм Общее представление

Многие процессы в окружающем мире основаны на многократ­ном повторении одной и той же последовательности действий.



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

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

Циклические алгоритмы могут содержать разные типы цик­лов. Классификация типов циклов представлена на рисунке 12.9 и подробно рассмотрена далее.

Циклический алгоритм — алгоритм, содержащий типовую конструкцию «цикл».

Тело цикла — описание действий, повторяющихся в цикле.



Рис. 12.9. Типы циклов


Цикл с известным числом повторений

Цикл с известным числом повторений часто называют «циклом ДЛЯ». Рассмотрим примеры циклических алгоритмов с извест­ным числом повторений.

Пример 12.11

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

Алгоритм «Упражнение для глаз»
  1. Возьмите карандаш.
  2. Установите его в исходное положение у кончика носа.
  3. Повторите 10 раз, следя за движением карандаша:
  1. Переместите карандаш на расстояние вытянутой руки;
  2. Верните карандаш в исходное положение.
  1. Положите карандаш.
    Конец алгоритма

В этом примере заранее известно число повторений. Цикл за­кончится, когда действия пунктов а и b повторятся 10 раз. Дей­ствия а и Ь, повторяющиеся в цикле, определяют тело цикла.

Пример 12.12

Требуется подвести итоги контрольной работы.

Исходными данными для этой задачи являются: b — балл те­кущего ученика; п — количество учеников. Расчетные данные: s — сумма баллов; sr — средний балл.

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

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

Алгоритм

Пояснения

алг Итоги

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

нач цел i, b, s, n, вещ sr

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

вывод "Введите количество учеников в классе"

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

ввод п

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

s:=0

Начальному значению суммы присваивается 0

нц для i от 1 до п

Начало цикла (повторение действий) для каждого из п учеников

вывод "Введите оценку", i, "ученика"

Тело цикла

Вывод подсказки

ввод b

Ввод оценки каждого ученика

s:=s+b

Добавление балла к текущей сумме

кц

Конец цикла

sr:=s/n

Расчет среднего балла

вывод средняя оценка=", sr

Вывод среднего балла на экран

кон

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

Здесь нц, кц — служебные слова, обозначающие соответст­венно начало и конец цикла.

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

Эти операции составляют тело цикла. Число повторений в цик­ле равно количеству учащихся в классе.