Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum_po_programmirovaniyu.doc
Скачиваний:
23
Добавлен:
09.12.2018
Размер:
2.5 Mб
Скачать

3.2.5. Операторы повтора (цикла)

Цикл – это последовательность операторов, которая может выполняться более одного раза. Существует три вида операторов цикла: for, repeat, while. Если число повторений заранее известно, то целесообразно использовать оператор for. Если количество повторений определяется некоторыми условиями, то используются операторы while и repeat.

Оператор цикла for может быть представлен двумя способами:

- for <параметр цикла>: = <sn> to<sk> do <оператор>;

41

- for <параметр цикла>: = <sn> downto<sk> do <оператор >.

sn, sk – выражения, определяющие начальное и конечное значение параметра цикла.

<оператор> - простой или составной оператор, называемый телом цикла.

1. При первом способе представления (to) параметр цикла увеличивается на 1, а при втором способе (downto) параметр цикла уменьшается на 1. При использовании в качестве параметра цикла переменной перечисленного типа параметр цикла изменяется на номер значения.

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

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

4. Значение параметра цикла не должно изменяться в теле цикла.

5. Если sn>sk для цикла с to, то цикл не выполняется ни разу. Если sn < sk для цикла с downto, то цикл тоже не выполняется ни разу.

6. Выход из цикла до его окончания можно осуществить, используя оператор goto или break.

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

Рассмотрим применение оператора цикла на примерах.

Пример 1. Разработать фрагмент программы для вывода на экран переменной перечисленного типа.

type

звание = (техник, инженер, лаборант);

42

var

{Задание массива из 10 элементов.}

{Каждый элемент массива может}

{ принимать значения из списка,}

{ заданного в перечислении}

sl: array[1..10] of звание;

i: integer;

begin

{Начало цикла for}

for i: = 1 to 10 do

begin

{Начало оператора выбора case}

case sl[i] of;

техник: writeln(‘техник’);

инженер: writeln(‘инженер’);

лаборант: writeln(‘лаборант’);

end; {end case}

end; {end цикла for}

end.

Пример 2. Разработать программу, выводящую на экран значение переменной типа shortiInt в двоичной системе счисления.

var i, n , s: shortint;

const a =128;

begin

writeln(‘Введите число в десятичной системе счисления’);

readln(n);

for i: = 1 to 8 do

begin

s: = (n)and(a);

if s = 0 then write(‘0’)

43

else write(‘1’);

n: = n shl 1;

end;

end.

Переменной соответствует двоичное представление - . Выбор начального и конечного значения параметра цикла определяется количеством бит, отводимых под размещение переменной типа shortint. Операция в зависимости от значения старшего бита исходного числа дает либо значение 1, либо 0. Если , то на первом шаге

Двоичное представление

n = 27

0 0 0 1 1 0 1 1

a = 128

1 0 0 0 0 0 0 0

n and a = 0

0 0 0 0 0 0 0 0

значение s равно 0.

Операция n: = n shl 1 сдвигает двоичное представление числа на одну позицию влево, и цикл повторяется заново. Значение по-прежнему будет равно 0. Значение будет равным 1 в том случае, если в старшем бите появится единица.

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

While <условие продолжения повторений > do

<тело цикла>;

Условие – булевское выражение, тело цикла - простой или составной оператор. Перед каждым выполнением тела цикла вычисляется значение условия (отсюда и название – цикл с предусловием). Если результат равен true, тело цикла выполняется и снова вычисляется значение условия. Если результат равен false, происходит выход их цикла и управление передается оператору, следующему за оператором цикла.

44

Оператор цикла while можно использовать для организации бесконечного цикла:

While true do

begin

. . .

end;

Выход из бесконечного цикла возможен по какому-то условию с использованием оператора goto и процедур Exit, Halt, Break. Процедура Break обеспечивает выход из цикла. Процедура Exit обеспечивает выход из выполняемого блока в окружающую среду. Если выполняемый блок является процедурой или функцией, выход производится во внешний блок. Если Exit указана в операторной части основной программы, то программа прекращает свою работу и управление передается среде программирования. Процедура Halt(n:word) прекращает выполнение программы и передает управление системе программирования, здесь – код завершения программы, передаваемый в операционную систему.

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

.

Суммирование прекращать, если абсолютная величина очередного члена ряда станет меньше заданной погрешности.

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

program sum;

