Лабораторная работа №3: Циклический процесс 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа №3: Циклический процесс



 

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

 

Общие сведения

 

Процесс называется циклическим, если вычисления в нём многократно повторяются по одним и тем же формулам, при разных значениях входящих в них переменных. Различают циклы со списком (или со счётчиком) и итерационные. Для первой схемы число выполненных циклов заранее известно или подсчитывается с помощью некоторой переменной (счётчика), для которой задаются начальное и конечное значения, а так же шаг, с которым меняется эта переменная при каждом новом повторении цикла. Переменная, меняющая своё значение при выполнении цикла, называется параметром, а сам цикл - циклом с параметром. В итерационном процессе вычислений число повторений цикла заранее неизвестно. Исходя из принципов структурного программирования, циклические алгоритмы могут быть построены по схеме с предусловием, с использованием блока модификации (цикл с параметром) и на основе схемы с постусловием.

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

Блок-схема алгоритма цикла с параметром представлена на рис. 6.1.

 

Рис. 6.1 - Блок-схема алгоритма цикла с параметром

 

Условные циклы предназначены для организации итерационных вычислительных процессов. Они подразделяются на циклы с предусловием и циклы с постусловием. В цикле с предусловием перед выполнением тела цикла осуществляется проверка значения логического выражения или переменной логического типа, если значение этих величин удовлетворяют условию работы цикла, то выполняется тело цикла, в противном случае, выполняется следующий за циклом оператор. Таким образом, операторы тела цикла с предусловием могут быть не выполнены ни одного раза. На рис. 6.2 (а) представлена блок-схема алгоритма цикла с предусловием.

Цикл с постусловием предназначен для организации циклических алгоритмов, в которых проверка условия работы цикла выполняется после исполнения операторов тела цикла. По этой причине, операторы тела цикла всегда будут выполнены хотя бы один раз. На рис. 6.2 (б) представлена блок-схема алгоритма цикла с постусловием.

Рис. 6.2 - Блок-схема алгоритма цикла с предусловием и с постусловием

 

Цикл с параметром

 

Для реализации цикла с параметром в Pascal используется оператор For. Синтаксис оператора For выглядит следующим образом:

For i:=n To k Do <Оператор>;

где i - параметр цикла;

n - начальное значение параметра цикла;

k - конечное значение параметра цикла;

<Оператор> - оператор, являющийся телом цикла;

For, To, Do - служебные слова.

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

Например: For i:=1 To 20 Do <Оператор>;

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

Если же i, n, k символьного типа n и k имеют значения, например, 'A' и 'Z' соответственно, то переменная i принимает последовательные значения в порядке букв алфавита: 'А', 'В', 'С',...,'Z'.

Возможна и другая конструкция цикла For.

For i:=n DownTo k Do <Оператор>;

Отличие заключается в том, что приращение параметра для такого цикла всегда равно -1 и начальное значение всегда должно быть больше конечного.

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

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

Например:

For i:=n DownTo k Do

Begin

<Оператор 1>;

<Оператор 2>;

<Оператор N>;

End;

Пример 1. Определение суммы квадратов чисел от 1 до 9.

 

Program Example_6_1;

Uses Crt; { Подключаем модуль }

Var

Num,Sqnum,Sum:Integer; { Описываем переменные }

Begin { Начало программы }

ClrScr; { Очистка экрана }

Sum:=0; { Начальная сумма равна нулю }

For Num:=1 To 9 Do { Задаем цикл по Num }

Begin { Используем операторные скобки }

Sqnum:=Sqr(Num); { результат от (Num2) в Sqnum }

Sum:=Sum+Sqnum; { Накопление суммы }

End; { Закрываем операторные скобки }

WriteLn ('Сумма = ',Sum); { Выводим результат }

End. { Конец программы }

Цикл с предусловием

 

Оператор While предназначен для реализации цикла с предусловием (рис. 6.2 (а)). Синтаксис его выглядит следующим образом:

While <Условие> Do <Оператор>;

где While, Do - служебные слова;

<Условие> - логическое выражение, операция сравнения или переменная логического типа Boolean;

<Оператор> - оператор, входящий в тело цикла.

Перед началом выполнения тела цикла осуществляется проверка значения условия. Тело цикла с предусловием выполняется, пока <Условие> имеет истинное значение (True). Как только значение условия станет ложным (False), цикл прекращает работу и управление передаётся на оператор, следующий за циклом. Таким образом, если при первом вхождении в цикл значение условия ложно, то тело цикла не выполнится ни одного раза. Следует отметить, что в теле цикла необходимо предусмотреть операторы, выполнение которых может повлиять на изменение значения условия, иначе цикл будет выполняться бесконечно. Цикл While используется, как правило, в тех случаях, когда заранее неизвестно количество повторений тела цикла.

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

 

Например:

While M<=X Do

Begin

<Оператор 1>;

<Оператор 2>;

<Оператор N>;

End;

Пример 2. Разложить целое число, вводимое с клавиатуры, на простые множители.

Определим переменную X для ввода разлагаемого числа, M - переменная, используемая в качестве делителя.

Program Example_6_2;

Var

X,M: Integer;

Begin

Write ('Введите целое число... ');

ReadLn (X);

WriteLn ('Разложение числа ',x,' на простые множители');

M:=2;

While M<=X Do

If (X Mod M)=0 then

Begin

Write (' * ',M);

X:=X Div M

End

Else

M:=M+1

End.

 

 

Цикл с постусловием

 

