Алгоритмы и программы по разветвлениями


§ 60. Алгоритмы и программы по разветвлениями

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

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

Узнаем, что такое составной оператор;

Узнаем, по каким правилам описываются составлены условия;

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

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

Базовая алгоритмическая структура ветвления имеет две формы — полную и короткую. В учебной алгоритмическом языке и в языке программирования Паскаль имеются соответствующие средства реализации ветвления: Команда ветвления и Условный оператор, которые также имеют две формы — полную и короткую. Схема реализации ветвления в НАМ и языке программирования Паскаль представлена ​​на рис. 60.1.

А) полная форма;

ДА

НЕТ

Условие

Если <условие> If <условие>

Б) краткая форма

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

Команда ветвления (или Команда Если) записывается с помощью служебных слов: Если, То и Иначе.После Если размещается условие, после То — команда на выполнение действия 1, после Иначе — команда на выполнение действия 2.Обратите внимание на то, что каждое служебное слово занимает отдельную строку. Это нужно для того, чтобы конструкция команды была абсолютно понятной.

По команде ветвления в зависимости от результата проверки условия будет выполнено одно из двух команд: команды 1, если результатом проверки является «да», команду 2 — если «нет».

Команда на выполнение действия 2 может отсутствовать.

Аналогом команды ветвления в языке Паскаль есть Условный оператор (или Оператор If).Этот оператор также имеет две формы — полную и краткую — и образуется так же, как и команда ветвления, только с заменой украинских слов Если, То, Иначе на их английские эквиваленты: If (если), Then (то), Else (иначе).

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

Значение переменными них к ис ния команды (оператора) Команда ветвления Условный оператор Значение переменными них после ис ния команды (оператора)
X Y X Y
-1 5 Если X> 1

То Y = 2 * X

Иначе Y = 1

If x> 1

Then y = 2 * x

Else y: = 1;

-1 1
1 5 1 1
2 5 2 4
9 3 Если | X | <3

То Y = 9 — X 2

If abs (x) < 3

Then y = 9- Sqr (x)

9 3
-2 3 -2 5
3 3 3 3
-1 Если 2 * X> 3 * Y

То X = X — y

Иначе Y = Y + 2 * X

If 2 * x> 3 * y

Then x = x — y

Else y = y + 2 * x;

1 -1
2 5 2 9
3 2 3 8
5 3 2 3

==== 60.2.Программа «Два числа» ============================================= =

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

Приведем программу и три варианта ее исполнения для различных значений A и B.

Программа Примеры выполнения программы
Program two_numbers;

Var a, b: Integer;

Пример 1 Пример 2 Пример 3
Begin
Writeln ( ‘Введите два целых числа:’); Введите два целых Числа:
Readln (a, b) 5 марта 7 Мая 5 мая
If a = b 3 = 5 ни 7 = 5 ни 5 = 5 так
Then writeln (a, ‘равно’, b ) 5 равна 5
If a <b 3 <5 так 7 <5 ни 5 <5 ни
Then writeln (a, «меньше», b ) 3 меньше 5
If a> b 3> 5 ни 7> 5 так 5> 5 ни
Then Writeln (a, «больше», b) 7 больше 5
Readln
End.

Курсивом выделены сообщения, в процессе выполнения программы будут выведены на экран.

==== 60.3.Серия команд, составной оператор =====================================

Во всех рассмотренных нами схемах и примерах конструкция ветвления использовалась для выбора Одной из двух действий. Если нужно осуществлять выбор Одной из Двух Совокупностей действий, то такие совокупности представляют как Одну сложенную Действие.

В НАМ Серия команд, которая должна восприниматься как одна Составлена команда, сказывается служебными словами: Пс (сокращение от Начало серии) и Кс (сокращение от Конец серии).Эти служебные слова располагаются соответственно перед первой и после последней команды серии.

В языке Паскаль серия операторов, которая должна восприниматься как один Составной оператор, сказывается служебными словами Begin (начало) и End (конец).Эти слова как скобки ограничивают серию операторов с обеих сторон.

Например, переменной Z нужно придать значение по следующему правилу: z = x — y, где y = √x — для положительного значения x;

Z = 1 — для отрицательного или нулевого значения x.

Это можно сделать следующим образом:

Если X> 0 If x> 0

То Пс   Then Begin

