Readln; end

Операторы циклов пересчет. При выполнении программ нахождения наибольшего общего делителя число повторений различно для разных данных. Когда известно число повторе­ний, удобно использовать цикл пересчет. В Паскале имеется два оператора для организации циклов пересчет: прямой и обратный. Прямой пересчет идет от известного меньшего чис­ла до известного большего, на каждом шаге прибавляется еди­ница (например, от 120 до 140: 121, 122, 123,.... 139, 140). Оператор прямого пересчета:

for i: = n1 to n2 do оператор;

читается как «для i начиная с n 1 до n 2 выполнить оператор».

Переменная i называется переменной цикла, она при пря­мом пересчете всегда меняется от меньшего значения до боль­шего. При i = n 1 цикл выполняется первый раз. Затем к зна­чению переменной i добавляется единица и осуществляется проверка, не превысило ли полученное значение величину n2. Если i +1 £ n 2, то оператор выполняется, если нет, то проис­ходит выход из цикла и выполнение следующего по порядку оператора программы. Поскольку оператор цикла for сам из­меняет значение переменной цикла, ее нельзя менять другими способами, например присваиванием ей какого-либо значения в теле цикла (она не должна появиться слева от знака «:=»).

Оператор в цикле может быть простым или составным, за­ключенным в операторные скобки. Оператор пересчет рабо­тает как цикл до, поэтому надо быть внимательным, оператор в теле цикла выполнится всегда хотя бы один раз. Рассмотрим примеры использования операторов цикла.

1. Пусть надо вычислить аn. Известно, что для получения целой степени п числа его надо умножить само на себя п раз. Это произведение при выполнении программы будет хранить­ся в ячейке с именем р. Каждый раз, при очередном выполне­нии цикла, из этой ячейки будет считываться предыдущий ре­зультат, домножаться на основание степени а и снова записы­ваться в ячейку р. Основной оператор в теле цикла повторяет­ся п раз и имеет вид:

р: = р * а;

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

Программа имеет вид:

Выполнение программы
а = 2 п = 5
I P
   
   
   
   
   
   

program P8;

var a, p: real; i, n: integer;

Begin

write (‘введите a — основание степени, а = ‘);

readln (a);

write (‘введите целое n — показатель степени, n = ‘);

readln (n);

p:= 1;

for i: =1 to n do

p: = p * a;

write (‘p = ‘, p);

Readln

End.

Перед текстом программы представлен протокол ее выпол­нения при возведении числа 2 в пятую степень. Таблица за­полнена вручную, процесс ее заполнения называется отладкой программы. Отладка — это проверка всех этапов работы про­граммы. Для сложных задач сначала составляется контроль­ный пример (тест) и программа выполняется человеком, кото­рый выполняет каждый оператор так, как его выполняет компьютер. Затем программу выполняет компьютер и сверя­ются все промежуточные, полученные при счете данные и ко­нечные результаты. Только после полного совпадения про­грамма выполняется с реальными данными. Для понимания работы программы, выполнения отдельных операторов полез­но заполнять подобные протоколы для всех учебных задач.

2. Вычисление р = n! (n факториал).

По определению п!= 1 * 2 * 3 *... * n. Используя предыду­щую программу, вычислим р как произведение чисел от 1 до n, т. е. р каждый раз умножается не на одно и то же число, а на значение переменной цикла.

program P9;

var p, i, n: integer;

Begin

write (‘введите целое n = ‘);

readln (n);

p= 1;

for i: =1 to n do

p: = p* i;

write (n,’! = ‘,p);

Readln

End.

3. Составление таблицы значений функции у = sin x. Пусть требуется составить таблицу значений функции на отрезке [0;3.14] с шагом 0,1. Чтобы не определять количество повторе­ний вычислений, можно воспользоваться циклом пока. Используя вывод вещественных чисел с фиксированной точ­кой, определим, что количество цифр после запятой в значе­нии функции будет равно 5. Тогда все число, учитывая об­ласть значений синуса, займет семь позиций (числа положи­тельные, значит, добавится позиция для десятичной точки и целой части числа).

Программа имеет вид:

program P10;

var x, у: real;

Begin

x: = 0;

writeln (‘x’: 10,’sin x’: 10);

while x< =3.14 do

Begin

y: = sin(x);

writeln (x: 10,’ ‘,y: 7: 5);

x: = x+ 0.1

end;

Readln

End.

При каждом выполнении цикла будет сначала проверяться условие (x £ 3.14), затем вычисляться значение функции, пе­чататься аргумент х (для него отведено десять позиций, из них одна — для цифры дробной части) и, через три пробела, — значение функции. Для следующего шага цикла вы­числяется новое значение аргумента увеличится на 0,1). Цикл пока позволяет изменять переменную цикла как угодно, увеличивая ее или уменьшая на любое число.

4. Суммирование чисел. При суммировании, как и при ум­ножении нескольких чисел, необходимо накапливать резуль­тат в некоторой ячейке памяти, каждый раз считывая из этой ячейки предыдущее значение суммы и увеличивая его на оче­редное слагаемое. Пусть известно, что будет складываться n чисел. В этом случае надо n раз выполнить действие s: = s + а; здесь a — очередное число, вводимое с клавиатуры. Для пер­вого выполнения этого оператора присваивания надо из ячейки с именем s взять такое число, которое не повлияло бы на ре­зультат сложения. Следовательно, прежде чем начать выпол­нять цикл, надо поместить в эту ячейку (или, что то же самое, присвоить переменной s) число нуль. Программа имеет вид:

program Р11;

var a, s: real; i, n: integer;

Begin

write (‘введите количество слагаемых n = ‘);

readln (n);

s: = 0;

for i: = 1 to n do

Begin

write (i,’- oe число - ‘);

readln (a);

s: = s + a

end;

write (‘сумма s = ‘,s);

Readln

End.

Если количество чисел неизвестно, то можно задать чис­ло-ограничитель, например нуль. В таком случае используется цикл while или repeat.

s:=0; s:=0;

readln (а); repeat

while а <> 0 do readln (a);

begin s: = s + a; s: = s + a

readln (a) until a = 0;

end;

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

for i: = n 2 downto n l do оператор;

Для этого оператора должно также выполняться п2 > n l.

При использовании в программе операторов цикла необходи­мо соблюдать следующие правила:

— внутри цикла может находиться другой цикл, но необхо­димо, чтобы циклы имели разные переменные и внутренний цикл полностью находился в теле внешнего цикла;

— нельзя передавать управление в тело цикла, минуя заго­ловок (это значит, что метка и оператор goto с этой меткой должны находиться в теле цикла);

— если требуется обойти группу операторов в теле цикла и продолжить цикл, т. е. выполнить его следующий шаг, то на­до передать управление на замыкающий цикл end;

— можно досрочно выйти из цикла, или используя опера­тор goto, или изменив параметр условия в операторах while и repeat так, чтобы цикл больше не выполнялся.


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



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