Вы находитесь на странице: 1из 40

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ЮЖНО-РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ


(НОВОЧЕРКАССКИЙ ПОЛИТЕХНИЧЕСКИЙ ИНСТИТУТ)

И .В . Шкуро пад ский

Алгоритмизация
и программирование

Г ла ва 2 – Час т ь 1
(версия от 05.09.2011)

Учебно-методическое пособие
по курсу «Информатика»

Новочеркасск
ЮРГТУ (НПИ)
2011
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 2

Содержание

Глава 2. Алгоритмизация .............................................................. 3


2.1. Алгоритмы ........................................................................... 3
2.1.1. Общие понятия об алгоритмах ................................... 3
2.1.2. Проверка правильности алгоритма............................ 4
Формальные признаки алгоритма .................................... 4
Тестирование алгоритма ................................................... 5
Пример ................................................................................ 5
2.2. Способы описания алгоритмов. ........................................ 7
2.2.1. Словесно-формульное описание ................................ 7
2.2.2. Схемы алгоритмов (блок-схемы) ............................... 9
2.2.3. Использование языка программирования............... 11
2.3. Описание алгоритмов с помощью блок-схем. .............. 13
2.3.1. Общие правила построения блок-схем.................... 13
2.3.2. Элементы блок-схем.................................................. 16
2.4. Основные алгоритмические структуры.......................... 19
2.4.1. Виды алгоритмических структур ............................. 19
2.4.2. Линейная структура ................................................... 20
Примеры............................................................................ 20
2.4.3. Разветвляющаяся структура ..................................... 24
Полная форма ветвления................................................. 24
Неполная форма ветвления............................................. 26
Примеры............................................................................ 27
2.4.4. Циклическая структура ............................................. 32
Цикл с предусловием....................................................... 34
Цикл с постусловием ....................................................... 34
Цикл со счётчиком ........................................................... 35
Примеры............................................................................ 37
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 3

Глава 2. Алгоритмизация
2.1. Алгоритмы
2.1.1. Общие понятия об алгоритмах
Алгоритм – это точный набор инструкций, описывающих по-
рядок действий некоторого исполнителя для достижения необхо-
димого результата (решения некоторой задачи) за конечное время.
http://ru.wikipedia.org/wiki/Алгоритм
В общем случае исполнителем алгоритма может быть меха-
низм (машина, устройство) или человек. В контексте изучения про-
граммирования в качестве исполнителя алгоритма выступает ком-
пьютер, поэтому при решении задач будут использоваться следую-
щие ключевые понятия информатики.
1. Ввод исходных данных для решения задачи (с клавиатуры
или с помощью других устройств ввода, из файла, посред-
ством передачи данных по сети).
2. Вывод результатов решения задачи (вывод на экран, прин-
тер или в файл, передача данных по сети и т.д.).
3. Хранение данных в памяти (исходных данных – после вво-
да, результатов решения задачи – до вывода).
4. Анализ и обработка данных, необходимых для решения за-
дачи (в том числе – выполнение вычислений, получение но-
вых данных на основе имеющихся).
Под данными, используемыми в работе алгоритма, в общем
случае подразумеваются:
− исходные данные для решения задачи;
− результаты решения задачи (промежуточные или оконча-
тельные).
Таким образом, для составления алгоритма решения задачи
необходимо:
1. Выделить исходные данные.
2. Определить, что должно являться результатом.
3. Описать действия, приводящие к получению результата.
В зависимости от постановки задачи и исходные данные, и ре-
зультаты могут иметь разную форму, объём и содержание, хра-
ниться и передаваться разными способами. Часто результаты реше-
ния одной задачи являются исходными данными для решения дру-
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 4
гой задачи. Поэтому при разработке алгоритмов необходимо обра-
щать внимание не только на смысловое значение данных, но и на
форму их представления при вводе или выводе.

2.1.2. Проверка правильности алгоритма


