- •Раздел 1. Основные понятия алгоритмизации
- •Тема 1.1 Понятие алгоритма
- •1.2 Свойства алгоритма
- •Тема 1.2 Основные алгоритмические конструкции
- •На практике наиболее распространены следующие формы представления алгоритмов:
- •2.1 Словесный способ записи алгоритмов
- •2.2 Графический способ записи алгоритмов.
- •2.3. Псевдокод
- •2.4. Программный способ записи алгоритмов.
- •Тема 2.1 Основы алгебры логики
- •Одноместная операция (отрицание)
- •Логическое сложение
- •Логическое произведение
- •Импликация
- •Эквивалентность
- •Тема 1.3.1. Языки и системы программирования
- •Раздел 2 . Основы программирования на Турбо Паскаль.
- •Тема 2.1.1. Элементы языка Pascal. Структура языка.
- •I. Структурная схема программы на языке TurboPascal
- •Var имя переменной : тип;
- •II. Алфавит языка Паскаль
- •Тема 2.1.2 Данные: понятия и типы
- •Тема 2.2.1. Операторы языка Паскаль.
- •Тема 2.2.2. Операторы условного и безусловного перехода.
- •Тема 2.2.3. Циклические конструкции.
Тема 2.2.3. Циклические конструкции.
Понятие цикла. Оператор цикла с параметром: структура, блок-схема, пример. Оператор цикла с предусловием: структура, блок-схема, пример. Оператор цикла с постусловием: структура, блок-схема, пример.
После изучения темы студент должен
знать:
Понятия цикла и классификацию операторов цикла;
Оператор цикла с параметром, структуру, принцип выполнения;
Оператор цикла с предусловием, структуру, принцип выполнения;
Оператор цикла с постусловием, структуру, принцип выполнения;
уметь
Составлять программы с использованием операторов цикла.
Командой повторения или циклом называется такая форма организации действий, при которой одна и та же последовательность действий повторяется до тех пор, пока сохраняется значение некоторого логического выражения. При изменении значения логического выражения на противоположное повторения прекращаются (цикл завершается).
Для организации цикла необходимо выполнить следующие действия:
перед началом цикла задать начальное значение параметра;
внутри цикла изменять параметр цикла с помощью оператора присваивания;
проверять условие повторения или окончания цикла;
управлять циклом, т.е. переходить к его началу, если он не закончен, или выходить из цикла в противном случае.
В языке Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты алгоритмов.
Оператор цикла с параметром имеет такую структуру:
For <имя переменной> := <выражение1> To <выражение2> Do <оператор> ;
<имя переменной> - параметр цикла <выражение1> - начальное значение параметра цикла <выражение2> - конечное значение параметра цикла Все три указанных выше объекта должны быть одного порядкового типа. <оператор> - тело цикла.
Этот оператор цикла выполняется следующим образом:
1. Вычисляются значения выражения 1 и выражения 2. 2. Параметру цикла присваивается начальное значение. 3. Параметр цикла сравнивается с конечным значением. Если параметр цикла меньше или равен конечному значению, то перейти к п.4, иначе - конец цикла (переход на следующий оператор после оператора цикла). 4. Выполнить тело цикла. Параметр цикла принимает следующее значение, полученное с помощью функции Succ. Перейти к п.3. Есть еще один вариант этого оператора цикла, когда параметр цикла после каждого выполнения тела цикла принимает следующее значение, полученное с помощью функции Pred. В этом случае служебное слово To заменяется на Dowto и цикл идет до тех пор, пока параметр цикла не станет строго меньше конечного значения.
Пример. Вычислить и напечатать первые 10 чисел Фибоначчи. Решение:
Program Fib; Сonst n=10; {количество чисел} Var i,f1,f2,f3:Integer; Begin f1 := 1; f2 := 1; {первые два числа Фибоначчи} For i := 3 To n Do Begin f3 := f1 + f2; {следующее число} Writeln(f3); f1 := f2; f2 := f3 End End.
Оператор цикла с предусловием.
While <логическое выражение> Do <оператор> ;
Здесь, тело цикла выполняется до тех пор, пока логическое выражение возвращает значениеTrue.
Пример.
Найти наименьший номер члена последовательности, для которого выполняется условие |an-an-1|<e, где an=arctg an-1+1, a1=0. Вывести на экран этот номер и все элементы ai (i = 1, 2, ..., n).
Поскольку по ходу решения задачи необходимо знать an и an-1, будем запоминать их соответственно в переменных ANew и AOld.
Program Posled;
Var Eps, AOld, ANew : Real; N : Integer;
Begin
Write('Введите число Epsilon '); ReadLn(Eps);
AOld := 0; ANew := ArcTan(AOld) + 1;
N := 2;
WriteLn(AOld : 8 :5); WriteLn(ANew : 8 :5);
While Abs(ANew - AOld) >= Eps Do
Begin
AOld := ANew;
ANew := ArcTan(AOld) + 1;
WriteLn(ANew : 8 :5);
N := N + 1
End;
WriteLn('Искомый номер ', N)
End.
Внутрь одного цикла может входить один или несколько других. При этом охватывающий цикл называется внешним, а вложенные циклы — внутренними. Правила организации как внешнего, так и внутренних циклов такие же, как и простого цикла.
Оператор цикла с постусловием.
Repeat <операторы> Until <логическое выражение> ;
Здесь, тело цикла выполняется до тех пор, пока логическое выражение возвращает значение False.
Если в теле цикла операторов For и While более одного оператора, то необходимо использовать составной оператор.
В цикле While "оператор" выполняется если условие верно (True), если условие ложно (False), то цикл заканчивается, т. е. цикл While повторяется пока выполняется условие. Цикл While начинается проверкой условия, поэтому, если начальное условие ложно, то "оператор" не выполняется ни разу. Для включения в тело цикла нескольких операторов применяется составной оператор: Begin "операторы" end.
Цикл Repeat повторяется, если условие ложно (False), и заканчивается, если условие верно (True), т. е. цикл Repeat повторяется до выполнения условия.
Цикл Repeat заканчивается проверкой условия, поэтому "операторы" выполняются не менее одного раза. В теле цикла может записываться более одного оператора.
Циклы с условием обычно используются в тех случаях, если количество повторений блока операторов заранее не известно, например, при расчете суммы членов бесконечного ряда с заданной погрешностью.
Пример1
Дано натуральное число n. Получить все простые делители этого числа.
{Программа отыскания простых делителей данного числа}
Program Pr_Del;
Var N, I, Vsp : Integer;
Log_Per, Priznak : Boolean;
Begin
Write('Введите натуральное число: ');
ReadLn(N);
Priznak := True; {Признак того, не является ли введенное число простым}
{Пока параметр цикла не превысил квадратного корня из данного числа,
продолжаем поиск простых делителей}
For I := 2 To Round(Sqrt(N)) Do
If N Mod I = 0 Then
Begin
Priznak := False; {Введенное число не является простым}
Log_Per := False; {Логическая переменная, принимающая значение True,
если нашлись делители I, отличные от 1 и I}
Vsp := 2;
Repeat
If (I Mod Vsp = 0) And (I <> Vsp) Then Log_Per := True;
Vsp := Vsp + 1
Until (Vsp > I Div 2 + 1) Or Log_Per;
If Not(Log_Per) Then WriteLn(I) {Если число I простое, печатаем его}
End;
If Priznak Then WriteLn(N)
End.
Между конструкциями Repeat until и WHILE DO имеется три существенных отличия
В конструкции WHILE DO проверка условия выхода выполняется вначале, а не в конце цикла, поэтому, если условие не удовлетворяется до начала выполнения цикла, то тело цикла игнорируется и выполняется оператор, стоящий сразу же после окончания цикла
В конструкции WHILE DO условие выхода удовлетворяется, если выражение, определяющее условие выхода, ложно, а в конструкции Repeat until – если это выражение истинно
Между зарезервированными словами Repeat until может размещаться несколько инструкций, в то время как конструкция WHILE DO может содержать максимум одну инструкцию.
Контрольные вопросы
Как записывается и как работает оператор FOR?
Для организации каких циклов применим оператор FOR?
В чем отличие оператора WHILE от оператора REPEAT?
Как программируются циклические алгоритмы с явно заданным числом повторений цикла?
Как программируются циклические алгоритмы с заранее неизвестным числом повторений цикла?
Напишите оператор цикла, который не выполняется ни разу.
Напишите оператор цикла, который выполняется неограниченное число раз.
Замените оператор "Repeat A Until B" равносильным фрагментом программы с оператором While.
