PDA

Visualizza la versione completa : [C/C++]: Le leggi di De Morgan


f@nt@m@n
06-09-2006, 00:08
Ciao a tutti,
sono arrivato ad un punto di un testo di C in cui ho incontrato le leggi di De Morgan.
Secondo sto cristiano
l'espressione
!(condizione1 && condizione2)
è logicamente uguale a
(!condizione1 || !condizione2)

e l'espressione
!(condizione1 || condizione2)
è logicamente uguale a
(!condizione1 && !condizione2)

Prendiamo il primo caso. Se entrambe le condizioni !(condizione1 && condizione2) sono false l'espressione produrrà un risultato. In quella seguente basta che una delle due condizioni (!condizione1 || !condizione2) sia falsa e l'espressione produrrà un risultato.
Perchè non mi torna? Vorrei capire dove sbaglio :bhò: .

Neptune
06-09-2006, 01:02
Originariamente inviato da f@nt@m@n
Ciao a tutti,
sono arrivato ad un punto di un testo di C in cui ho incontrato le leggi di De Morgan.
Secondo sto cristiano
l'espressione
!(condizione1 && condizione2)
è logicamente uguale a
(!condizione1 || !condizione2)

e l'espressione
!(condizione1 || condizione2)
è logicamente uguale a
(!condizione1 && !condizione2)

Prendiamo il primo caso. Se entrambe le condizioni !(condizione1 && condizione2) sono false l'espressione produrrà un risultato. In quella seguente basta che una delle due condizioni (!condizione1 || !condizione2) sia falsa e l'espressione produrrà un risultato.
Perchè non mi torna? Vorrei capire dove sbaglio :bhò: .

Se si raccoglie la negazione fuori parentesi o la si distribuisce tra i termini in parentesi, il connettivo si trasforma nel suo opposto.

http://it.wikipedia.org/wiki/De_morgan

dannie
06-09-2006, 08:54
Originariamente inviato da f@nt@m@n
!(condizione1 && condizione2)
è logicamente uguale a
(!condizione1 || !condizione2)


Prendiamo il primo caso. Se entrambe le condizioni !(condizione1 && condizione2) sono false l'espressione produrrà un risultato. In quella seguente basta che una delle due condizioni (!condizione1 || !condizione2) sia falsa e l'espressione produrrà un risultato.
Perchè non mi torna? Vorrei capire dove sbaglio :bhò: .

Forse stai facendo confusione: nella prima espressione ottieni false se sia condizione1 sia condizione2 sono true, true in tutti gli altri casi; analogamente, nella seconda espressione l'unico modo per avere false è porre entrambe le condizioni a true altrimenti qualunque altra combinazine ti dà false. Le due espressioni sono quindi logicamente equivalenti.
:ciauz:

f@nt@m@n
06-09-2006, 11:42
Originariamente inviato da dannie
Forse stai facendo confusione: nella prima espressione ottieni false se sia condizione1 sia condizione2 sono true, true in tutti gli altri casi; analogamente, nella seconda espressione l'unico modo per avere false è porre entrambe le condizioni a true altrimenti qualunque altra combinazine ti dà false. Le due espressioni sono quindi logicamente equivalenti.
:ciauz:

Ok. Sulla prima ci sono ma nella seconda mi crea confusione l'operatore ||. Da quello che dice Neptune se metto entrambe le negazioni all'interno della parentesi || produce gli effetti di &&, ho capito bene?

Neptune
06-09-2006, 13:37
Originariamente inviato da f@nt@m@n
Ok. Sulla prima ci sono ma nella seconda mi crea confusione l'operatore ||. Da quello che dice Neptune se metto entrambe le negazioni all'interno della parentesi || produce gli effetti di &&, ho capito bene?

E' il contrario, se leggi bene il link che ti ho messo per complettezza capirai che se metti il segno di negazione fuori dalle parentesi allora l'operatore logico (all'interno della parentesi) and diventa or e viceversa.

Puoi paragonare tutto all'algebra, se c'è un meno di fronte ad una parentesi i segni all'interno cambiano.

Ti consiglio però di fare qualche prova pratica in modo che "ti convinci" meglio del loro funzionamento.

andbin
06-09-2006, 14:04
Il teorema di De Morgan si può dimostrare solo per "induzione completa".

In pratica se vuoi dimostrare che:

_______ _ _
A and B = A or B
devi fare la tabellina con le 4 combinazioni dei valori di A e B e dimostrare che l'output delle due espressioni è uguale.

f@nt@m@n
06-09-2006, 17:10
Abbiate pazienza ma voglio capire se ci sono arrivato
!(condizione1 && condizione2)
(!condizione1 || !condizione2)
0 0 = 1
1 0 = 1
0 1 = 1
1 1 = 0

!(condizione1 || condizione2)
(!condizione1 && !condizione2)
0 0 = 1
1 0 = 0
0 1 = 0
1 1 = 0

Ho dato un'occhiata al link ma non mi è chiaro per quale motivo gli operatori diventano l'opposto :confused: .

andbin
06-09-2006, 17:21
_______
A and B
___
A B | A*B | A*B
----+-----+-----
0 0 | 0 | 1
0 1 | 0 | 1
1 0 | 0 | 1
1 1 | 1 | 0

_ _
A or B
_ _ _ _
A B | A | B | A+B
----+---+---+-----
0 0 | 1 | 1 | 1
0 1 | 1 | 0 | 1
1 0 | 0 | 1 | 1
1 1 | 0 | 0 | 0

f@nt@m@n
07-09-2006, 00:47
C'ho messo un po' ma ci sono arrivato :yuppi: :yuppi: . Grazie

Loading