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


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



ЗНАЕТЕ ЛИ ВЫ?

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



 

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

Краткие теоретические сведения

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

В случаях, когда число повторений может быть заранее известно, для организации циклической обработки информации применяется оператор повтора For. Часто этот оператор повтора называют оператором цикла с параметром, т.к. число повторений задается переменной, называемой параметром цикла, или управляющей переменной. Оператор повтора For состоит из заголовка и тела цикла. Данный оператор может быть представлен в двух формах:

For <параметр цикла> := <S1>

То <S2 >

Do <Оператор> или <Группа операторов>;

 

For <параметр цикла> := <S1>.

То <S2>

Downto <оператор> или <группа операторов>;

где S1 и S2 – выражения, определяющие соответственно начальное и конечное значения параметра цикла.

Общий вид оператора цикла For:

For... Do – заголовок цикла;

<оператор> или <группа операторов> - тело цикла.

Тело цикла может быть простым или составным оператором (в последнем случае группа операторов заключается в операторные скобки: Begin…End). Оператор цикла For обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного.

Заголовок оператора повтора For определяет:

- диапазон изменения значений параметра цикла и одновременно число повторений оператора, содержащегося в теле цикла;

- направление изменения значения параметра цикла (возрастание – или убывание Downto).

При первом обращении к оператору For вычисляются выражения S1 и S2 и осуществляется присваивание <параметр цикла>:<=S1.

После этого циклически повторяются следующие действия:

1. Проверяется условие <параметр цикла>:<=S2.

2. Если условие выполнено, то оператор For продолжает работу (выполняются операторы в теле цикла), если условие <параметр цикла>:<=S2 не выполнено, то оператор For завершает работу, и управление в программе передается оператору, следующим за циклом.

3. Значение параметра цикла изменяется на +1 (Тo) или –1 (Downto) и далее с п.1.

Внимание: Шаг изменения, параметра цикла - единица!

На использование параметра цикла в операторе повтора For налагаются следующие ограничения:

1. В качестве параметра должна использоваться простая переменная, описанная в текущем блоке;

2. Параметр цикла должен иметь дискретный тип;

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

4. В теле цикла запрещается явное изменение значения параметра цикла (например, оператором присваивания);

5. После завершения оператора цикла For значение параметра цикла становится неопределенным.

Программа Exp_1 выводит на экран таблицу перевода из градусов по шкале Цельсия (С) в градусы по Фаренгейту (F) для значений от 150 до 300С с шагом 1 градус. Перевод осуществляется по форме: F=C*1.8+32.

 

Program Exp_1;

Var

I: Integer;

F: Real;

Begin

Writeln (‘ Температура ‘);

For I := 15 To 30 Do { Заголовок цикла с параметром }

Begin { Начало тела цикла }

F:=I*1.8+32;

Writeln (‘ По Цельсию= ‘,I,’ по Фарингейту= ‘, F:5:2)

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

End.

 

В блоке описания переменных описаны параметр цикла I типа Integer и переменная F – температура по Фаренгейту типа Real. Переменная I, являясь параметром цикла, также является переменной, хранящей целочисленные значения температуры по шкале Цельсия.

Цикл выполняется следующим образом.

При первом обращении к оператору For вычисляются значения начального (15) и конечного (30) параметров цикла, и параметру цикла I присваивается начальное значение 15.

Затем циклически выполняется следующее:

1. Проверяется условие I<=30.

2. Если оно соблюдается, то выполняется составной оператор в теле цикла, т.е. рассчитывается значение выражения I*1.8.+32, затем оно присваивается переменной F и на экран выводится сообщение:

‘По Цельсию= ’, I, ‘ по Фаренгейту= ’, F:5:2

Если условие I<=30 не соблюдается, т.е. как только I становится>30, оператор цикла не выполняется, а управление в программе передается за пределы оператора For, в нашем примере на оператор End;. Программа завершает работу.

