Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Степан / Информатика / Паскаль (Яньков).doc
Скачиваний:
70
Добавлен:
20.04.2015
Размер:
660.99 Кб
Скачать

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

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

Такая конструкция позволяет легко организовывать итерационные циклы (циклы с заранее неизвестным числом повторений). Оператор, входящий в тело цикла выполняются до тех пор, пока истинно условие. Для примера решим задачу 4 – вычислять и печатать Y=Х2 до обнаружения первого Х=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(х, х*x);

readln(x)

end;

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

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

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

Оператор, в цикле выполняется до тех пор, пока истинно условие. В отличие от оператора WHILE здесь цикл будет выполнен хотя бы один раз. Структуру с постусловием удобно применять в случае, если цикл необходимо выполнить хотя бы раз независимо от значения условия или, если само условие формируется в цикле и не может быть оценено до входа в цикл.

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

program P5_7;

uses crt;

const e=0.001; {погрешность}

Var I,j:integer; X,y,r:real;

begin

clrscr;

write(‘введите Х ’); readline(x);

r:=1; y:=r; i:=1;

while r>e do begin;

r:=r*x/i; y:=y+r; i:=i+1;

writeln(i,'-ый член=',r:6:4,' Y=',y:6:4);

end;

write('exp(x)=',exp(x):8:4) {проверка}

end.

BREAK

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

СONTINUE

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

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

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

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

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

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

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

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