Алгоритмы и программы с циклами – Средства реализации базовой алгоритмической структуры повторения с предусловием


§ 61. Алгоритмы и программы с циклами

Изучив этот пункт, мы:

Познакомимся со средствами реализации базовой алгоритмической структуры повторения в НАМ и языке программирования Паскаль;

Узнаем, как выполняются команды повторения Пока И Повторять До И их аналоги — операторы цикла While И Repeat Until;

Выясним на примерах особенности применения операторов цикла.

==== 61.1.Средства реализации базовой алгоритмической структуры повторения с предусловием ==

Базовая алгоритмическая структура повторения (цикл) имеет две формы — цикл с предусловием и цикл с постусловием. В учебной алгоритмическом языке и в языке программирования Паскаль имеются соответствующие средства реализации циклов: Команда повторения и Оператор цикла, которые также имеют две формы — с условием и с постусловием. Рассмотрим их по очереди.

Схема реализации повторения с предусловием в НАМ и языке программирования Паскаль представлена ​​на рис. 61.1.

Рис. 61.1. Схема реализации цикла с предусловием в НАМ и языке программирования Паскаль

Команда повторения с предусловием записывается с помощью служебного слова Пока.После него приводится условие цикла. Далее размещается тело цикла. Тело цикла, как показано на схеме, содержит только Одну команду. Если тело цикла должно содержать две или более команд, их объединяют в одну серию, то есть размещают между служебными словами Пс и Кс.

Перед каждым выполнением тела цикла проверяется условие цикла. Если результатом проверки является «да», выполняется тело цикла; если «нет» — осуществляется выход из цикла, то есть переход к выполнению следующей за циклом команды.

Аналогом команды повторения с предусловием (или Команды Пока) является Оператор цикла с предусловием в языке программирования Паскаль. Вместо служебного слова Пока используется его английский эквивалент While.Кроме того, в отличие от команды Пока, в Операторе while запись условия завершается служебным словом Do (делать).Если тело цикла содержит несколько операторов, их объединяют в один составной оператор, то есть размещают между служебными словами Begin и End.

Рассмотрим примеры пошагового выполнения команды Пока и оператора While.

Значения переменных к выполнению оператора: X = 3; Y = 7.

Команда

«Пока»

Оператор цикла While Выполняемое действие Выполняемое действие Выполняемое действие
Результат Результат Результат
Пока   Y> = X While y> = X do 1. 7≥3 так 3. 4≥3 так 5. 1≥3 ни
Y = YX Y = YX; 2. Y = 4; 4. Y = 1
Вывести ( ‘y =’, Y) Writeln ( ‘y =’, Y) 6. Y = 1

 

4

==== 61.2.Программа «Сумма цифр числа» ========================================

Продемонстрируем применение оператора цикла с предусловием на примере разработки программы вычисления суммы цифр целого числа.

Постановка задачи.Для заданного целого числа найти сумму его цифр.

Разработка информационной модели задачи.Обозначим заданное число из n (входное данное), сумму его цифр — через s (исходное данное).Для вычисления s воспользуемся таким приемом: будем находить последнюю цифру числа — z, добавлять ее к сумме s и «отрезать» от первоначального числа. Постепенно сокращая таким образом число, мы найдем все его цифры, а число сведем к нулю. Чтобы входное значение n сохранялось, введем переменную p, с которой и будем выполнять описанные действия. Начальное значение p равна n.

Последняя цифра числа находится как остаток от его деления на 10, «Сокращение» числа

( «Отрезание» последней цифры) осуществляется путем его деления нацело на 10.

Разработка компьютерной модели задачи.Все переменные задачи являются целыми. Это позволяет воспользоваться для нахождения последней цифры числа оператором:

Z = p Mod 10;

А для «отрезания» от числа p последней цифры — оператором:

P = p Div 10;

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

Обратим внимание на важное обстоятельство. Если переменная n будет объявлена как переменная целого типа, то ее значение не может выходить за пределы диапазона [-32768; 32767], в то время как наш алгоритм позволяет обрабатывать числа любой длины. Чтобы расширить диапазон допустимых значений n, объявим ее как переменную Типа Longint (от англ. Long integer длинное целое).Для хранения значений переменных этого типа выделяются 4 байта (а не 2, как для Integer), что позволяет распространить их диапазон от -2147483648 до +2 147 483 647.

Запишем разработанную программу.

Program sum_ of_ numbers;

Uses Crt;

Var p, n: Longint; s, z: Integer; Begin

Clrscr;

Write ( ‘Введите целое число, которое НЕ больше 2-х миллиардов по модулем: ‘);

Readln (n);

P = Abs (n) {Меняем отрицательное значение Его Модулем} s = 0; {Предоставляем переменной начального Нулевого Значение} While p> 0 Do

Begin

Z = p Mod 10, {Находим последнюю цифру Числа} s = s + z; {Увеличиваем значение суммы на Найденную Цифру} p = p Div 10, { «Сокращаем» число на последнюю Цифру}

End;

Writeln ( ‘Сумма цифр числа равна «, s) {Выводим Результат}

Readln; End.

5

==== 61.3.Средства реализации базовой алгоритмической структуры повторения с постусловием ==

Схема реализации повторения с постусловием в НАМ и языке программирования Паскаль представлена ​​на рис. 61.2.

Рис. 61.2. Схема реализации цикла с постусловием в НАМ и языке программирования Паскаль.

Команда повторения с постусловием записывается с помощью служебных слов Повторять и До.Между ними располагается тело цикла. После слова К записывается условие цикла. Тело цикла, как показано на схеме, может содержать любое количество команд. Объединять их в серию не нужно, потому что слова Повторять и К играют роль ограничителей тела цикла.

Цикл с постусловием начинается с выполнения тела цикла. После каждого такого выполнения проверяется условие цикла. Если результатом проверки является «нет», тело цикла выполняется еще раз; если «да» — осуществляется выход из цикла, то есть переход к выполнению следующей за циклом команды.

Аналогом Команды Повторять До в языке программирования Паскаль выступает Оператор цикла с постусловием, или Оператор Repeat — until.Слова Repeat и Until есть английскими эквивалентами служебных слов Повторять и До.

Приведем пример пошагового выполнения команды ПовторятьДо и оператора

Repeat — until.Значения переменных к выполнению оператора: X = 3; Y = 7.

Команда НАМ

«ПовторятьДо»

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

Repeat-until

Выполняемое действие Выполняемое действие
Результат Результат
Повторять Repeat 7≥3 так
Y = YX Y = y — x; 1. Y = 4; 3. Y = 1
К Y <x Until y < X 2. 4 <3 ни 4. 1 <3 так
Вывести ( ‘y =’, Y) Writeln ( ‘y =’, y) 5. Y = 1

Пример, который мы привели, является тем самым, который рассматривался в п. 61.1. Вы можете сравнить, как выполняются циклы с пред — и постусловием. Обратите внимание на запись условий цикла: они являются противоположными, так как после While (пока) записывается условие повторного выполнения тела цикла, а после Until (До) — условие выхода из цикла.

==== 61.4.Программа «Удвоение взноса» =======================================

Продемонстрируем применение оператора цикла с постусловием на примере разработки алгоритма об удвоении вклада, хранящегося в банке.

·  Постановка задачи. Денежная сумма, положенная в банк, ежегодно растет на p процентов. Определить, через сколько лет сумма на счете удвоится.

6

·  Анализ постановки задачи. За год сумма на счете увеличивается на p процентов, то есть растет в (1 + p / 100) раз. По данным p нужно установить, через сколько лет сумма на счете сравнится или впервые превысит удвоенный размер первоначального взноса. Задача имеет решение для любого значения p> 0 и положительной суммы первоначального взноса. Это ограничения на входные данные.