Y = √ X y = sqrt (x) { «; «Разделяет операторы-составляющие}

Z = XY z = xy; { «; «можно Пропустить}

Кс   End { «; « Нету!}

Иначе Z : = 1 Else z = 1; { «; «Обозначает завершение оператора If }

Обратите внимание на викристання символа «; «В приведенном фрагменте программы.

==== 60.4.Программа «Который час?» ==========================================

Как известно, наша Земля разделена на 24 пояса, в каждом из которых все часы показывают одинаковое время. Между различными часовыми поясами время отличается на определенное количество часов. Если вы знаете, который час в вашем городе, то очень просто можно определить время в любой другой точке Земли. Для этого вам нужны следующие данные: номер часового пояса, где находится ваш город (обозначим его через n0), и номер часового пояса в точке, вас интересует (обозначим его через n). время tn в поясе n определяется через время t0 в поясе n0 по формуле:

Tn = t0 + n — n0.

Составим программу определения времени в заданном пункте нашей планеты по известному время в данном пункте.

Проанализируем задачу. Номера часовых поясов — это целые числа, изменяются от -11 до +12. Например, 2 для Украины, +9 для Токио, -5 Нью-Йорка. Можно убедиться, что наша формула может нам дать неожиданные результаты. Так, если в Киеве пять часов, то по формуле получим в Нью-Йорке tn = -2 часа, а если в Киеве 23 часа, то в Токио tn = 30 часов. В первом случае (tn <0) имеем, что в Нью-Йорке еще вчерашняя сутки, там не -2 часа, а 24-2, то есть 22 час. Во втором случае (tn> 24) — наоборот, в Токио уже наступил завтрашний день, там 30-24, то есть шесть часов утра.

Итак, из анализа задачи следует, что исходными данными должны быть время в поясе tn и сообщения, который там день — вчерашний, сегодняшний или завтрашний. Для хранения сообщение выделим переменную d строчной типа.

Для составления алгоритма воспользуемся таким приемом. На первом этапе решения задачи определим время tn по формуле и обозначим день как сегодняшний. На втором этапе проверим, не является отрицательным значение tn. Если так, то изменим соответствующим образом значение tn и d. На третьем этапе проверим, не имеет значение tn ≥24.Если так, то изменим tn и d.

Запишем программу на языке программирования Паскаль для случая, когда известным нам время есть время в Украине. Номер часового пояса Украины зададим как константу.

Program what_oclock;

Uses Crt;

Const n0 = 2;

Var n, t0, tn: Integer; d: String; Begin

Clrscr;

Write ( ‘Который час в Украине?: ‘); {Вводим входные Данные}

Readln (n);

Write ( ‘Введите номер часового пояса, где вас интересует время: ‘);

Readln (t0)

Tn = t0 + n — n0; {Определяем время По Формулой} d = «день сегодняшний ‘; {День определяем Как Сегодняшний} If tn < 0 {Выполняем первую проверку Времени}

Then Begin {Если нужно, корректируем время и День}

Tn = tn + 24;

D = ‘день вчерашний’;

End;

If tn > = 24 {Выполняем вторую проверку Времени}

Then Begin {Если нужно, корректируем время и День}

Tn = tn — 24;

D = ‘день завтрашний’;

End;

Writeln ( ‘Там’, d, ‘,’, tn, » ч.’);   {Выводим Результаты}

Readln; end.

==== 60.5.Составленные условия ================================================ ====

Условие, которое проверяется при выполнении разветвления, может быть простой и составной. В качестве Простой условия, как мы знаем, выступает любое высказывание, которое может принимать одного из двух значений — «истина» ( «да») или «ложь» ( «нет»).Обычно в алгоритмах и программах простые условия представляются в виде двух арифметических выражений, соединенных знаком операции отношения (сравнения). Именно такие условия мы и использовали в ранее приведенных примерах.

Иногда для выбора тех или иных действий нужно проверять несколько простых условий. В таком случае мы имеем Составленную условие. Составлена ​​условие образуется из простых с помощью знаков логических операций и круглых скобок.

Рассмотрим конструирования составленной условия из двух простых условий.

