Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
830.55 Кб
Скачать

Самостоятельная работа.

Вычислить

Инструкция (цикл) while

Эта инструкция применяется в том случае, когда нужно выполнить несколько раз определенные действия. Причем заранее не известно, сколько раз этот цикл выполнять – это становится ясно только во время работы программы.

Синтаксис инструкции такой:

while условие do инструкция;

или расширенный вариант:

while условие do begin

инструкция 1;

инструкция 2;

...................

инструкция n;

end;

Здесь условие – переменная или выражение логического типа. Сначала вычисляется условие. Если условие ложно (False), то цикл не выполняется и сразу заканчивает работу. Если же условие истинно (True), то цикл выполняет инструкции, затем вновь возвращается к условию. Если условие опять возвращает True, цикл выполняется еще раз, и так до тех пор, пока условие не вернет False. Будьте осторожны с этим циклом! Не включайте туда условие, которое никогда не станет False. Компьютер в таком случае «зациклится», то есть зависнет. Обычно для этого внутрь цикла помещают счетчик – переменную целого типа. Только в отличие от цикла for, здесь переменная не увеличивает свое значение автоматически, за этим должен следить сам программист. Пример применения инструкции:

i := 1;

while i < 10 do begin

ShowMessage('Число равно ' + IntToStr(i));

i := i + 1;

end;

В этом простом примере мы целой переменной i присваиваем значение 1. Затем выполняем цикл while до тех пор, пока i не станет больше или равно 10. Если бы мы внутри цикла не указали «i := i + 1;», то этого никогда бы не произошло, и мы зациклили бы программу.

Пример 3

Вычислить с погрешностью e=10-4 значение функции y=cos(x),используя разложение в ряды:

Решение

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

Запишем выражение для общего члена ряда:

Подставим в эту формулу вместо n величину n-1:

Найдем отношение:

Откуда получаем искомую рекуррентную формулу:

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

Программа

program 3;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

eps,s,t,f,x,y:real;

n:integer;

begin

writeln('Enter x,eps');

readln(x,eps);

s := 0;

t := 1;

n := 0;

while abs(t)>eps do

begin

s := s+t;

n := n+1;

f := -sqr(x)/(2*n*(2*n-l));

t:= t*f;

end;

у := cos(x);

writeln('row amount s=',s:8:5);

writeln('proper value y=’,y:8:5);

readln

end.

Результаты работы программы

Enter x,eps

4.25 0.000001

row amount s=-0.44609

proper value у=- 0,44609

Самостоятельная работа.

Определить число членов бесконечного ряда

и найти его сумму с погрешностью e=10^-5

Оператор цикла с постусловием repeat

Оператор repeat имеет следующий формат: Repeat<оператор1>; < оператор2 >; < операторN > until < логическое выражение>;

Выполняются оператор repeat следующим образом. В начале выполняется группа операторов - оператор 1, оператор2,..., операторN. Затем вычисляется значение логического выражения. Если оно равняется true, то цикл прекращается, в противном случае выполняется следующая итерация цикла.

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

В отличие от операторов for и while, синтаксис которых предусматривает выполнение в цикле только одного оператора, в тело цикла оператора repeat может входить произвольное количество операторов. Это означает, что использование операторных скобок begin...end в операторе repeat не обязательно, хотя их присутствие не будет ошибкой.

Пример4.

Определить число членов бесконечного ряда

и найти его сумму с погрешностью е =10-5

Решение

Эта задача была решена нами с использованием оператора while в примере 3 Покажем, что ее можно решить и с использованием оператора цикла с постусловием Напомним, что: s - накапливаемая сумма, t - очередное слагаемое, n - номер текущего члена ряда, eps - погрешность.

Программа

program 4;

{$APPTYPE CONSOLE}

Uses

SynUtils,Math;

Var

eps,s,t:real;

n:integer;

begin

writeln('Enter eps');

readln(eps);

s := 0;

t :=1;

n : = 0;

repeat

s := s+t;

n := n+1;

t := power(2,-n);

until t

 writeln('s=',s:7:3 );

writeln('number of members of row n=',n:3);

Readln

End.

Результаты работы программы

Enter eps;

o.oooo1

n=2.000

number of members of row n=17

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