Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УПП Программирование 2102,2202.doc
Скачиваний:
17
Добавлен:
20.04.2015
Размер:
760.32 Кб
Скачать

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

WHILE условие DO оператор

Такая конструкция позволяет легко организовывать итерационные циклы (циклы с заранее неизвестным числом повторений). Оператор, входящий в тело цикла выполняется до тех пор, пока истинно условие. Для примера решим задачу – вычислять и печатать Y=2/X до обнаружения первого Х=0 (на ноль делить нельзя). Программа приведена ниже.

r

PROGRAM P5_2;

var x,y: real; {другой вариант}

begin

x:=3;

while x<=9 do begin

y:=sqr(x–6); writeln(x,y); x:=x+2;

end;

end.

eadln(x);{Y=2/Х}

while x<>0 do begin

writeln(х, 2/x);

readln(x)

end;

С помощью этого оператора го­раздо удоб­нее программировать при­мер 5-2 (program P5_2 выше справа).

 Тест. 5.2. Сколько раз будет выполнен цикл и чему будет равно k по завершению программы. Выберите один из трех ответов: 1).0, 2).1, 3).-1.

var k:integer;

begin

k:=13;

while k>0 do k:=k-2;

end.

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

REPEAT оператор UNTIL условие

Оператор, в цикле выполняется до тех пор, пока ложно условие. В отличие от оператора WHILE здесь цикл будет выполнен хотя бы раз. Структуру с постусловием удобно применять в случае, если цикл необходимо выполнить хотя бы раз независимо от значения условия или, если само условие формируется в цикле и не может быть оценено до входа в цикл. Внутри цикла нет необходимости использовать блок begin (блок образуют сами слова repeat...until). Справа приведено решение предыдущего примера для функции Y=2/X. Однако здесь он не удачен. Поскольку хотя бы раз деление в цикле выполняется, может оказаться, что если самое первое Х=0, произойдет ошибка (деление на 0).

В

repeat {Y=2/Х}

readln(x)

writeln(х, 2/x);

until x=0;

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

BREAK

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

Если нужно, не выполняя до конца текущего цикла, начать следующий, следует воспользоваться опера­тором

СONTINUE

Действие указанных операторов (применительно к циклу FOR) иллюстрирует рисунок выше.

Тест. 5.3. Сколько раз будет выполнен цикл и чему будет равно k по завершению программы. Выберите один из трех ответов: k= 1).0, 2).1, 3).-1.

var k:integer;

begin

k:=-13;

repeat k:=k+2 until k>0;

end.

Задание 5.6. Написать программу, в которой вводятся два операнда Х и Y и знак операции (+,–,/,*). Вычислить результат Z в зависимости от знака. Предусмотреть реакции на возможный неверный знак операции, а также на ввод Y=0 при делении. Организовать возможность многократных вычислений без перезагрузки программа (т.е. построить цикл). В качестве символа прекращения вычислений принять ‘0’.

 Функциональные ряды. При работе с компьютером возни­кает впе­чатление его огромной интеллектуальной силы. На самом деле это не так. Собственно процессор умеет (правда очень быстро) выполнять только четыре арифметических действия и логи­ческие операции, т.е. располагает возмож­ностями ученика 1-го класса. Откуда же вся его математическая мощь. Ответ простой – от программистов. Разработчики компиляторов языков (в частности Паскаля) побеспокоились о том, чтобы в нем присутствовали многие матема­тические функции. Когда мы используем выражение exp(x) мы на самом деле вызываем подпрограмму вычисления ex, написанную для нас неизвестным автором из фирмы Borland. Однако мы можем и сами это сделать. Существует методы, позволяющие вычислять функции, используя лишь небогатые возмож­ности процессора. Так из математики хорошо известны функци­ональные ряды Тейлора (здесь аргумент включен в члены ряда). Хотя такие ряды бесконечны, нам нет необходимости (и возможности) вычислять их целиком. Значения элементов ряда быстро убывают и мы можем прекратить вычисления в тот момент, когда очередной член станет меньше заданной погрешности ε.

Пример 5-7. Вычислить с заданной погрешностью функцию ex для произвольного значения Х<1. Ряд Тейлора для нее выглядит следующим образом.

ex ≈1+x+x2/2!+ x3/3!+ x4/4!+...

Отсюда можно записать аналитические зависи­мости (выше справа). Здесь у – искомая функция, r – элемент ряда, i – номер члена разложения.

 Задание 5.7. Вычислить с заданной погрешностью функцию, отобража­емую рядом:

y=x11!/2!–x32!/3!+ x43!/4!– x54!/5!+...

 Сложные циклы. Этот термин означает вложенность одного цикла в другой.

Пример 5-8. Вычислить значения функции Y=X2+Z для 0≤X≤4 и 0≤Z≤10 с шагом 1.