Министерство образования Российской Федерации
Уфимский государственный авиационный технический университет
Факультет ИРТ: Информатика и робототехника
Кафедра ПСИ: Проектирование систем информатики
Учебная дисциплина:
МЛТА: Математическая логика и теория алгоритмов
РГР: Расчетно-графическая работа
Общая тема:
ПАРАЛЛЕЛЬНЫЕ ЛОГИКО-АЛГОРИТМИЧЕСКИЕ СИСТЕМЫ
(алгоритмы и логика, аппаратная и программная реализация)
Часть 6 булевы и временные булевы переменные и высказывания
Пояснительная записка
5033.7220.0000-ПЗ
Направление подготовки:
654600: ИВТ: Информатика и вычислительная техника
Специальность:
230100: Ивт: Информатика и вычислительная техника
Курс обучения:
Учебная группа:
Работу выполнила
студентка
Зачетная книжка №
Вариант задания: A570
Работу принял
должность
2007
Исходные условия
Целью данной работы является освоение обозначения, описания и интерпретации булевых и временных булевых переменных.
Общий порядок выполнения работы:
ознакомление с очередным разделом описания работы;
выполнение очередных заданий на подготовку примеров простых и временных булевых переменных и высказываний;
ответы на очередные вопросы.
Задание 0.1 Примеры словесных высказываний:
из области математики:
Квадрат гипотенузы равен сумме квадратов катетов.
Шестью восемь сорок восемь.
Матрица – прямоугольная таблица чисел.
из области техники:
Принтер – устройство печати цифровой информации
Сканер создает цифровую копию изображения объекта
Монитор преобразует цифровую и аналоговую информацию в виде изображения
из других областей
В ноябре тридцать дней.
Нервные клетки не восстанавливаются.
Не все йогурты одинаково полезны.
Задание 0.2 Примеры высказываний в арифметической форме записи:
Привести 5 примеров высказываний, представленных в арифметической форме записи (и в словесной формулировке).
6*8=48; Шестью восемь сорок восемь
2+7=9; Два плюс семь равно девяти.
15-5=0; Пятнадцать минус пять равно десяти.
202 + 152 = 625; Двадцать в квадрате плюс пятнадцать в квадрате равно шестистам двадцати пяти.
60/15=4; Шестьдесят делить на пятнадцать равно четырем.
Задание 0.3 Примеры высказываний:
Представить 5 примеров утвердительных высказываний
s10 = (Две пятых – это не натуральное число.)
s10 = 1: И : T – это истина, (всегда) истинное высказывание.
s10 = c1 = 1
s20 =(Слоны умеют летать.)
s20 = 0: Л: F – ложь, (всегда) ложное высказывание.
s20 = c0 = 0
s30 = (Плутон – это не планета) – истинное высказывание
s30 = c1 = 1
// по современным представлениям.
s40 = (Плутон – это самая отдаленная от Солнца планета.) – ложное высказывание
s40 = c0 = 0
s50 = (Солнце – это звезда) – истинное высказывание
s50 = c1 = 1
Задание 0.4 Примеры высказываний:
Представить 5 примеров отрицательных высказываний
s70 = (Он не спит.) //но не всегда.
s70 = var = 0, 1: И, Л: T, F – переменное высказывание.
s80 = (Студент не учится) //каникулы после сессии
s80 = var = 0, 1: И, Л: T, F – переменное высказывание.
s90 = ( 52 != 20) = (25 20) = (двадцать пять не равно двадцати):
s90 = c1 = 1: И: T = Const – постоянное высказывание.
s100 = (Лампа не горит.) //но можно включить
s100 = var = 0, 1: И, Л: T, F – переменное высказывание.
s110 = (я не получила зачет) //но получу
s110 = var = 0, 1: И, Л: T, F – переменное высказывание.
Задание 0.5 Примеры высказывательных форм:
Представить 5 примеров выскзывательных форм
-
s(x) = (x2 – 6x +5 < 0) = (икс квадрат минус икс меньше нуля):
множеством истинности является интервал (1;5); остальные точки ложные высказывания.
-
s1(х) = (х – 5 > 0) = (икс минус пять больше нуля)
s2(х) = (х + 4 < 0) = (икс плюс четыре меньше нуля)
s1(х) + s2(х),
Множеством истинности s1(х) + s2(х) является объединение промежутков ( - ∞;-4) U (5; +∞)
-
s1(х) = (х – 5 > 0) = (икс минус пять больше нуля)
множество истинности – интервал (5; +∞)
-
s1(х) = (х – 2 > 0) = (икс минус два больше нуля)
s2(х) = (х + 2 ≥ 0) = (икс плюс два больше или равно нулю)
Для импликации s1(х) s2(х) (“если х – 2 > 0, то х + 2 ≥ 0”) множество истинности состоит из всех действительных чисел.
5) s(x) = (x2 + y2 >625) = (икс квадрат плюс игрек квадрат равно шестистам двадцати пяти):
окружность радиусом 25 с центром в нуле на плоскости – представляет класс истинных высказываний, например:
s = (202 + 152 = 625 > 262 + 62 = 712 > 625) = 1
s = (262 + 62 = 712 > 625) = 1
остальные точки – ложные высказывания:
y
x
–
+
s(x) = (x2
+ y2 > 625)
Задание 0.6 Примеры программных логических переменных.
Примеры описания и применения логических переменных на языке программирования Pascal.
Для хранения результата проверки условия введен логический тип данных – Boolean. Переменные такого типа называются булевскими переменными.
1) Булевские переменные в программе
Program Boollean:
var X: integer;
Bol: Boolean;
begin
X:= 7;
Bol:= X > 6; {Это утверждение истинно}
writeln(Bol);
Bol:= X < 0; {Это утверждение ложно}
writeln(Bol);
readln
end.
Результаты работы программы:
Bol=TRUE
OnBol=FALSE
Bol and OnBol=FALSE
Bol and OnBol=TRUE
not Bol=FALSE
2) Составление логических выражений
Program Bollean2;
{Введем логические переменные, которые будут определять характеристики чедовека.
Составим выражения, определяющие, является ли человек гражданином РФ, имеющим свой личный автомобиль.}
var
Avtomobil:Boolean; {Определяет имеет ли человек свой автомобиль}
Grazhdanin_RF:Boolean; { Определяет, является ли он гражданином РФ }
Rezult:Boolean; {Определяет результат}
begin
Avtomobil:=True; {Пусть наш человек имеет свой автомобиль}
Grazhdanin_RF:=True; {Пусть человек – гражданин РФ}
Rezult:= Avtomobil and Grazhdanin_RF;
writeln(‘Гражданин РФ? - ‘,Rezult);
Avtomobil:=False; {Пусть наш человек имеет свой автомобиль}
Rezult:= Avtomobil and Grazhdanin_RF;
writeln(‘Человек – гражданин, имеющий свой личный автомобиль? -‘,Rezult);
readln
end.
При выполнении программы имеем на экране следующее:
Человек – гражданин, имеющий свой личный автомобиль? - TRUE
Человек – гражданин, имеющий свой личный автомобиль? – FALSE
5) Также в программе можно определить 4 логических переменных, которые содержат, например, следующую информацию о людях:
Married – «истина», если человек студент (студентка),
Blond – «истина», если человека – женщина,
Male – «истина», если человек –очник,
Employed – «истина», если человек работает.
Можно составить логические выражения, с помощью которых можно определить, является ли человек:
1) студентка женщина ;
2) студент мужчина;
3) мужчина заочник;
4) безработным студентом заочником;
5) либо не очник, либо безработным, либо и тем и другим.
Примеры описания и применения логических переменных на языке программирования 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;
}
int xor(int a, int b)
{
return (a || b) && !(a && b);
}
2) В этой программе демонстрируется простое использование оператора И(&&). Программа определяет , находится ли число в определенном диапазоне – в данном случае диапазон включает в себя числа лет пожилого возраста от 65 до 100 лет
#include<iostream>
using namespace std;
int main()
{int n;
cout<<”Enter an age and press ENTER”;
cin >>n;
if (n<65&&n<100)
cout<<”Subject is a elderly.”;
else cout<<”Subject is not a elderly.”;
return 0;
}
3)Определение того, является ли число простым.
#include<iostream.h>
#include<math.h>
int main ()
{
int n; //проверяемое число
int i; //счетчик циклов
int is_prime; //булев флаг
//Предложем , что число является простым , пока не докажем обратное
is_prime = true;
//Считать число с клавиатуры
cout<<”Enter a number: ”;
cin>>n;
//проверка числа , выполняя проверку делимости
//на все целые числа от 2 to sqrt(n)
i=2;
while (i<=sqrt (static_cast<duble>(n))){
//
if(n%i ==0) //Если значение переменной i
//случайно делится на n
is_prime =false; //n не является
//простым числом
i++; //прибавить к значению пременной 1
}
//напечатать результаты
if(is_prime)
cout<<”Number is prime”;
else cout<<”Number is not prime “;
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) Цикл while общее назначение цикла – это выполнение счета до числа – при этом выполняя какие-то действия определенное число раз. Например: выполнять действия пока значение переменной i не станет равно 9 включительно
i=1;
while(i<=9){
cout<<i<<” “;
i++;
}
Если управляющее выражение 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);
}
Задание 0.1 Примеры временных высказываний: