Реферат: Операторы цикла
ОПЕРАТОРЫ
ЦИКЛА
ЗАДАЧИ
ЦЕЛОЧИСЛЕННОЙ АРИФМЕТИКИ
Командой
повторения или циклом называется такая форма организации действий, при которой
одна и та же последовательность действий повторяется до тех пор, пока
сохраняется значение некоторого логического выражения. При изменении значения
логического выражения на противоположное повторения прекращаются (цикл
завершается).
Для организации
цикла необходимо выполнить следующие действия:
перед началом
цикла задать начальное значение параметра;
внутри цикла
изменять параметр цикла с помощью оператора присваивания;
проверять
условие повторения или окончания цикла;
управлять
циклом, т.е. переходить к его началу, если он не закончен, или выходить из
цикла в противном случае.
Различают циклы
с известным числом повторений (цикл с параметром) и итерационные (с пред- и
постусловием).
В цикле с
известным числом повторений параметр изменяется в заданном диапазоне.
Если в цикле
изменяется простая переменная, то она является параметром цикла; если в цикле
изменяется переменная с индексом, то индекс этой переменной является параметром
цикла.
Для организации
цикла с известным числом повторений в 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) и при его выполнении цикл
повторяется. Выход из цикла осуществляется, если I>B (I<B для H=-1), и
выполняется оператор, следующий за оператором цикла. Если A>B (или A<B
для H=-1), то цикл не исполняется ни разу.
Если в
операторе цикла с параметром начальное или конечное значение параметра заданы
переменными или выражениями, то значения этих переменных должны быть определены
в программе до оператора цикла. Не следует внутри цикла изменять параметр
цикла, его начальное и конечное значения с помощью операторов присваивания или
ввода.
Задача 1. Дано
натуральное n, действительное x. Вычислить
Разработаем
алгоритм решения задачи:
1) ввести
данные - количество слагаемых n и число x;
2) присвоить
переменной, в которой будем хранить степени sin x, значение 1; S := 0;
3) присвоить
параметру цикла значение 1;
4) если
значение параметра цикла меньше n, перейти к следующему пункту, иначе к п. 9;
5) вычислить
очередную степень sin x;
6) добавить
вычисленное значение к сумме;
7) увеличить
параметр цикла на 1;
8) перейти к
п.4;
9) вывести на
печать сумму S;
10) конец.
{Программа
вычисления суммы степеней sin x}
Program Summa;
Var S, X, Pr :
Real; N, I : Integer;
Begin
Write('Введите число слагаемых и x: ');
ReadLn(N, X);
Pr := 1; {в этой переменной хранятся
последовательные степени sin x}
S := 0;
For I := 1
To N Do
Begin
Pr := Pr
* Sin(X); {Очередная степень Sin(x)}
S := S +
Pr
End;
WriteLn('Сумма равна ', S : 7 : 4)
End.
Достаточно
часто цикл с параметром используется при разработке программ обработки
массивов.
Примечание. Как
видно из рассказа, приведённого выше, область применения цикла с параметром в
языке Pascal значительно ограничена: ограничения связаны с шагом изменения
параметра цикла, с типом параметра цикла, его начального и конечного значения.
В некоторых языках, например, в Basic, таких ограничений не существует.
По сравнению с циклом
с параметром итерационные циклы являются универсальными. Для организации
итерационных циклов используются операторы цикла с предусловием while и цикла с
постусловием repeat..until.
Эти операторы
не задают закон изменения параметра цикла, поэтому необходимо перед циклом
задавать начальное значение параметра с помощью оператора присваивания, а
внутри цикла изменять текущее значение этого параметра.
Соответствующие
структуры циклов:
while B Do Begin <операторы> End;
Repeat <операторы> Until C;
Здесь B, C —
логические выражения.
Для оператора
цикла с предусловием проверяется значение логического выражения, если оно имеет
значение True, то операторы, входящие в цикл, выполняются, в противном случае
осуществляется выполнение оператора, следующего за циклом.
Цикл с
постусловием выполняется хотя бы один раз. Затем проверяется значение
логического выражения, если оно False, то операторы, входящие в цикл,
выполняются, в противном случае осуществляется выход из цикла.
Входить в цикл
можно только через его начало, т.е. нельзя входить внутрь цикла с помощью
управляющего оператора, т.к. в этом случае параметр цикла не определен.
Задача 2. Найти
наименьший номер члена последовательности, для которого выполняется условие
|an-an-1|<e, где an=arctgan-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.
Внутрь одного
цикла может входить один или несколько других. При этом охватывающий цикл
называется внешним, а вложенные циклы — внутренними. Правила организации как
внешнего, так и внутренних циклов такие же, как и простого цикла.
Задача 3. На
интервале [2; n] найти натуральное число с максимальной суммой делителей.
Предлагаемая
задача может быть отнесена к классу «задачи целочисленной арифметики», где
аргументы, результаты и промежуточные величины относятся к целому типу. Следует
заметить, что в такого рода задачах довольно часто используются операции DIV и
MOD; наиболее типичной подзадачей является определение количества цифр в записи
числа.
Алгоритм
решения задачи:
1) ввести число
n;
2) переменной для
хранения максимальной суммы делителей присвоить
значение 1 (это сумма делителей числа 1);
3) запомнить
число с максимальной суммой делителей;
4) параметру
цикла I присвоить значение 2;
5) если I
больше n, перейти к п. 13, иначе - к следующему пункту;
6) переменной
для хранения очередной суммы делителей присвоить значение 0;
7) параметру
цикла K присвоить значение 1;
8) если K
больше I/2, перейти к п. 11, иначе - к следующему пункту;
9) если I
делится на K без остатка, добавить K к текущей сумме делителей;
10) увеличить K
на 1 и перейти к п. 8;
11) сравнить
текущую сумму делителей с максимальной, если максимальная меньше,
запомнить новое значение и число,
соответствующее этой сумме;
12) увеличить I
на 1 и перейти к п. 5;
13) вывести
число с максимальной суммой делителей и эту сумму;
14) конец.
Program Sum_Del;
Var N, I,
Sum_Max, Sum, K, Ch : Integer;
Begin
Write('Введите число N: '); ReadLn(N);
Sum_Max := 1; {Максимальная сумма
делителей}
Ch := 1; {Число с максимальной суммой
делителей}
For I := 2 To N Do {Это цикл по количеству чисел}
Begin
Sum := 0;
For K := 1 To I Div 2 + 1 Do {В этом
цикле находим сумму делителей}
If I Mod K = 0 Then {Если I нацело делится на K, то K -
делитель I}
Sum := Sum + K;
Sum :=
Sum + I;
If Sum
> 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/
|