Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 - логический тип данных

.pdf
Скачиваний:
9
Добавлен:
14.03.2016
Размер:
536.19 Кб
Скачать

Л. Р. №

Студент

Иванов И. И.

 

Группа

ХХ-999

 

 

 

«Логический тип данных»

Дата

дд.мм.гг

 

 

 

Допуск

 

 

 

 

 

Выполнение

 

 

 

 

 

Отчет

 

 

 

 

Условие задачи 1

Задача 1:

Написать программу, которая определяет истинность предиката.

L =((AOR B)AND C )XOR ((NOT B)AND D),

где A =(m mod 3=1), B =(2 x z y), C =(k div2 5), D =TRUE .

Тестовые примеры к задаче 1

вход:

x = 2, y = 3, z = 4, k = 5, m = 6

выход:

A = (6 mod 3 = 1) = (0 = 1) = (False) B = (2 <> 2*3*4) = (2 <> 24) = (True) C = (5 div 2 >= 5) = (2 >= 5) = (False) D = (True)

L = ((F or T)and F)xor((not T)and T) =

=(T and F)xor(F and T) =

=(F)xor(F) = F = False

вход:

x = 1, y = 1, z = 2, k = 2, m = 8

выход:

A = (8 mod 3 = 1) = (2 = 1) = (False) B = (2 <> 1*1*2) = (2 <> 2) = (False) C = (2 div 2 >= 5) = (1 >= 5) = (False) D = (True)

L = ((F or F)and F)xor((not F)and T) =

=(F and F)xor(T and T) =

=(F)xor(T) = T = True

1

Блок-схема алгоритма к задаче 1

Листинг программы на языке Pascal к задаче 1

Program Logika; var x,y,z: real;

L,A,B,C,D:boolean; m,k: integer;

begin cls;

//Вводим исходные данные: writeLn('Введите x,y,z'); readLn(x,y,z); writeLn('Введите k,m'); readLn(k,m);

//вычисляем промежуточные предикаты: A:= m mod 3 = 1;

B:= 2<>x*z*y;

C:= k div 2 >= 5; D:= TRUE;

//выводим полученные значения writeLn('A=',A,' B=',B,' C=',C,' D=',D);

//вычисляем и выводим результирующий предикат: L:= ((A or B) and C) xor ((not B) and D); writeLn('L=',L);

end.

2

Условие задачи 2

Написать программу, которая по введённым координатам точки M (x, y) проверяет попадает ли она в заштрихованную область (попадание

точки на линию раздела областей считать непринципиальным).

Пояснения к решению задачи 2

Возьмём для примера R = 2 , A =3 , расставим точки во все области, которые образовались на чертеже (т.к. областей получилось 11, то точек тоже

11).

M5(-4,7)

y

 

 

 

 

 

 

 

y

 

 

 

 

=

M3(-1,5)

 

 

 

 

 

 

x

 

 

 

 

M4(-5,3)

 

 

M1(4,3)

 

 

 

 

 

 

M2(-2,1)

2

4

 

−3

−2

 

M11(6,-1)

x

 

 

 

 

 

M10(4,-3)

 

M6(-5,-3)

−4

 

 

 

 

 

 

M9(4,-5)

 

 

M7(-2,-6)

M8(2,-6)

 

Чертёж образован пересечением 5-ти линий (4 прямые и 1 окружность). Судя по чертежу, построение дополнительных линий не потребуются.

Запишем основные логические выражения, описывающие разделение пространства на пары областей.

3

L1 = x <0 ; L2 = x > − A ; L3 = y > −x ; L4 = y <0 ;

L5 =(x 2R)2 +(y +2R)2 < R2 ;

Поскольку заштрихованных областей меньше чем незаштрихованных, то для составления элементарных конъюнкций лучше описывать именно их. Будем выделять области в порядке возрастания номеров четвертей их содержащих.

Заштрихованной области соответствует строгое выполнение сразу всех неравенств, описывающих кривые находящиеся в контакте с этой областью. Это значит, что для связки требуется применить союз «И» (AND - конъюнкция).

(x <0)AND (x > −3)AND (y > −x)= L1 AND L2 AND L3 ; (x <0)AND (x > −3)AND (y <0)= L1 AND L2 AND L4 ;

(NOT (y > −x))AND ((x 4)2 +(y + 4)2 < 22 )= L3 AND L5 ;

(y > −x)AND (y <0)AND (NOT ((x 4)2 +(y +4)2 < 22 ))= L3 AND L4 AND L5 ;

Пояснения даны на рисунках ниже.

Нам достаточно попадания точки в одну из областей, что соответствует союзу «ИЛИ» (OR – дизъюнкция), значит результирующий предикат будет таким:

L =(L1 AND L2 AND L3 )OR (L1 AND L2 AND L4 )OR (L3 AND L5 )OR (L3 AND L4 AND L5 )

4

(x <0)AND (x > −3)AND (y > −x)

(x <0)AND (x > −3)AND (y <0)

y

 

y

 

y

 

y

 

=

 

=

 

 

 

x

 

x

 

2

4

2

4

−3

x

−3

x

−2

−2

−4

 

