Fino ad ora ho imparato ad utlizzare gli operatori di confronto. Maggiore (>), minore (<), uguale (==), Maggiore-uguale (>=) e minore-uguale (<=).
Con il prossimo esercizio comincerò a familiarizzare con gli operatori logici AND (&&), OR (||) e NOT (!).
Solitamente nel linguaggio C un espressione è vera se assume un valore diverso da zero ed è falsa se assume un valore uguale a zero. Qindi 1 = VERO (TRUE) , 0=FALSO (FALSE).
Gli operatori logici sono utlizzati per dare un risultato non ambiguo a un operatore di confronto, ogni confronto indica una condizione.Più sono le condizioni e più saranno le possibilità di risultato. Un confronto tra due condizioni potrà restituire quattro possibilità, tre condizioni restituiranno 8 possibilità, 4 condizioni restituiranno 16 possibilità.
Semplificando: i risultati di una condizione possono essere due (vero o falso) ed elevato alla seconda avremo 4 possibilità, elevato alla 3 potranno avere 8 possibilità e così via, dove l'esponente è il numero delle condizioni. 2^2=4 , 2^3=8 , 2^4=16 etc. etc.
Faccio un piccolo esempio per specificare e capire meglio: se ho tre variabili a=5, b=4 e c=3 e devo verificare magari con un IF se a è maggiore di b e b maggiore di c non posso scrivere IF (a>b>c) ,
ma drovrei scrivere: IF (a>b && b>c) oppure se dovessi verificare se a è maggiore di b o b è maggiore di c dovrei scrivere IF (a>b OR b>c).
Nel primo caso ho bisogno che entrambe le condioni siano vere nel secono caso invece ho bisogno che una delle due sia vera.
Tornando a quanto scritto precdentemente la condizione a>b mi può dare due risultati, vero o falso e stessa cosa per b>c anche qui ho due possibili risultati, vero o falso.
Queste due condizioni quindi mi restituiranno quattro combinazioni. Si può vedere nel dettaglio:
Quindi come si vede dalla tabella nel caso dell' AND c'è bisogno che entrambe le condizioni siano vere per avere risutlato finale vero, mentre nel caso dell' OR basta che solo una delle due conzioni sia vera per avere il risultato vero.
L'operatore NOT (!) invece si usa per creare l'opposto di una condizione. Quindi per esempio la condizione !(a<b) verificherà la condizione esattamente oppposta ovvero (a>=b).
Come esercizio ho realizzato un semplice programmino che ho chiamato "Lotteria".
Praticamente verrà richiesto di inserire un numero intero da tastiera compreso tra 1 e 99 e se il numero è compreso tra 0 e 9 oppure tra 30 e 41 oppure tra 55 e 71 restituirà il messaggio che l'utente ha indovinato il numero da inserire. Viceversa l'utente non avrà indovinato e avrà una seconda possibilità di indovinare.
Qui con un semplice IF-ELSE e con gli operatori AND e OR ho verificato le condizioni per verificare se il numero inserito era compreso nell'intervallo sopra descritto.
Eccolo:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int numero;
printf ("Lotteria 3AI \n");
printf ("Scegli un numero compreso tra 0 e 99 e vediamo se vinci. Hai 2 tentativi !! \n");
printf ("Primo tentativo \n");
printf ("Inserisci il tuo numero \n");
scanf ("%d", &numero);
if (numero>=0&&numero<=9||numero>=30&&numero<=41||numero>=55&&numero<=71)
// controllo se il numero inserito è maggiore-uguale di zero e minore-uguale di nove
// o maggiore-uguale di trenta e minore-uguale di 41 o maggiore-uguale a 55 e minore-uguale a 71
{
printf ("Hai Vinto !! \n"); //se il numero è giusto stampa hai vinto e il programma termina
}
else // altrimenti stampa che hai perso e riparte per un altro tentativo
{
printf ("Hai Perso. Ritenta !! \n");
printf ("Secondo e Ultimo Tentativo. Inserisci il tuo Numero \n");
scanf ("%d", &numero);
if (numero>=0&&numero<=9||numero>=30&&numero<=41||numero>=55&&numero<=71)
{
printf ("hai Vinto !! \n");
}
else
{
printf ("Hai Perso !! \n");
}
}
return 0;
}
a>b | b>c | RISULTATO DI a>b && b>c | RISULTATO DI a>b || b>c |
VERO | VERO | VERO | VERO |
VERO | FALSO | FALSO | VERO |
FALSO | VERO | FALSO | VERO |
FALSO | FALSO | FALSO | FALSO |
Quindi come si vede dalla tabella nel caso dell' AND c'è bisogno che entrambe le condizioni siano vere per avere risutlato finale vero, mentre nel caso dell' OR basta che solo una delle due conzioni sia vera per avere il risultato vero.
L'operatore NOT (!) invece si usa per creare l'opposto di una condizione. Quindi per esempio la condizione !(a<b) verificherà la condizione esattamente oppposta ovvero (a>=b).
Come esercizio ho realizzato un semplice programmino che ho chiamato "Lotteria".
Praticamente verrà richiesto di inserire un numero intero da tastiera compreso tra 1 e 99 e se il numero è compreso tra 0 e 9 oppure tra 30 e 41 oppure tra 55 e 71 restituirà il messaggio che l'utente ha indovinato il numero da inserire. Viceversa l'utente non avrà indovinato e avrà una seconda possibilità di indovinare.
Qui con un semplice IF-ELSE e con gli operatori AND e OR ho verificato le condizioni per verificare se il numero inserito era compreso nell'intervallo sopra descritto.
Eccolo:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int numero;
printf ("Lotteria 3AI \n");
printf ("Scegli un numero compreso tra 0 e 99 e vediamo se vinci. Hai 2 tentativi !! \n");
printf ("Primo tentativo \n");
printf ("Inserisci il tuo numero \n");
scanf ("%d", &numero);
if (numero>=0&&numero<=9||numero>=30&&numero<=41||numero>=55&&numero<=71)
// controllo se il numero inserito è maggiore-uguale di zero e minore-uguale di nove
// o maggiore-uguale di trenta e minore-uguale di 41 o maggiore-uguale a 55 e minore-uguale a 71
{
printf ("Hai Vinto !! \n"); //se il numero è giusto stampa hai vinto e il programma termina
}
else // altrimenti stampa che hai perso e riparte per un altro tentativo
{
printf ("Hai Perso. Ritenta !! \n");
printf ("Secondo e Ultimo Tentativo. Inserisci il tuo Numero \n");
scanf ("%d", &numero);
if (numero>=0&&numero<=9||numero>=30&&numero<=41||numero>=55&&numero<=71)
{
printf ("hai Vinto !! \n");
}
else
{
printf ("Hai Perso !! \n");
}
}
return 0;
}
Come si può notare ho ripetuto due volte il controllo con 2 IF. Probabilmente avrei potuto usare un ciclo e un contatore per far ripetere il programma due volte. Ci ho provato sinceramente ma ho avuto problemi con il controllo. Riuscivo a far terminare il programma con il controllo sul contatore ma non sul controllo del numero indovinato in quanto se al primo tentativo si indovinava il programma doveva terminare.
Ci riproverò con i prossimi post, acquisendo man mano le informazioni che al momento mi mancano.