var

s, eps, x, p, z: real;

i, fact: integer;

begin

45

writeln(‘Введите значение аргумента x’);

readln(x);

writeln(‘Введите значение погрешности eps’);

readln(eps);

s: = 1;

n: = 1;

z: = 1;

{Начало цикла с предусловием}

while abs(z) >= eps do

begin

{Вычисление факториала}

fact: = 1;

for i:= 1 to n do

fact: = fact*i;

{Вычисление степени числа x}

p:= x;

for i:=1 to n-1 do

p:= p*x;

z:= p/fact;

{Вычисление суммы}

s:= s+z;

end; {Конец цикла с предусловием}

writeln(‘Результат = ’, s);

end.

Поскольку необходимо вычислять факториал для последовательности чисел 1, 2, … и возводить x последовательно в степени 1, 2, …, то можно оптимизировать процесс вычислений факториала и степени числа x.

fact: = 1;

i: =1;

p:=1;

while abs(z) >= eps do

begin

46

fact: =fact*i;

p:=p*x;

z:=p/fact;

s:=s+z;

i:=i+1;

end;

writeln(‘Результат = ’, s);

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

repeat

<оператор>;

. . .

<оператор>;

until <условие окончания цикла >;

Операторы, заключенные между repeat и until, являются телом цикла. Сначала выполняется тело цикла, а затем проверяется условие окончания цикла (отсюда и название – цикл с постусловием). Цикл с постусловием, в отличие от цикла с предусловием, всегда выполняется хотя бы один раз. Цикл с постусловием будет выполняться, если значение условия будет равно false. При значении условия, равном true, цикл прекращает работу.

Пример. Решить предыдущую задачу с использованием цикла repeat.

program sum;

var

s, eps, x, p, z: real;

i, fact: integer;

begin

writeln(‘Введите значение аргумента x’);

readln(x);

writeln(‘Введите значение погрешности eps’);

47

readln(eps);

s: = 1;

n: = 1;

z: = 1;

{Начало цикла с постусловием}

repeat

{Вычисление факториала}

fact: = 1;

for i:=1 to n do

fact: =fact*i;

{Вычисление степени числа x}

p:=x;

for i:=1 to n-1 do

p:=p*x;

z:=p/fact;

{Вычисление суммы}

s:=s+z;

until abs(z) <= eps; {Конец цикла с постусловием}

writeln(‘Результат = ’, s);

end.

Контрольные вопросы и упражнения

1. Структура программы на языке Паскаль.

2. Назначение директив компилятора.

3. Классификация операторов языка Паскаль.

4. Если число a = 3.725, то, что будет выведено на экран после выполнения оператора writeln(a:6:2)?

5. Разработать программу для расчета значения:

48

6. Разработать программу для расчета количества цифр в десятичной записи целого неотрицательного числа n.

7. Разработать программу вычисления значения:

.

8. Если среди чисел есть хотя бы одно отрицательное число, то логической переменной присвоить значение true, а иначе – значение false.

9. Для целых чисел в диапазоне от до вывести числа Армстронга. Число Армстронга - это число из разрядов, которое равно сумме - ых степеней своих разрядных цифр, например: .

10. Разработать программу для вычисления:

.

11. Разработать программу для вычисления:

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

13. Разработайте программу для вычисления биномиального коэффициента:

.

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

15. Дано действительное число и натуральное . Вычислить

49

16. Даны действительные числа и натуральное число . Разработать программу для вычисления:

где .

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

18. Разработать программу для проверки, является ли заданное число палиндромом, то есть, таким, десятичная запись которого читается одинаково слева направо и справа налево.

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

20. Числа Фибоначчи определяются формулами:

Определить - тое число Фибоначчи.

21. Дано натуральное число . Подсчитать количество решений неравенства в натуральных числах, не используя действий с вещественными числами.

22. Составить программу, определяющую разложение на простые множители заданного натурального числа .

23. Составить программу, подсчитывающую число сочетаний с повторениями, используя следующую формулу:

,

50

Какими способами можно избежать возможного переполнения.

24. Среди первых натуральных чисел найти те, которые при удалении последней цифры уменьшаются в целое число раз.

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

26. Написать программу, которая определяет количество единиц в двоичном представлении переменной Word.

ЗАНЯТИЕ 4. МАССИВЫ, СТРОКИ, МНОЖЕСТВА