Elementi di Informatica e Programmazione PDF
Document Details
Uploaded by Deleted User
Università degli Studi di Brescia
Andrea Loreggia
Tags
Related
- Algorithmique et Programmation C - INPT - 2024/2025 PDF
- Algorithmique et Programmation C (INPT) - 2024/2025 PDF
- Introduzione al linguaggio C - Università degli Studi di Messina - PDF
- Module Programmation I: Le Langage C - Introduction - PDF
- Introduction Générale à la Programmation C (PDF)
- 04_controllo_processi_1X PDF - Laboratorio di Sistemi Operativi
Summary
These lecture notes cover basic C programming concepts, including if-else statements and examples. The content is related to computer science and programming, and the material is aimed at an undergraduate level. The notes are from the University of Brescia, Italy.
Full Transcript
Elementi Di Informatica E Programmazione Prof. Andrea Loreggia Istruzioni di scelta in C L’operazione di scelta avviene mediante l’istruzione if-else Le condizioni di scelta possono essere semplici od elaborate Le scelte possono essere liberamente combinate...
Elementi Di Informatica E Programmazione Prof. Andrea Loreggia Istruzioni di scelta in C L’operazione di scelta avviene mediante l’istruzione if-else Le condizioni di scelta possono essere semplici od elaborate Le scelte possono essere liberamente combinate tra loro, annidate In alcuni casi si può usare l’istruzione switch (trattata nella lezione “Istruzione switch”) 2 Istruzione if-else if ( C ) { V F A ; C } else { A B B ; } 3 Esempio int a, b ; printf("Immetti un numero: "); scanf("%d", &a) ; if ( a > 0 ) { printf("positivo\n") ; b = a ; } else { printf("negativo\n") ; b = -a ; } printf("Il valore assoluto di %d e' %d", a, b) ; 4 Suggerimento Ad ogni nuova parentesi graffa aperta {, inserire degli spazi aggiuntivi ad inizio riga Tale tecnica, detta indentazione, permette una migliore leggibilità del codice È visivamente immediato riconoscere l’inizio e la fine dei blocchi di istruzioni Molti ambienti di sviluppo hanno funzioni di indentazione automatica o semi-automatica 5 Note La condizione C può essere semplice o complessa Il blocco A può essere composto da una sola istruzione, o da più istruzioni Il blocco B può essere composto da una sola istruzione, o da più istruzioni 11 Caso particolare: istruzione if V F if ( C ) C { A ; } A Manca la condizione else 7 Esempio int a ; printf("Immetti un numero: "); scanf("%d", &a) ; if ( a < 0 ) { a = -a ; } printf("Il valore assoluto e' %d", a) ; 8 Errore frequente È errato mettere il if ( a > 0 ) ; simbolo di punto-e- a = -a ; virgola ; dopo l’istruzione if forma corretta viene interpretato come if ( a > 0 ) ; if ( a > 0 ) a = -a ; a = -a ; 16 Errore frequente È errato fidarsi della if ( a > 0 ) sola indentazione printf("neg"); a = -a ; viene interpretato come forma corretta if ( a > 0 ) if ( a > 0 ) { printf("neg"); printf("neg"); a = -a ; a = -a ; } 17 Suggerimento Anche se vi è una sola istruzione nel blocco “vero” o nel blocco “falso”, utilizzare sempre le parentesi graffe In tal modo il programma sarà più leggibile, e sarà più facile aggiungere eventuali nuove istruzioni senza incappare in errori 11 Le condizioni La condizione C è solitamente basata su un’operazione di confronto determinare se una variabile è uguale o meno a zero, o a un altro valore costante determinare se una variabile è uguale ad un’altra variabile, o è diversa, o è maggiore, o minore,... determinare se una espressione, calcolata a partire da una o più variabili, è uguale, diversa, maggiore, minore,... di una costante, o una variabile, o un’altra espressione 12 Operatori di confronto in C Uguaglianza Uguale: a == b Diverso: a != b Ordine Maggiore: a > b Minore: a < b Maggiore o uguale: a >= b Minore o uguale: a 3 )... if( x*y != y*x )... if( a/2 == (a+1)/2 )... 14 Errore frequente Confondere l’operatore di assegnazione = con l’operatore di confronto == Regola pratica: le parentesi tonde richiedono == Regola pratica: il punto- e-virgola richiede = 28 Esercizio “Controlla A e B” Si scriva un programma in linguaggio C che legga due numeri da tastiera, detti A e B, e determini le seguenti informazioni, stampandole a video: determini se B è un numero positivo o negativo determini se A è un numero pari o dispari calcoli il valore di A+B determini quale scelta dei segni nell’espressione (±A) + (±B) porta al risultato massimo, e quale è questo valore massimo. 16 Struttura generale Leggi A e B Controlla il segno di B Stampa il messaggio opportuno Controlla la parità di A Stampa il messaggio opportuno Calcola A+B Stampa il risultato...l’ultimo punto è più difficile...ci pensiamo dopo! 17 Lettura dei dati Leggi A e B int a, b ; printf("Immetti A"); scanf("%d", &a) ; printf("Immetti B"); scanf("%d", &b) ; 18 Controllo del segno Controlla il segno di B Stampa il messaggio opportuno if( b > 0 ) { printf("B e' positivo\n"); } else { printf("B e' negativo o nullo\n"); } 19 Controllo della parità Controlla la parità di A Stampa il messaggio opportuno if( “a è pari” ) { printf("A e' pari\n"); } else { printf("A e' dispari\n"); } 20 Numero pari Come determinare se un numero è pari? Calcoliamo la divisione per 2, e controlliamo il resto Se il resto della divisione per 2 vale 0, allora il numero è pari Se il resto della divisione per 2 vale 1, allora il numero è dispari Il calcolo del resto si ottiene con l’operatore % if( “a è pari” ) if( (a % 2) == 0 ) 21 Completamento esercizio “Controlla A e B” Abbiamo verificato il corretto funzionamento Rimane da implementare il punto: determini quale scelta dei segni nell’espressione (±A) + (±B) porta al risultato massimo, e quale è questo valore massimo. Appaiono possibili diverse strategie: Calcolare le 4 combinazioni e scegliere il massimo Riscrivere algebricamente l’espressione 22 Strategia 1 La prima strategia prevede di calcolare: R1 = (+A) + (+B) R2 = (+A) + (–B) R3 = (–A) + (+B) R4 = (–A) + (–B) Dopo avere calcolato queste 4 variabili, occorre confrontarle per determinare quale è maggiore di tutte le altre. In questo caso è inutilmente macchinoso. 23 Strategia 2 Ragionando algebricamente, la massima somma che si può ottenere dall’espressione (±A) + (±B) sarà quando ±A è positivo ±B è positivo In altre parole, è sufficiente calcolare la somma dei valori assoluti |A| + |B| 24 Valore assoluto Il valore assoluto di una variabile è pari a il valore dell’opposto della variabile se la variabile è negativa il valore della variabile stessa se la variabile è positiva 25 Valore assoluto Il valore assoluto di una variabile è pari a il valore dell’opposto della variabile se la variabile è negativa il valore della variabile stessa se la variabile è positiva if( ab) 32 Contesto di utilizzo Solitamente gli operatori booleani && || ! si utilizzano all’interno della condizione dell’istruzione if, per costruire condizioni complesse Più avanti vedremo come si usano anche nella condizione del costrutto while Tali operatori lavorano su operandi che solitamente sono: Condizioni semplici (es. (a>b)||(a!=1)) Risultati di altri operatori booleani (es. ((a>b)&&(b>c))||(c==0)) 33 Precedenza degli operatori Quando più operatori booleani e di confronto sono presenti nella stessa espressione, vengono valutati come segue: Prima gli operatori di confronto == != > < >= =a && x>=a && x=a) && (x b > 0 ) forma (b > 0) corretta ) if ( (a == b) && forma if ( a==b==c ) (b == c) corretta ) 36 Errore frequente È errato “sottintendere” parte di un confronto Esempio: “se a o b sono diversi da uno” if ( a || b != 1 ) forma corretta if ( (a!=1) || (b!=1) ) if ( (a||b) != 1 ) forma corretta 37 Esercizio “Classificazione triangolo 1” Si scriva un programma in linguaggio C che legga da tastiera i valori delle lunghezze dei tre lati di un triangolo (detti A, B e C), e determini: se il triangolo è equilatero se il triangolo è isoscele se il triangolo è scaleno se il triangolo è rettangolo Nota: si assuma, per il momento, che i valori A, B, C descrivano correttamente un triangolo 38 Analisi del problema Ricordiamo le condizioni matematiche relative alla classificazione dei triangoli: Equilatero: le lunghezze dei tre lati A, B, C sono uguali tra loro Isoscele: le lunghezze di [almeno] due dei tre lati A, B, C sono uguali tra loro ogni triangolo equilatero è anche isoscele Scaleno: le lunghezze dei tre lati A, B, C sono tutte diverse tra loro Rettangolo: possiede un angolo retto vale il teorema di Pitagora 39 Espressioni matematiche (I) Equilatero A=B=C (A = B) AND (B = C) AND (A = C) (A = B) AND (B = C) Isoscele (A = B) OR (B = C) OR (A = C) Scaleno (A ≠ B) AND (A ≠ C) AND (B ≠ C) 40 Espressioni matematiche (II) Rettangolo Teorema di Pitagora Ipotenusa2 = Cateto2 + Cateto2 L’ipotenusa può essere uno qualunque dei lati A, B oppure C (A2 = B2+C2) OR (B2 = A2+C2) OR (C2 = A2+B2) 41 Condizioni in C Equilatero a==b && b==c Isoscele a==b || b==c || a==c Scaleno a!=b && b!=c && a!=c Rettangolo (a*a == b*b + c*c) || (b*b == a*a + c*c) || (c*c == a*a + b*b) 42 Istruzioni if-else annidate Annidamento di istruzioni if-else Opzionalità del ramo else Catene if-else if-...-else Esercizio proposto Verifica della soluzione 2 Scelte annidate Nelle istruzioni del V F blocco “vero” o del C1 blocco “else”, è A1 possibile inserire altri blocchi di scelta V F B C2 In tal caso la seconda scelta risulta annidata A2 A3 all’interno della prima A4 4 Caso 1 C1 vero, C2 vero V F Istruzioni eseguite: C1 A1, A2, A4 A1 V F B C2 A2 A3 A4 5 Caso 2 C1 vero, C2 vero V F Istruzioni eseguite: C1 A1, A2, A4 A1 C1 vero, C2 falso Istruzioni eseguite: V F B C2 A1, A3, A4 A2 A3 A4 6 Caso 3 C1 vero, C2 vero V F Istruzioni eseguite: C1 A1, A2, A4 A1 C1 vero, C2 falso Istruzioni eseguite: V F B C2 A1, A3, A4 C1 falso, C2 A2 A3 indifferente Istruzioni eseguite: B A4 7 Corretto annidamento L’intero blocco di V F scelta più interno C1 (dalla condizione fino A1 al ricongiungimento) deve essere V F B C2 completamente contenuto all’interno A2 A3 di uno dei rami del blocco più esterno A4 8 Sintassi C if ( C1 ) { A1 ; V F C1 if ( C2 ) { A1 A2 ; } V F B else C2 { A3 ; A2 A3 } A4 ; } A4 else { B ; 9 } Sintassi C if ( C1 ) { A ; V F C1 } else B1 { B1 ; A V F C2 if ( C2 ) { B2 ; B2 B3 } else { B4 B3 ; } B4 ; 10 } Caso generale V F C1 A1 B1 V F V F C2 C3 A2 A3 B2 B3 A4 B4 51 Sintassi C if ( C1 ) else { { V F C1 A1 ; B1 ; if ( C2 ) if ( C3 ) A1 B1 { { V F V F A2 ; B2 ; C2 C3 } } else else A2 A3 B2 B3 { { A3 ; B3 ; } } A4 B4 A4 ; B4 ; } } 52 Sintassi C Un’istruzione if può comparire ovunque anche all’interno del blocco “vero” o “falso” di un’altra istruzione if Occorre garantire il corretto annidamento delle istruzioni le istruzioni annidate vanno completamente contenute tra le parentesi graffe {...} 53 Esempio Ricordiamo l’esercizio sull’algoritmo risolutivo delle equazioni di primo grado ax+b=0 La soluzione è: x=–b/a solo se a≠0 54 Soluzione (parziale) leggi a V F a≠0? leggi b calcola x = –b/a stampa “errore” stampa x 55 Esempio Ricordiamo l’esercizio sull’algoritmo risolutivo delle equazioni di primo grado ax+b=0 La soluzione è: x=–b/a solo se a≠0 x = indeterminato (infinite soluzioni) se a=0 e b=0 x = impossibile (nessuna soluzione) se a=0 e b≠0 56 Soluzione (completa) leggi a V F a≠0? leggi b b=0? V F calcola x = –b/a stampa stampa “indeterminata” “impossibile” stampa x 57 Soluzione in C (1/2) #include #include int main(void) { float a, b ; float x ; printf("Risoluzione eq. di primo grado\n"); printf("Equazione: a x + b = 0\n") ; printf("Immetti coefficiente a: "); scanf("%f", &a) ; printf("Immetti coefficiente b: "); scanf("%f", &b) ; 18 Soluzione in C (2/2) if( a != 0 ) { x = - b / a ; printf("La soluzione e' x = %f\n", x) ; } else { if( b==0 ) { printf("Equazione indeterminata\n"); } else { printf("Equazione impossibile\n"); } } } 19