·  Разработка информационной модели задачи. Введем обозначения: V — размер первоначального взноса, Vp — текущая сумма на счета через T лет.

Для t = 0 имеем vp = v; дальше ежегодно t возрастает на 1, а vp увеличивается в (1 + p / 100) раз. Если в результате очередного увеличения окажется, что vp ≥ 2v, то значение t и является искомой величиной. Итак, vp ≥ 2v является Условием выхода из цикла.

·  Разработка компьютерной модели задачи. По смыслу задачи переменные P, v и Vp относим к настоящему типа, T — до целого типа. Поскольку хотя бы год деньги будут храниться в банке, для построения алгоритма решения задачи удобно применить цикл с постусловием.

Наш цикл может оказаться бесконечным, если входные значения будут введены пользователем неправильно. Чтобы исключить возможность «зацикливания» программы, проверим, удовлетворяют входные данные условии: p> 0 и v> 0.

Запишем программу.

Program double_deposit;

Uses Crt;

Var t: Integer; p, v, vp: Real; Begin

Clrscr;

Write ( ‘Сколько процентов в год дает банк? ‘); {Приглашаем}

Readln (p) {пользователя Ввести}

Write ( ‘Какая сумма вашего взноса? ‘); {входящие Данные}

Readln (v)

If (p> 0) And (v> 0) {Проверяем их Правильность}

Then begin

T = 0; {Предоставляем переменным начальных Значений}

Vp = v;

Repeat {Вычисляем ежегодный Прибыль}

T = t + 1;

Vp = vp * (1 + p / 100);

Until vp> = 2 * v; {Проверяем, не удвоился Вклад}

Writeln ( ‘Ваш вклад удвоится за «, t,’ лет ‘);

End

Else writeln ( ‘Вы ввели неправильные данные.’);   {Выводим Сообщение}

Readln end.

Для тестирования программы можно воспользоваться следующими данными: для p = 100, v = 1000 значение t должен быть равен 1;

Для p = 25, v = 1000 значение t должен быть равен 4.

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

7

Выполнение вложенных циклов осуществляется следующим образом: для каждого прохождения внешнего цикла осуществляется полное прокрутки внутреннего цикла.

ВЫВОДЫ

Для представления базовой алгоритмической структуры повторения с предусловием в НАМ существует команда пока, а в языке Паскаль — оператор цикла While.Тело цикла с предусловием может содержать один оператор. Чтобы разместить несколько, их объединяют в один составной оператор. Для представления базовой структуры повторения с постусловием в НАМ существует команда Повторять — до, а в языке Паскаль — оператор Repeat — until.Между служебными словами повторять

Есть вложенные циклы.

Контрольные вопросы и упражнения

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

1) в НАМ — командой повторения с предпосылкой:

… <условие> <команда тела цикла>

2) в языке Паскаль — оператором повторения с предпосылкой:

… <условие> … <оператор тела цикла>

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

1) в НАМ командой повторения с постусловием:

… <команды тела цикла> … <условие>

2) в языке Паскаль оператором повторения с постусловием:

… <операторы тела цикла> … <условие>

3. Найдите, какое количество звездочек будет выведена на экран результате выполнения приведенных фрагментов программы.

I = 0;

Repeat

I = i + 1;

Write ( ‘*’); Until i = 10;

I = 0;

Repeat write ( ‘*’); i = i + 1;

Until i <10;

I = 0;

While i <> 10 Do begin

I = i + 1;

Write ( ‘*’); End;

I = 10;

While i> 0 Do begin

Write ( ‘*’); i = i-1;

End;

1) 2) 3) 4)

4. Входные значения переменных x = -5; n = 1.Какие значения будет иметь переменная x после выполнения фрагментов программы?

While x <n Do

X = x + 2 * n;

Repeat

X = x + 2 * n;

Until x> = n;

While x <n Do

X = x + n; x = x + n;

1) 2) 3)

 

8

