# Istruzione if (superiori)
## Operatori di Confronto

Gli operatori di confronto che servono per scrivere delle espressioni logiche (che hanno cioe' come risultati i valori booleani true e false) sono:
quindi per sapere se la variabile z e' uguale a 5 si deve scrivere la seguente condizione z==5 , e' un doppio uguale perché il singolo uguale e' invece l'operatore di assegnazione (che non serve per confrontare)

## Istruzione if

Non sempre e' possibile risolvere un problema usando soltanto istruzioni disposte sequenzialmente, alcune volte in base a una condizione si vuole eseguire in alternativa o un certo gruppo di istruzioni o un altro gruppo di istruzioni(diverse). Ad esempio posso dire se marco ha più di 10 euro prima saluta gli amici poi compra della pizza altrimenti torna a casa e poi va a giocare a calcio. Oppure possiamo dire se la merce acquistata ha un valore maggiore di 50 euro il negoziante fa uno sconto del 10% altrimenti uno sconto del 5%, in questo caso l'istruzione sconto del 10% e' in alternativa a quella dove lo sconto e' 5% e la scelta di quale sconto applicare dipende dalla condizione (spesa superiore a 50 euro)
L'istruzione per realizzare una scelta fra 2 blocchi di istruzioni e' l'istruzione if Vediamo ora la sintassi dell'if ( la sintassi e' la regola grammaticale con cui impartiamo l'ordine ) :
Ad esempio posso scrivere
Guardando alla sintassi del comando si ha :
* che la condizione logica è una qualsiasi espressione che ha come risultato un valore booleano (cioè o true o false)
* poi c'e' un primo blocco d'istruzioni racchiuse fra parentesi graffe (quella di apertura allineata con quella di chiusura) che sono eseguite se la condizione logica e' true, questo blocco di istruzioni e' detto blocco istruzioni caso vero
* poi c'e' dopo l'else un secondo blocco d'istruzioni racchiuse fra parentesi graffe (quella di apertura allineata con quella di chiusura) che sono eseguite se la condizione logica e' false, questo blocco di istruzioni e' detto blocco istruzioni caso falso
* la parola if corrisponde all'italiano se ed è una parola riservata perché indica un'istruzione
* la parola else corrisponde all'italiano altrimenti, e' una parola riservata ed usata insieme ad un if ( e quindi mai da sola)
possiamo riassumere dicendo che if-else funziona in questo modo: se la condizione e' verificata esegui le istruzioni del blocco caso vero altrimenti quelle del blocco caso falso.
per rappresentare graficamente un if-else ho il seguente diagramma di flusso
ci sono delle varianti al comando , ad esempio può mancare la parte else , in questo caso si parla di if semplice (quello precedente e' detto invece if a 2 vie).La sintassi del if semplice e'
ad esempio
in questo caso solo se la condizione a>4 è verificata le istruzioni del blocco vero sono eseguite,e il diagramma di flusso e' il seguente
si nota che la struttura e' uguale a quella di prima ma non ci sono istruzioni da eseguire nel caso falso . Sia che ci sia l'esecuzione del blocco vero o sia che venga eseguito quello falso poi ci si ricongiunge in un punto e si prosegue con le istruzioni successive. Se un blocco di istruzioni contiene una sola istruzione allora le graffe di quel blocco possono essere omesse, cioe' posso avere:
oppure
oppure
nel caso di if semplice si ha invece
che possiamo scrivere anche su una sola riga
Le istruzioni del blocco vero o falso possono essere qualsiasi , se le istruzioni di un blocco (vero o falso di un if) contengono a loro volta un'istruzione if si parla di istruzione if annidata, ad esempio
naturalmente nel comando precedente qualche graffa poteva essere omessa arrivando a:
Qualche volta quando si usano degli if annidati si creano delle situazioni particolari
in questo caso ho un solo else a quale if appartiene? in questo caso la regola vuole che l'if appartenga all'if più interno (cioe' al if(a>70) ), posso identare (spaziando) meglio il codice per evidenziare come l'istruzione vienen eseguita
per ottenere l'effetto opposto bisogna giocare con le parentesi graffe, in modo da raggruppare in modo diverso le istruzioni, si ha allora
Gli annidamenti del if danno luogo a delle strutture dette if-elseif del tipo
in questo caso anche se l'identazione e' corretta perché evidenzia la corretta struttura if else if, si preferisce ricompattarla per motivi di spazio nella seguente forma:
che evidenzia che si ha un if multiplo che serve per gestire una serie di casi ( a pari a 1, a pari a 4 etc ) e la relativa azione intrapresa.
Nel C non esistono le variabili booleani, che sono state introdotte nel c++, nel c per rappresentare una variabile booleana (vero/falso) si usa un intero, se l'intero vale 0 la condizione e' falsa , se e' diverso da zero la condizione e' vera, quindi l'espressione logica (condizione) con i booleani può essere sostituita da una espressione che restituisce un intero
se z vale 10 e scrivo
vedo sullo schermo comparire ciao perché z-6 fa 4 e quattro e' un numero diverso da zero e quindi se interpretato come il risultato di una espressione logica si ha vero.