Лабораторная работа №4. Циклические конструкции. Арифметические циклы

Цель работы

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

Порядок выполнения работы

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

Содержание отчета

- наименование и цель работы;

- задание на лабораторную работу согласно варианту;

- схема алгоритма, текст программы на алгоритмическом языке;

- результаты работы программы.

Краткая теория

Оператор цикла задает повторное выполнение определенных операторов. Паскаль предусматривает использование трех операторов цикла:

- оператор цикла с постусловием repeat;

- оператор цикла с предусловием while;

- оператор цикла с параметром for.

Если число повторений заранее известно, то подходящей конструкцией является оператор for. В противном случае следует использовать операторы while или repeat. Для управления повторением операторов можно использовать стандартные процедуры Break и Continue. Break завершает оператор цикла и передает управление первому непосредственно следующему за циклом оператору, а Continue завершает текущую итерацию и продолжает со следующей итерации этого оператора.

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

Оператор цикла с постусловием начинается со служебного слова repeat, заканчивается после выполнения условия, следующего за служебным словом until.

Синтаксис записи оператора:

Repeat

<последовательность операторов>;

until <выражение>;

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

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

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

Repeat

K := I mod J;

I := J;

J := K;

until J = 0;

(Цикл будет выполняться ДО ТЕХ ПОР, ПОКА J не станет равно нулю.)

Repeat

Write('Введите значение (0..9):');

Readln(I);

until (I >= 0) and (I <= 9);

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

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

Синтаксис записи оператора:

while <выражение> do

<оператор>;

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

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

Примеры оператора цикла с предусловием:

1) (нахождение факториала числа Х)

Fact:=1;

while X<=N do

Begin

Fact:=Fact*X;

X:=X+1;

end;

2) while I <> 10 do

I:=Random(10); {функция Random(10) генерирует случайное число 0<=I<10}

4.3 Оператор цикла с параметром

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

Оператор имеет два варианта записи:

- инкрементный (с возрастанием переменной цикла);

for <переменная цикла>:=<начало> to <конец> do

<оператор>;

- декрементный (с убыванием переменной цикла);

for <переменная цикла>:=<начало> downto <конец> do

<оператор>;

В качестве переменной цикла должна использоваться переменная порядкового типа, объявленная в том блоке, где содержится оператор for. Параметры <начало> и <конец> задаются выражениями, типы которых должны быть совместимы по присваиванию с типом переменной цикла. Когда начинает выполняться оператор for, начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора for. Оператор, который содержится в теле оператора for, выполняется один раз для каждого значения в диапазоне между начальным и конечным значением. Переменная цикла всегда инициализируется начальным значением.

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

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

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

Примеры оператора цикла с параметром.

1) Инкрементный вариант.

Вычислить сумму десяти последовательно введенных чисел. Для этого напишем следующий фрагмент программы:

Sum:=0;

for I:=1 to 10 do

Begin

Write(‘Введите число №’,I,’ = ’);

ReadLn(X);

Sum:= Sum + X;

end;

2) Декрементный вариант.

Обратный отсчет времени при запуске ракет:

WriteLn(‘Начинается обратный отсчет времени’);

for Seconds:=10 downto 1 do

WriteLn(‘Осталось’,Seconds:3,’ сек.’);

WriteLn(‘Пуск !’);

Примеры программ

Вычислить значение факториала f=10! с использованием трех вариантов цикла. (f = 10! = 1*2*3*…*10).

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

program First;

Var

i, f: Integer;

Begin

f:=1;

i:=2;

while i<=10 do

Begin

f:= f*i;

i:= i+1;

end;

WriteLn(’10! = ’f);

End.

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

program Second;

Var

i, f: Integer;

Begin

f:=1;

i:=2;

Repeat

f:= f*i;

i:= i+1;

until i>10;

WriteLn(’10! = ’f);

End.

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

program Third;

Var

i, f: Integer;

Begin

f:=1;

for i:=2 to 10 do

f:= f*i;

WriteLn(’10! = ’f);

End.

Варианты заданий для самостоятельного решения

1. Количество вещества n (в молях) равно отношению числа молекул N в данном теле к постоянной Авогадро NA=6*1023моль-1, т.е к числу молекул в 1 моле вещества. Не используя оператор цикла с параметром найти n при N=1..10.

2. Найти сумму целых положительных чисел из промежутка от А до В, кратных 4 (А и В вводятся с клавиатуры).

3. Найти количество делителей натурального числа, больших К (К вводится).

4. Дана функция y=tgx+1. Написать программу для поиска максимального значения y в промежутке xÎ[2;2.8] с шагом 0,1.

