Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Вычисление логических выражений, особенности их интерпретации




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

1. При х =1, y =2 значение выражения (x < 2) || (y+x < 5) равно true, что очевидно уже после вычисления первого операнда. Поэтому второй операнд даже не будет вычисляться.

2. При x =1, y =2 значение выражения (x > 5) && (y+x > 2) равно false, что очевидно уже после вычисления первого операнда, и второй операнд можно не вычислять. Понимание этого факта на самом деле имеет иногда очень важное значение.

3. Например, при вычислении выражения (++x || ++y && ++z) и при х=2 не произойдет изменения значений y и z, т.к. первый операнд имеет значение true и по нему можно сделать вывод о значении всего выражения, независимо от значения его второй части (++y && ++z).

 

операция содержание
&& логическое умножение e 1 && e 2   истина, если e 1 и e 2 – истина; схема работы - короткая: e1 à истина à e2  
|| логическое сложение e 1 || e 2        истина, если e 1 или e 2 – истина; схема работы - короткая: e1 à ложь à e2  
! логическое отрицание ! e 1              истина, если e 1 – ложно  
исключающее или операция в С++ не определена истина тогда и только тогда, если один из операндов имеет значение истина (но не оба); операцию можно реализовать с помощью функции: int xor (int a, int b) {return (a || b) &&! (a && b);}

 

!!! Объясните, почему сдвоенный восклицательный знак может использоваться для «нормализации» значения: из любого ненулевого числа сделает 1, а нуль так и останется нулем.

double di=-5.56, dj;

dj =!!di;      // 1

Объясните, почему при проверке утверждения «данное целое число i (abсd) читается одинаково слева направо и справа налево» верны оба выражения:

int (i/1000 == i%10) + int (i/100%10 == i/10%10) == 2

int (i/1000 == i%10) && int (i/100%10 == i/10%10) == 1.

Объясните,  почему логическому выражению  
int(X > 0) + int (Y > 0) + int (Z > 0) >= 1;
соответствует высказывание  «хотя бы одно из трех чисел положительное»,
  а логическому выражению
    
int(X > 0) + int (Y > 0) + int (Z > 0) == 1;
 – высказывание
 «только одно из трех чисел положительное».

----------------------------------------------------------------------------------------

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

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

 

высказывание запись высказывания с помощью логических выражений
Число А является положительным A  >  0
Целое число А является нечетным А % 2  !=  0
Справедливы неравенства: A > 2, B  <= 3 А  >  2  &&  B <= 3
Х является max (Х, У):                        X  >=  Y
Справедливы неравенства  A < B < C А  <  B  &&  B <  C
Целые числа А и В имеют одинаковую четность А  %  2  ==   B  %  2
неверно, что 0 < Х <= 3 и У > 5 ! ((0 <  Х)  &&  (Х  <=  3)  &&  (У  >  5)); или (X <= 0)  ||  (X  >  3)  ||  (Y  <= 5);
Х не является min (Х, У) ! (X <= Y); или X > Y 
Z является min (Х, У, Z) (Z  <=  X)  &&  (Z  <=  Y);
Y не является max (X,Y,Z) и не является min (X, Y, Z)   ! ((Y   >=  Х)  &&  (Y  >=  Z))  &&  ! ((У  <=  X)  &&  (Y <=  Z)); или ((Y <  Х)  ||  (Y  < Z))  &&  ((У  >  X)  ||  (Y  >  Z));
X, Y, Z равны между собой           (X == Y) && (X == Z) && (Y == Z); или (X == Y) && (X == Z); или int(X == Y) + int (X == Z) + int (Y == Z)  >= 2;
каждое из чисел X, Y, Z строго положительно (X > 0) && (Y  > 0) && (Z > 0);
хотя бы одно из чисел X, Y, Z положительно (X > 0)  ||  (Y  > 0)  || (Z > 0);
только одно из чисел X, Y, Z является положительным ((X > 0) && (Y < 0) && (Z < 0)) || ((Y > 0) && (X < 0) && (Z < 0)) || ((Z > 0) && (X < 0) && (Y < 0));
ни одно из чисел X, Y, Z не равно 10 (X  != 10) && (Y  !=  10) && (Z  !=  10); или int(X == 10) + int(Y == 10) + int(Z == 10) == 0;
данное число а является двузначным (a > 9)  &&  (a <= 99)
данное число а является четным а  %  2 == 0

-----------------------------------------------------------------------------------------

 

Проанализируйте запись высказывания с помощью логических выражений и укажите верные.

ЕСЛИ конь за один ход может перейти с поля (k, L) на поле (m, N),
ТО
ЛОГИЧЕСКАЯ ПЕРЕМЕННАЯ t ПРИМЕТ ЗНАЧЕНИЕ true (и значение false – в противном случае) в результате выполнения операторов:

t = ((abs (k - m)  ==  2) && (abs (L - N)  ==  1)) || ((abs (k - m)  == 1) && (abs (L - N)  ==  2));

t = ((abs (k + L)  ==  m) && (abs (L + 2)  ==  N)) || ((abs (k + 2)  ==  N) && (abs (L + 1)  ==  m));

t = ((abs (k - m)  !=  0) && (abs (L - N)  !=  0)) && ((abs (k - m)  +  (abs (L - N)  ==  3));

t = ((k - m)  *  (k - m)  +  (L - N)  *  (L - N)  ==  5);

-----------------------------------------------------------------------------------------

 





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 432 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент может не знать в двух случаях: не знал, или забыл. © Неизвестно
==> читать все изречения...

4879 - | 4390 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.