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

Цель работы - умение составлять циклические программы, используя оператор цикла с предварительным условием.

Теоретическая часть

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

В данной работе рассмотрим оператор цикла с предварительным условием (с предусловием). Он имеет следующий вид

while B do S

где while, do – служебные слова языка; B – логическое выражение, S – оператор.

При каждом выполнение цикла вычисляется значение логического выражения B.

Пока оно истинно – true, выполняется оператор S, в противном случае выполнение цикла завершается. Коротко принцип работы этого оператора можно описать так: ”Пока B – истина, делай S ”.

Оператор S может быть и составным, то есть представлять собой группу оператора, заключенных в операторные скобки begin…end. Таким образом, если необходимо, чтоб в цикле повторялся не один оператор, а несколько, они должны быть заключены в операторные скобки.

Значение выражения B вычисляется до того, как выполняется оператор S, который обычно называют телом цикла. Поэтому если выражение B с самого начала принимает значение false, то тело цикла не выполняется ни разу.

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

Пример. Вычислить функцию вида

для значений аргумента от a до b с шагом h. Результат представить в виде таблицы, первый столбец которой – значения аргумента, второй – соответствующие значения функции.

При решении этой задачи необходимо использовать циклический процесс, в котором переменная x последовательно принимает значения .

Первое вычисление функции следует сделать для значения a, поэтому перед входом в цикл зададим переменной x начальное значение:

Этот оператор подготавливает аргумента для вычисления следующего значения функции.

Цикл должен повторяется до тех пор, пока значение переменной x не превысит b, то есть пока выполняется неравенство . Однако необходимо учитывать, что как уже отмечалось в первой работе, величины типа real представляются в машине лишь приближенно. Поэтому при переборе значений аргумента x от a до b с шагом h можно не получить точного равенства a+Nh=b(Nh вычисляется как сумма N слагаемых). В частности, если после N повторений цикла получится a+Nh>b, то цикл закончится, а значение функции при x=b не будет вычислено. В связи с этим в качестве условия повторения цикла целесообразно, например, использовать условие x<b+h/2, заведомо выполненное для всех требуемых значений x, так как величина шага h обычно на несколько порядков больше величины тех неточностей в представлении данных, о которых шла речь.

Прежде чем привести один из возможных для этой задачи вариантов программы на языке Турбо Паскаль, напомним, что любая паскаль – программа может содержать в любом месте произвольные по объему комментарии в фигурных скобках, никак не влияющие на ход программы. Более того, современные требования к стилю программирования обязывают оформлять комментариями основные блоки программы.

Задача вычисления значений функции y(x) с заданным шагом h может быть решена с помощью следующей программы:

program TAB; { программа вычисляет и печатает таблицу значений функции на отрезке

[a,b] с шагом h]

var x,y,a,b,h: real;

begin writeln(‘введите a,b,h’); readln(a,b,h);

writeln(‘x y’); {заголовок таблицы}

writeln; {вывод пустой строки}

x:=a;

while x< b+ h/2 do

begin {начало тела цикла}

if (x<1) and (x>-1) then y:=x*x*x3

else y:= x-0.6667;

writeln(x:5:2,y:10:4);

x:=x+h

end; {конец тела цикла}

writeln(‘ конец таблицы’);

end.

При вводе в качестве исходных данных для предложенной программы a=-2, b=2, h=0.5 получаем результат в виде следующей таблицы значений функции:

x y

-2.00 -2.6667

-1.50 -2.1667

-1.00 -1.1667

-0.50 -0.0417

0.00 0.0000

0.50 0.0417

1.00 0.3333

1.50 0.8333

2.00 1.3333

Независимо от квалификации автора программы правильность результатов ее работы всегда должна быть обоснована. Любая профессиональная программа обязательно сопровождается тестовыми данными, показывающими правильность ее работы. В описанном эксперименте для того, чтобы проверить все варианты вычислений, можно убедиться в правильности полученных значений в точках и что сделать не трудно.

Контрольные вопросы.

1. Какими зарезервированными словами обозначается оператор цикла с предусловием?

2. Как работает оператор while?

3. В каком случае тело оператора цикла с предусловием не будет выполнено ни разу?

Задания

I. Напишите программу, вычисляющую значения функции на промежутке [ ] с шагом . Значения a, b и h выберите самостоятельно так, чтобы выявить основные особенности поведения функции. В отчете приведите график функции и результаты вычисления контрольных точек, подтверждающие правильность работы программы.

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

Лабораторная работа №5.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: