Основные алгоритмы

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

Линейный алгоритм. Из команд следования можно построить очень простые линейные алгоритмы. Приведем пример записи такого алгоритма в виде блок-схемы и соответствующей программы на языке Паскаль (рисунок 6.5).

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

алг ср.арифм.и геом. вещ a,b,Sa,Sg нач ввод a,b Sa:=(a+b)/2 Sg:=(a*b)^(1/2) вывод Sa,Sg кон Program SSS; Var a,b,Sa,Sg:real; BEGIN Readln(a,b); {Ввод чисел} Sa:=(a+b)/2; {среднеарифметическое} Sg:=sqrt(a*b); {среднегеометрическое} Writeln (Sa,Sg); {Вывод результата} END.
а б в

Рисунок 6.5 – Различные формы представления линейного алгоритма в задаче 1:
а – блок – схема; б – псевдокод; в – программа

Отметим, что в случае отрицательного значения хотя бы одного из двух чисел a и b, произойдет так называемый аварийный останов программы – причину этого Вы легко объясните. Таких ситуаций в программировании необходимо не допускать. Но в данном случае это затруднено без использования команд ветвления, рассматриваемых ниже.

Разветвляющийся алгоритм. Рассмотрим задачу, при решении которой используются команды ветвления. На рисунке 6.6 представлены различные формы алгоритма решения задачи.

Задача 2. Из трех заданных вещественных чисел определить наибольшее число

алг большее из чисел вещ a,b,c,max нач ввод a,b,c если a>b то max:=a иначе max:=b все если max<c то max:=c все вывод max кон   Program FindMax; Var a,b,c,max:real; BEGIN Readln(a,b,c); {Ввод чисел} If a>b then max:=a else max:=b; Ifmax<c thenmax:=c; Writeln (max); {Вывод} END.
а б в

Рисунок 6.6 – Различные формы представления разветвляющегося алгоритма в задаче 2:

а – блок – схема; б – псевдокод; в – программа

Циклический алгоритм. Если какие-либо операторы необходимо выполнить несколько раз, то в этом случае организуют циклический алгоритм. Рассмотрим это на примерах (задачи 3, 4).

В задаче 3 приведено решение (рисунок 6.7), в котором заранее известно количество повторений в цикле. В этом случае целесообразно использовать цикл с параметром.

В следующем примере (задача 4), используя численные итерационные методы, рассчитывается по известной формуле

Задача 3. Найти сумму целых четных чисел в диапазоне от n1 до n2.

алг сумма чисел цел n1, n2, i, S нач ввод n1,n2 S:=0 нцдля i от n1 до n2 если imod2=0 то S:=S+i кц вывод S кон   Program Sum; Var n1, n2, i, S: integer; BEGIN Readln(n1, n2); {Ввод чисел} S:= 0; For i:= n1 to n2 do If (i mod 2) = 0 then S:= S+i; Writeln (S); {Выв. результата} END.
а б в

Рисунок 6.7 – Различные формы представления циклического алгоритма в задаче 3:
а – блок – схема; б – псевдокод; в – программа

Задача 4. Расчет по итерационному методу.

Для начала расчета, кроме значения a, необходимо задать начальное приближение искомой величины x и параметр err, определяющий точность расчета. Так как количество итераций заранее не известно, то в приведенном алгоритме используется цикл с предусловием (рисунок 6.8).

алг корень числа вещ a, xo, x, err нач ввод a,xo,err x:=xo нцпока | x2-a|>err x:=0.5*(x+a/x) кц вывод x кон   Program Root; Const err = 0.001; Var a, xo, x: real; BEGIN Readln(a, xo); {Ввод данных} x:= xo; while abs(x*x - a) >err do x:=0.5*(x+a/x); Writeln (x); {Выв. результата} END.
а б в

Рисунок 6.8 – Различные формы представления циклического алгоритма в задаче 4:
а – блок – схема; б – псевдокод; в – программа


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: