140 likes | 278 Views
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)
E N D
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
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
Diagramma di struttura Rappresentiamo la scomposizione del problema con un grafico ad albero chiamato diagramma di struttura Calcolo del quadrato Far vedere il risultato Leggere il numero Calcolare il quadrato
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
SOLUZIONE ESERCIZIO 1: TOP DOWN - diagramma di struttura Calcolo della radice quadrata Leggere e controllare il numero Calcolare la radice Visualizzare il risultato
SOLUZIONE ESERCIZIO 1: Analisi Input/Output RADICE QUADRATA DI NUMERO Calcolo Radice QUADRATA NUMERO
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>
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
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
SOLUZIONE ESERCIZIO: diagramma di struttura Altezze degli alunni di una classe Contare quanti alunni superano la media Calcolare la media delle altezze Memorizzare le altezze
SOLUZIONE ESERCIZIO 1: Analisi Input/Output Media Altezze Num Alunni che superano media Elaborazione Altezze Alunni Lista Altezze Alunni
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
// 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; } SOLUZIONE ESERCIZIO: programma