Проверку правильности алгоритма следует проводить с двух
сторон:
1) проверкой наличия у алгоритма необходимых формальных
признаков;
2) тестированием – проверкой работы алгоритма на заранее
подготовленном множестве контрольных примеров.
Формальные признаки алгоритма
Для того чтобы алгоритм был пригоден для решения некото-
рой задачи необходимо (но не достаточно!), чтобы он отвечал оп-
ределённым требованиям. Формальными признаками алгоритма
являются:
1. Дискретность. Алгоритм должен представлять процесс
решения задачи как последовательное выполнение некото-
рых простых шагов. При этом для выполнения каждого ша-
га алгоритма требуется конечный отрезок времени, то есть
преобразование исходных данных в результат осуществля-
ется во времени дискретно.
2. Детерминированность (определённость). В каждый мо-
мент времени следующий шаг работы однозначно опреде-
ляется состоянием системы. Таким образом, алгоритм вы-
даёт один и тот же результат (ответ) для одних и тех же ис-
ходных данных.
3. Понятность. Алгоритм для исполнителя должен включать
только те команды, которые ему (исполнителю) доступны,
которые входят в его систему команд.
4. Завершаемость (конечность). При корректно заданных ис-
ходных данных алгоритм должен завершать работу и выда-
вать результат за конечное (хотя и не обязательно заранее
известное) число шагов.
5. Массовость (универсальность). Алгоритм должен быть
применим к разным наборам исходных данных. Алгоритм
разрабатывается, как правило, для решения не одной кон-
кретной задачи, а для решения целого класса задач.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011)5
6. Результативность. Выполнение алгоритма должно завер-
шаться получением определённых результатов.
Тестирование алгоритма
Рассмотренные признаки являются необходимыми, но не дос-
таточными для того, чтобы рассматривать алгоритм в качестве пра-
вильного, т.е. приводящего к получению правильного результата
решения задачи. Поэтому алгоритм, имеющий данные признаки,
необходимо всегда проверять на наличие и правильность получае-
мых результатов.
Для оценки правильности алгоритма следует руководство-
ваться следующими признаками.
1. Алгоритм содержит ошибки, если приводит к получению
неправильных результатов, либо не даёт результатов вовсе.
2. Алгоритм не содержит ошибок, если он даёт правильные
результаты для любых допустимых исходных данных.
Стандартным способом проверки правильности работы алго-
ритма является тестирование – выполнение алгоритма при опре-
делённых исходных данных с заранее известным результатом ре-
шения задачи.
Исполнителем алгоритма на этапе тестирования может быть
как человек (если алгоритм еще не реализован в виде компьютер-
ной программы), так и компьютер (если алгоритм уже реализован
на каком-либо языке программирования). Необходимо, однако,
иметь в виду, что в последнем случае на правильность работы про-
граммы могут влиять ошибки, допущенные при «переводе» изна-
чально правильного алгоритма на язык программирования.
Пример
В качестве примера проверки правильности алгоритма рас-
смотрим задачу решения квадратного уравнения ax 2 + bx + x = 0 .
Исходными данными для решения задачи являются коэффици-
енты квадратного уравнения a , b , c .
Результатами решения квадратного уравнения в разных слу-
чаях (в зависимости от исходных данных) могут являться:
1) пара чисел – корни уравнения x1 и x2 ;
2) одно число – корень уравнения x ;
3) сообщение об отсутствии действительных корней.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 6
Сформулируем требования, которым должен отвечать пра-
вильный алгоритм решения данной задачи. Сначала рассмотрим
необходимые формальные признаки алгоритма.
1. Дискретность. алгоритм должен быть записан таким обра-
зом, чтобы в нём можно было выделить отдельные шаги,
представляющие собой законченные действия. Шаг алго-
ритма не может определять незаконченное действие или
часть действия.
2. Детерминированность. последовательность действий, необ-
ходимых для решения квадратного уравнения, может зави-
сеть только от исходных данных. При одних и тех же коэф-
фициентах уравнения согласно алгоритму должны нахо-
диться одни и те же значения корней (или определяться от-
сутствие у уравнения действительных корней).
3. Понятность. Если алгоритм предназначен для исполнения
человеком, то он может использовать стандартные обозна-
чения математических операций (возведение в степень, из-
влечение корня и т.д.), при этом исполнитель (человек)
должен понимать смысл этих обозначений. Если же алго-
ритм составляется в форме программы, то необходимо учи-
тывать особенности выбранного языка программирования,
наличие в нём необходимой математической поддержки.
4. Завершаемость. Решение квадратного уравнения при любых
исходных данных – это конечный процесс с соответствую-
щим количеством шагов. На любом этапе решения задачи
алгоритм не должен выполняться неопределённо долго.
5. Массовость. Один и тот же алгоритм должен быть пригоден
для решения любых квадратных уравнений. Алгоритм мо-
жет использоваться при любых исходных данных, когда ко-
эффициент a не равен нулю.
6. Результативность. По окончании выполнения алгоритма
пользователю должен быть выведен результат решения за-
дачи в одной из трёх возможных форм. Никакие другие ре-
зультаты или полно отсутствие результатов не допускается.
Если алгоритм не содержит грубых ошибок, приводящих к на-
рушению данных требований, то далее следует протестировать
алгоритм. Для тестирования работы алгоритма необходимо подго-
товить контрольные примеры: совокупность исходных данных и
заранее известных правильных результатов. При этом набор кон-
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 7
трольных примеров должен покрывать все возможные варианты
решений. Так для решения квадратного уравнения необходимо
иметь как минимум три контрольных примера.
Для тестирования алгоритма решения квадратного уравнения
необходимо иметь следующие контрольные примеры:
3) для случая двух разных корней – уравнение с коэффициен-
тами a = 1 , b = −3 , c = 2 должно иметь два различных кор-
ня: x1 = 1 и x2 = 2 ;
4) для случая одного корня – уравнение с коэффициентами
a = 1 , b = −4 , c = 4 должно иметь только один корень x = 2 ;
5) для случая отсутствия действительных корней – уравнение
с коэффициентами a = 1 , b = −2 , c = 5 не должно иметь
корней.
Если для всех контрольных примеров фактические результаты
решения квадратных уравнений совпадают с результатами из кон-
трольных примеров, то можно сделать вывод, что алгоритм выпол-
няется правильно.
Необходимо иметь в виду, что если набор контрольных при-
меров не полный, то имеется значительная вероятность необнару-
жения в алгоритме возможной ошибки. Поэтому анализу постанов-
ки задачи и подбору контрольных примеров нужно всегда уделять
большое внимание.

2.2. Способы описания алгоритмов.


Для описания алгоритмов могут использоваться разные спо-
собы. Каждый из способов имеет как преимущества, так и недос-
татки. Выбор конкретного способа определяется спецификой зада-
чи, возможностями исполнителя, другими требованиями.

2.2.1. Словесно-формульное описание


Словесно-формульное описание на естественном языке – это
самый простой и малоформализованный способ описания алгорит-
ма. На форму описания не накладывается никаких особых требова-
ний. В качестве языка может использоваться любой удобный для
восприятия исполнителем язык: русский, английский и т.д. В мате-
матических формулах используется система общепринятых обо-
значений.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011)
8
Приведем два примера словесно-формульного описания алго-
ритма решения линейного уравнения kx + b = 0 .

Пример 1. Без проверки на корректность исходных данных.


Шаг № 1. Задаются (вводятся) исходные данные: k и b .
Шаг № 2. Значение корня уравнения x вычисляется по формуле
x = −b k
Шаг № 3. Результат решения задачи (выводится): x.
Шаг № 4. Завершение работы алгоритма.

Пример 2. С проверкой на корректность исходных данных.


Шаг № 1. Задаются исходные данные: k и b .
Шаг № 2. Выполняется проверка корректности исходных данных:
если k = 0 , то выполняется шаг № 3.1, иначе
выполняется шаг № 3.2.
Шаг № 3.1. Исходные данные некорректны. Переход на шаг № 4.
Шаг № 3.2. Исходные данные корректны.
Шаг № 3.2.1. Значение корня уравнения x вычисляется
по формуле x = − b k
Шаг № 3.2.2. Результат решения задачи: x .
Шаг № 3.2.3. Переход на шаг № 4.
Шаг № 4. Завершение работы алгоритма.

Из данных примеров видно, что одним из недостатков рас-


