каталог статей |
РџРѕРёСЃРє:
пример: сотовые телефоны расширенный поиск

Операторы цикла

ЗАДАЧИ ЦЕЛОЧИСЛЕННОЙ АРИФМЕТИКИ

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

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

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

внутри цикла изменять параметр цикла с помощью оператора присваивания;

проверять условие повторения или окончания цикла;

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

Различают циклы с известным числом повторений (цикл с параметром) и итерационные (с пред- и постусловием).

В цикле с известным числом повторений параметр изменяется в заданном диапазоне.

Если в цикле изменяется простая переменная, то она является параметром цикла; если в цикле изменяется переменная с индексом, то индекс этой переменной является параметром цикла.

Для организации цикла с известным числом повторений в 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

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

Задача 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|

Поскольку по ходу решения задачи необходимо знать 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/




Похожие статьи

Управление заплатами в ОС Windows
Марсин Полич (Marcin Policht) Управление заплатами (patch management, без сомнения, является одной из наиболее критически важных и сложных проблем наших дней, связанных с безопасностью операционных...

Раздвижные двери CSS
Douglas BowmanСреди редко обсуждаемых преимуществ CSS—возможность наложения фоновых изображений с целью получения различных эффектов. В соответствии со стандартом CSS2 для каждого фонового изображен...

Компьютерная подготовка
Курсовая работа.Выполнил студент ТМЦДО гр.: з-472-27б специальности 061000 Маркелова А.А.Томский государственный университет систем управления и радиоэлектроники (ТУСУР)Кафедра автоматизации обработ...



Copyright В© 2006-2007 ExcelioN
Правовая информация
Все права защищены
.
Время генерации страницы: 0.027798175811768 сек.