Автор | Сообщение |
|
| Администратор
|
Сообщение: 2233
|
|
Отправлено: 18.12.20 12:35. Заголовок: Запись логического выражения на Паскале
Олеся пишет: цитата: | Как на паскале записать условие для логической функции: ((y-> x) \/ (¬z /\ w)) ≡ (w ≡ x). Не идет такая запись: if ((not(y)or x)or (not(z)and w))xor (w xor x)=1 then writeln(w,' ',x,' ',y,' ',z) |
|
if ((y <= x)or (not(z) and w)) = (w = x) then writeln(w,' ',x,' ',y,' ',z)
|
|
|
Ответов - 7
[только новые]
|
|
|
Отправлено: 18.12.20 13:01. Заголовок: Не работает так: Операция 'or' не применима к типам boolean и integer
|
|
|
|
| Администратор
|
Сообщение: 2234
|
|
Отправлено: 18.12.20 13:04. Заголовок: Все переменные должн..
Все переменные должны быть Boolean.
|
|
|
|
Отправлено: 18.12.20 18:22. Заголовок: Нельзя преобразовать..
Нельзя преобразовать тип integer к boolean var w,x,y,z:boolean; begin for w:=0 to 1 do for x:=0 to 1 do for y:=0 to 1 do for z:=0 to 1 do if ((y <= x)or (not(z) and w)) = (w = x) then writeln(w,' ',x,' ',y,' ',z) end.
|
|
|
|
| Администратор
|
Сообщение: 2237
|
|
Отправлено: 18.12.20 18:37. Заголовок: Олеся пишет: Нельзя ..
Олеся пишет: цитата: | Нельзя преобразовать тип integer к boolean |
| var w,x,y,z:boolean; begin for w:=False to True do for x:=False to True do for y:=False to True do for z:=False to True do if ((y <= x)or (not(z) and w)) = (w = x) then writeln(integer(w),' ',integer(x),' ',integer(y),' ',integer(z)) end.
|
|
|
|
Отправлено: 18.12.20 19:08. Заголовок: Огромное спасибо!
Можно я тогда задам еще один вопрос, чтобы до конца разобраться, как правильно функции прописывать! Почему тогда для функции (x \/ y) /\ ¬(y≡z) /\ ¬w на паскале сработала программа var w,x,y,z:integer; begin for w:=0 to 1 do for x:=0 to 1 do for y:=0 to 1 do for z:=0 to 1 do if ((x or y)and (y xor z) and (not(w))) = 1 then writeln(w,' ',x,' ',y,' ',z) end. Или лучше всегда работать с типом boolean в заданиях № 2?
|
|
|
|
| Администратор
|
Сообщение: 2238
|
|
Отправлено: 18.12.20 19:18. Заголовок: Олеся пишет: if ((x ..
Олеся пишет: цитата: | if ((x or y)and (y xor z) and (not(w))) = 1 then writeln(w,' ',x,' ',y,' ',z) |
|
В этом случае вы фактически использовали побитовые операции. Для этой функции (где нет отношений "равно", "не равно", "импликация") такой подход часто правильный ответ, потому что фактически операции выполняются с одним младшим битом числа. Но есть одна проблема - с not. Попробуйте запустить: begin for var w:=0 to 1 do print( not(w) ); end. Поэтому лучше не дергать за хвост тигра и использовать Boolean.
|
|
|
|
Отправлено: 18.12.20 19:36. Заголовок: Огромное спасибо!!!
Отдельно благодарю за оперативные ответы!
|
|
|
|