
- •Языки и системы программирования Алгоритмы
- •Языки программирования
- •Область применения языков программирования
- •Сложность и эффективность языков программирования
- •Трансляторы
- •Характеристика с/п 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
Ветвление
Программы, в которых каждое следующее действие выполняется после предыдущего, называются линейными. Однако часто встречаются нелинейные программы, в которых порядок действия отличается от порядка расположения команд.
Ветвление – участок программы, позволяющий выбрать для исполнения, в зависимости от истинности условия, одну из двух групп команд.
Так выглядит
ветвление на схеме
а так – на Паскале
С
уществует
также неполное
ветвление, в котором
группа команд исполняется только
при истинности условия. Ложное условие
не вызывает никаких действий.
Если в правой или левой ветви всего одна команда, то использовать слова begin и end не обязательно. Но, даже если в полном ветвлении в первой части не использовать begin и end, перед else точку с запятой не ставят.
Пример: Вася собирает древние монеты. Он приобрёл a динариев и b сестерциев разного достоинства и года выпуска. Хватит ли ему места в альбоме, если там всего с ячеек для монет?
program
money;
var
a,b,c:integer;
begin
write(’Сколько
динариев купил Вася? ’); readln(a);
write(’Сколько
сестерциев купил Вася? ’); readln(b);
write(’Сколько
свободных ячеек в альбоме? ’);
readln(c);
if
a + b <= c then
writeln(’Места
в альбоме хватит’)
else
writeln(’Места
в альбоме не хватит’);
end.
Логические выражения
Условие в ветвлении представляет собой логическое выражение. Оно может содержать арифметические (или другие, например, текстовые) выражения и операции сравнения между ними: < (меньше), > (больше), = (равно), < > (не равно), <= (меньше или равно), >= (больше или равно).
Результат логического выражения – истина (true) или ложь (false). Например, значение выражения 2 > 3 равно false, а выражения 2 <= 3 - true. Для хранения в памяти логических значений существуют логические (булевские) переменные. Их описывают в разделе VAR словом boolean. Например, a:=b>c;
Иногда требуется составить сложное логическое выражение, содержащее несколько сравнений. В этом случае каждое сравнение помещают в скобки, а между ними используют логические операции and, or или xor. Операция and (И) обозначает одновременность выполнения двух условий. Операция or (ИЛИ) обозначает достаточность выполнения одного из двух условий. Операция xor (Исключающее ИЛИ) обозначает неодновременность выполнения двух условий (только одно из двух условий верно). Кроме того, существует операция отрицания not. Если она стоит перед истинным выражением, в результате получается ложь, а применённая к ложному, даёт истину. Ниже приведены таблицы истинности логических операций.
Если в одном выражении используется несколько логических операций, последовательность их выполнения определяется приоритетом: 1) NOT; 2) AND; 3) OR; 4) XOR. Все арифметические операции – более приоритетны, а все операции сравнения – менее приоритетны, чем логические операции. Нужная последовательность операций может быть достигнута применением скобок.
Примеры:
(2=3) or (2< >3) – результат true
((5+5> =10) or (1=2)) and ((2< 3)=(2+2< >5)) – результат true
(2<3) and not (2*2=4) – результат false
Пример задачи с составным условием: Ввести температуру морской воды и определить, можно ли купаться. Благоприятная для купания температура – от 19 до 26 градусов.
program
water; var
t:real; begin
write(’Введите
температуру воды у пляжа ’);
readln(t);
if
(t>=19) and
(t<=26) then
writeln(’Можно
купаться’)
else
writeln(’Купаться
нельзя’);
end.
Ещё пример: Так как поворот Земли вокруг своей оси занимает несколько больше, чем 24 часа, то за 4 года накапливается опережение на одни сутки. Поэтому каждый год, кратный 4, является високосным (на 1 день больше). Но эти расчёты тоже неточны: за каждые 100 лет накапливается отставание почти на 1 сутки, поэтому годы, кратные 100 не являются високосными. Но отставание за 100 лет на четверть меньше одних суток, поэтому каждый четырехсотый год увеличивают на день, и годы, кратные 400 являются все же високосными. Программа должна ввести с клавиатуры год и определить, является ли он високосным. Напомню: «a делится на b без остатка» обозначает, что при делении a на b остаток равен 0.
program
year; var
y:integer; begin
write(’Введите
год
’); readln(y);
if
(y mod 4=0) and
((y mod 100<>0)
or
(y mod 400=0)) then
writeln(’Високосный
год’)
else
writeln(’Не
високосный год’);
end.