Любая ветвь может не быть линейным участком программы, а сама содержать ветвление. Такое ветвление называется вложенным (или множественным) ветвлением. Чаще вторично разветвляется ветка «нет». В качестве примера разберём простую задачу:
В первом магазине хозяйка приобрела a кг. огурцов. Их оказалось b штук. Во втором магазине на c кг. получилось d штук. В каком магазине огурцы крупнее?
Находим массу одного огурца в каждом магазине и сравниваем их.
program ogur;
var
a,b,c,d,m1,m2:real;
begin
write(’Введите массу и к-во огурцов из 1 магазина ’);
readln(a,b); m1:=a/b;
write(’Введите массу и к-во огурцов из 2 магазина ’);
readln(c,d); m2:=c/d;
if m1>m2 then
writeln(’В первом магазине – крупнее.’)
else
if m1<m2 then
writeln(’Во втором магазине – крупнее.’)
else
writeln(’Одинаковые’);
end.
Обратите внимание, что каждый else пишется под своим if. Ступенчатое расположение структур (особенно хорошо это видно в следующей задаче) очень рекомендуется для лучшей читаемости программы. Если пренебрегать этим правилом, большие программы становятся запутанными и неясно, какой else к какому if относится.
if a > b then
if x > 0 then
writeln(’***’)
else
writeln(’ooo’);
Не забывайте также, что любой else относится к последнему незакрытому if. Например, в показанном справа фрагменте else стоит под первым if, но относится ко второму. Это может привести к ошибкам. Исправит положение только правильное использование пары команд begin и end (так называемых «операторных скобок»), как показано во втором фрагменте.
if a > b then
begin
if x > 0 then
writeln(’***’);
end
else
writeln(’ooo’);
Рисунок, изображённый над программой, на котором специальными значками и стрелками изображена последовательность действий (алгоритм) в программе, называется блок-схемой алгоритма. Программисты используют такие схемы для обсуждения алгоритма с непрограммистами или специалистами, использующими другие алгоритмические языки, а также для того, чтобы лучше продумать алгоритм, не отвлекаясь на мелкие детали и особенности языка программирования.
Вторая задача: Определить, является ли одно из двух введённых чисел делителем другого.
program deliteli;
var
a,b:integer;
begin
write(’Введите два целых числа: ’); readln(a,b);
if a=b then
writeln(’Числа равны’)
else
if (a mod b=0) then
writeln(a,’ делится на ’,b)
else
if (b mod a=0) then
writeln(b,’ делится на ’,a)
else
writeln(’Эти числа не делятся друг на друга’);
end.
Эта программа работает с ошибкой, если одно из введённых чисел равно 0 (деление на 0 запрещено). Измените программу, сделав в начале дополнительную проверку этого случая.
Лаб. 4. Задачи на ветвление:
1. Программа вычисляет модуль введенного числа, не пользуясь стандартной функцией abs()
2. В 1 л тёплой воды можно растворить до 120 г поваренной соли. Растворится ли a кг соли в b л воды при тех же условиях?
3. Определить, является ли введённое число чётным
4. Определить, лежит ли точка (x, y) внутри круга с центром в начале координат и радиусом 5.
5. На вывод одного пиксела видеоадаптер тратит 0,00000003 секунды. Разрешение экрана – a х b пикселов. Сколько времени понадобится для вывода всего кадра? Будет ли при этом хорошее качество мультипликации? (Если частота смены кадров меньше 50 кадров в секунду, качество плохое)
6. Даны координаты двух точек. Определить, какая ближе к началу координат.
7. Определить, является ли целое число N точным квадратом.
8. Поместится ли a кг апельсинов в b ящиков (вместимость ящика – c кг)?
9. Возможно ли разместить два файла (объёмом a и b Кбайт) на одной дискете (объёмом 1440 Кбайт)?
10. Хватит ли на просмотр фильма одного часа, если он состоит из k кадров, а в секунду показывается 25 кадров?
11. Первая цветочница продала R роз по 50 рублей за цветок, а вторая T тюльпанов по 30 рублей. У кого выручка больше?
12. Из банка на выплату зарплаты привезли a рублей. Хватит ли этой суммы, если на предприятии n работников, их средняя зарплата s рублей, а в кассе ещё имеется остаток k рублей?
13. Для ремонта проколотой шины после нанесения на место прокола каучуковой смеси её нужно выдерживать 50-60 минут при температуре 70-80 °С. Вулканизатор поддерживал температуру t °С в течение m минут. Процесс вулканизации прошёл нормально?
14. Для полноценного питания коровы требуется 10 кг сена и 4 кг комбикорма в день. В наличии a кг сена и b кг комбикорма. На сколько дней этого хватит?
15. Первый абитуриент решил a упражнений по b задач в каждом, а второй – c упражнений по d задач. Кто из них лучше подготовился к поступлению в ВУЗ?
16. Сможет ли покупатель, располагающий суммой S рублей, приобрести a граммов конфет по цене b рублей за 1 кг?
17. Больному нужно ввести a см3 первого лекарства и b см3 второго. Хватит ли шприца ёмкостью 10 см3 для смеси этих лекарств?
18. Первое блюдо - 300 г борща. Второе блюдо – 250 г плова. В столовой приготовлено a кг борща и b кг плова. Сколько людей сможет накормить столовая полным обедом?
19. Войдёт ли в конверт размерами NxM открытка размерами RxP?
20. В секцию по баскетболу берут юношей не ниже 180 см. В прошлом году у Васи был рост h см, а за этот год он подрос на d см. Возьмут ли Васю теперь на баскетбол?
Лаб. 5. Задачи на ветвление с вычислениями:
1. Одна коробка с яйцами содержит 10 ячеек по 30 яиц в каждой. Поместятся ли a яиц в b коробок (уже имеющих пустые ячейки)? Если не поместятся, сообщить, сколько ещё требуется ячеек и коробок. Если останутся лишние коробки, сообщить, сколько осталось.
2. Определить, являются ли три введённых числа длинами сторон прямоугольного треугольника.
3. В котёл с 20 л воды всыпали m граммов соли. Норма для супа составляет от 10 до 12 г/литр. Определить, нормально ли посолена вода. Если недосолена, сообщить, сколько граммов соли нужно добавить до нормы. Если пересолена, – сколько литров воды нужно долить до нормальной концентрации.
4. После промывки шерсть сушат. Нормальная плотность шерсти, соответствующей требуемой влажности, составляет около 280 кг/м3. На текстильный завод поступило m тонн шерсти, объём которой составляет V м3. Определить соответствие сырья требуемой влажности.
5. Определить, лежит ли точка (x, y) внутри кольца с центром в начале координат, внутренним радиусом r1 и внешним радиусом r2
6. Врач прописал больному первого лекарства всего a таблеток, по b таблеток в день и второго лекарства c таблеток по d таблеток в день. На следующий день после того, как все лекарства будет приняты, больной должен прийти на приём. Через сколько дней больной попадёт на приём к врачу?
7. За первые 30 минут в Internet-клубе нужно платить по 80 копеек в минуту, а дальше по 60 копеек. Но если клиент работает без перерыва 5 часов, ему снижается дальнейшая оплата до 50 копеек в минуту. Сидоров работал a часов и b минут. Сколько ему нужно заплатить?
8. Поезд выехал в h1 часов и m1 минут. Поездка заняла h2 часов и m2 минут (меньше 1 суток). Во сколько часов и минут поезд приехал на станцию назначения? Не забыть, что в 24.00 время обнуляется. Часовые пояса не учитывать (счёт идёт по московскому времени).
9. 1 конфета «Мишка на севере» весит 26-30 граммов. «Ласточка» - 15-19 г. «Грильяж» - 20-25 г. Вася съел a одинаковых конфет, общий вес которых – b граммов. Что это были за конфеты? (не исключено, что не из этих трёх видов, а какие-либо другие).
10. Два треугольника заданы своими сторонами. Программа определяет, равны ли эти треугольники.
11. Работа светофора запрограммирована следующим образом: Начиная с полуночи, 3 минуты горит зелёный свет, 1 минуту – жёлтый, 3 минуты – красный, 1 минуту – жёлтый. Затем всё начинается сначала. Дано вещественное число t, означающее время в минутах, прошедшее от полуночи. Определить, сигнал какого цвета горит в это время на светофоре.
12. Заданы координаты X1,Y1 левого верхнего угла и размеры A1 и B1 первого прямоугольника и координаты X2,Y2 и размеры A2 и B2 второго прямоугольника. Определить, помещается ли один из них целиком в другом (Стороны прямоугольников параллельны осям координат).
13. Время прибытия поезда на станцию h1 ч. и m1 м. Время отправления h2 ч. и m2 м. Человек пришёл на станцию в h3 ч. и m3 м. Попал ли он на этот поезд (или пришёл раньше или опоздал)?
14. Имеется два куска холста: 60х80 см и 70х70 см. Художник должен натянуть один из них на раму размером ax b см. Какой из них взять выгоднее, чтобы меньше холста пришлось отрезать? На подгиб берётся не менее 3 см. с каждой стороны. Если никакой холст не подходит, сообщить об этом.
15. Имеется три файла, размерами a, b и c Кбайт. На одной дискете помещается 1440 Кбайт. Войдут ли на неё все три файла? Если не войдут, проверить, можно ли разместить эти файлы на двух дискетах (Файлы не делить на части, а записывать только целиком).
16. Программа определяет, поместится ли круг, площадью S1 в квадрате, площадью S2.
17. Заданы даты рождения двух человек (число, месяц, год). Определить, кто из них старше.
18. Дано натуральное число n (n ≤ 9999). Верно ли, что все четыре цифры числа различны?
19. Заданы 4 числа. Проверить, являются ли они длинами сторон ромба, параллелограмма или четырёхугольника другого вида (считать, что стороны перечислены подряд).
20. Найти координаты точек пересечения прямой y = ax+ b и окружности радиуса R с центром в точке (X, Y). Если точка одна или пересечений нет, сообщить об этом.