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