Sunteți pe pagina 1din 6

MATEMATICI DISCRETE ____________________________________ Laborator Nr.

LOGICA PROPOZIŢIILOR.

Aplicații folosind limbajul Python



În limbajul Python avem operatorii logici specificați în Tabelul nr. 1

Tabelul nr. 1
Operator Seminificația Exemplu de folosire
logic
not negația logică p=1
print(not(p)) #afiseaza False
print('%d'%(not(p))) #afiseaza 0
and ȘI logic p=1
q=0
print(p and q) #afiseaza 0
print('%d'%(p and q)) #afiseaza 0
or SAU logic p=1
q=0
print(p or q) #afiseaza 1
print('%d'%(p or q)) #afiseaza 1

Pentru a genera tabelul de adevăr al operatorului logic AND poate fi folosit următorul program Python:
def main():
print("%10s %10s %11s" % ('p','q','p and q'))
for p in (False, True):
for q in (False, True):
print ("%10s %10s %10s" % ( p, q, p and q))

main()
main()
care afișează:

p q p and q
False False False
False True False
True False False
True True True

După cum se observă din Tabelul nr. 1, în Python nu avem operatori pentru implicație și bicondiție.
Știind că acești operatori întâlniți în logica matematică pot fi exprimați în funcție de operatorii cuprinși în
Tabelul nr. 1, pot fi scrise funcții care să suplinească acest neajuns.
De exemplu, pentru implicație putem folosi funcția:

1
MATEMATICI DISCRETE ____________________________________ Laborator Nr. 3

def implies(p,q):
if p:
return q
else:
return True

Folosirea modulelor în Python


Ca și în limbajul C putem împărți un program Python în module. De exemplu, putem avea un modul
conține funcții care implementează operatorii logici implicație, bicondiție (echivalență) și SAU exclusiv (xor).
Folosirea modulului care conține aceste funcții ne scutește de a rescrie în fiecare program funcții
pentru operatorii respectivi.

Problema nr. 1
Având ca exemplu funcția scrisă pentru implicație, să se scrie funcții Python pentru SAU exclusiv și
bicondiție (echivalență). Aceste funcții pot fi salvate în fișierul operator.py.
Să se scrie un program Python care să importe modulul operator și să genereze tabelele de adevăr
pentru implicație, SAU exclusiv și bicondiție.
Importarea modulului se face în felul următor (vom presupune că programul principal se va găsi în
fișierul p1.py):

import operator

def main():
..............
operator.implies(p,q) # Exemplu de folosire a funcției definite în modulul operator
......................

main()

sau putem importa numai funcția care ne interesează

from operator import implies

def main():
..............
implies(p,q) # Exemplu de folosire a funcției definite în modulul operator
......................

main()

Putem importa dintr-un modul mai multe funcții:

2
MATEMATICI DISCRETE ____________________________________ Laborator Nr. 3

from operator import implies, f1



def main():
..............
implies(p,q) # Exemplu de folosire a funcției definite în modulul operator
......................
f1(p,q) #În acest caz am importat funcțiile implies și f1

main()

Problema nr. 2
Scrieți programe Python care să afișeze tabelul de adevăr al propozițiilor:
a). ¬#$ p ∧ (¬q ) ∧ (¬p) ∨ q %&
( ) ( )
Rezolvare:
Programul
def main():
print ("%10s %10s %12s %10s %10s"% ('p','q', 'expr1','expr2','expr'))
for p in (False, True):
for q in (False, True):
expr1=p and (not q)
expr2=not p or q
expr= not(expr1 and expr2)
print ("%10d %10d %10d %10d %10d" % (p, q, expr1, expr2,expr))

main()


Rezultatul este:

p q expr1 expr2 expr
0 0 0 1 1
0 1 0 1 1
1 0 1 0 1
1 1 0 1 1



Folosind modelul de la punctul a), să se rezolve punctele b) și c).
b). #$q ↔ ( r → ¬p)%& ∨ #$(¬q → p) ↔ r %&

c). (( p ∨ q) ∧ (¬p ∨ r )) → (q ∨ r )

3
MATEMATICI DISCRETE ____________________________________ Laborator Nr. 3

Problema nr. 3
Să se scrie programe Python pentru a determina care sunt valorile de adevăr ale propoziţiilor p şi q
astfel încât expresiile următoare să fie simultan adevărate:
a). p → ( p ∧ q ) şi ( p ∨ q ) ∧¬( p ∧ q )

b). p → q şi (¬p ∨ q ) → p
Programul pentru rezolvarea punctului b)
from operator import implies

def main():
print("%10s %10s %12s %10s"%("p","q","expr1","expr2"))
for p in (False, True):
for q in (False, True):
expr1=implies(p,q)
expr2=implies(not p or q,p)
if (expr1 and expr2)==1:
print ("***%7d %10d %10d %10d" % ( p, q,expr1,expr2))
pTemp=p
qTemp=q
else:
print ("%10d %10d %10d %10d" % ( p, q,expr1,expr2))
print()
print('***')
print("%10s %d" %("val(p)=",pTemp))
print("%10s %d" %("val(q)=",qTemp))

