- •8. Программирование задачи численного решения алгебраических уравнений
- •9. Алгоритмы вычисления конечных сумм и произведений
- •10. Алгоритм вычисления бесконечных сумм
- •11. Вложенные циклы. Нисходящее проектирование алгоритмов.
- •20. Типизированные файлы
- •21. Текстовые файлы
- •22. Рекурсивное обращение к подпрограммам.
10. Алгоритм вычисления бесконечных сумм
В обычном цикле известно число повторений тела цикла. В некоторых случаях нет возможности заранее определить число повторений, т.е. нельзя использовать известные условия окончания.
Такой случай называется – итерационный цикл (ИЦ).
В любом ИЦ вычисляется некоторая последовательность значений y0, y1, …., yn которая сходится к некоторой величине b.
В данной задаче условием окончания цикла является достижение некоторой точности вычисления – абсолютной погрешности.
Т.е.
в процессе реализации цикла вычисляется
последовательность, которое прекращается
при условии:
В
общем случае параллельно с последовательностью
y считают другую последовательность t:
t0,
t1,
…, tn
a
Последовательность t выбирают таким образом, что бы было известно a (чаще a=0).
Т.е.
условие выхода из цикла:
при
(a
=0)
Если не удается сформировать вспомогательную последовательность, то в качестве условия выхода используется:
y 0, y1, …., yn a
не
всегда точно
При построении итерационных алгоритмов необходимо определить 2 момента:
Каким образом вычисляется последовательность и, что надо найти
Что используется для контроля точности
Пример
При вычислении бесконечной суммы используются те же алгоритмы, а чаще всего 2-й (когда последующее слагаемое вычисляется через предыдущее).
-
частичная сумма
В ычисляемая последовательность S0, S1, …. S
Если
вычисляемая сумма ряда знакопеременна,
то используем следующее условие окончание
цикла
,
в результате вспомогательная
последовательность примет вид:
t 1(x), t2(x), …. 0
11. Вложенные циклы. Нисходящее проектирование алгоритмов.
Возможны случаи, когда внутри тела цикла необходимо повторять некоторую последовательность операторов, т. е. организовать внутренний цикл. Такая структура получила название цикла в цикле или вложенных циклов. Глубина вложения циклов (то есть количество вложенных друг в друга циклов) может быть различной.
При использовании такой структуры для экономии машинного времени необходимо выносить из внутреннего цикла во внешний все операторы, которые не зависят от параметра внутреннего цикла.
.При использовании вложенных циклов необходимо иметь в виду следующее:
• все вложенные циклы For – Do должны иметь различные счетчики (иначе это противоречило бы требованию на запрет изменения значения счетчика внутри цикла);
• нет никаких ограничений на досрочный выход из внутреннего цикла наружу;
• недопустим вход во внутренний цикл For – Do, минуя его заголовок, что соответствует общему требованию о корректном входе в цикл.
Пример.
Const
n = 15;
m = 24;
Var
i,j: Byte;
R,Tau,s: Real;
z: array[1..n, 1..m] of Real;
…
{заполнение массива z с использованием вложенных циклов}
Tau:= Pi/m;
For i:=1 to n do begin
R:=4.0*Pi*Sin(i*Tau); {первый оператор в теле цикла по i}
For j:=1 to m do z[i, j] := R+j; {второй оператор в теле цикла по i}
end {i};
{вычисление суммы положительных элементов массива z с использованием вложенных циклов }
s:=0;
For i:=1 to n do
For j:=1 to m do
if ( z[i, j] > 0) then s:= s + z [i, j];
Приведенный пример содержит две структуры вложенных циклов. Первая структура предназначена для заполнения элементов двумерного массива z с помощью математической формулы
Наружный цикл со счетчиком i в теле цикла содержит два оператора – оператор присваивания (вычисление значения вспомогательной переменной R с целью сокращения времени вычислений) и оператор внутреннего цикла со счетчиком j. Поскольку наружный цикл в своем теле содержит несколько операторов, то они заключены в операторные скобки begin … end.
Эта структура работает следующим образом: После входа в наружный цикл переменная i (счетчик этого цикла) примет значение 1. Далее, вычисляется значение переменной R при i = 1. Затем выполняется внутренний цикл со счетчиком j, где j на каждом шаге будет последовательно принимать значения 1, 2, 3, … m (i при этом остается неизменным и равным 1). В результате будут вычислены элементы z11, z12, …, z1m первой строки массива. Затем будет выполнен возврат к заголовку наружного цикла, где значение счетчика i будет увеличено на 1 (т. е. i станет равно 2) и вновь будет выполнены операторы, расположенные в его теле. В результате будут определены элементы z21, z22, …, z2m второй строки массива и т.д.
Вторая структура вложенных циклов предназначена для вычисления суммы положительных элементов массива z. Для этого сначала переменной s будет присвоено значение 0, а затем во вложенных циклах будет накоплена требуемая сумма в ячейку s.
Вложенные циклы по ГОСТ
основные способы записи алгоритмов:
- вербальный, когда алгоритм описывается на человеческом языке;
- символьный, когда алгоритм описывается с помощью набора символов;
- графический, когда алгоритм описывается с помощью набора графических изображений.
Общепринятыми способами записи являются графическая запись с помощью блок-схем и символьная запись с помощью какого-либо алгоритмического языка.
Написание алгоритмов с помощью блок-схем регламентируется ГОСТом.
В алгоритмах циклической структуры в зависимости от выполнения или невыполнения какого-либо условия выполняется повторяющаяся последовательность действий, называющаяся телом цикла. Различают циклы с предусловием и послеусловием:
Нисходящее проектирование алгоритмов
Нисходящим проектированием алгоритмов, проектированием алгоритмов "сверху вниз" или методом последовательной (пошаговой) нисходящей разработки алгоритмов называется такой метод составления алгоритмов, когда исходная задача (алгоритм) разбивается на ряд вспомогательных подзадач (подалгоритмов), формулируемых и решаемых в терминах более простых и элементарных операций (процедур). Последние, в свою очередь, вновь разбиваются на более простые и элементарные, и так до тех пор, пока не дойдём до команд исполнителя. В терминах этих команд можно представить и выполнить полученные на последнем шаге разбиений подалгоритмы (команд системы команд исполнителя).
В рамках структурного программирования применяются две стратегии: "нисходящая" и "восходящая".
При использовании метода восходящего проектирования приложение собирается из компонентов или блоков.
Метод нисходящего проектирования.
Нисходящее программирование - это процесс пошагового разбиения алгоритма на всё более мелкие части, с целью получить такие элементы, для которых можно легко написать конкретные команды. Структурное нисходящее программирования - процесс программирования сверху вниз, ограниченный использования структурных блок - схем.
Предположим, что требуется разработать алгоритм для некоторой конкретной функции f. Пускай можно доказать, что f - есть композиция двух других, более простых функций, g и h. Тогда проблема разработки алгоритма для f сводится к проблемам разработки алгоритмов для g и h. Пускай функция g равна некоторой функции i , когда заданный параметр х неотрицателен, или равна некоторой другой функции j, когда х отрицателен, то есть g (x)=i, x>=0 и g (x)=j, x<0. Тогда алгоритм для вычисления g можно выразить в форме конструкции lf-thcn-clsc. Поэтому, если алгоритм для функции i и j построены, то правильный алгоритм для функции g строиться автоматически.