сматриваемого способа описания алгоритма является сложность его
правильного восприятия исполнителем, если, например, выполняе-
мые действия зависят от исходных данных.
Из-за относительно мягких требований словесно-формульное
описание алгоритма чаще всего используется тогда, когда в качест-
ве исполнителя выступает человек. Степень подробности описания
алгоритма и выбор используемых математических обозначений
часто зависят от характеристики исполнителя: его квалификации,
знаний, опыта.
Словесно-формульное описание алгоритма на естественном
языке на практике применяется редко, в основном в тех случаях,
когда алгоритм достаточно простой, его не требуется реализовы-
вать в виде компьютерной программы или когда квалификация ис-
полнителя недостаточно высока для использования других спосо-
бов.
В данном пособии рассмотренный способ словесно-
формульного описания алгоритмов далее использоваться не будет.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 9
2.2.2. Схемы алгоритмов (блок-схемы)
Наряду с описанием алгоритма в виде текста (на естественном
языке или на языке программирования) широко применяется гра-
фическое описание алгоритмов в виде схем, состоящих из связан-
ных между собой элементов.
В качестве примера графического описания алгоритмов на
рис. 2.1 приведены две схемы алгоритмов решения линейного
уравнения: без проверки исходных данных на корректность
(рис. 2.1, a ) и с проверкой (рис. 2.1, b ). Схемы алгоритмов соответ-
ствуют словесно-формульным описаниям алгоритмов из предыду-
щего раздела.

k,b k,b

b
x := − k =0
k

b
x := −
x k

a) b)
Рис. 2.1. Схемы алгоритмов решения линейного уравнения
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 10
Схема алгоритма – графическое представление метода реше-
ния задачи, в котором для отображения выполняемых операций ис-
пользуются определённые символы.
Для того чтобы унифицировать графическое представление
алгоритмов в виде схем и сделать его понятным для всех участни-
ков процесса разработки алгоритмов и программного обеспечения
существуют определённые стандарты.
Одним из таких стандартов, определяющих правила построе-
ния схем алгоритмов, является «ГОСТ 19.701-90 – Единая система
программной документации. Схемы алгоритмов, программ, данных
и систем. Обозначения условные и правила выполнения».
http://cert.obninsk.ru/gost/282/282.html
http://libt.ru/gost/download/gost-19.701-90.html
В учебной и научной литературе могут встречаться обозначе-
ния и термины, определяемые предыдущими версиями стандарта:
ГОСТ 19.002-80, ГОСТ 19.003-80.
http://fmi.asf.ru/library/book/Gost/19-002-80-82.html
http://fmi.asf.ru/library/book/Gost/19003-80-82.html
Для обозначения графических схем, описывающих алгоритмы,
исторически сформировалось и стало повсеместно использоваться
понятие «блок-схема». Так, например, в Wikipedia имеется следую-
щее определение блок-схемы.
Блок-схема – один из распространенных типов схем, описы-
вающих алгоритмы или процессы, в которых отдельные шаги изо-
бражаются в виде элементов (блоков) различной формы, соединен-
ных между собой линиями потока.
http://ru.wikipedia.org/wiki/Блок-схема
Однако необходимо отметить, что в указанных государствен-
ных стандартах для обозначения схем алгоритмов такое понятие не
определено. Строго говоря, в качестве обозначения схемы алгорит-
ма данный термин является неправильным, однако в силу его
большой распространённости будем далее понимать под «блок-
схемой» именно схему алгоритма.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 11
2.2.3. Использование языка программирования
Весьма часто алгоритмы описываются программой на некото-
ром языке программирования, который позволяет реализовать
стандартные алгоритмические структуры, работать с данными, вы-
полнять необходимые вычисления.
В качестве вводного примера рассмотрим описание на языке
программирования Паскаль уже знакомых по предыдущим разде-
лам алгоритмов решения линейного уравнения. Программы соот-
ветствуют схемам алгоритмов и словесно-формульным описаниям
алгоритмов из предыдущих разделов.

Пример 1. Без проверки на корректность исходных данных.


program LinearEquation1;
var
K, B : Real; // исходные данные
X : Real; // результат (корень уравнения)
begin
WriteLn('Введите исходные данные (K, B):');
ReadLn(K, B);
X := - B / K;
WriteLn('X = ', X);
Readln
end.

Пример 2. С проверкой на корректность исходных данных.


program LinearEquation2;
var
K, B : Real; // исходные данные
X : Real; // результат (корень уравнения)
begin
WriteLn('Введите исходные данные (K, B):');
ReadLn(K, B);
if K = 0 then
WriteLn('Введены некорректные данные!')
else
begin
X := - B / K;
WriteLn('X = ', X)
end;
Readln
end.

Как правило, алгоритм описывают сразу на том языке, на ко-


тором должна быть написана программа. Таким образом, при ре-
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 12
шении задачи на ЭВМ этап алгоритмизации приближается к этапу
программирования или полностью с ним совмещается. В некото-
рых случаях, однако, для описания алгоритма используется так на-
зываемый псевдокод.
Псевдокод – компактный (зачастую неформальный) язык
описания алгоритмов, использующий ключевые слова императив-
ных языков программирования, но опускающий несущественные
подробности и специфический синтаксис.
Главная цель использования псевдокода – обеспечить пони-
мание алгоритма человеком, сделать описание более воспринимае-
мым, чем исходный код на языке программирования. Псевдокод
обычно опускает детали, несущественные для понимания алгорит-
ма человеком. Он занимает промежуточное положение между сло-
весно-формульным описанием на естественном языке и описанием
алгоритма программой на языке программирования. Псевдокод
широко используется в учебниках и научно-технических публика-
циях, а также на начальных стадиях разработки компьютерных
программ.
Преимуществом использования реального языка программи-
рования или псевдокода по сравнению с построением блок-схем
является непосредственная близость описания алгоритма к конеч-
ному результату разработки: программе для компьютера. Кроме то-
го, размер текста программы как правило намного меньше размера
соответствующей блок-схемы, а зрительное восприятие программы
на знакомом языке программирования для квалифицированного
программиста не вызывает затруднений (при условии соблюдения
стандартов форматирования текста программы).
Тем не менее, графическое описание алгоритмов с помощью
блок-схем является более наглядным, чем на каком-либо языке
программирования. В блок-схеме передача управления от одного
действия к другому выражена явно с помощью линий потока, в то
время как в программе порядок выполнения действий определяют-
ся на основе синтаксического анализа текста.
Необходимо отметить, что ошибки и погрешности в формати-
ровании текста программ, которые часто приводят к неправильно-
му восприятию алгоритма, обнаружить сложнее, чем ошибку в
структуре блок-схемы. В следующих главах при изучении языка
программирования Паскаль таким примерам будет уделено особое
внимание.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011)13
В силу вышеизложенного при обучении программированию
часто совмещают оба способа: основы алгоритмизации изучают с
использованием блок-схем, а более сложные алгоритмы рассматри-
вают в виде программ на реальном языке программирования или на
псевдокоде.

