
- •Вопрос 4. Структурное программирование, как определение функций композицией, разбором случаев и итерацией. Операторы ветвления.
- •Вопрос 5. Операторы цикла. Операторы передачи управления.
- •Вопрос 6. Итерационный способ определения последовательностей. Виды итерационных процессов.
- •Точечные
- •Ип большей глубины
- •Параллельные ип
- •Вопрос 7. Схемы обрыва итерационных процессов.
- •Вопрос 11. Линейные упорядоченные последовательности как абстрактный тип данных. Реализация основных операций на примере типа «массив».
- •1) Включение одной последовательности в другую
- •2) Объединение двух упорядоченных последовательностей
- •3) Пересечение двух упорядоченных последовательностей
- •4) Разность двух упорядоченных последовательностей
- •5) Поиск элемента
- •Вопрос 12. Элементы математической логики в программировании. Основные формулы математической логики. Стратегии вычисления кванторных формул.
- •Вопрос 13. Функции как аппарат технологичного программирования. Технологии нисходящего и восходящего проектирования программ.
- •Вопрос 14 Синтаксис описания функций. Формальные и фактические параметры.
- •Вопрос 15. Семантика функций. Области видимости имен. Локальные и глобальные имена. Функции как параметры.
- •Вопрос 16. Реализация операций над множествами с помощью типа массив. Алгоритм « Решето Эратосфера»
- •Вопрос 17. Полиномы как абстрактный тип данных. Представление полиномов при помощи массивов. Основные операции над полиномами. Схема Горнера.
Вопрос 12. Элементы математической логики в программировании. Основные формулы математической логики. Стратегии вычисления кванторных формул.
В языке программирования C++ с математической логикой связан тип bool.
Упрощение булевских выражений. Приведем некоторые полезные формулы упрощения логических выражений.
Логическое выражение - выражение, принимающее булевское значение (TRUE или FALSE).
Пусть a, b - логические выражения. Тогда выполняется
• !(! b) = b;
! (a && b) = (! a)ll(! b);
! (a || b) = (! a)&&(! b);
Стратегии вычисления кванторов
Язык математической логики содержит кванторные операции V - квантор всеобщности, 3 - квантор существования.
Пусть переменная x принимает значения из множества X. Пусть B (x) логическое выражение, зависящее от переменной x. Определим логические выражения, которые назовем "А"- формула и "E"- формула и приведем стратегии вычисления данных формул.
"A"- формула: Vx B(x) - для всех x выполняется свойство B(x)
Пусть x Е X = {x1,... , xn}, тогда
VxB (x) B (x1)&& B(x2)kk ... &&B (xn) Можно задать рекуррентное определение квантора:
b0 = true;
bi+1 = bi && B (xi+1)
Это определение дает следующую стратегию вычисления "А'- свойства.
b=true; предполагаем, что свойство B(x)
выполняется для всех x
x = первое x
while (не перебрали все x && b) все еще выполняется свойство B (x)
{ if (! B(x)) then b =FALSE; если для очередного x
свойство B(x) не выполняется, значит наше предположение не верно,
else x = следующий x;
}
cout< < b;
заменяем b на FALSE и
выходим из цикла, ответ уже получен, дальше
ничего проверять не надо,
иначе идем проверять следующий x.
Значение b - ответ.
'E"- формула: 3x B(x) - существует x, для которого выполняется свойство B(x)
Пусть x е X = {x1,... , xn}, тогда
3x B (x) B(x1) || B(x2) || ... ||B(xn)
Можно задать рекуррентное определение квантора:
b0 = false;
bi+1 = bi || B (xi+1)
Это определение дает следующую стратегию вычисления "E"- свойства.
b=false; предполагаем, что не существует x,
для которого выполняется свойство B(x)
x = первое x
while (не перебрали все x && ! b) все еще не нашлось x, для которого
выполняется свойство B (x)
{ if (! B(x)) then b =TRUE;
else x = следующий x;
}
cout< < b;
если для очередного x свойство B(x) выполняется, значит такой x существует, заменяем b на TRUE и выходим из цикла, ответ уже получен, дальше ничего проверять не надо, иначе идем проверять следующий x. Значение b - ответ.
Проверить упорядоченность массива x = (x0,... , xn-1) в порядке неубывания. Задача может быть сформулирована как проверка V-свойства следующим образом:
(Vi e{0,...N — 2} : x[i] < x[i + 1]);
Поиск заданного элемента у в массиве x = (x0,... , xn-1). Задача может быть сформулирована как проверка 3-свойства следующим образом:
(3i е{0,...N — 1} : x[i] == у);
Проверить равенство двух массивов x = (x0,... ,xN-1) и у = (у0,... ,yN-1). Задача может быть сформулирована как проверка V-свойства следующим образом:
(Vi e{0,...N — 1} : x[i] == y[i]);
Свойство B (x), которое проверяется для каждого элемента при вычислении 3- и V-свойств, в свою очередь могут быть сложными свойствами. В частности, это опять может быть 3- и V-свойство. В этом случае при проверке свойства для очередного элемента также используем рассмотренную выше стратегию.
Примеры задач на вычисление вложенных 3 и V свойств:
Проверить, входит ли массив у = (у0,... ,yMв массив x = (x0,... ,xN как сплошной фрагмент (M < N). Задача может быть сформулирована следующим образом:
(3i e{0,N — M} :(vj e{0,...,M — 1} : y[j] == x[i + j));
Проверка периодичности числового массива x = (x0,... , xn-1). Задача может быть сформулирована следующим образом:
(3r е {l,...n/2} :(vi e{0,...,N — r — 1} : x[i] == x[i + r)).