5. Дана функция y=2x3+1 Написать программу для поиска максимального значения y в промежутке xÎ[-1;1] с шагом 0,2.

6. Программа ждет ввода числа и в зависимости от количества цифр в числе выдает сообщение об их разрядности: трехзначное, пятизначное и т.д.

7. В учебном заведении задается начало учебного дня, продолжительность «пары», продолжительность обычного и большого перерывов (и их «место» в расписании), количество «пар». Получить расписание звонков на весь учебный день.

8. Леспромхоз ведет заготовку деловой древесины. Первоначальный объем ее на территории леспромхоза составлял p кубометров. Ежегодный прирост составляет k %. Годовой план заготовки – t кубометров. Через сколько лет в бывшем лесу будут расти одни опята?

9. Предприниматель, начав дело, взял кредит размером k рублей под p процентов годовых и вложил его в свое дело. По прогнозам, его дело должно давать прибыль r рублей в год. Сможет ли он накопить сумму, достаточную для погашения кредита, и если да, то через сколько лет?

10. Написать программу нахождения суммы чисел по правилу (n-нечетно): a1+a3+a5+…+an.

11. Найти сумму целых положительных чисел, больших 20, меньше 100 и кратных 9.

12. Написать программу нахождения суммы чисел по правилу (n-четно): a2+a4+a6+…+an.

13. Найти сумму четных делителей натурального числа.

14. Найти количество делителей натурального числа. Сколько среди них четных?

15. Найти сумму десяти чисел кратных 3.

16. Дана функция y=x3-x2+x-1 Написать программу для поиска максимального значения y в промежутке xÎ[0;2] с шагом 0.2.

17. Дано натуральное число. Получить все его натуральные делители.

18. Известно время начала и окончания (например, 6:00 и 24:00) работы некоторого пригородного автобусного маршрута с одним автобусом на линии, а также протяженность маршрута в минутах (в один конец) и время отдыха на конечных остановках. Составить суточное расписание (моменты отправления с конечных пунктов) без учета времени на обед и пересменку.

19. Составить алгоритм для расчета функции у при х=1..10:

Лабораторная работа №4. Циклические конструкции. Арифметические циклы - student2.ru

20. Даны натуральные n, b0, b1, b2 …bn. Вычислить f(b0), f(b1), f(b2) … f(bn), где

Лабораторная работа №4. Циклические конструкции. Арифметические циклы - student2.ru

21. Частица движется случайным образом согласно следующим условиям: в момент времени t=0 частица находится в исходной точке, x=0, y=0. В моменты времени t=1,2,3… она делает случайный шаг в одном из четырех направлений: x:=x+1, x:=x-1, y:=y+1, y:=y-1.

Движение заканчивается, когда x2+y2>=R2. Определить отношение между временем движения и значением R.

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

12=1

22=1+3

32=1+3+5

42=1+3+5+7

n2=1+3+5+7+…+2n-1

Указание. Не использовать цикл с параметром.

23. Составить алгоритм для расчета функции у при х=0..10:

Лабораторная работа №4. Циклические конструкции. Арифметические циклы - student2.ru

24. Составить алгоритм для расчета функции у при х=0..15:

Лабораторная работа №4. Циклические конструкции. Арифметические циклы - student2.ru

25. Утверждается, что функция y=f(x) периодическая с периодом T. Проверить это численно, вычислив функцию с постоянным шагом на отрезке [0;5T]. Проверить на примере функций: y=sin2x, y=tgx (T= Лабораторная работа №4. Циклические конструкции. Арифметические циклы - student2.ru ); Лабораторная работа №4. Циклические конструкции. Арифметические циклы - student2.ru .

26. Дана функция Лабораторная работа №4. Циклические конструкции. Арифметические циклы - student2.ru . Написать программу нахождения значения y в промежутке xÎ[0;1)È(1;2) с шагом 0,1.

27. Возвести натуральное число в квадрат, используя закономерность:

12=1

22=1+3

32=1+3+5

42=1+3+5+7

n2=1+3+5+7+…+2n-1

Указание. Не использовать цикл с параметром.

28. Получить таблицу пересчета миль в километры и обратно (1 миля = 1,609344 км) для расстояний, не превышающих k км, в следующем виде:

МИЛИ КМ

0,6214 1,0000

1,0000 1,6093

1,2428 2,0000

1,8641 3,0000

2,0000 3,2187

… …

Лабораторная работа №5. Регулярный тип
данных (массивы)

Цель работы

Изучить методы алгоритмизации и программирования с использованием регулярных типов (массивов).

Наши рекомендации