Informatica 2 Liceo Scientifico Scienze Applicate/Operatori Logici

Indice del libro

Gli operatori Logici

modifica

Quando si devono scrivere delle condizioni logiche possiamo usare gli operatori di confronto <,<=,>,>=,==,!= per poter però costruire delle condizioni logiche piu' complesse dobbiamo usare gli operatori logici AND,OR,NOT.

Pensiamo alla situazione di dover trovare un fidanzato, Maria dice io voglio un fidanzato bello, Elena interviene e dice io voglio un fidanzato bello ma anche intelligente, Mattia dice invece io la fidanzata la voglio carina o simpatica ( mi va bene anche se e' carina e simpatica contemporaneamente ,e i compagni ridono), Luca dice io la fidanzata non la voglio bassa perché io sono alto un metro e 90, francesco che interviene per ultimo dice io la voglio bella ricca e famosa e stefano ribatte dicendo guarda che Belen e' gia' impegnata con me .

Ora se analizziamo le singole condizioni troviamo che

  • per Maria deve essere aspetto == bello
  • per Elena deve essere aspetto == bello e contemporaneamente cervello == intelligente
  • per Luca non deve essere bassa cioè non statura==bassa
  • per Mattia deve essere aspetto == carina oppure carattere=simpatica , in questo caso l'oppure e' da intendersi come carina e/o simpatica
  • per Francesco deve essere aspetto == carina e contemporaneamente statosociale == ricca e contemporaneamente popolarita'== famosa

Ora queste condizioni risultano piu' complesse perché date dall'unione di piu' condizioni logiche o dalla negazione di una condizione logica. L'operatore AND serve per congiungere piu' condizioni logiche fra loro, imponendo che tutte siano verificate perché la condizione complessiva sia verificata.

L'operatore OR serve per disgiungere piu' condizioni logiche fra loro, imponendo che basta che una delle condizioni sia verificata perché la condizione complessiva sia verificata.

L'operatore NOT serve per negare una condizione, la condizione negata ribalta la condizione di partenza (se e' true diventa false e viceversa)

Proviamo quindi a scrivere le condizioni per trovare la fidanzata usando questi nuovi operatori, L'AND nel C ha come simbolo il && l'OR ha come simbolo || e il NOT ha come simbolo il ! .

  • per Maria visto che c'e' una sola condizione basta scrivere (aspetto=="bello")
  • per Elena visto che ci sono 2 condizioni che devono essere verificate contemporaneamente uso l'operatore di congiunzione, e ho (aspetto=="bello") && (cervello=="intelligente")
  • per Luca la condizione e' singola e negata allora ho  !(statura=="bassa")
  • per Mattai le condizioni sono 2 ma basta che una sola delle 2 sia verificata perché la condizione complessiva sia accettata (vera) allora ho (aspetto=="carina") || (carattere=="simpatica")
  • per Francesco le condizioni sono 3 e si vuole che tutte siano vere, allora scrivo (aspetto="carina") && (statosociale=="ricca") && (popolarità=="famosa")

Mentre per un informatico un valore booleano e' un valore true/false cioe' vero o falso per un elettronico un valore booleano e' 0/1 zero rappresenta assenza di tensione/corrente e uno rappresenta presenza di tensione/corrente nel circuito, e per esprimere il comportamento degli operatori AND OR e NOT si utilizzano delle tabelle dette tabelle di verita', vediamole,

il simbolo A rappresenta la prima condizione e il simbolo B la seconda condizione


Vediamo la tabella di verita' del AND il cui simbolo nel C è &&

l'operatore && e' binario cioe' lavora su due operandi (le espressioni logiche A e B)


A B A&&B
true true true
true false false
false true false
false false false