2.3. Описание алгоритмов


с помощью блок-схем.
2.3.1. Общие правила построения блок-схем
Как уже было видно из вводных примеров схем алгоритмов
решения линейного уравнения, приведённых на рис. 2.1, блок-
схемы состоят из отдельных элементов, которые выполняют опре-
делённые функции в целях решения общей задачи.
Графическое представление (обозначение) элемента и порядок
его использования в блок-схеме зависит от того, какого рода функ-
цию он должен выполнять (например: ввод или вывод данных, вы-
числение значения, определение дальнейшего направления выпол-
нения алгоритма, организацию выполнения повторяющихся дейст-
вий и т.д.).
Геометрические размеры элементов регламентируются ГОСТ.
Большинство элементов должны иметь соотношение длины к высо-
те равное 1,5a : a , где размер a выбирается кратным пяти милли-
метрам (рис. 2.2).

1,5 a

Рис. 2.2. Соотношение геометрических размеров элементов блок-схем

Порядок выполнения действий в алгоритме, описывающегося


блок-схемой, определяется тем, как элементы схемы соединены ли-
ниями потока. У любого элемента блок-схемы есть определённое
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 14
количество входящих и исходящих линий потока (рис. 2.2). Одна и
та же линия потока может быть исходящей для одного элемента
блок-схемы (выполняющегося ранее) и входящей для другого эле-
мента (выполняющегося следом за первым элементом).
В случае если элементы блок-схемы выполняются последова-
тельно друг за другом, алгоритм имеет линейную структуру. Для
линейной структуры характерным является наличие только одного
неделимого потока, однозначно определяющего порядок выполне-
ния всего алгоритма независимо от исходных данных (рис. 2.3, a ).

1 0

a) b) c)
Рис. 2.3. Схемы алгоритмов с линейной ( a ), разветвляющейся ( b ) и
циклической ( c ) структурой

В зависимости от условия задачи в блок-схеме линии потока


могут делиться и объединяться, формируя разветвляющиеся струк-
туры (рис. 2.3, b ), или образовывать закольцованные участки, об-
разуя циклические структуры (рис. 2.3, c ). Порядок выполнения
действий в разветвляющихся и циклических структурах может за-
висеть от исходных данных.
Независимо от условия задачи и наличия в алгоритме разветв-
ляющихся и циклических структур, блок-схема имеет только один
элемент, указывающий начало («пуск») алгоритма, и только один
элемент, указывающий конец («останов») алгоритма (рис. 2.4).
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 15

Начало

Конец

Рис. 2.4. Элементы блок-схемы, определяющие начало и конец алгоритма

При решении сложных задач часто возникает необходимость


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

Начало 1 2 3

1 0

1 2 3 Конец

Рис. 2.5. Расположение частей одной блок-схемы на разных страницах

В случае необходимости в блок-схему могут быть добавлены


комментарии, которые, например, поясняют смысл выполняемых
действий (рис. 2.6). В качестве комментария может выступать лю-
бой текст, формулы и т.д.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 16

Начало

Ввод
k,b исходных
данных

b Нахождение
x := − значения
k корня

Вывод
x результата

Конец

Рис. 2.6. Пример комментирования алгоритма

2.3.2. Элементы блок-схем


Основная информация об элементах блок-схем (название,
графическое обозначение элементов и выполняемые ими функции)
приведена в таблице 2.1.

Таблица 2.1. Обозначения и функции элементов блок-схем



Название Обозначение Функция
п/п

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


(«Пуск») Начало
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 17

Название Обозначение Функция
п/п
2. Конец Конец алгоритма.
(«Оста-
нов») Конец

3. Процесс Выполнение операций,


в результате которых
изменяются значения
некоторых данных.

4. Предопре- Использование ранее


делённый созданных и отдельно
процесс описанных алгоритмов.

5. Ввод Ввод данных


(«Ввод- (например, исходных
вывод») данных для решения
задачи).

6. Вывод Вывод данных


(«Доку- (например, промежу-
мент») точных или оконча-
R=a тельных результатов
решения задачи).

R=a
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 18

Название Обозначение Функция
п/п
7. Решение Выбор направления
выполнения алгоритма
в зависимости от ис-
1 0
Условие тинности некоторого
условия («1» указывает
на направление выпол-
нения алгоритма, если
«Условие» истинно,
«0» – если «Условие»
ложно).
0
Условие

8. Модифика- Выполнение операций,


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

9. Соедини- Указание связи между


тель прерванными линиями
потока (элементы с
одинаковым числом
внутри соединяют две
отдельные части блок-
схемы).

10. Коммента- Связь между элемен-


рий том схемы и пояснени-
Текст ем (прерывистая линия
комментария указывает на элемент
схемы, к которому от-
носится комментарий).
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 19

2.4. Основные алгоритмические структуры