5. Входные значения переменных: x = 5; n = 30.Для каждого из приведенных циклов определите, завершит цикл свою работу; если да, то найдите, какие значения будут иметь переменные x и n после выхода из цикла.

While x <n Do if n> 10

Then n = n-10

Else n = n-4;

Repeat

N = n-10;

X = x + n;

Until x <0;

While x <n Do begin

N = n Mod 8; x = 25 Div x

End;

1) 2) 3)

6. Составьте программу, которая предлагает пользователю угадать, в каком из 12 стульев спрятано бриллианты мадам Петуховой. Номер стула с бриллиантами задается в программе как константа. Компьютер ведет учет количества попыток, которые понадобились пользователю для отгадывание, и после удачной попытки выводит на экран соответствующий комментарий.

7. Дрожжевые бактерии при благоприятных условиях удваиваются каждые 5 минут. Составьте программу вычисления, за какой срок положены в литровую банку бактерии, занимающих объем 1 см 3, заполнят ее доверху.

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

9. С помощью программы Double_deposit выполните следующие исследование:

1) проверьте, зависит срок удвоения вклада от размера взноса;

2) установите, в каком банке выгоднее хранить деньги — в банке «Базис», который ежемесячно начисляет 1,5%, или в банке «Луч», который дает годовой процент 18%.

10. Составьте программу, которая выводит на экран орнамент, образованный повторением определенного элемента изображения. Количество элементов в орнаменте ограничивается шириной экрана. Элемент имеет вполне разместиться на экране. Разработайте варианты программы для вывода орнаментов, элементами которых являются:

1) треугольник, составленный из звездочек;

2) крестик, составленный из звездочек;

3) стилизованная цветок;

4) разноцветное изображение на ваш выбор.

Вывод на экран элемента орнамента целесообразно оформить как процедуру.

11. Разработайте программу вычисления планетного числа и характерных особенностей человека по заданной дате его рождения. Воспользуйтесь программой Sum_of_numbers (см. П. 61.2).

Известный древнегреческий философ и ученый Пифагор (580-497 гг. До н. э.) утверждал, что мудрость всего сущего в мире можно зашифровать цифрами. Он считал, что в жизни человека важную роль играет так называемое «планетное» число, которое определяется по дате рождения человека и содержит тайный код ее судьбы.

Планетное число указывает на планету или звезду — покровительницу человека, влияет на его личностные качества, судьбу и тому подобное. Например, планетное число 1 означает звезду Солнце и такие типичные черты человека, как лидерство, импульсивность; число 2 — Луна (эмоциональность, художественная одаренность) 3 — Юпитер (оптимистичность, ответственность); 4 — Уран (упрямство, внутренняя независимость) 5 — Меркурий (инициативность, живость) 6 — Венера (чувственность,

9

Любовь к жизни); 7 — Нептун (философичность, уступчивость) 8 — Сатурн (восприимчивость,

Верность) 9 — Марс (мужество, сильная воля).

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

12. Составьте программу для компьютерного варианта игры Баше. В игре участвуют двое. Ходят по очереди. С заданного количества N предметов каждый игрок за свой ход может взять от 1 до P предметов. Значение N и P являются параметрами игры, которые устанавливаются игроками до начала игры по договоренности. Побежденным считается тот, кому приходится взять последний предмет.

Программа должна обеспечить:

А) вывод на экран условия игры;

Б) выбор игроком значений параметров игры (n, P) и проверку их правильности (n и P

Целые положительные числа, N> P)

В) реализацию необходимого диалога с пользователем в процессе игры и контроль за соблюдением им правил игры;

Г) определение победителя игры.

Составьте программу для следующих случаев:

1) право первого хода предоставляется пользователю;

2) право первого хода предоставляется компьютеру;

3) пользователь по его желанию может сделать первый ход:

4) компьютер реализует стратегию беспроигрышной игры и может здийниты выбор — сделать первый ход или передать его пользователю..

[Всего голосов: 3    Средний: 5/5]

Читать  КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ – Основы алгоритмизации и программирования