1 / 30

Lo stato

Lo stato. Il riuso dei componenti. Una critica. L’impostazione funzionale e’ sempre costruttiva. Ma si puo’ sempre solo creare?

artan
Download Presentation

Lo stato

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lo stato Il riuso dei componenti AN Fondam98 Controllo

  2. Una critica • L’impostazione funzionale e’ sempre costruttiva. Ma si puo’ sempre solo creare? • Perche’ creare una versione nuova di un accumulatore ad ogni passo iterativo, visto che l’elaboratore di Von Neumann permette la modifica del contenuto di una cella di memoria? AN Fondam98 Controllo

  3. Una proposta • E’ possibile riusare una stessa parte-dati senza bisogno di crearne una nuova ad ogni passo computazionale? • Ci sono controindicazioni? AN Fondam98 Controllo

  4. Parte dati e parte controllo • Data una unita’ operativa prefissata (ad es. una unita’ artimetico-logica) e’ possibile dare soluzione a problemi diversi riusando la stessa parte operativa? • Algoritmi=dati + controllo AN Fondam98 Controllo

  5. Stile imperativo Assegnamento e costrutti di controllo AN Fondam98 Controllo

  6. Un componente con stato interno boolean fa(boolean a,boolean b){ boolean s = mfn(a,b,r); //inizializzazione r= sfn(a,b,r); //assegnamento return s; } • La variabile r e’ non locale • La funzione fornisce risultati diversi per coppie uguali di valori AN Fondam98 Controllo

  7. Variabili nei linguaggi imperativi • Rappresentano astrazioni delle celle di memoria di un elaboratore piuttosto che sinonimi di dati • Sono associate a due diverse informazioni: • l'indirizzo di una cella di memoria (o della prima cella di un blocco di celle) • il contenuto AN Fondam98 Controllo

  8. 3.22 a x Variabili nei linguaggi imperativi la corrispondenza tra la variabile x e il valore 3.22 puo' venire rappresentata come segue: a si dice l-value di X 3.22 si dice r-value di X AN Fondam98 Controllo

  9. Assegnamento int X=3; X = X + 1; • calcola il valore (v) dell’espressione X+1 • assegna il valore v al blocco di celle di indirizzo X.l-value • restituisce il valore v AN Fondam98 Controllo

  10. Assegnamento int X=3; int Y; Y = X = X + 1; calcola il valore (v) dell’espressione X+1 • assegna il valore v al blocco di celle di indirizzo X.l-value • assegna il valore v al blocco di celle di indirizzo Y.l-value • restituisce il valore v AN Fondam98 Controllo

  11. L’operatore ++ (postfisso) int X=3; X++; • calcola il valore (v) dell’espressione X • assegna il valore v+1 al blocco di celle di indirizzo X.l-value • restituisce v AN Fondam98 Controllo

  12. L’operatore ++ (prefisso) int X=3; ++X; • calcola il valore (v) dell’espressione X+1 • assegna il valore v al blocco di celle di indirizzo X.l-value • restituisce v AN Fondam98 Controllo

  13. Comandi • notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno del programma o quello del mondo circostante. • Le strutture di controllo (if,-then-else, while-do, for, repeat-unitl, switch, etc.) permettono di aggregare comandi semplici in macrocomandi AN Fondam98 Controllo

  14. Procedure • costrutti che permettono di attribuire un nome ad un macrocomando e renderlo parametrico if( x == 3 ) return 2+x*sin(0.75); elsereturn x; double f1(double x ){ if( x == 3 ) return 2+x*sin(0.75); elsereturn x; } AN Fondam98 Controllo

  15. Istruzioni di controllo Scelte e cicli AN Fondam98 Controllo

  16. Espressioni ... int f( int n,int i,int v ){ //inizialmente v = 1 //invariante di ciclo: v=i! return (i==n)?v:f(n,i+1,(i+1)*v); } Chiamata: …f(n,0,1) AN Fondam98 Controllo

  17. … istruzioni ... int f( int n,int i,int v ){ //inizialmente v = 1 //invariante di ciclo: v=i! if(i==n) return v; else return f(n,i+1,(i+1)*v); } AN Fondam98 Controllo

  18. Istruzioni di controllo: while int f( int n ){ //inizialmente v = 1 int v=1; int i=0; //invariante di ciclo: v=i! while (i<n){ i = i + 1 ; //v=(i-1)! v = i * v ; //v/i=(i-1)! => v=i! } //v=i! and i==n => v=n! return v; } Fondamenti 97 AN Fondam98 Controllo

  19. Istruzioni di controllo: for int f( int n ){ //inizialmente v = 1 int v=1; //invariante di ciclo: v=i! for( int i=1;i<n;i++) v = i*v; return v; } Fondamenti 97 AN Fondam98 Controllo

  20. Problemi • Dato un array di 10 interi: • determinarne il valore minimo • determinare la posizione del minimo • determinare la somma dei valori negativi e dei valori positivi • determinarne una rappresentazione in forma di stringa • scriverne i valori in senso crescente AN Fondam98 Controllo

  21. Minimo di un array di interi int min( int a[], int n ){ //n = indice ultima componente di a PROGETTO RICORSIVO • se n==0 il minimo vale a[0] • se n>0, detto minR il minimo di a da 1 a n, il minimo e’ il minore tre a[0] e minR AN Fondam98 Controllo

  22. Minimo di un array di interi PROGETTO ITERATIVO int min(int a[],int n,int i,int m){ //n = indice ultima componente di a //m e’ il minimo delle componenti di a da 0 a i • se i==n il minimo vale m • se n>i, il risultato e’ dato da: min(a,n,i+1,(a[i+1]<m)?a[i+1]:m) AN Fondam98 Controllo

  23. Minimo di un array di interi int min(int a[],int n){ //n = indice ultima componente di a int i=0; int m = a[0]; //m e’ il minimo delle componenti di a da 0 a i while (i<n){ i=i+1; if( a[i]<m ) m=a[i]; }//m e’ il minimo delle componenti di a da 0 a i and i=n return m; } AN Fondam98 Controllo

  24. Posizione del Minimo int min(int a[],int n){ //n = indice ultima componente di a int i=0; int m = 0; //m e’ la posizione del minimo delle componenti di i a da 0 a i while (i<n){ i=i+1; if( a[i]<m ) m=i; }//m e’ la posizione del minimo di a da 0 a i and i=n return m; } AN Fondam98 Controllo

  25. Da array a stringa String arToS( int a[],int n){ String s=“[ ”; for(int i=0;i<n;i++) s = s+a[i]+” “; s = s + “ ]” return s; } int[] a={3,4}; String s=arToS(a,a.lentgh); [ 3 4 ] AN Fondam98 Controllo

  26. Programmi imperativi: struttura Leggi le informazioni di ingresso Elabora Scrivi le informazioni in uscita AN Fondam98 Controllo

  27. Un programma Java publicclass programma{ public static void main(String[] args){ int x,y; x = System.in.read(); y = x*x; System.out.println( y ); } } AN Fondam98 Controllo

  28. Un programma Java: gli argomenti publicclass programma{ public static void main(String[] argv){ for(int i=0; i<argv.length; i++) System.out.println( argv[i] ); } } AN Fondam98 Controllo

  29. Un programma C void main(){ int x,y; scanf(“%d”,&x); y = x*x; printf(“%d\n”, y ); } AN Fondam98 Controllo

  30. Un programma C: gli argomenti void main(int argc, char* argv[] ){ int i; for(i=0;i<argc;i++) printf("%s\n",argv[i]); } AN Fondam98 Controllo

More Related