Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК инфс лек.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.37 Mб
Скачать

Базовые алгоритмические структуры

а) Структура "следование"

б) Структура "ветвление"

Если – ТО – ИНАЧЕ Если – ТО

в) Структура " повторение"

Цикл – ПОКА Цикл – ДО

Схема алгоритма циклической структуры (регулярный цикл)

Основным в процессе программирования является разработка алгоритма. Это один из наиболее сложных этапов решения задачи с использованием ЭВМ. В начале обучения программированию, на наш взгляд, целесообразно не привязываться сразу к какому-либо языку, разрабатывать алгоритмы без записи на ЯПВУ, а, например, с помощью блок-схем или иным аналогичным способом. После такой "чистой" алгоритмизации учащимся или студентам проще перейти к записи того же алгоритма на определённом языке программирования. В настоящей публикации продемонстрирован именно такой подход.

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

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

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

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

Вычислить значения y и p, используя расчетные формулы:

при значениях a=0.59; z=-4.8; x=2.1.

Текст программы на языке Pascal:

program Prg_1;

var a,x,z,y,p,c: real;

begin

Writeln('Введите a,x,z');

Readln(a,x,z);

c:=sin(x*x)/cos(x*x);

y:=a*c*sqr(c)+sqrt(z*z/(a*a+x*x));

p:=ln(a+x*x)+sqr(sin(z/a));

Writeln('y=', y:8:3, ' p=', p:8:3)

end.

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

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

Вычислить значения функции

п ри значениях a=1.3; b=1.29; t=[0.1;2.2] (t изменяется в диапазоне от 0 до 2.1 с шагом 0.3).

Для реализации конструкции Ветвление в языке программирования Pascal используют оператор условного перехода IF <условие> THEN <оператор 1> ELSE < оператор 2>

Б

Блок-схема алгоритм ветвления.

лок-схема алгоритма решения представлена на рисунке.

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

Текст программы:

Program Prg_2;

var a,b,t,s: real;

begin

Writeln(' Введите a,b,t');

Read(a,b,t);

if a*t<1 then s:=a*t+b;

if a*t=1 then s:=cos(a*t);

if a*t>1 then s:=exp(-a*t)*cos(a*t);

Writeln('a=',a:8:3,' b=',b:8:3,'t=',t:8:3,' s=',s:8:3)

end.

Пример выполнения алгоритма с использованием оператора цикла

Блок-схема алгоритма решения задачи представлена на рисунке ниже.

В блоке 1 осуществляется ввод исходных данных: значений a и b, начального значения tn переменной t, конечного значения tk переменной t, шага изменения dt переменной t. Блок 2 присваивает переменной t начальное значение tn. Блок 3 осуществляет проверку условия t<tk и в зависимости от результата проверки заканчивает или продолжает расчет. Блоки 4,5 осуществляют проверку условия - значение аt меньше, равно или больше единицы - и в зависимости от результата сравнения проводится вычисления по одной из ветвей - 6, 7, 8. Блок 9 выводит на печать полученное значение функции s совместно со значениями t. Блок 10 увеличивает текущее значение переменной t на шаг и осуществляет безусловный переход к

Блок схема цикла с условием.

блоку 3

Текст программы:

program Prg_3;

var a,b,tn,tk,dt,s,t:real;

begin

Writeln('введите значения a,b,tn,tk,dt');

Read(a,b,tn,tk,dt);

t:=tn;

While t<tk do

begin {тело цикла взято в операторные скобки beginend }

if (a*t)<1 then s:=a*t+b

else if (a*t)=1 then s:=Cos(a*t)

else s:=Exp((-a)*t)*Cos(a*t);

writeln('t=',t,' s=',s);

t:=t+dt

end

end.

В рассмотренных выше примерах количество повторений заранее неизвестно.

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

Пример вычисления конечной суммы: Вычислить

Блок-схема алгоритма решения задачи представлена на рисунке ниже.

Алгоритм вычисления суммы.

В блоке 1 вводится значение переменной х. Блок 2, задающий начальное значение суммы, стоит перед циклом, в котором она накапливается. Блок 3 - цикл регулярного типа с известным числом повторений. В его теле блок 4 вычисляет значение слагаемого x2/i и накапливает сумму. Результат представляет собой одно число, которое блоком вывода 5 выводится на печать.

Текст программы:

program Prg_3;

var x,z: real;

i:integer;

begin

Writeln('введите значение х:'); {Ввод x}

Readln(x);

z:=0; {Обнуление суммы}

for i=1 to 20 do z:=z+(sqr(x)/i); {Накопление суммы}

Writeln('z=',z); {Вывод результата}

Readln

end.