3. Значение параметра цикла I увеличивается на единицу, и управление передается в заголовок цикла For для проверки условия.

Далее цикл повторяется с п.1.

Рассмотрим пример программы с применением оператора повтора For с убыванием значения управляющей переменной цикла на - 1.

Программа Exp_2 печатает на экране символы стандартного американского кода обмена информацией (ASCII) в порядке убывания кода.

 

Program Exp_2;

Var

A: Integer;

Begin

For A := 255 Downto 0 Do { Цикл с убыванием параметра }

Writeln (‘ код символа = ‘, A,’ символ = ‘, Chr (A));

End.

 

Если число повторений оператора (составного оператора) заранее неизвестно, а задано лишь условие его повторения (или окончания), используются операторы While или Repeat. Оператор While (пока) часто называют оператором цикла с предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора.

 

Общая форма записи оператора While:

 

While < условие продолжение повторений > Do < тело цикла >;

 

Условие – булевское выражение, тело цикла – простой или составной оператор. Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат равен False, происходит выход из цикла и переход к первому после While оператору. Примером работы While может служить программа Exp_3, которая производит суммирование 10 произвольно введенных целых чисел.

 

Program Exp_3;

Const Limit=10;

Var I, A, Sum: Integer;

Begin

I:=0; { Счетчик чисел }

Sum:=0; { Сумма чисел }

While (I< Limit) Do { Условие выполнения цикла}

Begin

I:= I + 1;

Write (‘ Введите ‘, I, ‘ – ое целое число: ‘);

Readln (A); { Ввод очередного числа с клавиатуры }

Sum:= Sum + А;

End;

Writeln (‘ Сумма введенных чисел равна ‘, Sum);

End.

 

В данном примере в разделе описания констант описана константа Limit=10, задающая ограничение на количество вводимых чисел. В разделе описания переменных описаны переменные I, A, Sum целочисленного типа.

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

Затем выполняются цикл ввода десяти чисел и их суммирование. Вначале оператор условия While проверяет условие I<Limit. Если условие истинно, то выполняется составной оператор в теле цикла:

 

Begin

I:= I +1;

Write (‘Введите ‘, I, ‘ – ое целое число: ‘);

Readln (A);

Sum:= Sum + А;

End;

 

в котором вводится значение очередного числа, и на это значение увеличивается значение суммы. После этого управление в программе вновь передается оператору цикла While, опять проверяется условие I<Limit. Если условие истинно, то выполняется составной оператор и т.д., пока значение переменной I будет меньше 10.

Как только значение I станет равно 10 и условие I<Limit не будет соблюдено, выполнение цикла завершится, а управление в программе будет передано оператору, находящийся за словом End, т.е. первый оператор за границей While. Это вызов процедуры Writeln, которая выведет сообщение ‘Сумма введенных чисел равна ‘, и напечатает значение переменной Sum.

 

Оператор повтора Repeat аналогичен оператору While, но отличается от него, во-первых, тем, что условие проверяется после очередного выполнения операторов тела цикла и таким образом гарантируется хотя бы однократное выполнение цикла, а во-вторых, тем, что критерием прекращения цикла является равенство выражения константе True. Цикл Repeat часто называют циклом с постусловием, или циклом “До”, так как он прекращает выполняться, как только значение выражения условия, записанного после слова Until, равно True.

Оператор Repeat состоит из заголовка Repeat, тела и условия окончания Until. Общая форма оператора повтора Repeat:

Repeat

< оператор >;

...

< оператор >;

Until < условия окончания цикла >;

 

Операторы, заключенные между словами Repeat и Until, являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Поэтому цикл, организованный с помощью оператора Repeat, в любом случае выполняется хотя бы один раз. Если результат булевского выражения равен False, то тело цикла активизируется еще раз, если результат True, происходит выход из цикла.

Оператор повтора Repeat полезен при разработке программ, обрабатывающих ввод с клавиатуры или из файла (вопросы файлового ввода-вывода будут рассмотрены позже).

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

 

