
- •Языки и системы программирования Алгоритмы
- •Языки программирования
- •Область применения языков программирования
- •Сложность и эффективность языков программирования
- •Трансляторы
- •Характеристика с/п Pascal abc
- •Используемые в с/п Pascal abc «горячие клавиши»
- •Структура программы на Паскале
- •Сообщения об ошибках. Отладка программы.
- •Система подсказок.
- •Команды вывода данных на экран
- •Константы
- •Переменные
- •Арифметические выражения. Приоритет арифметических операций
- •Стандартные арифметические функции
- •Процедуры инкремента и декремента
- •Примеры решения линейных задач
- •Ввод данных с клавиатуры
- •Примеры решения диалоговых задач
- •Линейные задачи для самостоятельной работы
- •Лаб. 1. Линеаризовать выражение:
- •Лаб. 2. Линейные диалоговые задачи (на одно действие)
- •Лаб. 3. Диалоговые задачи на несколько действий
- •Ветвление
- •Логические выражения
- •Вложенное ветвление
- •Лаб. 4. Задачи на ветвление:
- •Лаб. 5. Задачи на ветвление с вычислениями:
- •Выбор варианта
- •Лаб. 6. Задачи на выбор варианта:
- •Как выбрать цикл?
- •Экстренные события в теле цикла
- •Лаб. 7. Числовые задачи с циклом For
- •Лаб. 8. Сюжетные задачи с циклом For
- •Лаб. 9. Задачи с условными циклами
- •Библиотека crt
- •Библиотека sounds
- •Лаб. 10. Задачи с использованием циклов и библиотек crt и sounds
- •Порядковые типы данных
- •Перечислимый тип данных
- •Символьный тип данных
- •Ограниченный (интервальный) тип данных
- •Лаб. 11. Задачи со строками
- •Массивы
- •Решение задач с массивами
- •Поиск минимального (максимального) элемента массива
- •Сортировка массива.
- •Двумерные и многомерные массивы
- •Лаб. 12. Задачи с одномерными массивами
- •Лаб. 13. Задачи с двумерными массивами
- •Множества
- •Файлы данных
- •Записи и базы данных
- •Библиотека GraphAbc
- •Действия с графическим окном:
- •Точечная графика
- •Графические примитивы
- •Текст в графическом окне
- •Использование готовых точечных рисунков
- •Вспомогательные алгоритмы
- •Рекурсия
- •Событийное программирование
- •Использование таймеров
- •Использование сторонней библиотеки ukeyb
Выбор варианта
Вложенное ветвление – очень удобная программная структура. Но при большой глубине вложенности множественное ветвление становится громоздким. В некоторых случаях его можно значительно сократить, заменив конструкцией выбора варианта. Для этого должны выполняться такие условия:
все ветвления вкладываются в ветвь «нет»;
все они проверяют значения одной и той же переменной (или выражения);
проверяемое значение должно быть целого типа.
Новую конструкцию рассмотрим на примере решения некоторой задачи. Сначала оформим её решение с помощью множественного ветвления, а затем решим ту же задачу, используя команду выбора варианта. При этом мы сможем увидеть преимущества новой команды.
Задача: Программа-консультант в магазине обуви сообщает, какая обувь находится на той или иной полке, номер которой вводят с клавиатуры.
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.