Министерство образования Российской Федерации
Уфимский государственный авиационный технический университет
Факультет ИРТ: Информатика и робототехника
Кафедра ПСИ: Проектирование систем информатики
Учебная дисциплина:
Млта: математическая логика и теория алгоритмов
РГР: Расчетно-графическая работа
Общая тема:
ПАРАЛЛЕЛЬНЫЕ ЛОГИКО-АЛГОРИТМИЧЕСКИЕ СИСТЕМЫ
(алгоритмы и логика, аппаратная и программная реализация)
Часть 6 булевы и временные булевы переменные и высказывания
Пояснительная записка
5033.7491.0000-ПЗ
Направление подготовки:
654600: ИВТ: Информатика и вычислительная техника
Специальность:
230102: АСОИ: Автоматизированные системы обработки и управления информацией
Курс обучения: 2
Учебная группа: САПР-230
Работу выполнил
студент _____________ Манаев Р. Н.
Зачетная книжка № 065491
Вариант задания: A580
Работу принял
должность _____________ Житников А. П.
2007
Бп: (Простые) Булевы переменные
Логическая интерпретация булевых переменных
Примеры словесных высказываний:
Из области математики:
1) В треугольнике сумма углов равна 180 градусам;
2) Два плюс три равно пять;
3) Девять больше трёх.
Из области техники:
1) В бензиновом двигателе используются свечи зажигания.
2) Линзы бывают собирающие и рассеивающие.
3) В розетке 220В.
Из области биологии:
Сердце человека четырёхкамерное.
Из области истории:
Вторая мировая война началась в 1941 году.
Из области химии:
Гелий – это инертный газ.
Примеры высказываний в арифметической форме записи:
1) 6 х 6 = 36: шестью шесть – тридцать шесть;
2) 23 = 8: два в кубе – восемь;
3) 5 – 0 = 5: пять минус ноль – пять;
4) : квадратный корень из шестнадцати – четыре;
5) cos(0) = 1: косинус нуля равен единице.
-
Примеры утвердительных высказыван
-
ий:
Утвердительные высказывания s1 = s – утверждают явления.
s10 = (2 + 3 = 5) = (два плюс три равно пяти):
s10 = 1: И : T – это истина, (всегда) истинное выказывание.
s10 = c1 = 1
s20 = (9 < 6) = (девяти меньше шести):
s20 = 0: Л: F – ложь, (всегда) ложное высказывание.
s20 = c0 = 0
s30 = (летом тепло) – истинное высказывание.
s30 = c1 = 1
s40 = (осенью цветут цветы) – ложное высказывание.
s40 = c0 = 0
s50 = (сегодня зима) – переменное во времени высказывание, истинное или ложное высказывание в разное время.
s50 = var = 0, 1
-
Примеры отрицательных высказываний
Отрицательные высказывания s0 = s' – отрицают явления:
s10 = (Сегодня не идёт снег)
s10 = var = 0, 1: И, Л: T, F – переменное высказывание.
s20 = (завтра не среда)
s20 = var = 0, 1: И, Л: T, F – переменное высказывание.
s30 = (На нуль делить нельзя)
s30 = c1 = 1: И: T = Const – постоянное высказывание.
s40 = (В месяце не 32 дня )
s40 = c1 = 1: И: Т = Const – постоянное высказывание.
s50 = (Социология не раздел медицины)
s50 = c0 = 0: Л: F = Const – постоянное высказывание.
-
Высказывательные (пропозициональные) формы
1) s(x) = (x = 7) = (икс равно пяти):
точка на оси X – соответствует истине (единственному истинному высказыванию):
s = (7 = 7) = 1
семь равно семи;
остальные точки полуосей – ложь: класс конкретных высказываний;
например:
s = (6 = 7) = 0
+
2) s(x) = (0< x <7) = (икс больше либо равен нулю, но меньше либо равен семи):
отрезок [0;7] – соответствует истине;
представляет класс истинных конкретных высказываний, например:
s = (0< 2 <6) = 1
остальные точки на оси X – представляют ложь (ложные высказывания), например:
s = (0< 7<6) = 0
X
– +
3) s(x) = (0< x <3) = (икс больше нуля, но меньше трёх):
интервал (0;3) – соответствует истине;
представляет класс истинных конкретных высказываний, например:
s = (0< 2 <4) = 1
остальные точки на оси X – представляют ложь (ложные высказывания), например:
s = (0< 0 <6) = 0
s = (0< 4 <6) = 0
s = (0< 7 <6) = 0
X
– +
4) s(x) = (x2/16+ y2/9< 1) = (икс квадрат, делённое на девять, плюс игрек квадрат, делённое на четыре, равно единице):
эллипс с большой полуосью, равной 3, и малой полуосью, равной 2, с центром в нуле на плоскости – представляет класс истинных высказываний, например:
s = (42/16 + 02/9 = 1 < 1) = 1
s = (12/16 + 12/9 = 25/144 < 1) = 1
остальные точки – ложные высказывания:
s = (42/16 + 42/9 = 25/9 < 1) = 0
4) s(x) = (x2/16+ y2/9< 1) = (икс квадрат, делённое на девять, плюс игрек квадрат, делённое на четыре, равно единице):
эллипс с большой полуосью, равной 4, и малой полуосью, равной 3, с центром в нуле на плоскости – представляет класс истинных высказываний, например:
s = (42/16 + 02/9 = 1 > 1) = 1
s = (12/16 + 12/9 = 25/144 > 1) = 0
остальные точки – ложные высказывания:
s = (32/9 + 32/4 = 13/4 > 1) = 1
Программная реализация булевых переменных
В программировании используются логические типы данных:
bool (boolean) s {true, false}
bin (binary) s {0, 1}
Примечание 0.1 Константы (литералы) и именованные константы:
а) Именованные константы в программировании представлены статусными объектами в полюсно-оболочковой концепции:
в данном случае – содержание статусного объекта является неизменным.
б) Константы (литералы) в программировании представлены потоковыми объектами (транзактами) в полюсно-оболочковой концепции.
в) Полюсно-оболочковая модель статусных объектов обеспечивает возможность четкого и строго прояснения сущности понятий, представленных (не очень ясными) терминами:
"переменная", "константа" ("литерал") и "именованная константа" в программировании (и в математике).
В частности, именованные константы
Примеры описания и применения логических переменных на языке программирования Pascal.
Для хранения результата проверки условия введен логический тип данных – Boolean. Переменные такого типа называются булевскими переменными.
1) Булевские переменные в программе
Program Booll:
var X: integer;
Bol: Boolean;
begin
X:= 7;
Bol:= X > 5; {Это утверждение истинно}
writeln(Bol);
Bol:= X < 5; {Это утверждение ложно}
writeln(Bol);
readln
end.
При выполнении программы на экране мы получим следующее:
TRUE («истина»)
FALSE («ложь»)
Булевские переменные можно выводить на экран, но нельзя вводить с клавиатуры. Для этого приходится вводить переменную другого типа, сравнивать ее с образцом и по результатам сравнения устанавливать значение логической переменной.
2) Как ввести с клавиатуры переменную булевского типа
Program BooleanInput;
var slip:boolean;
ch:char;
begin
write(‘Ты хочешь спать [y/n]?’);
readln(ch);
eat:= ch = ‘y’;
writeln(‘Твой ответ:’, slip eat);
readln
end.
3) Логические операции в программе
Program Bool_1;
var X: Integer;
Bol, OnBol, Rez: Boolean;
begin
X:=4;
Bol:=X>3;
OnBol:=X<3;
writeln(‘Bol=’,Bol);
writeln(‘OnBol=’,OnBol);
Rez:=Bol and OnBol;
writeln(‘Bol and OnBol=’,Rez);
Rez:=Bol or OnBol;
writeln(‘Bol or OnBol=’,Rez);
Rez:=not Bol;
writeln(‘not Bol=’,Rez);
readln
end.
При выполнении программы имеем на экране следующее:
Bol=TRUE
OnBol=FALSE
Bol and OnBol=FALSE
Bol or OnBol=TRUE
not Bol=FALSE
4) Составление логических выражений
Program Bol_2;
{Введем логические переменные, которые будут определять характеристики студента.
Составим выражения, определяющие, является ли студент пятикурсником, работающим на фирму.}
var
Price:Boolean; {Определяет наличие работы у студента}
Kurs1:Boolean; {Определяет, является ли студент пятикурсником }
Rezult:Boolean; {Определяет результат}
begin
Price:=True; {Пусть наш студент работает на фирму}
Kurs1:=True; {Пусть студент - пятикурсник}
Rezult:=Price and Kurs1;
writeln(‘Студент – пятикурсник работающий на фирму? - ‘,Rezult);
Price:=False; {Пусть наш студент не работает на фирму }
Rezult:=Price and Kurs1;
writeln(‘Студент – пятикурсник, работающий на фирму? - ‘,Rezult);
readln
end.
При выполнении программы имеем на экране следующее:
Студент – пятикурсник, работающий на фирму? - TRUE
Студент – пятикурсник, работающий на фирму? – FALSE
5) Также в программе можно определить 4 логических переменных, которые содержат, например, следующую информацию о людях:
Married – «истина», если человек женат (замужем),
Blond – «истина», если человек – блондин,
Male – «истина», если человек – мужчина,
Employed – «истина», если человек работает.
Можно составить логические выражения, с помощью которых можно определить, является ли человек:
1) женатый мужчина;
2) женщина блондинка;
3) работающий мужчина;
4) безработный мужчина блондин;
Примеры описания и применения логических переменных на языке программирования C++.
В языке С в операциях сравнения и логических операциях в качестве операндов и результатов операций используются значения ИСТИНА (true) и ЛОЖЬ (false). В языке С значение ИСТИНА представляется любым числом, отличным от нуля. Значение ЛОЖЬ представляется нулем. Результатом операции сравнения или логической операции является ИСТИНА (true, 1) и ЛОЖЬ (false, 0). В С++ значение ИСТИНА представлено также отличным от нуля. Значение ЛОЖЬ представляется нулем. Помимо этого дополнительно определен тип данных _Bool, переменные которого могут принимать значение только 0 или 1.
1) Функция xor() возвращает результат операции «исключающее ИЛИ», операндами служат аргументы функции. Результатом операции «исключающее ИЛИ» является ИСТИНА, если один из операндов (но не оба) имеют значение ИСТИНА.
# include <stdio.h>
int xor(int a, int b);
int main(void)
{
printf("%d", xor(1, 0));
printf("%d", xor(1, 1));
printf("%d", xor(0, 1));
printf("%d", xor(0, 0));
return 0;
}
2) Фрагмент программы, в результате выполнения которого будет напечатана 1.
int x;
x = 100;
printf("%d", x>10);
3) Использование в программе оператора if. В ней запрограммирована игра «угадай магическое число». Если играющий угадал число, на экран выводится сообщение **верно**. Программа генерирует «магическое число» с помощью стандартного генератора случайных чисел rand(). Генератор возвращает случайное число в диапазоне между 0 и RAND_MAX (обычно это число не меньше 32767).
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int magic; /* магическое число */
int guess; /* попытка игрока */
magic = rand(); /* генерация магического числа */
printf("Угадай магическое число: ");
scanf("%d", &guess);
if(guess == magic) printf("**Верно**");
return 0;
}
4) Программа для игры в «магическое число» с использованием оператора else. В этой версии выводится дополнительное сообщение в случае ложного ответа.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int magic; /* магическое число */
int guess; /* попытка игрока */
magic = rand(); /* генерация магического числа */
printf("Угадай магическое число: ");
scanf("%d", &guess);
if(guess == magic) printf("**Верно**");
else printf("**Неверно**");
return 0;
}
5) Программа считывает с клавиатуры два числа, вычисляет их отношение и выводит его на экран. Оператор if используется для того, чтобы избежать деления на нуль, если второе число равно нулю.
/* Деление первого числа на второе. */
#include <stdio.h>
int main(void)
{
int a, b;
printf("Введите два числа: ");
scanf(“%d%d”, &a, &b);
if(b>0) printf("%d\n", a/b);
else printf("Делить на нуль нельзя.\n");
return 0;
}
Если управляющее выражение b равно 0, то его результат представляет значение ЛОЖЬ и выполняется оператор else. В противном случае (b не равно 0) результат представляет значение ИСТИНА и выполняется деление чисел.
6) В цикле for выполняется операции возведения переменной x в квадрат и вызова функции printf(). Операции выполняются, пока х не примет значение 65, то есть условие х !=65 принимает значение ИСТИНА. Если оно хотя бы один раз примет значение ЛОЖЬ, то программа выходит из цикла.
for(x=100; x != 65; x -= 5)
{
z=x*x;
printf("Квадрат %d равен %d\n", x, z);
}
ВБП: ВРЕМЕННЫЕ БУЛЕВЫ ПЕРЕМЕННЫЕ
Логическая интерпретация временных булевых переменных
Примеры временных высказываний
Абсолютная шкала |
Относительная шкала |
Примеры |
Настоящее время m = 0: = t – m = t = m = 0 Нулевой сдвиг |
||
s() = s(t) s(t) |
s() = s(0) s(0) |
В данное время (сейчас, сегодня, сего месяца, сего года и т.п.) существует s: Вода течёт. Ветер дует. Автомобиль едет. |
Прошлое время m > 0: = t – m < t = m > 0 Положительный сдвиг |
||
s() = s(t – m) |
s() = s(m) |
m единиц времени тому назад Было s: в m-тое прошлое время Было s |
s() = s(t – 1) |
s() = s(1)
|
Вчера была метель. На прошлой неделе играл в игру. В прошлом веке человек полетел на луну. |
s() = s(t – 2) |
s() = s(2)
|
Позавчера (два дня назад) был мороз. Позапрошлый месяц был тёплым. Позапрошлый год я ездил на море. |
s() = s(t – 3) |
s() = s(3)
|
Поза-позавчера (три дня назад) я получил зачёт. На поза-позапрошлой неделе я сдал РГР. Поза-позапрошлый год я хорошо отдохнул летом. |
Будущее время m = – m' < 0: = t + m' > t = m' < 0 Отрицательный сдвиг |
||
s() = s(t – m) |
s() = s(m) |
через m единиц времени Будет s в m-тое будущее время Будет s |
s() = s(t + 1) |
s() = s(–1)
|
Завтра будет 29 декабря. В следующем месяце будет сессия. В следующем веке изобретут лекарство от рака. |
s() = s(t + 2) |
s() = s(–2)
|
Послезавтра будет холоднее. Через две недели начнётся сессия. Через два месяца будет второй семестр. |
s() = s(t + 3) |
s() = s(–3)
|
После-послезавтра – предпраздничный день. Через три часа пора спать. Через три года мы закончим университет. |