main()

Afișează pe ecran:
p q expr1 expr2
0 0 1 0
0 1 1 0
1 0 0 1
*** 1 1 1 1

***
val(p)= 1
val(q)= 1


Problema nr. 4
Într-o sală de tribunal dau declaraţii trei persoane: Bogdan, Florin şi Stan.
Bogdan declară: Stan este vinovat şi Florin nu este vinovat.
Stan declară: Dacă Bogdan este vinovat, vinovat este şi Florin.
Florin declară: Eu sunt nevinovat, dar cel puţin unul din ceilalţi doi este vinovat.
Să se scrie un program Python care stabilește cine este vinovat şi cine nu.

4
MATEMATICI DISCRETE ____________________________________ Laborator Nr. 3

Problema nr. 5
Domnul Alexandru, soţia sa Bianca şi cei trei copii Carmen, Dan şi Ela stau împreună într-o seară de
iarnă.
a. Dacă dl. Alexandru priveşte la televizor, la fel face şi soţia sa.
b. Fie Dan, fie Ela, fie amândoi privesc la televizor.
c. Fie Bianca, fie Carmen, dar nu amândouă privesc la televizor.
d. Dan şi Carmen, fie că privesc, fie că nu privesc la televizor, dar asta numai împreună.
e. Dacă Ela priveşte la televizor, atunci dl. Alexandru şi Dan privesc şi ei.
Să se scrie un program Python care stabilește cine privește şi cine nu privește la televizor.

Problema nr. 6
Să se scrie programe Python care să permită demonstrarea faptului că următoarele expresii
propoziţionale sunt tautologii:
a). ((¬p) ∨ q) ∨ ( p ∧ (¬q))
b). ¬#$( p ∧ (¬q )) ∧ ((¬p) ∨ q )%&

c). ( p ∧ ( q ∨ r )) ↔ (( p ∧ q ) ∨ ( p ∧ r ))
d). (( p ∨ q) ∧ (¬p ∨ r )) → (q ∨ r )
e). !" p ∧ ( p → q )#$ → q

Problema nr. 7
Să se scrie programe Python care să permită determinarea tipului următoarei expresii (tautologie,
contradicţie, nici tautologie, nici contradicţie):
a). (( p ∨ q) ∧ (¬p ∨ r )) → (q ∨ r )
b). (( p → q ) ∧ ( q → r )) → ( p → r )
c). ( b ↔ ( b → a )) → a

Problema nr. 8
Patru prieteni au fost identificați ca suspecți pentru accesul neautorizat într-un sistem de calcul. Ei au
facut urmatoarele afirmații în fața autorităților. Ana a spus: „Costel a făcut-o.”. Ion a spus: „Eu nu am făcut-
o”. Costel a spus: „Diana a facut-o”. Diana spune: „Costel minte când spune că eu am făcut-o”.
a) Dacă autoritățile știu ca numai unul dintre cei patru suspecți spune adevărul, cine a făcut-o?
b) Dacă autoritățile știu ca numai unul din ei minte, cine a făcut-o?
Scrieți programe Python care să rezolve problema în cele două situații.

Problema nr. 9
Să presupunem că există inscripții pe ușile a două camere. Pe ușa de la prima cameră scrie: „In această
cameră este o doamnă și în cealaltă cameră este un tigru.”. Pe cealaltă ușă scrie: ”Într-una din aceste camere
este o doamnă și într-una din camere este un tigru”. Să presupunem că știți că una dintre inscripții este
adevărată și cealaltă este falsă. În spatele cărei uși este doamna?

5
MATEMATICI DISCRETE ____________________________________ Laborator Nr. 3

Problema nr. 10
Ștefan vrea să determine salariile relative a trei colegi de muncă știind două lucruri. Mai întâi, el știe
că dacă Fănică nu este cel mai bine plătit dintre cei trei, atunci Ioana este. Apoi, el știe că dacă Ioana nu este
cu salariul cel mai mic, atunci Maria este plătită cel mai bine. Este posibil să se determine salariile relative ale
lui Fănică, Ioana și Maria din ceea ce știe Ștefan? Dacă da, cine este plătit cel mai bine și cine este plătit cel
mai puțin bine? Explicați raționamentul.

Problema nr. 11
Trei profesori stau într-un restaurant. Ospătarul vine și îi întreabă: „Dorește toată lumea cafea?” Primul
profesor spune: „Nu știu” Al doilea profesor spune: „Nu știu” În final, al treilea profesor spune: „Nu, Nu toată
lumea vrea cafea”. Ospătarul se întoarce și dă profesorilor care doresc cafeaua. Cum și-a dat seama ospătarul
cine vrea cafea și cine nu?

S-ar putea să vă placă și