2.4.1. Виды алгоритмических структур
Основные алгоритмические структуры – это типовые конст-
рукции, используя которые можно составить алгоритм решения
любой задачи. Использование основных алгоритмических структур
является одной из отличительных особенностей структурного про-
граммирования.
Структурное программирование – методология разработки
программного обеспечения, предложенная в 70-х годах XX века Э.
Дейкстрой и разработанная и дополненная Н. Виртом.
http://ru.wikipedia.org/wiki/Структурное_программирование
В соответствии с данной методологией любая программа (ал-
горитм) представляет собой структуру, построенную из трёх видов
базовых конструкций:
1. последовательное (линейное) исполнение – однократное
выполнение операций в том порядке, в котором они записа-
ны в тексте программы (в схеме алгоритма);
2. ветвление – однократное выполнение одной из двух или
более операций, в зависимости от выполнения некоторого
заданного условия;
3. цикл – многократное исполнение одной и той же операции
до тех пор, пока выполняется некоторое заданное условие
(условие продолжения работы цикла).
Базовые конструкции могут быть вложены друг в друга про-
извольным образом, но никаких других средств управления после-
довательностью выполнения операций не предусматривается.
Рассмотрим основные алгоритмические структуры, которые
используются при разработке алгоритмов и программ в соответст-
вии с методологией структурного программирования. Такими
структурами являются:
1. линейная;
2. разветвляющаяся (полная и неполная (усечённая) формы
ветвления);
3. циклическая (циклы с предусловием, с постусловием, с мо-
дификацией).
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 20
2.4.2. Линейная структура
Линейная алгоритмическая структура применяется для реше-
ния задач с одним и тем же набором инструкций, порядок выпол-
нения которых не зависит от исходных данных.
Типичным случаем использования алгоритма с линейной
структурой является вычисление некоторого значения по заданной
формуле, причём вид формулы не зависит от исходных данных
(всегда используется одна и та же формула), а вычисление не пред-
полагает выполнение большого количества одинаковых повторяю-
щихся действий (например, нахождение сумм и произведений, пе-
ребор большого количества значений и т.д.). В таких случаях алго-
ритм состоит из трёх основных частей:
1. ввод исходных данных;
2. вычисление значений выражений;
3. вывод результатов решения задачи.
Примеры
Пример 1. К алгоритмам с линейной структурой относится,
например, алгоритм решения линейного уравнения, схема которого
приведена на рис. 2.6.
Пример 2. В качестве другого примера алгоритма с линейной
структурой рассмотрим решения задачи нахождения площади круга
и длины окружности с заданным радиусом (рис. 2.7).
Обратите внимание, что в элементах «Процесс» записана так
называемая инструкция присваивания, обозначаемая символом
« := ». В правой части инструкции находится выражение, значение
которого вычисляется при выполнении данного элемента схемы. В
левой части указывается величина (переменная), которая принима-
ет значение вычисленного выражения. Описывая такую инструк-
цию присваивания, говорят, что «переменной присваивается значе-
ние выражения».
В рассматриваемом примере алгоритм содержит две инструк-
ции присваивания, а также инструкции для ввода исходных данных
и для вывода результатов решения задачи. Все действия в алгорит-
ме выполняются последовательно «сверху вниз», в том порядке, в
котором они соединены на схеме линиями потока.
В алгоритмах с линейной структурой могут использоваться
только те элементы, которые имеют не больше одного входа и од-
ного выхода (кроме общих для любых алгоритмов элементов
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011)21
Начало, Конец, Соединитель, Комментарий). Допустимыми яв-
ляются, например, элементы Ввод, Вывод, Процесс,
Предопределённый процесс. Элементы Решение и
Модификация в алгоритмах с линейной структурой использоваться
не могут, поскольку они изначально предназначены для формиро-
вания конструкций ветвления или циклов и имеют для этого более
чем один вход и/или выход.

Начало

Ввод
R исходных
данных

Вычисление
S := πR 2 площади
круга

Вычисление
L := 2πR длины
окружности

Вывод
S, L результатов

Конец

Рис. 2.7. Пример алгоритма линейной структуры

Довольно часто решение поставленной задачи включает в себя


выполнение некоторых действий, которые ранее были описаны в
виде отдельного алгоритма. В таком случае вместо полного вклю-
чения этого алгоритма в окончательное решение исходной задачи
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 22
целесообразно обратиться
к нему с помощью элемента
Предопределённый процесс.
Пример 3. В качестве примера алгоритма с линейной струк-
турой, в котором используется элемент Предопределённый
процесс, рассмотрим решение задачи приближенного нахождения
производной функции f ( x ) в заданной точке x0 (рис. 2.8).

Начало

Ввод
x0 , dx исходных
данных

Вычисление
y1 := f ( x0 ) значения функции f ( x)
в точке x0

y2 := Вычисление
значения функции f ( x)
f ( x0 + dx ) в точке x0 + dx

y2 − y1
dy :=
dx

Вывод
dy результатов

Конец

Рис. 2.8. Пример алгоритма линейной структуры


с элементом «Предопределённый процесс»
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 23
Исходными данными для приближённого вычисления значе-
ния производной функции f ( x ) являются: координата точки x0 и
величина приращения аргумента dx . Результат решения задачи,
обозначенный через dy , находится как отношение приращения
значения функции к приращению аргумента по формуле
f ( x0 + dx ) − f ( x0 )
dy =
dx .
Для решения задачи необходимо вычислить значения функции
f ( x ) в двух точках: x0 и x0 + dx . В постановке задачи конкретный
вид функции f ( x ) не задан и, следовательно, способ вычисления
её значений не определён. В связи с этим принимается допущение,
что вычисление значения функции определяется отдельным, ранее
описанным алгоритмом. Обращение к этому алгоритму может осу-
ществляться с помощью элемента Предопределённый процесс.
В схеме на рис. 2.7 этот элемент используется дважды. С его
помощью происходит вызов другого алгоритма для вычисления
значений функции f ( x ) в точках x0 и x0 + dx , которые присваи-
ваются затем переменным y1 и y2 соответственно.
Описанный подход может использоваться и в том случае, если
функция f ( x ) задана явным образом, однако её определение и ал-
горитм вычисления её значения является громоздким. Если значе-
ние функции должно вычисляться многократно (например, в рас-
сматриваемом примере – два раза), то в алгоритме будут в большом
количестве повторяться одни и те же элементы, реализующие оди-
наковые действия. Это значительно увеличит размер схемы алго-
ритма (общее количество элементов в ней), и, следовательно, за-
труднит анализ правильности алгоритма и поиск возможных оши-
бок его работы.
В таких условиях порядок вычисления значения функции це-
лесообразно оформить в виде отдельного алгоритма, обращаться к
которому при необходимости можно с помощью элемента
Предопределённый процесс. Такой способ решения задачи по-
зволяет сделать схему алгоритма компактной, понятной для анали-
за, а сам алгоритм – удобным для реализации в виде программы на
языке программирования.
Подробнее о вынесении части операций в отдельные алгорит-
мы и об использовании для работы с ними элемента
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011)
24
Предопределённый процесс будет рассказано в разделе, посвя-
щённом нисходящему проектированию программ и структурному
программированию.

2.4.3. Разветвляющаяся структура


