operatori logici - Informatica e Programmazione

Linguaggio C
Condizioni composte
(operatori logici)
Università degli Studi di Brescia
Prof. Massimiliano Giacomin
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
1
Condizioni composte
•  Talvolta nelle strutture if, if-else, while, do-while, for
necessario specificare condizioni composte da condizioni elementari
Esempio informale:
if(n>3 “AND” m<=4) …
•  Il legame tra le condizioni elementari è espresso mediante
operatori logici corrispondenti agli operatori booleani
•  Il valore di verità (vero | falso) della condizione complessa dipende
dai valori di verità delle condizioni elementari
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
2
Operatori logici in C
!
NOT (operatore unario)
!<cond> vera se <cond> falsa
&&
AND (operatore binario)
(<c1> && <c2>) vera se <c1> e <c2> vere entrambe
||
OR (operatore binario)
(<c1> || <c2>) vera se almeno una tra <c1> e <c2>
è vera
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
3
Esempio
if(n >= 5 && n<10)
V
{
5 <= n < 10
printf(“n è nell’intervallo “);
printf(“[5, 10)\n”);
}
printf(…)
printf(…)
F
n=20;
n = 20
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
4
Esercizio 0
Scrivere un programma in linguaggio C che riceve in ingresso due
interi strettamente positivi: il programma deve ripetere l’acquisizione
di entrambi i numeri finché questa condizione non sia verificata.
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
5
Esercizio 0
Scrivere un programma in linguaggio C che riceve in ingresso due
interi strettamente positivi: il programma deve ripetere l’acquisizione
di entrambi i numeri finché questa condizione non sia verificata.
do{
scanf(“%d”, &n1);
scanf(“%d”, &n2);
}while(n1<=0 || n2<=0);
// || indica OR…
…
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
6
Esercizio 1
Scrivere un programma che determini il massimo valore tra
quattro numeri acquisiti da tastiera.
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
7
Esercizio 1
Scrivere un programma che determini il massimo valore tra
quattro numeri acquisiti da tastiera.
UN’IDEA DIVERSA DA QUELLA GIA’ VISTA
1)  Acquisisci i numeri (x, y, v, z)
2)  Se (x>y && x>v && x>z)
il maggiore è x
altrimenti //siamo sicuri che x non è massimo
se (y>v && y>z)
il maggiore è y
altrimenti //siamo sicuri che né x né y siano massimi
se (v>z)
il maggiore è v
altrimenti il maggiore è z
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
8
int x, y, v, z, max;
printf("Inserisci x\n");
scanf("%d%d%d%d",&x, &y, &v, &z);
if(x>y && x>v && x>z)
max=x;
else if(y>v && y>z)
max=y;
else if(v>z)
max=v;
else max=z;
printf("Massimo = %d\n", max);
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
9
Esercizio 2
Scrivere un programma che continua ad acquisire un intero fino
a quando l’utente non inserisce un numero strettamente positivo
e multiplo di 100, dopodiché lo stampa a video.
Esempio:
L’utente inserisce
-100
34
49
200
Prof. M. Giacomin
A questo punto il calcolatore
stampa 200.
Elementi di Informatica e Programmazione – Università di Brescia
10
L’idea…
Ovviamente, mi serve un ciclo che continui ad acquisire
numeri fino a quando il numero inserito non sia “corretto”
(strettamente positivo e multiplo di 100).
Dato che devo acquisire almeno un numero, posso pensare di
usare un ciclo do-while (a condizione finale)…
do{
printf(“Inserisci un numero str. positivo multiplo di 100\n”);
scanf(“%d”, &n);
} while (!(n>0 && n%100==0));
è lo stesso:
Prof. M. Giacomin
while (n<=0 || n%100 != 0);
Elementi di Informatica e Programmazione – Università di Brescia
11
Esercizio 3
Scrivere un programma che determini se un anno acquisito
da tastiera è bisestile. Un anno è bisestile se il suo numero
è divisibile per 4, con l'eccezione che gli anni secolari
(quelli divisibili per 100) sono bisestili solo se divisibili per 400
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
12
Esercizio 3
Scrivere un programma che determini se un anno acquisito
da tastiera è bisestile. Un anno è bisestile se il suo numero
è divisibile per 4, con l'eccezione che gli anni secolari
(quelli divisibili per 100) sono bisestili solo se divisibili per 400
int anno;
printf("Inserisci l’anno\n");
scanf(“%d”, &anno);
if( ((anno % 100 !=0) && (anno % 4 ==0)) || anno%400==0)
printf(“Anno bisestile\n");
else printf(“Anno non bisestile\n”);
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
13