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
Scarica

COMESiFaUnEsercizio