Разветвляющаяся алгоритмическая структура (ветвление)
применяется для решения задач, в которых порядок выполнения
инструкций не является однозначным и определяется непосредст-
венно во время выполнения алгоритма в зависимости от значений
исходных данных или специальных выражений.
http://ru.wikipedia.org/wiki/Ветвление
В алгоритмах с разветвляющейся структурой имеется не-
сколько возможных способов последовательного выполнения инст-
рукций. Конкретный путь прохождения алгоритма (последователь-
ность выполняемых действий) называется ветвью алгоритма. Схе-
ма алгоритма с разветвляющейся структурой обязательно содержит
хотя бы один элемент Решение, который и обеспечивает ветвление
алгоритмического процесса.
Существуют два вида разветвляющейся структуры:
1. полная форма ветвления («если – то – иначе»);
2. неполная (усечённая) форма ветвления («если – то»).
Полная форма ветвления
На рис. 2.9 показана схема разветвляющейся алгоритмической
структуры в виде полной формы ветвления. Данная схема не связа-
на с какой-либо конкретной задачей и носит обобщённый характер.
Данная алгоритмическая структура соответствует словесной фор-
мулировке «если …, то…, иначе…».
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 25

1 0
Условие

Инструк- Инструк-
ция № 1 ция № 2

Рис. 2.9. Схема разветвляющейся алгоритмической структуры –


полная форма ветвления

В обобщённом виде, показанном на рис. 2.9, полная форма


ветвления включает в себя следующие элементы:
1. Элемент Решение, в котором записано Условие. Под
Условием понимается некоторое выражение логического
(булевого) типа. Выражение логического типа – это такое
выражение, значением которого может быть либо Истина
(обозначается цифрой «1») или Ложь (обозначается цифрой
«0»). В случае если Условие истинно, управление переда-
ётся ветви алгоритма, обозначенной цифрой «1», а если
Условие ложно – ветви, обозначенной цифрой «0».
2. Элемент Предопределённый процесс, определяющий
Инструкцию № 1. Данный элемент находится на ветви ал-
горитма, выходящей из элемента Решение и отмеченной
цифрой «1». Следовательно, Инструкция № 1 выполняет-
ся тогда, когда Условие, записанное в элементе «Решение»
истинно («если условие истинно, то …»).
3. Элемент Предопределённый процесс, определяющий
Инструкцию № 2, которая, в противоположность преды-
дущему случаю, выполняется, если Условие ложно («если
условие истинно, то …, иначе …»).
То, что в обобщённой схеме ветвления используются элемен-
ты Предопределённый процесс, означает, что в этом месте схе-
мы может находиться любая, сколь угодно сложная алгоритмиче-
ская структура (в том числе другие ветвления и циклы). Обе инст-
рукции могут представлять собой как весьма сложные алгоритми-
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011)26
ческие конструкции, так и один единственный элемент, например,
Процесс или Вывод.
Таким образом, элементы Предопределённый процесс яв-
ляются своего рода абстракцией (обобщением) тех альтернативных
действий, которые могут выполняться в зависимости от значения
Условия. Единственным требованием к алгоритмической форме
инструкций является наличие у них только одного входа и одного
выхода.
Неполная форма ветвления
На рис. 2.10 показана схема разветвляющейся алгоритмиче-
ской структуры в виде неполной формы ветвления.

0
Условие

Инструкция

Рис. 2.10. Схема разветвляющейся алгоритмической структуры –


неполная (усеченная) форма ветвления

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


формы, если при истинности Условия не требуется выполнять во-
обще никаких действий. Т.е. элемент с Инструкцией № 2 будет
отсутствовать, а управление будет передаваться сразу в узел схемы,
стоящий после Инструкции № 1 (или просто Инструкции).
Таким образом, для неполной формы ветвления в случае, если
Условие истинно, Инструкция выполняется, иначе – происходит
её «обход».
Рассмотрим несколько простейших примеров алгоритмов, ис-
пользующих для решения задач рассмотренные выше разветвляю-
щиеся структуры. Необходимо отметить, что в большинстве случа-
ев ветвления не составляют алгоритма полностью. Кроме полной
или неполной формы ветвления практически во всех алгоритмах
выполняется ввод исходных данных или вывод результатов работы.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 27
Следовательно, в основе этих алгоритмов лежит линейная алгорит-
мическая структура, и только в определённом месте по ходу вы-
полнения алгоритма может потребоваться ветвление в одной из
двух рассмотренных выше форм.
Примеры
Пример 1. В качестве первого примера использования ветвле-
ния можно привести алгоритм решения линейного уравнения с
проверкой исходных данных на корректность. Схема этого алго-
ритма приведена на рис. 2.1, a.

Пример 2. Следующим примером применения ветвления рас-


смотрим решение задачи вычисления функции, заданной графиче-
ски (рис. 2.11).

f ( x) = 1
1

0 1 x

f ( x) = x +1

Рис. 2.11. График функции

В формульном описании функция имеет вид:


 x + 1, x < 0;
f ( x) = 
1, x ≥ 0.
В соответствии с условием задачи область определения функ-
ции f ( x ) состоит из двух частей: x < 0 и x ≥ 0 . В зависимости от
того, какой части области определения принадлежит аргумент
функции, зависит способ вычисления её значения. Таким образом,
для решения задачи необходимо построить алгоритм разветвляю-
щейся структуры. Поскольку в любом из двух случае выполняются
определённое действия, то в алгоритме будет использоваться пол-
ная форма ветвления.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011)
28
Схема алгоритма решения данной задачи приведена на
рис. 2.12.

Начало

1 0
x<0

y := x + 1 y := 1

Конец

Рис. 2.12. Схема алгоритма вычисления значения функции


(полная форма ветвления)

Пример 3. Рассмотрим задачу определения существования у


квадратного уравнения действительных корней. Для решения этой
задачи необходимо найти значение дискриминанта и сделать соот-
ветствующий вывод. Схема алгоритма решения данной задачи при-
ведена на рис. 2.13.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 29

Начало

a, b, c

D := b2 − 4ac

1 0
D≥0

‘Действительные ‘Действительных
корни есть’ корней нет’

Конец

Рис. 2.13. Схема алгоритма определения наличия у квадратного уравнения


действительных корней (полная форма ветвления)

Пример 4. В качестве примера использования полной и не-


полной форм ветвления рассмотрим задачу определения модуля
вещественного числа.
Модуль m заданного числа a определяется следующим обра-
зом:
 a, a ≥ 0;