−4

 

(NOT (y > −x))AND((x 4)2 +(y + 4)2 < 22 )

 

y

 

y

 

y

 

y

 

=

 

=

 

 

 

x

 

x

 

2

4

2

4

−3

x

−3

x

−2

−2

−4

 

−4

 

(y > −x)AND (y <0)AND

(NOT ((x 4)2 +(y + 4)2 < 22 ))

Пояснения к формированию предикатов попадания точки в заштрихованную область.

Тестовые примеры к задаче 2

Входные данные:

A=3 R=2

 

x=4

x=–2

–1

–5

–5

–2

2

x=4

x=4

6

вход

x=

x=

x= 4

x=

x=

x=

–5

x=

y=3

y=1

5

y=3

7

–6

–6

–1

выход

нет

нет

y=

y=

y= 3

y=

y=

y=

y= 3

y=

да

нет

нет

нет

да

нет

да

нет

да

5

Блок-схема к задаче 2

Начало

Ввод A, R

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод x, y

 

 

L :=(L1 AND L2 AND L3 )

 

 

 

 

 

OR (L1 AND L2 AND L4 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L1 := x <0

 

 

OR (

L3 AND L5 )

 

 

 

 

 

OR (L3 AND L4 AND

L5 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L2 := x > −

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L3 := y > −x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да,

 

 

 

 

 

 

Нет, не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L4 := y <0

попадает

 

 

 

 

 

 

попадает

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L5 :=(x 2R)2 +

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+(y +2R)2 < R2

 

 

 

Конец

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

Листинг программы на Pascal к задаче 2

program LogicLab;

var L,L1,L2,L3,L4,L5:boolean; x,y,A,R:real;

begin

writeLn('Введите A и R'); readLn(A,R);

writeLn('Введите координаты точки M (x и y)'); readLn(x,y);

L1:=x<0; L2:=x>-abs(A); L3:=y>-x; L4:=y<0;

L5:=((sqr(x-2*R)+sqr(y+2*R))<sqr(R));

L:=

(L1 AND L2 AND L3) OR

(L1 AND L2 AND L4) OR ((NOT L3) AND L5) OR (L3 AND L4 AND (NOT L5));

if L then

writeLn('Да, точка попадает в заштрихованную область') else

writeLn('Нет, точка не попадает в заштрихованную область');

end.

7

Дополнительные сведения для выполнения лабораторной работы

Основы алгебры логики

Любая машина для решения алгоритмических задач, как это ни странно, выполняет некий мыслительный процесс, который называют машинной логикой. Только в отличии от логики человеческой, она чрезвычайно жесткая, поскольку подчиняется определенному набору правил. Эти правила возведены в ранг математических и носят соответствующее название: математическая логика, или машинная логика. В основе алгебры логики находится так называемый предикат.

Предикат – это высказывание относительно которого можно сказать истинно оно или ложно. Слово образовано от английского Predicate (утверждение). Примеры предикатов: «Земля – третья планета от Солнца», «по календарю сейчас лето» и т.д.

Часто логику предикатов называют Булевой1 алгеброй, а выражения принимающие всего два значения Булевыми (Boolean).

Для того чтобы научить ЭВМ мыслить логикой предикатов, нужно эти самые предикаты перевести на понятный машине язык. В случае языка программирования Pascal в качестве предикатов выступают две дефиниции: логические константы и логические выражения.

Логическими выражениями будем называть выражения, состоящие из операций отношения и логических констант, связанных логическими операциями.

Операция отношения – операция сравнения результатов вычисления двух алгебраических выражений и/или числовых констант.

Под операциями отношения понимают набор из 6 операций сравнения: <, >, =, ≤, ≥, ≠ (запись в Pascal: <, >, =, <=, >=, <>). Результатом операции отношения всегда являются логические константы TRUE (ИСТИНА) или FALSE (ЛОЖЬ). Результат TRUE получается тогда, когда операция отношения записана верно, и FALSE в противном случае. Например, пусть x =7 , тогда операция отношения x >0 даст результат TRUE, то есть истинно, что 7 >0 . А при том же значении x операция x <5 даст ответ FALSE, что означает ложность, утверждения 7 <5.

Для простоты понимания, особенно студентам ранее не изучавшим основ алгебры логики, нужно читать операции отношения с вопросительной интонацией и пытаться дать на заданный вопрос ответ ДА (TRUE) или НЕТ (FALSE). То есть, приведенный выше пример необходимо прочесть так « x >0?», и в зависимости от значения x дать на него ответ TRUE или FALSE.

Предикаты бывают простыми (содержащими единственное утверждение) и сложными (содержащими комбинацию утверждений). Комбинирование предикатов происходит не просто так, а по определенным правилам. Для предикатных конструкций записанных на естественном языке связками выступают союзы «И» и «ИЛИ». Вот примеры: «Земля – третья планета от Солнца ИЛИ Земля – четвертая планета от Солнца»

ИСТИНА; «Марс – первая планета от Солнца И Земля третья планета от Солнца» – ЛОЖЬ. Комбинация предикатов образует новый предикат. Кроме этого по отношению к предикатам применяют модифицирующий предлог «НЕ», который отрицает предикат, переводя истинное утверждение в ложное и наоборот. Например «В одном километре 1000 метров» – ИСТИНА, а отрицание «В одном километре НЕ 1000 метров» – ЛОЖЬ.

Вообще, для составления сколь угодно сложных логических конструкций трех описанных выше операций достаточно. В языке же Pascal по умолчанию используют четыре логических операции: AND, OR, XOR и NOT, что можно перевести как, соответственно, И, ИЛИ, Исключающее ИЛИ и НЕ. Логические операции делят на бинарные и унарные. Бинарными называют операции, для выполнения которых

1 Джордж Буль (1815–1864) английский математик и логик. Разработал алгебру логики и основы функционирования цифровых компьютеров.

8

необходимо два операнда, унарными – один. Примерами бинарных математических операций являются операции умножения, деления, сложения и вычитания, то есть умножить можно только одно число на другое, знак умножения теряет смысл, если стоит перед отдельным числом без второго множителя. С другой стороны, из математики известно понятие унарного минуса, который превращает положительное число в отрицательное. Это типичный пример унарной операции, т.к. унарный минус записывается перед одним числом.

"Таблица истинности логических операций"

A

B

A AND B

A OR B

A XOR B

NOT A

NOT B

0

0

0

0

0

1

1

0

1

0

1

1

1

0

1

0

0

1

1

0

1

1

1

1

1

0

0

0

Операции AND логическое И, называемое так же логическим умножением или конъюнкцией и обозначаемое «&» или « », OR логическое ИЛИ (логическое сложение или дизъюнкция, обозначается « »), XOR исключающее ИЛИ (сложение по модулю 2,

обозначается – « ») являются бинарными, то есть для получения с их помощью результата необходимо иметь два операнда. Операция NOT логическое НЕ (логическое отрицание, обозначается линией-надчеркиванием над константой или выражением,

например, P , или префиксным значком « ») является унарной операцией. Для того чтобы пользоваться этими операциями, необходимо знать, так называемые, таблицы истинности. Таблицы истинности – таблицы, в которых описаны правила использования логических операций, то есть результаты, получаемые при различных комбинациях операндов. Таблицы истинности являются своеобразными «таблицами умножения» для алгебры логики. При помощи этих элементарных правил составляются логические комбинации для выражений любой сложности. Для упрощения записи этих таблиц вводят обозначения TRUE≡1 (логическая единица), FALSE≡0 (логический нуль). Операнды обозначим A и B. Обратим внимание на унарные операции NOT над операндом A и над операндом B (Таблица 2.2).

Вообще, для двух операндов можно составить 16 различных таблиц. Однако, все их обычно не записывают, поскольку существует возможность комбинации некоторого базового набора логических операций, которая приводит к эквивалентности таблиц истинности. Наиболее часто используются операции OR, AND и NOT. Операция XOR является дополнительной и выражается через базовый набор следующим образом:

A XOR B =(AOR B)AND(NOT(A AND B)) .

Будучи записанными в сложном выражении, логические операции применяются в строгой последовательности согласно установленному приоритету (подобно тому как операция умножения всегда выполняется раньше чем операция сложения). Приоритет выполнения логических операций следующий (в порядке его убывания):

NOT

AND OR, XOR

Операции отношения

ПРИМЕР

Для x =5 , y =0 получим результат следующего логического выражения: ( x >0 ) AND ( y < −2 ).

9

Результатом первой операции отношения ( x >0 ) будет значение TRUE, так как истина, что 5 >0. Результатом операции отношения ( y < −2 ) будет значение FALSE, так

как ложь, что 0 < −2. Осталось определить результат такого логического выражения:

TRUE AND FALSE ,

что эквивалентно

1 AND 0.

Из таблицы истинности следует, что это выражение равно 0 или FALSE, то есть

( x >0 ) AND ( y < −2 ) = FALSE.

Для иллюстрации логических выражений часто применяют диаграммы взятые из теории множеств (Рисунок 1). Заштрихованная площадь означает истинность того, что некоторая точка принадлежит этой области.

A

B

 

A

 

A OR B

NOT A

 

 

 

 

A

B

A

B

 

A AND B

 

A XOR B

Рисунок 1 Связь теории множеств и булевой алгебры

Правила использования логических выражений

При доказательстве в алгебре логики применяют набор правил и законов:

1.законы идемпотентности: A = A AND A,

A = A OR A;

2.законы коммутативности: A AND B = B AND A, A OR B = B OR A;

3.законы ассоциативности:

A AND (B AND C) = (A AND B) AND C, A OR (B OR C) = (A OR B) OR C;

4. законы дистрибутивности:

A AND (B OR C) = (A AND B) OR (A AND C), A OR (B AND C) = (A OR B) AND (A OR C);

5. законы нуля и единицы:

A AND A = FALSE, A AND TRUE = A,

A OR A = TRUE, A OR FALSE = A; 6. правила поглощения:

A OR (A AND B) = A,

A AND (A OR B) = A; 7. правила де Моргана:

(A OR B) =(A AND B) ,

(A AND B) =(A OR B) ;

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]