
- •3. Логика буля и условное выполнение
- •3.1 Сортировка с условным выполнением.
- •3.1.1 Семейство программ ifSort
- •3.1.2. Семейство программ MinSort
- •3.2. Булева логика.
- •3.2.1. Булевы операторы.
- •3.2.2. Булевы выражения.
- •3.2.3. Булевы тождества.
- •3.3. Булевы выражения в cf-Паскале
- •3.3.1. Снова семейство программ MinSort.
- •3.4. Заключение.
3.3.1. Снова семейство программ MinSort.
Булевы выражения позволяют программе MinSort быть улучшенной, создавая новое семейство программ MinSortB. Раздел проекта 3.1 может быть заменен следующим:
Design part 3.1
BEGIN {печатаем минимальное значение из Ch1, Ch2, Ch3 в OUTPUT, оставшиеся значения помещаем в Ch1, Ch2}
IF (Ch1 < Ch2) AND (Ch1 < Ch3)
THEN
{Печатаем Ch1 в OUTPUT, помешаем Ch3 в Ch1}
BEGIN
WRITE(Ch1);
WRITE(Ch1 := Ch3)
END
ELSE
{Печатаем минимум из Ch2, Сh3 в OUTPUT. В случае необходимости копируем Ch3 в Ch2}
IF Ch2 < Ch3
THEN
BEGIN
WRITE(Ch2);
Ch2 := Ch3
END
ELSE
WRITE(Ch3)
END
Операции сравнения для поиска минимума среди четырех значений
Выражение |
Minimum |
(Ch1 < Ch2) AND (Ch1 < Ch3) AND (Ch1 < Ch4) |
Ch1 |
(Ch2 < Ch3) AND (Ch2 < Ch4) |
Ch2 |
Ch3 < Ch4 |
Ch3 |
{else} |
Ch4 |
Поэтому количество операторов WRITE в программе MinSort4B требуется всего лишь 4 + 3+ 2 = 9. В общем количество операторов WRITE для сортировки n-строки будет
n + (n – 1) + … + 3 + 2
Сравнение с IFSort и MinSort:
Количество операторов Write |
|||
N |
IFSortN |
MinSortN |
MINSortNB |
3 |
6 |
6 |
5 |
4 |
24 |
14 |
9 |
5 |
120 |
30 |
14 |
6 |
720 |
62 |
20 |
7 |
5 040 |
126 |
27 |
8 |
40 320 |
254 |
35 |
9 |
362 880 |
510 |
44 |
10 |
3 628 800 |
1 022 |
54 |
Первое уменьшение результатов было получено благодаря лучшей идее сортировки. Второе уменьшение результатов от более мощных возможностей языка CF-Паскаль.
3.4. Заключение.
Сортировка с использованием вложенных операторов IF иллюстрирует принцип решения задачи путем обобщения данной задачи на множество проблем и работа снизу вверх. Вложенные операторы IF могут плохо поддаваться интеллектуальному контролю. Комментарии состояния, способ записи отношения между значениями переменных в каждой точке программы, делают проект более простым даже при глубокой вложенности.
Комментарии состояния – это пример использования Булевой логики для рассуждения о действии программы. Всякий раз, когда сложная ситуация включает отрицание, объединение или выбор, булевы операторы NOT, AND и OR делают возможным формальный анализ. Булевы выражения могут всегда быть поняты путем построения таблиц истинности, но многие факты булевых условий могут быть наилучшим образом выражены из булевых тождеств и свойств операторов сравнения.
Паскаль имеет операторы NOT, AND, OR, соответствующие одноименным операторам булевой логики, которые могут быть использованы для упрощения операторов IF и WHILE. Для поиска подходящего булева выражения часто бывает полезно использовать факты формальной булевой логики.