Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoAntonino Viola Modificato 10 anni fa
1
AN FI 98-99 Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up
2
AN FI 98-99 Metodologie1 Metodologia top-down u Si parte dal problema e dalle proprieta note sul dominio dei dati u Si disgrega il problema in sottoproblemi u Si affronta ciascun sottoproblema (con la stessa metodologia) fino a raggiungere problemi risolubili con le mosse elementari
3
AN FI 98-99 Metodologie1 Impostazione ricorsiva u Si esprime la soluzione di un caso particolare u Si tenta di disgregare il problema in modo da ricondurre la soluzione del caso generale al caso particolare
4
AN FI 98-99 Metodologie1 Problema H(n) u Determinare il valore H(n) = 1 + 1/2 +1/3 +... + 1/n
5
AN FI 98-99 Metodologie1 H(n): progetto u H(n): nat -> double IPOTESI: n >0 Riscrittura 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
6
AN FI 98-99 Metodologie1 H(n): codifica double H( int n ){ return (n==1) ? 1: 1.0/n + H(n-1); }
7
AN FI 98-99 Metodologie1 Problema: b k u Scrivere una funzione che restituisce il valore dellespressione che segue: b k con b reale, k intero, k>= 0
8
AN FI 98-99 Metodologie1 b k : progetto u power(b,k) double x nat -> double IPOTESI: k >= 0 Riscrittura della relazione: b 0 = 1 b k = b * b k-1 per k > 0 power(b,k) -> 1 per k = 0 power(b,k) -> b*power(b,k-1) per k > 0
9
AN FI 98-99 Metodologie1 b k : codifica double power(double b,int k){ return (k==0)? 1 : b*power(b,k-1); }
10
AN FI 98-99 Metodologie1 Valore di un polinomio a coeff 1 u Scrivere una funzione che restituisce il valore dellespressione che segue: x n + x n-1 +... + x + x 0 con x reale, n intero, n>= 0
11
AN FI 98-99 Metodologie1 Polinomio: progetto u Riscrittura della relazione: polin(x,n)= x n + x n-1 +... + x + x 0 = x n + (x n-1 +... + x + x 0 ) = x n + polin(x,n-1)
12
AN FI 98-99 Metodologie1 Polinomio: codifica double pol( double x, int n ){ return (n==0)?1:power(x,n)+pol(x,n-1); }
13
AN FI 98-99 Metodologie1 Polinomio: un altro ragionamento polin(x,n)= x n + x n-1 +... + x + x 0 = (... ( (x + 1 ) *x + 1 ) * x +... +1)* x + 1 v v = 1 v = v*x + 1n volte
14
AN FI 98-99 Metodologie1 Polinomio: un altro ragionamento x 4 + x 3 + x 2 + x 1 + x 0 = (( ( x + 1 ) *x + 1 ) * x +1) *x +1 v = 1 v = v*x + 1 0 1 2 3 4
15
AN FI 98-99 Metodologie1 Polinomio: un altro ragionamento u so che al passo k=0, il valore corrente del polinomio vale 1 u 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
16
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); }
17
AN FI 98-99 Metodologie1 Fattoriale u N! = 1*1*2*3*…*N u so che al passo k=0, n! vale 1 u sapendo che, al passo k, n! vale v, al passo k+1 n! vale v*k
18
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; }
19
AN FI 98-99 Metodologie1 Contaminuscole u Definire una funzione ContaMinuscole che restituisca il numero di lettere minuscole del tipo prededfinito char int ContaMinuscole ()
20
AN FI 98-99 Metodologie1 Contaminuscole: progetto u Partendo dal carattere a e procedendo con il carattere successivo, si incrementa un contatore, fino a raggiungere il carattere z u IPOTESI: –la funzione Succ(char c) restituisce il carattere ASCII successivo al carattere c
21
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
22
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
23
AN FI 98-99 Metodologie1 contaChar int contaChar(char chIn, char chEnd){ // chIn : carattere iniziale // chEnd: carattere finale return(chIn == chEnd) ? 1 : 1+c ontaChar (Succ(chIn),chEnd); }
24
AN FI 98-99 Metodologie1 La funzione succ sui caratteri char Succ(char ch){ int succRep = ord(ch)+1;ord return (succRep<=255)?((char)succRep):\0; }
25
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;}
26
AN FI 98-99 Metodologie1 Scorciatoie int contaChar(char chIn, char chEnd){ // chIn : carattere iniziale // chEnd: carattere finale return( chIn==chEnd ) ? 1 : 1+c ontaChar ((int)chIn+1,chEnd); }
27
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(char ch,int nc,char chEnd) u In tal caso:
28
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 dallespressione: contaChar(Succ(ch),nc+1,chEnd)
29
AN FI 98-99 Metodologie1 contaCharTl int contaCharTl(char ch, int nc, char chEnd){ // ch : carattere corrente // nc: numero dei caratteri dallinizio a ch // chEnd: carattere finale return(ch==chEnd)? nc : c ontaCharTl (Succ(ch),nc+1,chEnd); }
30
AN FI 98-99 Metodologie1 ContaMinuscole int ContaMinuscole () { contaCharTl return contaCharTl (a,1,z); }
31
AN FI 98-99 Metodologie1 Una strada molto breve u Avendo realizzato una funzione di trasformazione da caratteri a interi, la soluzione del problema e: ord(z)-ord(a)+1;
32
AN FI 98-99 Metodologie1 Numero cifre u Determinare il numero di cifre decimali che compaiono in una stringa data
33
AN FI 98-99 Metodologie1 Numero cifre: progetto int numCifre( String s ) u 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
34
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 ) ); }
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.