Pr1: determinare il maggiore di n numeri interi 1 2 3 4 n …

Pr1: determinare il maggiore di n numeri interi
1
2
3
4
…
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
n
1
Pr1: determinare il maggiore di n numeri interi
…
1
2
3
4
P1. trovare il maggiore fra i primi 2 numeri;
n
P2. trovare il maggiore fra
il terzo numero e il risultato del sottoproblema precedente;
P3. trovare il maggiore fra
il quarto numero e il risultato del sottoproblema precedente;
P4. trovare il maggiore fra
il quinto numero e il risultato del sottoproblema precedente;
…
Pn-1. trovare il maggiore fra
l'ultimo numero e il risultato del sottoproblema precedente.
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
2
1. I passi sono eseguiti uno alla volta
2. Ogni passo è eseguito esattamente una volta:
nessuno è ripetuto nessuno è omesso
3. L'ordine in cui i passi sono eseguiti è esattamente quello
in cui sono scritti
4. La terminazione dell'ultimo passo implica
la terminazione dell'algoritmo
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
3
SEQUENZA
1. I passi sono eseguiti uno alla volta
2. Ogni passo è eseguito esattamente una volta:
nessuno è ripetuto nessuno è omesso
3. L'ordine in cui i passi sono eseguiti è esattamente quello
in cui sono scritti
4. La terminazione dell'ultimo passo implica
la terminazione dell'algoritmo
Poco flessibile!
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
4
Pr1: determinare il maggiore di n numeri interi
…
1
2
3
4
P1. trovare il maggiore fra i primi 2 numeri;
n
P2. trovare il maggiore fra
il terzo numero e il risultato del sottoproblema precedente;
P3. trovare il maggiore fra
il quarto numero e il risultato del sottoproblema precedente;
P4. trovare il maggiore fra
il quinto numero e il risultato del sottoproblema precedente;
Pi. … i+1-esimo e il risultato del sottoproblema precedente;
…
Pn-1. trovare il maggiore fra
l'ultimo numero e il risultato del sottoproblema precedente.
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
5
P1. trovare il maggiore fra i primi 2 numeri;
P2. finchè ci sono numeri da verificare
ripetere il passo P3;
P 3. trovare il maggiore fra
il nuovo numero da esaminare e
il più grande trovato in precedenza.
ITERAZIONE
. poter ripetere certi passi in un algoritmo
un numero arbitrario di volte
. per esprimere algoritmi la cui lunghezza varia
in accordo alle “circostanze”
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
6
P1. trovare il maggiore fra i primi 2 numeri;
P2. finchè ci sonoCONDIZIONE
numeri da verificare
ripetere
il passo P3;
AZIONE
P 3. trovare il maggiore fra
il nuovo numero da esaminare e
il più grande trovato in precedenza.
ITERAZIONE
. poter ripetere certi passi in un algoritmo
un numero arbitrario di volte
. per esprimere algoritmi la cui lunghezza varia
in accordo alle “circostanze”
definita
indefinita
descrivere un processo di durata indeterminata mediante
un algoritmo di lunghezza finita
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
7
Pr2: determinare il maggiore fra due numeri interi x e y
P1. determinare la differenza δ fra x e y
P2. se δ >0
allora la soluzione è x
altrimenti la soluzione è y.
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
8
Pr2: determinare il maggiore fra due numeri interi x e y
P1. determinare la differenza δ fra x e y
P2. se δcondizione
>0
allora la soluzione
azione1 è x
altrimenti la soluzione
azione2 è y.
SELEZIONE
. poter selezionare tra diversi cammini in un algoritmo
a seconda delle “circostanze”
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
9
Scrivere un programma per il calcolo della media di
due interi dati in ingresso
cinque
#include <iostream>
using namespace std;
int main ()
{int a, b;
double media;
cout <<"Questo programma calcola la media di due
valori interi dati in ingresso;\n";
cout <<"scrivi i due interi:\n";
cin >>a >>b;
media=a+b;
media=media/2;
cout <<"la loro media e':\n" <<media <<'\n';
return 0;
Fondamenti di Informatica
}
Prof. Vittoria de Nitto Personè
10
#include <iostream.h>
using namespace std;
int main ()
{int a, b, c, d, e;
double media;
cout <<"Questo programma calcola la media
di cinque valori interi dati in ingresso;\n";
cout <<"scrivi i cinque interi:\n";
cin >>a >>b >>c >>d >>e;
media=a+b+c+d+e;
media=media/5;
cout <<"la loro media e':\n" <<media <<'\n';
return 0;
}
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
11
#include <iostream>
using namespace std;
int main ()
{int a, N, i;
double media=0;
cout <<"Questo programma calcola la media
di N valori interi dati in ingresso;\n";
cout <<"Quale e' il valore di N?\n";
cin >>N;
i=N;
finchè (i>0)
condizione
{cout <<"scrivi il prossimo intero:\n";
azione cin >>a;
media=media+a;
i=i-1;}
media=media/N;
cout <<"la loro media e':\n" <<media <<'\n';
return 0;
}
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
12
SINTASSI
while (espressione) comando;
espressione deve essere una espressione logica
SEMANTICA
1. valuta espressione
2. se espressione è vera
- esegui comando
- torna a 1
se espressione è falsa termina
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
13
….
int main ()
{int a, N, i;
double media=0;
cout <<"Questo programma calcola la media di N valori interi
dati in ingresso;\n";
cout <<"Quale e' il valore di N?\n";
cin >>N;
i=N; inizializzazione
while (i>0) condizione
{cout <<"scrivi il prossimo intero:\n";
cin >>a;
media=media+a;
i=i-1;} decremento (o incremento)
media=media/N;
cout <<"la loro media e':\n" <<media <<'\n';
return 0;
Fondamenti di Informatica
14
Prof. Vittoria de Nitto Personè
}
…
int main ()
{int a, N, i;
double media=0;
cout <<"Questo programma calcola la media
di N valori interi dati in ingresso;\n";
cout <<"Quale e' il valore di N?\n";
cin >>N;
for (i=N; i>0; i=i-1;)
{cout <<"scrivi il prossimo intero:\n";
cin >>a;
media=media+a;
}
media=media/N;
cout <<"la loro media e':\n" <<media <<'\n';
return 0;
Fondamenti di Informatica
}
Prof. Vittoria de Nitto Personè
15
SINTASSI
for (assegnamento; condizione; espressione)
comando;
SEMANTICA
for (nome=exp; exp1; exp2) comandoX;
1.
2.
3.
inizializza la variab. di controllo tramite
nome=exp;
valuta exp1: se è vera si esegue
comandoX;
se è falsa il for termina;
valuta exp2, torna a 2.
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
16
i=0;
while (i<=8)
{cout <<"Ciao! ";
i=i+1;}
for (i=0; i<=8; i=i+1)
cout <<"Ciao! ";
cout <<"Ciao!
cout <<"Ciao!
cout <<"Ciao!
cout <<"Ciao!
cout <<"Ciao!
cout <<"Ciao!
cout <<"Ciao!
cout <<"Ciao!
cout <<"Ciao!
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
";
";
";
";
";
";
";
";
";
17
8
! i =0+1+2+3+4+5+6+7+8
i=0
sommatoria=sommatoria+0;
sommatoria=sommatoria+1;
sommatoria=0;
sommatoria=sommatoria+2;
for (i=0; i<=8; i=i+1)
sommatoria=sommatoria+i; sommatoria=sommatoria+3;
sommatoria=sommatoria+4;
sommatoria=sommatoria+5;
sommatoria=sommatoria+6;
sommatoria=sommatoria+7;
sommatoria=sommatoria+8;
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
18
SINTASSI
espressione logica
a) if (espressione) comando;
b) if (espressione) comando1;
else comando2;
SEMANTICA
a) 1. valuta espressione
2. se espressione è vera
- esegui comando
- termina
se espressione è falsa termina
b) 1. valuta espressione
2. se espressione è vera
- esegui comando1
se espressione è falsa - esegui comando2
3. termina
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
19
if (e1) if (e2) comandox else comandoy
?
if (e1) {if (e2) comandox}
else comandoy
oppure
if (e1) {if (e2) comandox
else comandoy}
Fondamenti di Informatica
Prof. Vittoria de Nitto Personè
20