Program Exp_4;

Var

X: Integer;

Sum: Real;

Begin

Sum:= 0;

Repeat { Повторять }

Write (‘ X= ‘); { Начало тела цикла }

Readln (X); { Считать очередное значение Х с клавиатуры }

If X <> 999 Then

Sum:= Sum + X;

Until X = 999; { Условие окончания цикла }

Writeln (‘ Сумма введенных чисел = ‘,Sum: 3: 3);

End.

 

В данном примере в разделе описания переменных описана переменная Х целочисленного типа Integer и Sum вещественного типа Real.

В начале выполнения программы обнуляется значение суммы чисел. Затем зарезервированным словом Repeat объявляется цикл, после чего следуют операторы тела цикла, которые выводят на экран запрос ‘ Значение Х= ‘, считывают введенное с клавиатуры значение Х. Оператор If проверяет его на неравенство числу 999 и, если оно не равно 999, увеличивает значение Sum на значение переменной Х. В конце цикла оператор Until Х=999 проверяет условие окончания цикла. Если значение выражения Х=999 истинно, то цикл завершится, а управление в программе будет передано на оператор, находящийся за словом Until, т.е. первый оператор за границей цикла Repeat. Это вызов процедуры Writeln, которая выводит сообщение ‘ Сумма введенных чисел равна ‘ и напечатает значение переменной Sum.

 

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

I.

1. Найти сумму цифр целого числа.

2. Найти произведение цифр целого числа.

3. Найти количество нечетных цифр целого числа.

4. Найти первую цифру числа.

5. Поменять порядок цифр числа на обратный. Например, было 12345, стало 54321.

6. Найти количество четных цифр целого положительного числа.

7. Сколько цифр в данном числе больше числа 5?

8. Найти самую большую цифру целого положительного числа.

9. Сколько раз цифра 5 встречается в целом числе.

10. Найти количество нечетных цифр в целом числе.

11. Найти сумму четных цифр целого числа.

12. Найти произведение нечетных цифр целого цисла.

13. Найти самую маленькую цифру целого числа.

14. Верно ли, что в данном числе нет цифры 6?

15. Верно ли, что сумма цифр данного числа равна 20?

16. Найти количество цифр данного числа, больших А.

17. Сколько раз последняя цифра встречается в данном числе.

18. Верно ли, что последняя цифра данного числа нечетная?

19. Сколько раз встречается в данном числе цифра 8?

20. Сколько цифр в данном числе меньше цифры 5?

21. Верно ли, что сумма цифр данного числа меньше 30?

22. Сколько цифр в данном числе меньше цифры 6.

23. Сколько раз в данном числе встречается цифра 3.

24. Найти сумму нечетных цифр целого числа.

25. Найти произведение четных цифр целого числа.

26. Составить программу, проверяющую, является ли заданное натуральное число палиндромом, то есть таким, десятичная запись которого читается одинаково слева направо и справа налево, например, числа 2222, 1331, 6006.

II.

1.Составьте программу вывода на экран всех трехзначных чисел, кратных 7.

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

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

4.Найти количество делителей натурального числа. Сколько из них кратных?

5.Найти сумму четных делителей натурального числа.

6.Найти все натуральные числа из промежутка от 1 до 200, у которых количество делителей равно N.

7.Найти сумму нечетных делителей натурального числа.

8.Составьте программу вычисления выражения для данного натурального числа N: 4 + 8 + 12 +... + 4 · N.

9.Составьте программу вычисления выражения для данного натурального числа N: 6 + 12 + 18 +... + 6 · N.

10.Составьте программу вычисления выражения для данного натурального числа N: 12 + 22 + 32 +... + N2.

11.Составьте программу вычисления выражения для данного натурального числа N: 13 + 23 + 33 +... + N3.

12.Составьте программу вычисления выражения

у = (2n - 1)!! = 1· 3· 5 ·...· (2n - 1), n>0

