Операторы цикла. Составление циклических программ на основе операторов цикла (Лабораторная работа № 4)

Страницы работы

Фрагмент текста работы

направление изменения значения переменной (возрастание – to или убывание – downto );

в) собственно действия (оператор), выполняемые на каждой итерации.

На использование управляющей переменной налагаются следующие ограничения:

1.  В качестве управляющей переменной должна использоваться простая переменная.

2.  Управляющая переменная должна иметь дискретный тип.

3.  Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной.

4.  В теле цикла запрещается явное изменение значения управляющей переменной.

5.  После завершения оператора значение управляющей переменной становится неопределенным.

Оператор, который находится в теле цикла for, выполняется один раз для каждого значения управляющей переменной в диапазоне между начальным и конечным значениями. Если в операторе цикла используется служебное слово to, а начальное значение управляющей переменной меньше его конечного значения, то оператор, содержащийся в теле цикла, не выполнится ни разу. Аналогичная ситуация имеет место в случае использования в операторе цикла служебного слова downto.

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

Program power;

var

          p,x:real;

          i,n:integer;

begin

          read(x,n);                    {ввод x ,n}

          p:=1;                           {присвоение степени начального значения}

for i:=1 to abs(n) do

                      p:=p*x;           {вычисление степени}

          if n<0 then                  {если степень отрицательна}

                      p:=p/x;

          write(p);

end.

II.  Оператор цикла с предусловием используется в тех случаях, когда количество повторений цикла заранее не известно. Он имеет следующую синтаксическую форму:

while <условие>do <оператор>;

Этот оператор задает повторяющееся выполнение оператора, содержащегося в нем. Перед каждым выполнением внутреннего оператора производится проверка значения булевского выражения (условие), которое служит критерием повторения: если это выражение имеет значение true, то выполняется очередная итерация; в противном случае выполнение оператора цикла заканчивается. Если выражение с самого начала имеет значение false, то цикл не выполнится ни разу.

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

Program digits;

var

          n,k:integer;

begin

          write(‘введите n’);

          readln(n);

          k:=1;

          while n div 10>0 do

          begin

                      k:=k+1;

                      n:=n div 10;

          end;

          write(‘Количество цифр:’,k);

end.

У этой программы есть один недостаток: она не обрабатывает отрицательные числа. По условию от нее этого и не требуется. Однако пользователь может ввести и отрицательное число. Перепишем программу так, чтобы пользователь вводил число до тех пор, пока оно не будет положительным. Фрагмент ввода будет теперь выглядеть следующим образом:

write(‘введите положительное n’);

readln(n);

while n < 0 do

begin

          write(‘введите n’);

          readln(n);

end;

Это простой пример так называемой “защиты от дурака”. Теперь пользователь не получит результат, пока не введет положительное число. Однако нам пришлось написать один и тот же фрагмент ввода числа дважды: перед циклом и в теле цикла. Поэтому здесь лучше воспользоваться другим оператором цикла, а именно оператором цикла с постусловием.

III.  Оператор цикла с постусловием имеет следующую синтаксическую форму:

repeat

          оператор1;

          оператор2;

          . . . . . .

          операторN;

until <условие>;

Этот оператор аналогичен предыдущему. Отличие заключается в том, что условие окончания цикла проверяется после выполнения очередной итерации (таким образом гарантируется хотя бы однократное выполнение цикла). Кроме того, критерием окончания цикла является равенство выражения, описывающего <условие>, константе true. Если выражение имеет значение false, то цикл выполняется.

Перепишем теперь фрагмент ввода, используя цикл repeat.

repeat

          write(‘введите положительное n’);

          readln(n);

until n>=0;

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

.

Для любого k было бы нерационально считать входящие в выражения для общего члена степень и факториал с самого начала, имея их значения при предыдущем k. Как степень, так и факториал будут возрастать с ростом k, что может привести к потере точности и/или переполнению разрядной сетки при раздельном

Похожие материалы

Информация о работе

Тип:
Методические указания и пособия
Размер файла:
297 Kb
Скачали:
0