- •Лекция 2. Переменные
- •Типы переменных
- •Комментарии
- •Лекция 3. Операции и операнды. Выражения. Стандартные функции и процедуры Операции и операнды. Выражения
- •Стандартные функции и процедуры
- •Лекция 4.Операторы.Ввод-вывод информации. Операторы
- •Ввод-вывод информации
- •Лекция 5.Создание консольного приложения
- •Лекция 6. Управляющие конструкции. Управляющая конструкция if
- •Самостоятельная работа.
- •Цикл for
- •Самостоятельная работа.
- •Инструкция (цикл) while
- •Самостоятельная работа.
- •Оператор цикла с постусловием repeat
- •Самостоятельная работа.
- •Оператор выбора case
- •Оператор перехода goto
- •Лекция 7.Строки Строковые типы
- •Стандартные подпрограммы для строк
- •Строковые выражения
- •Лекция 8. Преобразования типов Преобразования типов
- •Другие преобразования
- •Подстановка значений
- •Глобальная переменная DecimalSeparator
Самостоятельная работа.
Вычислить
Инструкция (цикл) 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