При разработке программ очень удобно бывает использовать цикл с постусловием (рис. 6.2 (б)). Синтаксис цикла с постусловием выглядит следующим образом:

Repeat

<Оператор 1>;

<Оператор 2>;

<Оператор N>;

Until <Условие>;

В операторе цикла с постусловием выражение, которое управляет повторным выполнением последовательности операторов тела цикла (условие), содержится после служебного слова Until. Между служебными словами Repeat и Until заключаются операторы, входящие в тело цикла.

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

Пример 3. Вычислить значение суммы .

Program Example_6_3;

Uses Crt; { подключаем модуль }

Var { описываем переменные }

N: Integer;

S: Real;

Begin { Начало программы }

ClrScr; { очищаем экран }

S:=0; { задаем начальное значение }

N:=1; { задаем начальное значение }

Repeat

S:=S+1/N; { Тело цикла }

N:=N+1 { Увеличиваем значение }

Until N>50; { Проверка на условие }

WriteLn ('Результат суммирования... ',S); { Вывод сообщение и результат }

End. { Конец программы }

Итерационные циклы

 

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

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

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

 

Пример 4. Вычислить значение квадратного корня , по итерационной формуле Ньютона , где i:={0,1,2,…}, а y(i+1) и y(i) – два последовательных приближения к искомому корню. Начальные приближения корня вводится с клавиатуры.

Итерационный процесс для x>1 введется до тех пор, пока относительная погрешность при нахождения очередного приближения по абсолютному значению не станет меньше заданного значения h.

Program Example_6_4; { Задача решена с предусловием }

Uses Crt; { Подключаем модуль }

Var

x,y,h,y0,y1,y2:Real; { Описываем переменные }

Begin { Начало программы }

ClrScr; { Очищаем экран }

Write ('Введите число, из которого необходимо извлечь корень x=');

ReadLn (x); { Вводим с клавиатуры значение }

Write ('Введите начальное приближение y=');

ReadLn (y0); { Вводим с клавиатуры значение }

Write ('Введите точность значения');

ReadLn (h); { Вводим с клавиатуры значение }

y:=y0; { Задаем начальное приближение }

While Abs(y1-y)>=h Do { Начало итерационного цикла }

Begin

y2:=y+1/2*(x/y-y); { Вычисление очередного приближения }

y1:=y; y:=y2; { Переназначения }

End; { Конец итерационного цикла }

WriteLn ('значение корня равно',y); { Вывод на экран значения корня }

End. { Конец программы }

Program Example_6_5; { Задача решена с постусловием }

Uses Crt; { Подключаем модуль }

Var

x,y,h,y0,y1,y2:Real; { Описываем переменные }

Begin { Начало программы }

ClrScr; { Очищаем экран }

Write ('Введите число, из которого необходимо извлечь корень x=');

ReadLn (x); { Вводим с клавиатуры значение }

Write ('Введите начальное приближение y=');

ReadLn (y0); { Вводим с клавиатуры значение }

Write ('Введите точность значения');

ReadLn (h); { Вводим с клавиатуры значение }

y:=y0; { Задаем начальное приближение }

Repeat { Начало итерационного цикла }

y2:=y+1/2*(x/y-y); { Вычисление очередного приближения }

y1:=y; y:=y2; { Переназначения }

Until Abs(y1-y)<=h; { Конец итерационного цикла }

WriteLn ('значение корня равно',y); { Вывод на экран значения корня }

End. { Конец программы }

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

 

1. Как называются программы, в основе которых лежит структура повторения?

2. Сколько операторов цикла вам известно?

3. Каков тип выражения в операторе цикла с предусловием?

4. Верно ли, что в теле цикла с предусловием должен находиться один оператор?

5. Когда проверяется истинность выражения в цикле While?

6. Верно ли, что истинность выражения в цикле с предусловием является условием продолжения цикла?

7. Сколько раз выполнится оператор в теле цикла While, если с самого начала значение выражения равно False?

8. Сколько операторов можно записать между ключевыми словами Repeat и Until?

9. Когда проверяется истинность выражения в операторе цикла Repeat?

10. Какой тип имеет выражение в операторе цикла с постусловием?

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

12. Верно ли, что истинность выражения в цикле Repeat является условием окончания цикла?

13. С помощью, каких служебных слов записывается цикл с параметром?

14. Верно ли, что цикл с параметром применяется в тех случаях, когда заранее известно число повторений?

15. Пусть цикл записан в виде: For V:=E1 To Е2 Do S;

a) Как называется E1?

b) Как называется Е2?

c) Как называется V?

16. Какой тип переменной должен иметь параметр цикла в цикле For?

17. Какой тип должны иметь начальное и конечное значения в цикле For?

18. Чему равно значение параметра цикла For после завершения цикла?

19. Могут ли быть разветвления внутри итерационного цикла?

20. Может ли управляющая переменная итерационного цикла использоваться в записи оператора For.

21. Какие утверждения являются верными (проиллюстрируйте ответ соответствующими примерами):

a) любой цикл For можно записать при помощи цикла While;

b) любой цикл While можно записать при помощи цикла For;

c) не любой цикл For можно записать при помощи цикла While;

d) не любой цикл While можно записать при помощи цикла For.

22. Могут ли быть разветвления внутри цикла с постусловием?

23. Могут ли быть разветвления внутри цикла с параметрами?

 

Варианты заданий

 

6.7.2. Циклы со счетчиками



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 941; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.205.146 (0.069 с.)