G. Amodeo, C. Gaibisso Programmazione di Calcolatori Le strutture di controllo Soluzione agli esercizi proposti Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 1 G. Amodeo, C. Gaibisso Esercizio 1: diagramma di flusso Calcolare il massimo di una sequenza non vuota di numeri interi positivi terminata da un intero negativo Start Nome: MaxOfSeq Variabili: int val, max max -1 val Descrizione variabili: val: max: memorizza il valore corrente della sequenza memorizza il massimo corrente true val < 0 max End false false val > max true max val Soluzione in: EsProposti\Lezione_XIII\Esercizio_1.c Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 2 G. Amodeo, C. Gaibisso Esercizio 1: il codice // sorgente: EsProposti\Lezione_XIII\Esercizio_1.c // direttive per il preprocessore #include <stdio.h> // Funzione che calcola il massimo di una sequenza non vuota di numeri interi // positivi terminata da un intero negativo int MaxOfSeq() { // definizione delle variabili per il valore corrente della sequenza e il // corrispondente massimo int val, max; // inizializzazione del massimo corrente max = -1; // ciclo di acquisizione della sequenza e calcolo del massimo corrente do { // acquisizione printf("\nProssimo elemento della sequenza:"); scanf("%d", &val); // calcolo del massimo corrente if (val > max) max = val; } while (val >= 0); // restituzione del massimo return(max); }; Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 3 G. Amodeo, C. Gaibisso Esercizio 1: il codice // chiamante int main () { printf("\nIl massimo della sequenza e': %d", MaxOfSeq()); return(1); } Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 4 G. Amodeo, C. Gaibisso Esercizio 2 Calcolare il minimo comune multiplo tra 2 interi positivi Start Nome: MCM Variabili: int A, B, max, mcm, count A, B Descrizione variabili: memorizza il primo intero B: memorizza il secondo intero max: memorizza il massimo tra i due interi mcm: memorizza il candidato corrente a minimo comune multiplo count: moltiplicato per max genera il prossimo candidato a minimo comune multiplo count 2 A: max A max B A>B true false mcm max mcm max*count cont count+1 false Soluzione in: EsProposti\Lezione_XIII\Esercizio_2.c mcm % A = 0 and mcm % B = 0 true mcm End Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 5 G. Amodeo, C. Gaibisso Esercizio 2: il codice // sorgente: EsProposti\Lezione_XIII\Esercizio_2.c // direttive per il preprocessore #include <stdio.h> // funzione che calcola il massimo tra due interi positivi int massimo (int val1, int val2) { if (val1 > val2) return(val1); else return(val2); }; // funzione che calcola il minimo comune multiplo tra 2 interi positivi int MCM(int A, int B) { // definizione della variabile per il massimo tra i due valori di input e per // per il candidato corrente a minimo comune multiplo int max; int mcm; // definizione della variabile che moltiplicata per il massimo tra i due valori di // input genera il prossimo candidato a minimo comune multiplo int count; // inizializzazione delle variabili count = 2; max = massimo(A, B); mcm = max; // verifica se il candidato corrente e' il minimo comune multiplo while (!((mcm%A == 0) && (mcm%B == 0))) // aggiorna il valore del candidato corrente mcm = max * count++; // restituisce il minimo comune multiplo return(mcm); }; Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 6 G. Amodeo, C. Gaibisso Esercizio 2: il codice // chiamante int main () { // definizione delle due variabili di input int x, y; // acquisizione delle variabili di input printf("\nPrimo valore? "); scanf("%d", &x); printf("\nSecondo valore? "); scanf("%d", &y); // visualizza il minimo comune multiplo tra le // variabili di input printf("\nIl mcm tra %d e %d e' %d", x, y, MCM(x, y)); return(1); } Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 7 G. Amodeo, C. Gaibisso Esercizio 3 Start Nome: MCD Variabili: int A, B, min, mcd, count Calcolare il massimo comun divisore tra 2 interi positivi A, B Descrizione variabili: memorizza il primo intero B: memorizza il secondo intero min: memorizza il minimo tra i due interi count: memorizza il candidato corrente a massimo comun divisore mcd: memorizza l’ultimo divisore comune individuato mcd 1 count 1 A: false true min A min B A>B true count > min mcd false End count count+1 false A % count = 0 and B % count = 0 true mcd count Soluzione in: EsProposti\Lezione_XIII\Esercizio_3.c Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 8 G. Amodeo, C. Gaibisso Esercizio 3: il codice continua … // testa tutti i valori compresi tra 1 e il minimo tra i valori di input while (count <= min) { // verifica se il candidato corrente è un divisore comune per i valori di input ed // aggiorna il valore della variabile per l'ultimo di tali divisori individuato if ((A%count == 0) && (B%count == 0)) mcd = count; // aggiorna il valore del candidato corrente count++; } // restituisce il massimo comun divisore return(mcd); }; // chiamante int main () { // definizione delle due variabili di input int x, y; // acquisizione delle variabili di input printf("\nPrimo valore? "); scanf("%d", &x); printf("\nSecondo valore? "); scanf("%d", &y); // visualizza il massimo comun divisore tra le variabili di input printf("\nIl mcd tra %d e %d e' %d", x, y, MCD(x, y)); return(1); } Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 9 G. Amodeo, C. Gaibisso Esercizio 3: il codice // sorgente: EsProposti\Lezione_XIII\Esercizio_3.c // direttive per il preprocessore #include <stdio.h> // funzione che calcola il minimo tra due interi positivi int minimo (int val1, int val2) { if (val1 > val2) return(val2); else return(val1); }; // funzione che calcola il massimo comun divisore tra 2 interi positivi int MCD(int A, int B) { // definizione della variabile per il minimo tra i due valori di input int min; // definizione della variabile per il candidato corrente a massimo comun divisore // e per l’ultimo divisore comune individuato per i valori di input individuato int count; int mcd; // inizializzazione delle variabili mcd = count = 1; min = minimo(A, B); continua … Programmazione di Calcolatori: Le strutture di controllo - soluzione agli esercizi 10