13.Составьте программу вычисления выражения

y = (2n)!! = 2 · 4 ·6·... · (2n), n>0

14. Составьте программу вычисления выражения

y = cosX + cosX2 + cosX3 +... + cosX30

15.Составьте программу вычисления выражения

y = 1! + 2! + 3! +... + n! n>0

16.Составьте программу вычисления выражения

y = ex = 1 + x / 1! + x2 / 2! +... + xn / n!

17. Составьте программу вычисления выражения

y = shX = x + x3 / 3! + x5 / 5! +... + x2n+1 / (2n +1)!

18. Составьте программу вычисления выражения

y = cosX = 1 – x2 / 2! + x4 / 4! -... + (-1)nx2n / (2n)!

19. Составьте программу вычисления выражения

y = ln (1 + x) = x – x2 / 2 + x3 / 3 -... + (-1)n-1xn / n

20. Составьте программу вычисления выражения

y = arctgX = x – x3 / 3 + x5 / 5 -... + (-1)nx2n+1 / (2n +1)

21. Составьте программу вычисления выражения

y = 1 + x / 2 + x2 / 3 + x3 / 4 +... + xn-1 / n

22. Составьте программу вычисления выражения

y = 1 + x2 / 2! – x4 / 3! + x6 /4! -...

23. Составьте программу вычисления выражения

y = 1 – x / (x+1) + x3 / (x +1)2 – x5 / (x +1)3 +...

24.Составьте программу вычисления выражения первых 100 сомножителей:

y = 1 / 2 · 1 / 4 · 1 / 8 · 1 / 16 ·...

25. Составьте программу вычисления выражения

y = 1 / 10 · 1 /15 · 1 / 20 ·... · 1 /100

26. Составьте программу вычисления выражения

y = (1 + 1 / 12) · (1 + 1 / 22) · (1 + 1 / 32) ·... · (1 + 1/102)

27. Составьте программу вычисления выражения

y = (x - 2) · (x – 4) · (x – 8) ·... · (x – 64)

28. Составьте программу вычисления выражения

y = 1 / 7 + 2 / 9 + 3 / 11 + 4 / 13 +... +101 /...

29. Составьте программу вычисления выражения

y = 2 / 3 · 3 / 5 · 4 / 7 · 5 / 9 ·... · 11 /...

30. Составьте программу вычисления выражения

y = ex = 1 + x / 1! + x2 / 2! +... + xn / n!

 

III.

1. Составьте программу вычисления выражения

2. Составьте программу вычисления выражения

 

3. Составьте программу вычисления выражения

 

4. Составьте программу вычисления выражения

 

5. Составьте программу вычисления выражения

 

6. Составьте программу вычисления выражения

 

7. Составьте программу вычисления выражения

 

8. Составьте программу вычисления выражения

 

 

9. Составьте программу вычисления выражения

 

10. Составьте программу вычисления выражения

 

11. Составьте программу вычисления выражения

 

12. Составьте программу вычисления выражения

 

13. Составьте программу вычисления выражения

 

14. Составьте программу вычисления выражения

 

15. Составьте программу вычисления выражения

 

 

16.Составьте программу вычисления выражения

 

17. Составьте программу вычисления выражения

18. Составьте программу вычисления выражения

 

19. Составьте программу вычисления выражения

 

20. Составьте программу вычисления выражения

 

21. Составьте программу вычисления выражения

 

22. Составьте программу вычисления выражения

 

23. Составьте программу вычисления выражения

 

24. Составьте программу вычисления выражения

 

25. Составьте программу вычисления выражения

 

 

Содержание отчета

1. Титульный лист.

2. Постановка задачи.

3. Краткие теоретические сведения.

4. Программный код с комментариями.

5. Результаты работы программы в виде скриншота.

6. Выводы.

 

Лабораторная работа №5



Поделиться:


Последнее изменение этой страницы: 2017-02-09; просмотров: 148; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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