Командой повторения или циклом называется такая форма организации действий, при которой одна и та же последовательность действий повторяется до тех пор, пока сохраняется значение некоторого логического выражения. При изменении значения логического выражения на противоположное повторения прекращаются (цикл завершается).
Для организации цикла необходимо выполнить следующие действия:
перед началом цикла задать начальное значение параметра;
внутри цикла изменять параметр цикла с помощью оператора присваивания;
проверять условие повторения или окончания цикла;
управлять циклом, т.е. переходить к его началу, если он не закончен, или выходить из цикла в противном случае.
Различают циклы с известным числом повторений (цикл с параметром) и итерационные (с пред- и постусловием).
В цикле с известным числом повторений параметр изменяется в заданном диапазоне.
Если в цикле изменяется простая переменная, то она является параметром цикла; если в цикле изменяется переменная с индексом, то индекс этой переменной является параметром цикла.
Для организации цикла с известным числом повторений в Pascal используется оператор for.
Структура цикла, организованного с помощью этого оператора, имеет вид:
For I := A To B Do Begin End;
или
For I := A DownTo B Do Begin End;
Здесь I — параметр, изменяющийся в цикле; A, B — выражения порядкового типа, обозначающие начальное, конечное значение параметра цикла. Шаг изменения номера параметра цикла равен 1, если в заголовке цикла стоит To (т.е. реально следующее значение параметра цикла вычисляется с помощью функции succ); и -1 — при DownTo (вычисление производится с помощью функции pred).
Порядок выполнения цикла с шагом 1 следующий: вычисляются значения начального и конечного значений параметра цикла; параметр если I принимает начальное значение; если I меньше или равно конечному значению, исполняется тело цикла; значение параметра цикла увеличивается, т.е. I := succ(I); проверяется условие I=B) и при его выполнении цикл повторяется. Выход из цикла осуществляется, если I>B (IB (или A Sum_Max Then Begin Sum_Max := Sum; Ch := I End;
End;
WriteLn('Максимальную сумму делителей ', Sum_Max, ' имеет число ',Ch)
End.
Задача 4. Дано натуральное число 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.
Предлагаем читателю самостоятельно разобраться с представленным решением.
Контрольные вопросы и задания
Назовите отличия итерационных циклов и цикла с параметром.
Какова структура оператора цикла с параметром? Как выполняется цикл с парметром?
Какого типа должны быть пареметр цикла, его начальное и конечное значения в цикле с параметром в языке Pascal?
Могут ли параметр цикла, его начальное и конечное значения в цикле с параметром в языке Pascal быть разных типов? Обоснуйте ответ.
Может ли один цикл быть вложен внутрь другого? Если да, то какова глубина этой вложенности?
Какова структура циклов с пред- и постусловием? как выполняются эти циклы?
Каково минимальное и максимальное количество исполнений циклов с пред- и постусловием? С чем это связано?
Сколько раз исполнится фрагмент программы?
For i := 1 to -1 Do k:=k*i;
Сколько раз исполнится фрагмент программы?
For i := -1 to 1 Do k:=k*i;
Сколько раз исполнится фрагмент программы?
For i := 1 downto -1 Do k:=k*i;
Сколько раз исполнится фрагмент программы?
M := 123; While M 0 Do M := M Mod 10;
Для цикла с параметром запишите его полный эквивалент с помощью циклов с пред- и постусловием.
Для цикла с предусловием запишите его полный эквивалент с помощью цикла с постусловием.
Для цикла с постусловием запишите его полный эквивалент с помощью цикла с предусловием.
Для подготовки данной работы были использованы материалы с сайта http://www.comp-science.narod.ru/