IISS LICETI Informatica Come si Svolge Un Esercizio Passi di Risoluzione individuare le parti che compongono un problema, scomponendolo il problema in sottoproblemi (TOP DOWN) descrivere dettagliatamente il lavoro svolto da ogni parte in termini di input, elaborazione, output. Utilizzando la pseudocodifica implementare in C++ un algoritmo che preveda l’utilizzo delle funzioni 2 Scomposizione in sottoproblemi Supponiamo di dover far risolvere al computer il seguente problema: Calcolare e visualizzare il quadrato di un numero letto da tastiera La prima domanda da porsi è: Quante parti compongono il problema? Solitamente “le parti” sono le azioni da svolgere per ottenere la soluzione. Nel nostro esempio: Leggere il numero Calcolare il quadrato Visualizzare il risultato 3 Diagramma di struttura Rappresentiamo la scomposizione del problema con un grafico ad albero chiamato diagramma di struttura Calcolo del quadrato Leggere il numero Calcolare il quadrato Far vedere il risultato 4 ESERCIZIO 1 Supponiamo ora di dover risolvere il seguente problema: Calcolare e visualizzare la radice quadrata di un numero letto da tastiera controllando prima che sia positivo Provate a disegnare il diagramma di struttura, la pseudocodifica e il programma in C++ SOLUZIONE 5 SOLUZIONE ESERCIZIO 1: TOP DOWN diagramma di struttura Calcolo della radice quadrata Leggere e controllare il numero Calcolare la radice Visualizzare il risultato 6 SOLUZIONE ESERCIZIO 1: Analisi Input/Output NUMERO Calcolo Radice QUADRATA RADICE QUADRATA DI NUMERO 7 SOLUZIONE ESERCIZIO 1: Pseudocodifica • <Leggere il numero e controllare che sia positivo> • <Calcolare la radice quadrata> • <Visualizzare il risultato> Che applicando il metodo top down in pseudocodice diventa: <leggo numero> Se <numero >= 0 > allora < calcolo radice quadrata> < visualizzo risultato> Altrimenti < visualizzo segnalazione di errore> Se lo pseudocodice lo scriviamo usando le parole chiavi (parole sottolineate) in inglese, arriviamo vicini all’implementazione: <leggo numero> IF <numero >= 0 > THEN < calcolo radice quadrata> < visualizzo risultato> ELSE < visualizzo segnalazione di errore> 8 SOLUZIONE ESERCIZIO 1: programma int main() {float num, ris; cout<<“digita un numero”; cin >> num; if (num>=0) { ris = sqrt(num); cout<<“\nil risultato è”; cout<<b; } else cout << “ Errore: Non e’ possibile fare la radice quadrata di un numero negativo “; Torna indietro 9 ESERCIZIO 2 Risolviamo il seguente problema: Date le altezze di 30 alunni di una classe, calcolare l’altezza media e stabilire quanti sono gli alunni che superano la media 10 SOLUZIONE ESERCIZIO: diagramma di struttura Altezze degli alunni di una classe Memorizzare le altezze Calcolare la media delle altezze Contare quanti alunni superano la media 11 SOLUZIONE ESERCIZIO 1: Analisi Input/Output Lista Altezze Alunni Elaborazione Altezze Alunni Media Altezze Num Alunni che superano media 12 SOLUZIONE ESERCIZIO 1: Pseudocodifica • <Memorizzare Altezze> • <Calcolare La Media Altezze> • < Calcolare num. Studenti che superano la media> • <Visualizzare il risultato> Che applicando il metodo top down in pseudocodice a < Calcolare la media Altezze > diventa (ipotizzando di averle memorizzate in un vettore): Media = 0; Finche’ < Non ho scandito vettore delle altezze> media <- altezze[i] + media i <- i+ 1 Fine-Ciclo media <- media / i Se lo pseudocodice lo scriviamo usando le parole chiavi (parole sottolineate) in inglese, arriviamo vicini all’implementazione: Media = 0; While < Non ho scandito vettore delle altezze> media <- altezze[i] + media i <- i+ 1 End While media <- media / i 13 SOLUZIONE ESERCIZIO: programma // prototipi delle funzioni void inserisci(int v[],int); float calcolamedia(int v[],int); void contaaltezze(int v[],int,float); int main() { int const max=30; int vett[max]; float media; inserisci(vett,max); media=calcolamedia(vett,max); contaaltezze(vett,max,media); } void inserisci(int v[],int dim) // carico il vettore { for (int i=0;i<dim;i++) {cout<<"\ndigita un elemento del vettore "; cin>>v[i]; } } float calcolamedia(int v[],int dim) //calcolo la media {float s,m; for (int i=0;i<dim;i++) s=s+v[i]; m=s/dim; cout<<"\nla media e' "<<m; return m; } void contaaltezze(int v[],int dim,float m) //calcolo le altezze {int conta=0; for (int i=0;i<dim;i++) { if (v[i]>m) conta++; } cout<<"\ngli alunni che superano la media sono "<<conta; } 14