Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
алгоритмы для студентов раздать.docx
Скачиваний:
20
Добавлен:
18.11.2019
Размер:
569.3 Кб
Скачать

4.2 Алгоритмы цикла типа «пока»

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

В одной из разновидностей цикла условие проверяется перед выполнением цикла. Поэтому данное условие правильно будет называть условием продолжения цикла. Цикл такого вида называется циклом с предусловием.

Проверка условия выполнения цикла производится в самом начале – если значение условия истинно, то выполняется тело цикла и снова вычисляется выражение условия выполнения цикла. Тело цикла будет выполняться до тех пор, пока проверка этого условия будет давать результат «истина», то есть пока условие выполняется. Цикл такого вида иногда называют циклом типа «ПОКА».

Запишем цикл с предусловием на языке блок-схем и на алгоритмическом языке.

ПОКА условие продолжения цикла

НЦ

действие (тело цикла)

КЦ

Правила определения цикла «ПОКА»:

  1. Определить условие продолжения цикла.

  2. Определить повторяющиеся действия.

ПРИМЕЧАНИЕ: Цикл типа «ДЛЯ» легко «перевести» в цикл типа «ПОКА» если в качестве условия продолжения цикла взять неравенство I <= I_кон (пока текущее значение счетчика не больше его конечного значения), а в теле цикла обязательно записать команду увеличения счетчика на 1 (I := I + 1).

Задача 6. Рассмотрим задачу, в которой требуется разработать алгоритм приближенного вычисления суммы бесконечного ряда:

с точностью ε (эпсилон).

1. Анализ условия задачи. Считается, что нужное приближение получено с заданной точностью ε, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое оказалось по модулю меньше, чем данное малое положительное число ε. Тогда считается, что это и все последующие слагаемые можно уже не учитывать.

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

Введем обозначения: Х – заданное число – основание степени в числителе дроби; E – точность ε (эпсилон); Y – слагаемое-дробь (она меняется в зависимости от номера ее положения); s – накапливаемая сумма; I – счетчик числа шагов или, что то же самое, номер прибавленной дроби.

2. Математическая модель.

1.

Y := 1

Первое слагаемое

2.

s := Y

Положим в сумматор первое слагаемое

3.

I := 0

Обнулим счетчик шагов

4.

условие продолжения цикла:

abs(Y) >= E

пока добавленное слагаемое не меньше «эпсилон», считаем сумму. Если «эпсилон» сразу не меньше 1, цикл не выполнится ни разу!

5.

повторяющиеся действия:

5.1.

I := I + 1

Вычислили номер текущего шага

5.2.

Y := Y * X / I

Посчитали новое слагаемое

5.3.

s := s + Y

Увеличили сумму на текущее слагаемое

Тело цикла завершилось

6.

Вывод S

Блок-схема и запись на алгоритмическом языке алгоритма решения задачи приведена на рисунке 6.

АЛГ сумма ряда

АРГ ВЕЩ Х, E

РЕЗ ВЕЩ s, Y

ЦЕЛ I

НАЧ

Ввод Х, E

Y := 1

s := Y

I := 0

ПОКА abs(Y) >= E

НЦ

I := I + 1

Y := Y * X / I

s := s + Y

КЦ

Вывод S

КОН

Рис. 6.

Вопросы для самопроверки:

  1. Какую алгоритмическую структуру описывает последовательность служебных слов:

ПОКА условие НЦ повторяющиеся действия (тело цикла) КЦ

  1. Когда проверяется истинность условия в цикле «ПОКА»?

  2. Опишите работу цикла с предусловием.

  3. Приведите примеры алгоритмов цикла с предусловием.

Вопросы для размышления

  1. Верно ли, что в теле цикла с предусловием должно находиться только одно действие?

  2. Верно ли, что истинность выражения в цикле с предусловием является условием продолжения цикла?

  3. Сколько раз выполнится тело цикла «ПОКА», если с самого начала условие не выполняется.

  4. Верно ли, что цикл «ПОКА» используется при вычислении всякого рода сумм и произведений, когда заранее не известно число повторений?

  5. Какие из утверждений являются верными (проиллюстрируйте ответ соответствующими примерами):

а) любой цикл «ДЛЯ» можно записать при помощи цикла «ПОКА»;

б) любой цикл «ПОКА» можно записать при помощи цикла «ДЛЯ»;

в) не любой цикл «ДЛЯ» можно записать при помощи цикла «ПОКА»;

г) не любой цикл «ПОКА» можно записать при помощи цикла «ДЛЯ».

Задания

1. Какое значение будет принимать переменная Y после выполнения фрагмента алгоритма:

а) Y := 0

X := 10

ПОКА X > 0

НЦ

X := X – 2

Y := Y + X

КЦ

Вывод Y

б) Y := 1

X := 15

ПОКА X > 5

НЦ

X := X – 3

Y := Y * X

КЦ

Вывод Y

  1. Разработайте алгоритм (по всем этапам) для решения следующих задач:

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

1) найти наибольшее из всех чисел, кратных трем.

2) Определить, сколько раз последовательность меняет знак.

2.2. Найти все трехзначные числа такие, что сумма цифр равна А, а само число делится на В (А и В задаются пользователем).

2.3. Вычислить N!. Используйте цикл с предусловием.

2.4. Даны два натуральных числа. Найти их произведение, используя только операцию сложение. Примените цикл с постусловием.

2.5. Даны два натуральных числа. Найти частное от деления нацело и остаток от деления нацело, используя только операцию вычитания. Примените цикл с постусловием.

2.6. Вычислить значение суммы:

2.7. Вычислить значение суммы:

2.8. Вычислить значение суммы: