Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции программирование.doc
Скачиваний:
15
Добавлен:
01.03.2025
Размер:
1.01 Mб
Скачать

Выбор варианта

Вложенное ветвление – очень удобная программная структура. Но при большой глубине вложенности множественное ветвление становится громоздким. В некоторых случаях его можно значительно сократить, заменив конструкцией выбора варианта. Для этого должны выполняться такие условия:

  1. все ветвления вкладываются в ветвь «нет»;

  2. все они проверяют значения одной и той же переменной (или выражения);

  3. проверяемое значение должно быть целого типа.

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

Задача: Программа-консультант в магазине обуви сообщает, какая обувь находится на той или иной полке, номер которой вводят с клавиатуры.

program money;

var

p:integer;

begin

write(’Какая полка Вас интересует? ’); readln(p);

if p=1 then

writeln(’Сапоги’)

else

if (p=2) or (p=4) then

writeln(’Мужские туфли’)

else

if (p>=5) and (p<=8) then

writeln(’Женские туфли’)

else

if (p=3) or (p>=9) and (p<=12) then

writeln(’Кроссовки’)

else

writeln(’Полки с таким номером у нас нет’);

readln;

end.

То же, с применением новой команды:

program money;

var

p:integer;

begin

write(’Какая полка Вас интересует? ’); readln(p);

case p of

1: writeln(’Сапоги’);

2,4: writeln(’Мужские туфли’);

5..8: writeln(’Женские туфли’)

3,9..12: writeln(’Кроссовки’)

else writeln(’Полки с таким номером у нас нет’);

end;

readln;

end.

Как видите, программа выиграла в размере и простоте.

Если в каком-либо из вариантов нужно выполнить не одно, а два и более действия, их заключают в операторные скобки begin и end:

Более сложные задачи с применением выбора вариантов:

1

program vorony;

var

v,p,pp:integer;

begin

write(’Сколько летит ворон? ’); readln(v);

p:=v mod 10; {находим последнюю цифру}

pp:=v mod 100 div 10; {находим предпоследнюю цифру}

if pp=1 then

writeln(’Летит ’,v,’ ворон’)

else

case p of

1: writeln(’Летит ’,v,’ ворона’);

2..4: writeln(’Летит ’,v,’ вороны’);

else writeln(’Летит ’,v,’ ворон’);

end;

readln;

end.

) С клавиатуры вводят число летящих ворон. Напечатать это число со словом «ворон», взятом с нужным окончанием.

В большинстве случаев окончание зависит от последней цифры: 2181 ворона, 851 ворона, 342(343, 344) вороны, 765 (766, 767, 768, 769, 770) ворон. Но имеется исключение: Если предпоследняя цифра – единица (например, 3211, 412), то независимо от последней цифры будет «ворон». Поэтому в этой задаче выбор варианта применяется совместно с ветвлением:

2) Ввести с клавиатуры число от 1 до 999 и назвать его словами (например, «семьсот сорок восемь»).

Ч

program number;

var

n,s,d,e:integer;

begin

write(’Введите число от 1 до 999 ’); readln(n);

if (n<1) or (n>999) then

begin

writeln(’Число не соответствует условию задачи’);

readln; halt;

end;

e:=n mod 10; {находим единицы}

s:=n div 100; {находим сотни}

d:=n mod 100 div 10; {находим десятки}

case s of {назовём отдельно сотни}

1: write(’Сто ’);

2: write(’Двести ’);

3: write(’Триста ’);

4: write(’Четыреста ’);

5: write(’Пятьсот ’);

6: write(’Шестьсот ’);

7: write(’Семьсот ’);

8: write(’Восемьсот ’);

9: write(’Девятьсот ’);

end;

if d=1 then

case e of {назовём десятки с единицами}

0: writeln(’десять’);

1: writeln(’одиннадцать’);

2: writeln(’двенадцать’);

3: writeln(’тринадцать’);

4: writeln(’четырнадцать’);

5: writeln(’пятнадцать’);

6: writeln(’шестнадцать’);

7: writeln(’семнадцать’);

8: writeln(’восемнадцать’);

9: writeln(’девятнадцать’);

end

else

begin

case d of {назовём отдельно десятки}

2: write(’двадцать ’);

3: write(’тридцать ’);

4: write(’сорок ’);

5: write(’пятьдесят ’);

6: write(’шестьдесят ’);

7: write(’семьдесят ’);

8: write(’восемьдесят ’);

9: write(’девяносто ’);

end;

case e of {назовём отдельно единицы}

0: writeln; {для переноса строки}

1: writeln(’один’);

2: writeln(’два’);

3: writeln(’три’);

4: writeln(’четыре’);

5: writeln(’пять’);

6: writeln(’шесть’);

7: writeln(’семь’);

8: writeln(’восемь’);

9: writeln(’девять’);

end;

end;

end.

исло разделим на сотни, десятки и единицы и будем эти части называть словом по очереди, например, «пятьсот двадцать три». Проблема опять возникает, когда предпоследняя цифра «1». В этом случае две последних цифры называются одним словом, например, «пятьсот тринадцать».