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

Т

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.

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

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

while x<>0 do begin

writeln(х, х/2);

readln(x)

end; {оператор while}

С помощью этого оператора гораздо проще решить пример 5-2 (program p5_2). Оператор цикла с постусловием:

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

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

В

repeat {Y=X/2}

readln(x)

if x=0 then break

writeln(х, х/2);

until x=0;

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

BREAK

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

СONTINUE

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

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

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

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

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

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

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

Пример 5-8. Вычислить значения функции Y=X2+Z для 0≤X≤4 и 0≤Z≤ 10 с шагом 1. В этой функции два аргумента, т.е. она является не плоской кривой, а криволинейной по­верхностью. Решение здесь очень простое. Строятся два цикла – внешний (по Х) и внут­ренний (по Z). Поскольку аргументы и функция целочисленные и шаг равен 1, можно ис­пользовать оператор for. В данном случае безразлично, какой параметр поместить снару­жи, а какой внутри. Здесь на одно изменение переменной Х произойдет 11 изменений Z.

В следующих заданиях условия целочисленности аргумента и/или шаг=1 не соблюдаются и для организации циклов придется использовать оператор while.

Задание 5.8. Вычислить функции Y=X2+Z для 0≤X≤4 с шагом 1 и 1≤Z≤10 с шагом 2.

Задание 5.9. Вычислить функции Y=X2+Z для 0≤X≤4 с шагом 0,5 и 1≤Z≤10 с шагом 2.

Задание 5.10. Напечатать таблицу умножения.