Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ - С-С++методичка и титул.doc
Скачиваний:
12
Добавлен:
08.11.2019
Размер:
789.5 Кб
Скачать

Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей

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

Пример20.

Вычислить сумму членов ряда последовательности .

Пусть - это k-й член ряда. Вычисление суммы S продолжается, пока |Uk|>eps , где eps – заданная точность вычислений, например .

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

Вывод рекуррентной формулы члена ряда:

;

отсюда .

Для рекуррентных формул необходимо задавать начальное значение для неизвестной величины в правой части формулы (Uk): если k=0, то

, 0! =1 и значит U0=1.

Рекуррентная формула суммы ряда:

,

где начальное значение S0=U0=1.

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

Программа:

# include<stdio.h>

# include<conio.h>

# include<math.h> // для fabs (U)

void main()

{ int k=0; float a, U, eps; double S; // описание переменных

clrscr (); // очистка экрана

printf (“Введите значения a, eps : ”);

scanf (“%f%f ”, &a, &eps); // ввод чисел

S=U=1; // начальные значения

while (fabs (U)>eps) // условие продолжения цикла

{ U += a / (k+1); // новый член ряда

S += U; // новая сумма ряда

k++; // новый номер члена ряда

}

printf (“Сумма S = %lf “, S); // вывод результата

}

Оператор цикла с постусловием (do)

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

do оператор // тело цикла

while выражение; // точка с запятой обязательна, где

do (выполнить), while (пока) – ключевые слова;

оператор (тело цикла) – одиночный, либо составной оператор, заключенный в { };

выражение (условие цикла) – допустимое в С выражение, сравнимое с нулем: если оно равно 0, то цикл продолжается, а если не равно 0, то цикл завершается с передачей управления следующему оператору.

Выполнение тела цикла может быть прервано операторами goto, break , continue, так же, как и при использовании оператора цикла while.

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