Алгебра логики в Паскале
Над аргументами логического типа определены следующие операции: NOT (Не) - отрицание AND (и) - конъюнкция (логическое умножение) OR (или) - дизъюнкция (логическое сложение) XOR (икс ор) - исключающее или
Все операции сравнения дают результат типа Boolean. =, < >, <, < =, >, > =. Например, в результате выполнения оператора P: = X<= 5; логическая переменная Р получит значение True, если текущее значение переменной Х меньше или равно 5. При Х>5 P = False. В языке Паскаль принято следующее старшинство операций: 1) Not 2) And 3) Or, Xor + - 4) Операции сравнения, что это значит? Not P = Q (Not P) = Q P < = Q And R P < = (Q And R) P Or Q And R P Or (Q And Q) Для задания явного порядка - круглые скобки: (A - B) AND (C< = D) Законы алгебры логики в Паскале 1) Закон коммутативности (переместительный) P Or Q = Q Or P P And Q = Q And P 2) Закон ассоциативности (сочетательный) (P Or Q) Or R = P Or (Q Or R) (P And Q) And R = P And (Q And R) 3) Закон дистрибутивности (распределительный) (P And Q) Or R = (P Or R) And (Q Or R) (P Or Q) And R = (P And R) Or (Q And R) 4) Закон де Моргана Not (P Or Q) = (Not P) And (Not Q) Not (P And Q) = (Not P) Or (Not Q) Правила отрицания: Not (Not P) = P Not (A = B) = A <>B Not (A <= B) = A > B Not (A< B) = A > = B и.т.д. Пример. Not ((A < = B) And (c = D)) = (A > B) Or (C < > D) Обратим внимание на следующий факт. Логический тип в языке Паскаль задается как перечисляемый тип, содержащий лишь 2 стандартных идентификатора: True и False. Элементы перечисляемого типа упорядочены. Поэтому оказывается, что False меньше, чем True. Этим можно воспользоваться: For P:=False To True Do S; S - оператор, он будет выполняться сначала для значения Р, равного False, а затем для значения True. Если надо наоборот, то:
For P:= True Downto False Do S; Пример. Написать программу для составления таблицы истинности для логической функции F = P And Not (Q Or R) And T. Для каждого из значений логических переменных P, Q, R, T необходимо вычислить и напечатать значение функции F. Program logic; Var P,Q,R,T,F:Boolean; Begin For P:=False To True Do For Q:=False To True Do For R:=False To True Do For T:=False To True Do Begin F:=P And Not (Q Or T) And T Write(‘P=’,P,’Q=’,Q,’R=’,R,’T=’,T); Write(‘F=’,F); writeln; End; End. Логические выражения очень часто используются в программах. Без них трудно обойтись при записи условных операторов, а также циклов While и Repeat. В языке Паскаль нельзя записать двухстороннее неравенство 1< X <2. Вместо этого надо воспользоваться логическим выражением: (X>1) And (X<2). Нельзя записать X = Y = Z, а надо: (X = Y) And (X = Z). Если надо записать, что Х не лежит в диапазоне от - 2 до +2, то: Not ((X>-2) And (X>=2)) или (X<=-2) Or (X>=2) Стандартные идентификаторы True и False можно использовать в качестве логических констант. Равноправные операторы. If P Then S; If P=True Then S; Функция Odd(x) = True при X=2n-1, n=1,2,3,... False при X=2n Символьный тип Символьная константа - это символ, заключенный в апострофы (чтобы представить апостроф, его повторяют дважды). ‘A’, ‘R’,’+, ‘7’ В описании констант: Const Sim = ‘A’; A = ‘A’; S = ‘+’; D1 = ‘;’; Символьная переменная принимает значение одного символа. Она описывается в разделе переменных как CHAR. Var Bukwa: Char; B1, B2, R: Char; В операторе присваивания: Bukwa: = ‘+’; R: = Bukwa; К символьным данным применимы операции сравнения, т.к. все символы упорядочены, каждый символ имеет свой порядковый номер. Ввод символьных данных имеет особенности: символьные данные вводят сплошной строкой, без пробелов, т.к. пробел - это тоже символ!!! Var S1, S2, S: Char; Read (S1, S2, S3) - - - - - - - - - - - - - - - ABC —> S1 = ‘A’, S2 = ‘B’, S3 = ‘C’ A_B_C_ —> S1 = ‘A’, S2 = _, S3 = ‘B’ Формат: X: M ‘_’: 7 - вывод семи пробелов. Результатом операции сравнения является логическая константа True или False. ‘A’<’B’
Встроенные функции: Ord(x) -определяет порядковый номер символа Х, например, ORD(‘R’) = 82. Chr(x) -определяет символ, стоящий по порядковому номеру Х, например, CHR(68)= ‘D’. Эти две функции носят название функций преобразования. Очевидно, что Chr(Ord(S)) = S; Ord(chr(68)) = 68. Если С1 и С2 - переменные символьного типа, то С1<С2, если Ord(C1) < Ord(C2) Pred(x) - дает предыдущий символ но относительно к Х, например,. Pred(‘N’) = ‘M’. Succ(x) - определяет следующий за Х символ, например,. Succ(‘R’) = ‘S’, Succ(‘9’) = ‘:’ Справедливы равенства: Ord (false) = 0 Ord (True) = 1 Succ (False) =True Pred (True) = False
Читайте также: Алгебра карт. Применение алгебраических и логических операций при создании новых слоев ГИС. Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|