ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня

Лекция 7.1. Алгоритмизация

Понятие алгоритма

Слово «алгоритм» происходит от «algorithmi» – латинской формы описания имени великого узбекского математика IХ в. аль - Хорезми, который сформулировал правила выполнения арифметических действий. Первоначально под алгоритмом и понимали только правила выполнения четырех арифметических действий над многозначными числами.

Понятие алгоритма – одно из фундаментальных понятий информатики.

Алгоритм – это формальное описание способа решения задачи, путем разбиения ее на конечную по времени последовательность действий (элементарных операций). Под словом «формальное» подразумевается, что описание должно быть абсолютно полным и учитывать все возможные ситуации, которые могут встретиться по ходу решения. Под элементарной операцией понимается действие, которое по определенным критериям (например, очевидности) не имеет смысла детализировать.

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

Свойства алгоритма

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

Дискретность (разрывность) – это свойство алгоритма, характеризующее его структуру: каждый алгоритм состоит из отдельных законченных действий. Говорят: «Делится на шаги».

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

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

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

Формальность – это свойство указывает на то, что любой исполнитель, способный воспринимать и выполнять инструкции алгоритма, действует формально, т.е. отвлекается от содержания поставленной задачи и лишь строго выполняет инструкции. Рассуждать «что, как и почему?» должен разработчик алгоритма, а исполнитель формально (не думая) поочередно исполняет предложенные команды и получает необходимый результат.

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

Существуют несколько способов описания алгоритма: словесное, псевдокод, блок-схема, программа.

Словесное описание представляет структуру алгоритма на естественном языке. Запись алгоритма осуществляется в произвольной форме, никаких правил не существует.

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

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

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

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

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

- начало/конец алгоритма

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

<Действие>
- процесс, предназначенный для описания отдельных

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru действий

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ввод/вывод с неопределенного носителя

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru Нет Да - проверка условия

- - предопределенный процесс, предназначенный для

- обращения к подпрограмме.

Лекция 7.2. Схемы алгоритма

Алгоритмы решения задач

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

Линейная структура (следование) самая важная из структур. Она означает, что действия могут быть выполнены друг за другом (рис. 5.2.1.).

Выполнить B
Выполнить А
Вход Выход

           
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru   ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru   ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

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

Пример 7.2.1.

Опишем алгоритм сложения двух чисел на псевдокоде и в виде блок-схемы (рис. 7.2.2.).

1. Псевдокод:

2. Ввод двух чисел a, b

3. Вычисляем сумму S = a + b

4. Вывод S

5. Конец.

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Рис. 7.2.2. Блок - схема к примеру 7.2.1.

Ветвление (развилка) – это структура, обеспечивающая выбор между двумя альтернативами. Выполняется проверка условия, а затем выбирается один из путей (рис. 5.2.3).

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru Вход

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Ложь (НЕТ) Истина (ДА)

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Выход

Рис. 7.2.3. Полное ветвление

Если условие имеет значение «Истина», то выполняется «Действие А». Если условие имеет значение «Ложь», выполняется «Действие В». Эта структура называется, также «Если – ТО – ИНАЧЕ» или «развилка». Каждый путь (ТО или ИНАЧЕ) ведет к общей точке слияния, так что выполнение алгоритма продолжается независимо от того, какой путь был выбран. Может оказаться, что для одного из результатов проверки ничего выполнять не надо. В этом случае можно применить только один обрабатывающий блок (рис. 5.2.4).

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Вход

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДА НЕТ

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Выход

Рис. 7.2.4. Структура «неполное ветвление»

Такая структура называется «неполным ветвлением» или «неполной развилкой».

Пример 7.2.2.

Вывести значение наибольшего числа из двух чисел (рис. 5.2.5).

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru Псевдокод:

1. Ввод двух чисел a, b

2. ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ЕСЛИ a>b, ТО «выводим a»,

ИНАЧЕ «выводим b»

3. ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Max= b
ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
Max= a
ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru Конец.

НЕТ ДА

Рис. 7.2.5. Блок – схема к примеру 5.2.2.

Цикл (или повторение) предусматривает повторное выполнение некоторого набора команд алгоритма. Циклы позволяют записать длинные последовательности операций обработки данных с помощью небольшого числа повторяющихся команд. Различают два типа циклов: «цикл с предусловием» и «цикл с постусловием».

Цикл с предусловием («Пока») (рис. 5.2.6).

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Тело цикла
Истина Выход

           
    ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru   ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
 

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru Ложь

Рис. 7.2.6. Структура цикла «Пока».

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

Пример 7.2.3.

Вычислить сумму 100 чисел (рис. 5.2.7).

Псевдокод:

1. НАЧ

2. I =1; S = 0

3. ПОКА i<=100 делать

НЦ

4. Ввести ai

5. S = S + ai

6. i = i + 1

КЦ

7. Вывод S

8. ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

i=1; S=0
ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru Конец.

НЕТ

ДА

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Рис. 7.2.7. Блок – схема к примеру 7.2.3 с циклом «Пока»

Цикл с постусловием («До»).

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Тело цикла
ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru В отличие от цикла с предусловием, тело цикла с постусловием всегда будет выполнено хотя бы один раз, после чего проверяется условие. В этой конструкции тело цикла будет повторяться до тех пор, пока значение логического выражения ложно. Как только оно становится истинным, выполнение тела цикла прекращается (рис. 5.2.8).

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru Вход Истина

Ложь Выход

Рис. 7.2.8. Структура «цикла с постусловием».

Пример 7.2.4.

Вывести максимальное значение из 100 натуральных чисел (рис. 5.2.9).

Псевдокод:

1. Начало

2. Ввести a1

3. max = a1; i = 2

4. НЦ

a. Ввести ai

b. ЕСЛИ max < ai ТО max = ai

c. i = i + 1

5. ДО I>100;

6. КЦ

7. Вывести max.

8. Конец.

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Истина

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Ложь

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

max = ai
ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
Max=a1; i=2
ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
i = i + 1
ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru Истина

Рис. 7.2.9. Блок – схема к примеру 5.2.4. с циклом «До»

Базовые алгоритмические структуры можно комбинировать одну с другой – как путем организации их следования, так и путем создания суперпозиций (вложений одной структуры в другую). Используя описанные структуры, можно полностью исключить использование каких-либо еще операторов условного и безусловного перехода, что является важным признаком структурного программирования. Приведем несколько примеров (рис. 7.2.10, 7.2.11, 5.2.12, 7.2.13).

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru -

       
    ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
 

+

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

- +

       
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
    ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
 

Рис. 7.2.10. Алгоритм типа «развилка, вложенная в цикл, с предусловием», для нахождения суммы положительных чисел и N возможных

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru - +

       
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru   ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
 

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru -

       
    ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
 

+

       
    ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru
 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Рис. 7.2.11. Алгоритм типа «цикл, с предусловием, вложенный в неполную развилку»

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru - +

ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru Рис. 7.2.12. Алгоритм типа «неполная развилка, вложенная в пол-

- + ную развилку». ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

 
  ДЕ 7. Алгоритмизация и программирование. Языки программирования высокого уровня - student2.ru

Вопросы для самоконтроля

1. Дайте определение алгоритма и поясните его.

2. Какие формы представления алгоритма вы знаете?

3. В чем особенности графического представления алгоритма?

4. Назовите основные (базовые) алгоритмические структуры?

5. Перечислите свойства алгоритмов и объясните, чем они определены.

Наши рекомендации