m= a =
− a, a < 0.
Первый способ нахождения m полностью аналогичен алго-
ритму вычисления значения функции, рассмотренному выше. В со-
ответствии с этим подходом одна из двух альтернативных инструк-
ций для вычисления значения m должна выбираться в зависимости
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 30
от знака заданного числа a . Таким образом, алгоритм будет осно-
ван на использовании полной формы ветвления. Схема алгоритма
решения задачи данным способом приведена на рис. 2.14.

Начало

1 0
a≥0

m := a m := − a

Конец

Рис. 2.14. Схема алгоритма нахождения модуля числа


(полная форма ветвления)

С другой стороны значение модуля заданного числа a можно


искать по следующей схеме. Пусть по умолчанию модуль m числа
a вначале принимает значение самого числа. Затем выполняется
проверка знака числа a , и если оно оказывается отрицательным, то
знак модуля m меняется на противоположный. Если же число явля-
ется неотрицательным ( a ≥ 0 ), то операция изменения знака не вы-
полняется. Схема алгоритма решения задачи данным способом
приведена на рис. 2.15.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 31

Начало 1

0
a a<0

m := a m := − m

Конец

Рис. 2.15. Схема алгоритма нахождения модуля числа


(неполная форма ветвления)

Пример 5. Рассмотрим следующую задачу. Необходимо раз-


работать алгоритм звонка по телефону, включающего в себя вы-
полнение следующих операций:
1. Определение текущего баланса.
2. Ввод номера вызываемого абонента.
3. Вызов абонента, ожидание конца разговора и определение
его стоимости.
4. Уменьшение баланса.
5. Проверка баланса и вывод предупреждения «Ваш баланс …
руб.», если остаток на счету стал меньше 100 руб.
Последняя операция в этом списке реализуется как неполная
форма ветвления. Она, в зависимости от значения остатка на счету
предполагает либо вывод пользователю предупреждения, либо от-
сутствие каких-либо выполняемых действий.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 32
Остальная часть алгоритма (операции с первой по четвёртую)
имеет линейную структуру. Схема алгоритма решения задачи при-
ведена на рис. 2.16.

Начало

Определение
b := Bal ( ) текущего
баланса 1

Ввод номера
0
num вызываемого b < 100
абонента
1

s := Разговор и ‘Ваш баланс’,


определение b, ‘ руб.’
Call (num) его стоимости

Уменьшение
b := b − s баланса
Конец

Рис. 2.16. Схема алгоритма выполнения звонка по телефону


с контролем остатка средств на счету.

2.4.4. Циклическая структура


Циклическая алгоритмическая структура (цикл) применяется
для решения задач, в которых одни и те же действия необходимо
выполнять многократно.
http://ru.wikipedia.org/wiki/Цикл_(программирование)
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 33
Совокупность действий, которые повторяются во время вы-
полнения цикла, называют телом цикла. Алгоритмическое описа-
ние тела цикла является постоянным на всём протяжении его рабо-
ты. Количество операций, составляющих тело цикла, не ограниче-
но, но его алгоритмическая структура должна иметь ровно один
вход и один выход.
Однократное выполнение тела цикла называют шагом цикла
или итерацией. Для того чтобы алгоритм циклической структуры
соответствовал формальным признакам алгоритма (в частности –
был завершаемым), составляя алгоритм, необходимо обеспечить,
чтобы количество повторений было заведомо конечным. Непра-
вильно спроектированный цикл в определённой ситуации может
выполняться бесконечно долго (тело цикла будет повторяться бес-
конечное количество раз), и в таких случаях говорят о зациклива-
нии.
Различают циклы с заранее известным и заранее неизвестным
количеством повторений (тела цикла). Выбор одного из этих двух
видов цикла определяется условием задачи и во многом определяет
структуру всего алгоритма.
В первом случае количество повторений задаётся непосредст-
венно по условию задачи и, например, вводится пользователем как
исходные данные, или может быть найдено в результате предвари-
тельных вычислений. Для обеспечения завершаемости работы цик-
ла в процессе его работы выполняется подсчёт выполненных ша-
гов. Текущее значение количества выполненных шагов сравнивает-
ся с заранее известным количеством повторений тела цикла.
Во втором случае количество повторений заранее неизвестно,
поскольку необходимость продолжать или прекратить выполнение
цикла определяется некоторым условием, не связанным напрямую с
количеством повторений. Данное условие, как и в случае разветв-
ляющейся алгоритмической структуры, имеет вид логического вы-
ражения.
С точки зрения алгоритмической структуры существуют три
вида циклов:
1. Цикл с предусловием (рис. 2.17).
2. Цикл с постусловием (рис. 2.18).
3. Цикл со счётчиком (рис. 2.19).
Циклы с предусловием и постусловием используют для про-
верки необходимости продолжать выполнение цикла Условие (ло-
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011)34
гическое выражение), записанное в блоке Решение. В зависимости
от истинности или ложности Условия управление передаётся либо
Телу цикла (первому из образующих его элементов), либо эле-
менту, стоящему в схеме общего алгоритма непосредственно после
цикла.
Цикл с предусловием
Цикл с предусловием отличается тем, что в схеме алгоритма
Условие находится выше тела цикла (рис. 2.17). Следовательно,
возможна такая ситуация, когда уже при первом выполнении блока
Решение записанное в нём Условие будет таким, что цикл должен
завершить работу. То есть в цикле с предусловием Тело цикла
может не выполниться ни разу.

0
Условие

1 Условие
продолжения
работы цикла
Тело
цикла

Рис. 2.17. Схема цикла с предусловием

Цикл с постусловием
В отличие от цикла с предусловием, в цикле с постусловием
Условие в схеме алгоритма находится ниже тела цикла (рис. 2.18).
Следовательно, на первом шаге алгоритма Тело цикла обязатель-
но выполнится, прежде чем будет проверено Условие, независимо
от его истинности или ложности. То есть в цикле с предусловием
Тело цикла будет выполнено хотя бы один раз.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 35

Рис. 2.18. Схема цикла с постусловием

На рисунках 2.17 и 2.18 ветви алгоритма обозначены цифрами


