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