an fi 98-99 metodologie1 metodologie di progetto metodologie top-down e bottom-up
TRANSCRIPT
![Page 1: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/1.jpg)
AN FI 98-99 Metodologie1
Metodologie di progetto
Metodologie top-down e bottom-up
![Page 2: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/2.jpg)
AN FI 98-99 Metodologie1
Metodologia top-down
Si parte dal problema e dalle proprieta’ note sul dominio dei dati
Si disgrega il problema in sottoproblemi Si affronta ciascun sottoproblema (con la
stessa metodologia) fino a raggiungere problemi risolubili con le mosse elementari
![Page 3: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/3.jpg)
AN FI 98-99 Metodologie1
Impostazione ricorsiva
Si esprime la soluzione di un caso particolare
Si tenta di disgregare il problema in modo da ricondurre la soluzione del caso generale al caso particolare
![Page 4: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/4.jpg)
AN FI 98-99 Metodologie1
Problema H(n)
Determinare il valore
H(n) = 1 + 1/2 +1/3 + ... + 1/n
![Page 5: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/5.jpg)
AN FI 98-99 Metodologie1
H(n): progetto
H(n): nat -> double
IPOTESI: n >0Riscrittura della relazione:
H(n) = (1 + 1/2 + … + 1/(n-1)) + 1/n
H(n) vale 1 per n = 1
H(n) vale 1/n + H(n-1) per n >1
![Page 6: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/6.jpg)
AN FI 98-99 Metodologie1
H(n): codifica
double H( int n ){
return
(n==1) ? 1: 1.0/n + H(n-1);
}
![Page 7: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/7.jpg)
AN FI 98-99 Metodologie1
Problema: bk
Scrivere una funzione che restituisce il valore dell’espressione che segue:
bk
con b reale, k intero, k>= 0
![Page 8: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/8.jpg)
AN FI 98-99 Metodologie1
bk : progetto
power(b,k) double x nat -> double
IPOTESI: k >= 0Riscrittura della relazione:
b0 = 1
bk = b * bk-1 per k > 0
power(b,k) -> 1 per k = 0
power(b,k) -> b*power(b,k-1) per k > 0
![Page 9: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/9.jpg)
AN FI 98-99 Metodologie1
bk : codifica
double power(double b,int k){
return
(k==0)? 1 : b*power(b,k-1);
}
![Page 10: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/10.jpg)
AN FI 98-99 Metodologie1
Valore di un polinomio a coeff 1
Scrivere una funzione che restituisce il valore dell’espressione che segue:
xn + xn-1 + ... + x + x0
con x reale, n intero, n>= 0
![Page 11: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/11.jpg)
AN FI 98-99 Metodologie1
Polinomio: progetto
Riscrittura della relazione:
polin(x,n)= xn + xn-1 + ... + x + x0 =
xn + (xn-1 + ... + x + x0) =xn + polin(x,n-1)
![Page 12: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/12.jpg)
AN FI 98-99 Metodologie1
Polinomio: codifica
double pol( double x, int n ){
return
(n==0)?1:power(x,n)+pol(x,n-1);
}
![Page 13: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/13.jpg)
AN FI 98-99 Metodologie1
Polinomio: un altro ragionamento
polin(x,n)= xn + xn-1 + ... + x + x0 =( ... ( (x + 1 ) *x + 1 ) * x + ... +1)* x + 1
v
v = 1v = v*x + 1 n volte
![Page 14: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/14.jpg)
AN FI 98-99 Metodologie1
Polinomio: un altro ragionamento
x4 + x3 + x2 + x1 + x0=(( ( x + 1 ) *x + 1 ) * x +1) *x
+1v = 1
v = v*x + 1
v = v*x + 1
v = v*x + 1
v = v*x + 1
0
1
2
3
4
![Page 15: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/15.jpg)
AN FI 98-99 Metodologie1
Polinomio: un altro ragionamento
so che al passo k=0, il valore corrente del polinomio vale 1
sapendo che, al passo k, il valore corrente del polinomio vale v, al passo k+1 il valore corrente del polinomio vale v*x+1
![Page 16: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/16.jpg)
AN FI 98-99 Metodologie1
Polinomio
double pol( double x, int n ){return polin(x,n,1,0);
}
double polin (double x,int n,double v,int k){return(k==n)?v:polin(x,n,v*x+1,k+1);}
![Page 17: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/17.jpg)
AN FI 98-99 Metodologie1
Fattoriale
N! = 1*1*2*3*…*N
so che al passo k=0, n! vale 1 sapendo che, al passo k, n! vale v, al passo
k+1 n! vale v*k
![Page 18: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/18.jpg)
AN FI 98-99 Metodologie1
Fattoriale
int fact( int n ){//so che al passo 0 n! vale 1
return factIter(n,1,0); }
int factIter (int n,int v,int k){//so che al passo k n! vale v//dunque al passo k+1 n! vale v*k
return (k<n)?factIter(n,v*(k+1),k+1):v; }
![Page 19: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/19.jpg)
AN FI 98-99 Metodologie1
Contaminuscole
Definire una funzione ContaMinuscole che restituisca il numero di lettere minuscole del tipo prededfinito char
int ContaMinuscole ()
![Page 20: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/20.jpg)
AN FI 98-99 Metodologie1
Contaminuscole: progetto
Partendo dal carattere ‘a’ e procedendo con il carattere successivo, si incrementa un contatore, fino a raggiungere il carattere ‘z’
IPOTESI:– la funzione Succ(char c) restituisce il
carattere ASCII successivo al carattere c
![Page 21: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/21.jpg)
AN FI 98-99 Metodologie1
Contaminuscole: riprogetto
detto chIn il carattere di partenza e chEnd il carattere finale,– se chIn e’ uguale a chEnd il il numero dei
caratteri e’ uguale al 1;– se chIn precede chEnd il numero dei
caratteri e’ uguale al 1 piu’ il numero dei caratteri da Succ(chIn) a chEnd
![Page 22: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/22.jpg)
AN FI 98-99 Metodologie1
Contaminuscole: codifica
int ContaMinuscole () {return contaChar(‘a’,’z’);
}
La soluzione introduce un componente software (la funzione contaChar) che risolve un problema piu’ generale di quello dato
![Page 23: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/23.jpg)
AN FI 98-99 Metodologie1
contaChar
int contaChar(char chIn, char chEnd){// chIn: carattere iniziale
// chEnd: carattere finale
return(chIn == chEnd) ? 1 :
1+contaChar(Succ(chIn),chEnd);
}
![Page 24: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/24.jpg)
AN FI 98-99 Metodologie1
La funzione succ sui caratteri
char Succ(char ch){
int succRep = ord(ch)+1;
return (succRep<=255)?((char)succRep):‘\0’;
}
![Page 25: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/25.jpg)
AN FI 98-99 Metodologie1
Le funzioni ord e chr
int ord(char ch){
return (int)ch; }
char chr(int rapCh){
return
((rapCh>=0)&&(rapCh<=255))?
(char)rapCh:‘\0’; }
![Page 26: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/26.jpg)
AN FI 98-99 Metodologie1
Scorciatoie
int contaChar(char chIn, char chEnd){// chIn: carattere iniziale
// chEnd: carattere finale
return( chIn==chEnd ) ? 1 :
1+contaChar((int)chIn+1,chEnd);
}
![Page 27: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/27.jpg)
AN FI 98-99 Metodologie1
Un altro ragionamento contaChar puo’ ricevere come informazione di
ingresso:– un carattere generico ch compreso tra chIn e chEnd ;– il valore nc del numero di caratteri che va dal carattere
di inizio a ch
contaChar(contaChar(charchar ch, ch,int int ncnc,char,char chEnd) chEnd) In tal caso:
![Page 28: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/28.jpg)
AN FI 98-99 Metodologie1
Un ragionamento iterativo
Se ch coincide con chEnd, allora il numero dei caratteri compresi tra chIn e chEnd vale nc
Se ch precede chEnd, allora il numero dei caratteri compresi tra chIn e chEnd puo’ essere denotato dall’espressione:
contaChar(Succ(ch),nc+1,chEnd)
![Page 29: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/29.jpg)
AN FI 98-99 Metodologie1
contaCharTl
intint contaCharTl( contaCharTl(charchar ch, ch, int int ncnc, char, char chEnd){ chEnd){// ch: carattere corrente
// nc: numero dei caratteri dall’inizio a ch
// chEnd: carattere finale
return(ch==chEnd)? nc :
contaCharTl(Succ(ch),nc+1,chEnd);
}
![Page 30: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/30.jpg)
AN FI 98-99 Metodologie1
ContaMinuscole
int ContaMinuscole () {return contaCharTlcontaCharTl(‘a’,1,’z’);
}
![Page 31: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/31.jpg)
AN FI 98-99 Metodologie1
Una strada molto breve
Avendo realizzato una funzione di trasformazione da caratteri a interi, la soluzione del problema e’:
ord(‘z’)-ord(‘a’)+1;
![Page 32: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/32.jpg)
AN FI 98-99 Metodologie1
Numero cifre
Determinare il numero di cifre decimali che compaiono in una stringa data
![Page 33: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/33.jpg)
AN FI 98-99 Metodologie1
Numero cifre: progetto
int numCifre( String s )
sapendo che nella sottostringa da 0 a k di s vi sono n digit, nella sottostringa da 0 a k+1:– vi sono n+1 digit se il carattere di posizione k+1
e’ un digit– vi sono n digit se il carattere di posizione k+1 non
e’ un digit
![Page 34: AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up](https://reader036.vdocuments.mx/reader036/viewer/2022081514/5542eb5a497959361e8c6797/html5/thumbnails/34.jpg)
AN FI 98-99 Metodologie1
Numero cifre: codifica
int numCifre( String s ){
return numCifre1( s,0,0 ); }
int numCifre1(String s,int n,int k){
return (k==s.length()) ? n :
((isDigit(s.charAt(k))) ? numCifre1( s,n+1,k+1 ):
numCifre1( s,n,k+1 ) );
}