«1» и «0» так, что Условия приобретают следующий смысл:
1. В цикле с предусловием используется условие продолжения
работы. В случае если Условие истинно, управление пере-
даётся Телу цикла и цикл продолжает свою работу.
2. В цикле с постусловием используется условие прекращения
работы. В случае если Условие истинно, цикл завершает
свою работу и управление передаётся элементу, стоящему в
схеме алгоритма непосредственно после цикла.
В общем случае вид условия не связан жёстко с видом цикла.
Например, поменяв местами обозначения «0» и ,«1» в цикле с пре-
дусловием можно использовать и условие завершения работы. Од-
нако для определённости, а также для упрощения перехода к про-
граммированию на языке Pascal, в рамках данного учебного курса
предлагается использовать:
1) в цикле с предусловием – условие продолжения работы,
2) в цикле с постусловием – условие завершения работы.
Два рассмотренных вида циклов являются универсальными.
Они могут применяться как в случае заранее известного количества
повторений тела цикла, так и в случае, когда оно заранее неизвест-
но.
Цикл со счётчиком
В случае если количества повторений заранее известно, более
удобным, по сравнению с рассмотренными выше двумя другими
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 36
видами циклов, является применение цикла со счётчиком
(рис. 2.19).

Параметры
цикла
Начальное и конечное
значения счётчика
цикла
Тело
цикла

Рис. 2.19. Схема цикла со счётчиком

В цикле со счётчиком для определения необходимости про-


должения или завершения работы цикла используется счётчик –
целочисленная переменная, значение которой соответствует коли-
честву выполненных повторений Тела цикла.
Параметры цикла, записываемые в схеме алгоритма в элемен-
те Модификация, имеют следующий формат:
<имя счётчика> := <начальн. знач.>, <конечн. знач.>

Например:
a) I := 1, N
b) J := 0, 9
c) K := N, M

В процессе выполнения цикла счётчик используется следую-


щим образом:
1. Перед первым выполнением Тела цикла счётчику при-
сваивается начальное значение (происходит инициализация
счётчика).
2. Перед каждым следующим выполнением Тела цикла
счётчик увеличивает своё значение на единицу (выполняет-
ся модификация значения счётчика).
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 37
3. Если значение счётчика после инициализации или модифи-
кации стало больше конечного значения, то цикл завершает
работу. Иначе – управление передаётся Телу цикла и цикл
продолжает работу.
Таким образом количество повторений Тела цикла связано с
начальным и конечным значениями счётчика формулой:
<кол-во повтор.> = <конечн.знач.> – <нач.знач.> + 1

В приведенных выше примерах параметры цикла определяют


следующее количество шагов:
a) «I := 1, N» – N шагов;
b) «J := 0, 9» – 10 шагов;
c) «K := N, M» – M − N + 1 шагов.
Чаще всего в алгоритмах, предназначенных для реализации на
языке Pascal, используется первый вариант («a») параметров цикла.
Однако в некоторых случаях удобнее использовать в качестве на-
чального значения счётчика не единицу, а ноль (вариант «b»). Ино-
гда по условию задачи необходимо выполнить перебор значений в
диапазоне от N до M включительно, тогда целесообразно исполь-
зование последнего варианта («c»).
В частном случае, когда начальное значение счётчика совпа-
дает с конечным значением, тело цикла выполняется только один
раз. В случае если начальное значение больше чем конечное, тело
цикла не выполнится ни разу (т.е. соотношение N > M ошибкой не
является).
Цикл со счётчиком не является универсальным. Он применя-
ется только в тех случаях, когда количество повторений заранее
известно, и для подсчёта шагов можно использовать целочислен-
ный счётчик. Если количество повторений заранее неизвестно, то
цикл со счётчиком использовать нельзя.
Примеры
Пример 1. Рассмотрим простейшую задачу, решение которой
требует выполнения повторяющихся действий. Задано натуральное
целое число N . Необходимо вывести все натуральные числа от 1
до N включительно.
Повторяющимся действием для данной задачи является вывод
каждого из чисел. Количество чисел, которые требуется вывести,
заранее известно, поскольку может быть однозначно найдено из ус-
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 38
ловия задачи, и равно N . Таким образом, имеем циклическую
структуру с заранее известным количеством повторений.
Числа от 1 до N , которые требуется последовательно выво-
дить в цикле, могут быть получены напрямую из номера шага цик-
ла. То есть на первом шаге цикла алгоритм должен вывести значе-
ние единицы, на втором – двойки и т.д. Таким образом, для опреде-
ления каждого из N чисел необходимо знать всего лишь порядко-
вый номер текущего шага цикла.
Данная задача может быть решена с помощью циклов всех
трёх видов. Так, например, на рис. 2.20 показаны схемы алгоритмов
решения данной задачи, в которых используются цикл с предусло-
вием (рис. 2.20, a) и цикл с постусловием (рис. 2.20, b).
В данных схемах роль «счётчика» количества выполненных
действий и, одновременно, роль величины, значение которой тре-
буется вывести пользователю, играет переменная I . Для того, что-
бы с помощью этой переменной можно было контролировать вы-
полнение цикла, с данной переменной выполняются следующие
действия:
1. До начала повторений (до первого шага цикла) переменной
присваивается начальное значение ( I := 1 ).
2. На каждом шаге цикла в конце тела цикла значение пере-
менной увеличивается на единицу ( I := I + 1).
3. Для определения возможности продолжать или необходи-
мости завершить выполнение цикла – подставляется в ус-
ловие продолжения работы (для цикла с предусловием:
I ≤ N ) или условие завершения работы (для цикла с посту-
словием: I > N ).
Таким образом, в обоих вариантах алгоритма цикл завершает
работу, как только значение счётчика I станет больше заранее из-
вестного количества повторений N .
Кроме циклов с предусловием и постусловием для решения
данной задачи может использоваться также цикл со счётчиком.
Схема алгоритма решения задачи данным способом приведена на
рис. 2.21. Эта схема содержит меньше элементов, по сравнению с
двумя предыдущими вариантами, поскольку все вспомогательные
операции, связанные с использованием переменной-счётчика I ,
выполняются с помощью одного элемента Модификация.
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 39

N N

I := 1 I := 1

I≤N I

I I := I + 1

I := I + 1 I>N

a) b)
Рис. 2.20. Схемы алгоритмов решения задачи на вывод натуральных чисел в
диапазоне 1..N : с предусловием (а), с постусловием (б)
Алгоритмизация и программирование: Гл. 2 – Ч. 1 (05.09.2011) 40

Начало

I := 1, N

Конец

Рис. 2.21. Схема алгоритма решения задачи на вывод натуральных чисел в


диапазоне 1..N : с модификацией

Вам также может понравиться