Алгоритмические действия

 

Для написания любого алгоритма обработки данных достаточно следующих девяти элементарных действий и простейших конструкций:

1. объявление переменной (указание имени и типа) – «объявить»,

2. присвоение значения переменной – «=»,

3. вычисление выражения и присвоение итогового значения переменной – «вычислить»,

4. ввод значения и занесение в переменную – «ввод»,

5. вывод значения переменной (на экран дисплея, печать и т.д.) – «вывод»,

6. выполнение действий по условию –

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

8. повторное выполнение группы действий –

9. «цикл … [n раз] : начало <действия> конец»,

10. объявление процедуры –

11. «процедура <имя процедуры> … : начало <действия> конец»,

12. вызов и выполнение процедуры –

13. «выполнить процедуру».

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

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

При использовании языков программирования каждое алгоритмическое действие реализуется одной или несколькими командами языка (операциями). Элементарные действия и простейшие конструкции реализуются в любом языке только одной командой.

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

  1. начало
  2. объявление переменных:

n – число станций в регионе,

Xi - величина осадков на i-ой станции,

REZ – результат вычислений – средняя арифметическая величина слоя осадков

  1. задание n различных значений переменной Xi и суммирование их

REZ = SUM (Xi), i=1,n

  1. вычисление среднего арифметического: REZ = REZ / n
  2. вывод результатов
  3. конец

 

Здесь все действия кроме третьего являются элементарными, т.е. могут быть реализованы одной командой какого-то языка программирования (скобки «начало» и «конец» не учитываются). Пункт третий в этом наборе может быть реализован несколькими способами. Можно объявить n переменных, присвоить им значения, а затем вычислить сумму значений.

1. x1 = …

2. x2 = …

….

n. xn = …

n+1. REZ = x1+x2+….+xn

Этот способ неудобен тем, что число переменных и действий зависит от числа задаваемых значений: под каждое значение выделяется переменная и выполняется действие «присвоение значения переменной». Тот же результат может быть получен с помощью четырех действий:

 

1. n=…

2. REZ=0

3. ввести значение в переменную x

4. REZ= REZ +x

Повторять 3 и 4 действия n раз.

 

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

 

1. n=….

2. REZ =0

3. цикл ввода n значений: начало

3.1. ввод значения в переменную х

3.2. REZ=REZ + x

4. конец цикла

 

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

Рассмотрим второй вариант «цикла по условию»:

 

1. REZ=0

2. цикл ввода: начало

2.1. ввод значения в переменную х

2.2. если х = пусто, то выход из цикла

2.3. REZ=REZ +x

3. конец цикла

 

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

 

1. ввод трех значений в переменные х1, х2, х3

2. REZ= x1+x2+x3

 

 

Замена действий присвоения вводом позволяет применить данный набор действий к различным исходным данным { xi }, i=1,n. Причем при повторном выполнении с одними и теми же значениями исходных данных должен получиться одинаковый результат, определенный и однозначный.

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

Развернутый алгоритм будет выглядеть следующим образом:

1. начало

2. объявление переменных: n, x, REZ

3. выполнение процедуры А ввода и суммирования значений в REZ

4. REZ = REZ / n

5. вывод результатов

6. конец

 

  1. процедура А: начало
  2. присвоение начальных значений: n=…. , REZ=0
  3. цикл ввода n значений: начало

3.1. ввод х

3.2. REZ = REZ + x

  1. конец цикла
  2. конец процедуры

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