nelle prime 2 colonne si sono scritte tutte le possibili condizioni che possono capitare, si nota che perché sia verificata la condizione complessiva A&&B bisogna che entrambe le condizioni A e B siano verificate, o detto in modo diverso basta che una delle due sia falsa perché la condizione complessiva sia false.Quando c'e' da valutare 2 o piu' condizioni unite fra loro dall'operatore && (AND) il C si ferma alla prima delle condizioni che trova falsa, senza valutare le successive. Qualche volta si congiungono anche piu' di 2 condizioni con l'operatore &&, si parla allora di AND multiplo e visto che basta che una condizione sia falsa perchéla condizione complessiva sia falsa, se devo calcolare A && B && C && D il linguaggio C procede in questo modo : guarda prima A se questa risulta falsa non valuta le condizioni successive perché sa gia' che il risultato complessivo sarà falso, se invece A e' vero non puo' ancora stabilire il risultato complessivo e deve andare a valutare anche la condizione B e se questa e' vera anche la condizione successiva C e così via.Nel caso quindi di and multiplo il C si ferma alla prima condizione falsa che trova non valutando quelle successive . Questo risulta utile se dobbiamo verificare se n/m sia maggiore di 5, la divisione n/m e' calcolabile infatti solo se m e' diverso da zero e allora io scrivo (m!=0)&&(n/m>5) perché per poter dividere per m devo prima assicurami che sia diverso da zero, se lo fosse non voglio calcolare n/m perché l'operazione non e' possibile e se eseguita produce un errore Division By zero che comporta l'immediata interruzione del programma.


Vediamo la tabella di verita' del OR il cui simbolo nel C è ||

l'operatore || e' binario cioe' lavora su due operandi (le espressioni logiche A e B)


A B A||B
true true true
true false true
false true true
false false false



nelle prime 2 colonne si sono scritte tutte le possibili condizioni che possono capitare, si nota che perché sia verificata la condizione complessiva A||B basta che almeno una delle conzioni sia verificata perché sia la condizione complessiva true, e viceversa bisogna che tutte le condizioni siano false perché la condizione complessiva sia falsa.

Vediamo la tabella di verita' del NOT il cui simbolo nel C è  !

l'operatore ! e' unario cioe' lavora su un solo operando (le espressione logica A)


A !A
true false
false true



L'operatore ! (NOT) inverte la condizione logica cioè la nega, si può scrivere la stessa condizione in modi diversi ad esempio la condizione la fidanzata deve essere alta la posso anche scrivere come la fidanzata non deve essere bassa, state attenti generalmente che è preferibile la prima espressione perché più chiara. Tutti i circuiti elettronici al loro interno contengono migliaia di componenti detti porte logiche che individualmente realizzano la funzione AND, OR, NOT. Gli elettronici studiano una particolare matematica detta algebra di Boole (L'inventore della notazione e delle sue proprietà) che permette data una funzione (con variabili di tipo binario) di trovarne l'equivalente circuitale mediante port AND, porte OR e porte NOT Gli elettronici che per rappresentare il valore true usano il numero binario 1 e per rappresentare false usano lo 0, pensano all'and come a un prodotto e pensano all'or come a una addizione (binaria).Le tabelle AND OR NOT le potete trovare anche nei libri di elettronica scritte nella seguente forma:

Porta AND Porta OR Testo del titolo
 
Porta AND
 
Porta OR
 
Porta NOT
A B A AND B
1 1 1
1 0 0
0 1 0
0 0 0
A B A OR B
1 1 1
1 0 1
0 1 1
0 0 0
A NOT A
0 1
1 0

Pensiamo ora alla matematica spesso si vuole verificare se un numero appartiene o meno a un certo intervallo,

 
Punto interno a un intervallo, punto esterno a un intervallo
ad esempio scrivendo   si intende che il punto x appartiene all'intervallo   dove il punto a appartiene all'intervallo e b invece ne e' escluso, scritto in altra forma  

Se la condizione fosse   allora la condizione e' composta da due condizioni che devono valere contemporaneamente, si deve allora usare l'operatore di congiunzione (2<=x)&&(x<7)
Se mi interessa sapere se il punto non e' nell'intervallo   allora la condizione e' quella opposta a quella precedentemente scritta cioe devo negare la condizione opposta cioe'  !((2<=x)&&(x<7))
Un punto che non e' nell'intervallo   è un punto esterno allo stesso cioe' o e' nell'intervallo   oppure nell'intervallo   , mi basta che una delle due sia verificata e la condizione diventa allora (x<2)||(x>=7)