·  Если нужно, чтобы выполнялись два условия одновременно их объединяют знаком операции логического умножения — операции И. Результатом выполнения операции И есть «истина» ( «да») только в одном случае: Оба операнда (множители) имеют значение «истина».Например, если нужно из списка учеников отобрать тех девушек, которые являются отличницами, то условие отбора нужно записать в виде: «ученик является девушкой» И «ученик является отличником».К отобранным попадут только ученицы-видминици.

·  Если достаточно, чтобы выполнялось хотя бы одно условие из двух, то их объединяют знаком операции логического сложения — операции Или. Результатом выполнения операции Или есть «Истина» ( «Да»), если Хотя Б Один С Операндов (слагаемых) Имеет Значение

«Истина».

Например, если нужно среди учеников отобрать всех отличников и всех спортсменов, то условие отбора выглядит так: «ученик является отличником» Или «ученик является спортсменом».К отобранным попадут ученики, есть и отличниками, и спортсменами, а также ученики-отличники, которые не являются спортсменами, и ученики-спортсмены, которые не являются отличниками.

·  Для записи составленных условий рассматриваемого вида в НАМ используют служебные слова И и Или, а в языке программирования Паскаль — их английские эквиваленты: And (и) и Or (или).Простые условия, входящих в составлены, обязательно берут в круглые скобки.

Например, если нужно проверить, принадлежит ли переменная х отрезке [1, 5], то это записывается так:

(х> = 1) И (х <= 5) в НАМ;

(х> = 1) And (x <= 5) на языке Паскаль.

Если нужно проверить, имеет ли пассажир право на бесплатный проезд по возрасту (бесплатный проезд разрешается детям до 7 лет и взрослым старше 60 лет), то условие проверки возраста пассажира (vik) можно записать в виде:

(vik <7) Или (vik> 60) в НАМ;

(vik <7) Or (vik> 60) на языке Паскаль.

==== 60.6.Программа «Диалог» ============================================== ===

В качестве примера применения разветвлений со сложенными условиями разработаем программу, которая имитирует диалог с пользователем: выводит на экран вопрос и использует предоставленные ответы для поддержки «беседы».

Program dialog;

Uses Crt;

Var vik, v: Integer; name, p: String; Begin

Clrscr;

Writeln ( ‘Давайте познакомимсяКак вас зовут?’);

Readln (name)

Writeln ( ‘Очень приятно, «, name,’!А сколько вам лет?’);

Readln (vik)

V = vik Mod 10, {Находим последнюю цифру Числа Лет} p = » лет «; {Подбираем подходящую Форму} If v = 1 {слова «год» по общему Правилом}

Then p = ‘год’;

If (v> 1) And (v <5)

Then p = ‘года’;

If (vik> 10) And (vik <15) {числительные 11, 12, 13 и 14}

Then p = » лет «; {не подпадают под общее Правило}

Writeln (vik, p, «- замечательная жизненная пора.’);

Writeln ( ‘Удачи!’);

Readln; End.

==== 60.7.Вложенные условные операторы ===========================================

Условный оператор предназначается для альтернативного выбора одного из двух операторов любого вида. Такими операторами в рассмотренных примерах выступали операторы присвоения или вывода. Однако осуществлять выбор можно и между условными операторами. Это означает, что в условном операторе после служебных слов Then и Else можно размещать другой условный оператор. Такая конструкция называется вложением условных операторов, или Вложенными условными операторами. Аналогичные конструкции в НАМ называются Вложенными разветвлениями.

Например, для вычисления наибольшего (max) среди чисел a, b, c можно воспользоваться таким оператором:

If a> b

Then if a> c Then max = a Else max = c

Else if b> c Then max = b Else max = c;

Конечно конструкции с вложенными условными операторами не простые для восприятия, поэтому их лучше избегать и применять цепочку коротких условных операторов. Для нашего случая лучше сначала предоставить max значение одного из чисел, например a, а затем «просеять» его через сито проверок:

Max = a;

If b> max Then max = b; {Теперь max Есть Крупнейшим С Двух a И B}

If c> max Then max = c; {Max Становится крупнейшим из трех — a, b, C}

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

ВЫВОДЫ

