Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatika_3.doc
Скачиваний:
7
Добавлен:
16.11.2019
Размер:
521.22 Кб
Скачать
  1. Пример решения задачи с использованием конструкции

повторение с параметром

Рассмотрим решение ранее сформулированной задачи при изменении Х с шагом равным 1 и при целочисленных значениях Xn и Xk.

    1. Схема алгоритма решения задачи

c

Программа для решения задачи

program forp;

var

a,b,y:real;

x,xn,xk:integer;

begin

write('введите значения переменных a,b,xn,xk: ');

readln(a,b,xn,xk);

writeln('Исходные данные: a=',a:4:2,' b=',b:4:2,' xn=',xn,' xk=',xk);

writeln('Результат табулирования функции y=ax+b: ');

for x:=xn to xk do

begin

y:=a*x+b;

writeln(' x=',x,' y=':20,y:4:2);

end;

readln

end.

Лекция 6 Разработка и программирование итерационных алгоритмов

Рассмотрение будет вестись на примере решения конкретных задач.

Задача 1 на использование итерационных алгоритмов

  1. Условие задачи

Даны действительные числа a, b и натуральное число n.

Вычислить

  1. Анализ особенностей задачи

В этой задаче удобно считать последнее слагаемое n-ым. С учетом этого, получим заданное выражение в виде:

Будем использовать следующие обозначения: Sо, S1, …, Sn – соответственно слагаемые нулевое, первое, …, n-oe; So, S1, …, Sn – сумма нулевая, первая, …, n-ая.

Для выполнения циклических действий введем переменную i, которая представляет собой одновременно порядковый номер текущих слагаемого и частичной суммы. Для удобства записи данного выражения с включением в него (i-1) и i-го слагаемых, пусть n достаточно велико, по крайней мере, не меньше пяти, тогда выражение можно записать в виде:

Si-1

S2

Si

Si-1

S2

Si

Sn

Из приведенного выражения видно следующее.

Переменная i меняется от нуля до n, с шагом 1.

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

В свою очередь текущее слагаемое находится как произведение предыдущего (i-1)-го слагаемого на сомножитель (b+i)/(a+i).

Решение задачи имеет итерационный характер. Итеративно изменяемыми элементами являются текущие сумма и слагаемое.

При n=1 выражение (полная сумма) вычисляется следующим образом: S1=S0+S1, где S0=b/a; S1=S0(b+1)/(a+1).

  1. Метод решения задачи

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

Si=Si-1(b+i)/(a+i); S:=S(b+i)/(a+i);

Si=Si-1+Si; S:=S+S.

В этом пункте необходимо уточнить пределы изменения i в указанных формулах. Формулы позволяют находить значения текущих слагаемого и суммы по значениям полученным на предыдущем шаге. Но какие-то значения нужно задать в явном виде либо S0 и S0, либо S1 и S1. В первом случае i=0,…,n, с шагом 1. Это позволяет найти решение при n0, т.е. и при n=0. А во втором i=1, …,n, т.е. решение можно найти только для натурального n. Далее рассмотрим второй случай. Тогда в приведенных выше формулах i=2,…,n.

Т еперь S1=b(b+1)/[a(a+1)], при i=1, S=b(b+1)/[a(a+1)]

S1=a/b+S1. S=a/b+S.

  1. Проверка разработанного метода решения

Она заключается в нахождении и анализе результатов полученных при n=1,2,3 с использованием приведенных в п. 1.3 формул. Здесь и ниже при проверке алгоритма, результаты могут фиксироваться, как в численном виде, так и в общем.

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

  1. Блок-схема алгоритма решения задачи без использования индексированных переменных

  1. Протокол испытания алгоритма

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

  1. Программа для решения задачи без использования индексированных переменных

program Iter;

var a,b,s,sl:real; i,n:integer;

begin

write('введите значения переменных a,b,n: '); readln(a,b,n); writeln('Исходные данные: a=',a:4:2,' b=',b:4:2,' n=',n); sl:=b*(b+1)/(a*(a+1));

s:=b/a+sl;

for i:=2 to n do

begin

sl:=sl*(b+i)/(a+i);

s:=s+sl

end;

writeln('Результат: выражение равно ',s:4:2);

readln

end.

Задача 2 на использование итерационных алгоритмов

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]