Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Расчетно-графическая работа №6.doc
Скачиваний:
13
Добавлен:
02.05.2014
Размер:
125.44 Кб
Скачать

Министерство образования Российской Федерации

Уфимский государственный авиационный технический университет

Факультет ИРТ: Информатика и робототехника

Кафедра ПСИ: Проектирование систем информатики

Учебная дисциплина:

Млта: математическая логика и теория алгоритмов

РГР: Расчетно-графическая работа

Общая тема:

ПАРАЛЛЕЛЬНЫЕ ЛОГИКО-АЛГОРИТМИЧЕСКИЕ СИСТЕМЫ

(алгоритмы и логика, аппаратная и программная реализация)

Часть 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: косинус нуля равен единице.

          1. Примеры утвердительных высказыван

          2. ий:

Утвердительные высказывания 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

          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. Высказывательные (пропозициональные) формы

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)

После-послезавтра – предпраздничный день.

Через три часа пора спать.

Через три года мы закончим университет.