Для представления базовой алгоритмической структуры ветвления в НАМ существует команда ветвления если, а в языке Паскаль — условный оператор If.Для того чтобы можно было осуществлять выбор не между двумя командами (операторами), а между двумя группами команд (операторов), их объединяют в одну сложенную команду (оператор), размещая между служебными словами Пс и Кс (Begin и End).Условие, по которому осуществляется выбор, можно создавать с использованием операций сравнения. Для проверки, выполняются несколько условий одновременно применяется операция И (And).Если достаточно, чтобы выполнялось хотя бы одно из условий, применяют операцию Или (Or).Составной частью условного оператора может выступать другой условный оператор, однако такие конструкции являются громоздкими и их лучше заменять последовательной проверкой условий.

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

1. Базовая алгоритмическая структура разветвления в НАМ подается…, а в языке Паскаль — … .

Вставьте пропущенные слова.

А) условной командой;

Б) командой ветвления; в) условным оператором;

Г) оператором ветвления.

2. Какие операторы записаны без ошибок?

А) If a> 0 Then x = a Else y = b;

Б) If a> 0 Then x = a; Else y = b;

В) If a> 0 Then x = a; Writeln (x) else y = b; Writeln (y)

3. Какое значение будет предоставлено переменной x в результате выполнения оператора:

If a> 0 Then x = a + 1 Else x = 2 * a;

Если значение переменной a равна: а) 5;

Б) -15;

В) 0;

Г) 24?

4. В ящике находятся N шариков — несколько черных и 20 белых. Известно, что количество черных и белых шаров удовлетворяют условию:

(черных не более, чем белых) Или (черных не менее 25)

Может общее количество шариков равна: а) 45;

Б) 25;

В) 42;

Г) 40;

Д) 43;

Е) 50?

5. Для определения, является ли целое число a положительным, отрицательным или нулем, составлено три алгоритмы. В результате выполнения которых из них переменная y получит нужное значение?

А) Если а = 0

То y = «ноль»

Если а> 0

То y = «положительное»

И Накш y = «отрицательное»

Б) Если а> 0

То y = «положительное»

Иначе y = «отрицательное»

Если а = 0

То y = «ноль»

В) Если а = 0

То y = «ноль»

Если а> 0

То y = «положительное»

Если а <0

То y = «отрицательное»

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

7. Составьте программу, которая спрашивает пользователя, который час, и выводит на экран соответствующее пожелание — «Доброе утро!», «Здравствуйте!», «Добрый вечер!» или «Доброй ночи!». Для каждого пожелания выберите соответствующий цвет.

8. Зритель, который находится в середине n-го ряда концертного зала, и радиослушатель, который находится в другом городе на расстоянии r, слушают концерт. Составьте программу, которая определяет, кто из них первым услышит мелодию, если известны расстояние от сцены до первого ряда d, расстояние между рядами h. Данные о скорости распространения звука и радиоволны найдите самостоятельно. Пользуясь составленной программе, определите, в котором примерно городе находится слушатель, который воспринимает мелодию одновременно со зрителем, сидящим в первом ряду концертного зала в центре Киева (d = 5 м).

9. В супермаркете объявили акцию. Покупатель, который приобретет за три покупки товар на сумму, превышающую 1000 грн., Получает дисконтную карту при условии, что стоимость каждой последующей покупки, начиная со второй, не менее чем на полцены превышает суммарную стоимость предыдущих. Составьте программу, которая по стоимости трех покупок определяет, заработал покупатель дисконтную карту.

10. Составьте программу, которая моделирует диалог агента туристической фирмы с пользователем. «Агент» расспрашивает пользователя о его намерениях, финансовые ограничения и т. д. и предлагает подходящий вариант отдыха.

11. Составьте программу проверки, может шахматная фигура, которая находится на шахматной доске в ячейке с номером i по горизонтали и номером k по вертикали, сделать ход в клеточку с соответствующими номерами i1, k1.Разработайте варианты программы для случаев, когда шахматной фигурой являются:

А) ладья; б) слон; в) ферзь; г) король; д) конь.

12. Составьте программу решения задачи о выгодной покупке. Пара носков на рынке стоит 1 грн., Дюжину отдают за 10,5 грн., А дюжину дюжин — вязкую — по 111 грн. Покупатель хочет приобрести N носков. Как ему сделать выгодную покупку?  Например, выгоднее купить дюжину носков, чем 11 пар — одна пара даром. Программа имеет заданным значением N определить, какое количество связок, дюжин и пар носков следует приобрести покупателю.

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

Читать  Лекция Паскаль 9 – Стандартные графические процедуры, класс TCanvas