Una riflessione di fondo
This presentation is the property of its rightful owner.
Sponsored Links
1 / 60

UNA RIFLESSIONE DI FONDO PowerPoint PPT Presentation


  • 78 Views
  • Uploaded on
  • Presentation posted in: General

UNA RIFLESSIONE DI FONDO. L’impostazione funzionale è sempre costruttiva. Ma si può sempre solo creare? Perché creare una versione nuova di un accumulatore ad ogni passo, quando l’elaboratore di Von Neumann permette la modifica del contenuto di una cella di memoria?. UNA PROPOSTA.

Download Presentation

UNA RIFLESSIONE DI FONDO

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Una riflessione di fondo

UNA RIFLESSIONE DI FONDO

  • L’impostazione funzionale è sempre costruttiva. Ma si può sempre solo creare?

  • Perché creare una versione nuova di un accumulatore ad ogni passo, quando l’elaboratore di Von Neumann permette la modificadel contenuto di una cella di memoria?

AN FI 99-00 Concetti Imperativi


Una proposta

UNA PROPOSTA

  • È possibile riusare una stessa area datisenza bisogno di crearne una nuova ad ogni passo computazionale?

  • Ci sono controindicazioni?

AN FI 99-00 Concetti Imperativi


Variabili nei linguaggi imperativi

VARIABILI NEI LINGUAGGI IMPERATIVI

Una variabilein un linguaggio imperativo

  • non è solo un sinonimo per un datocome in matematica

  • è un’astrazione della cella di memoria

  • associata a due diverse informazioni:

    • il contenuto (R-value)

    • l’indirizzo a cui si trova (L-value)

3.22

a

x

AN FI 99-00 Concetti Imperativi


Espressioni con effetti collaterali

ESPRESSIONI CON EFFETTI COLLATERALI

  • Le espressioni che contengono variabili, oltre a denotare un valore,possono a volte comportare effetti collaterali sulle variabili coinvolte.

  • Un effetto collaterale è una modifica del valore della variabile (R-value) causato da particolari operatori:

    • operatore di assegnamento

    • operatori di incremento e decremento

AN FI 99-00 Concetti Imperativi


Assegnamento

ASSEGNAMENTO

  • L’assegnamento è un particolare tipo di espressione

    • come tale denota comunque un valore!!

      con un effetto collaterale:quello di cambiare il valore della variabile.

  • Sintassi

    variabile = espressione

  • Esempi di espressioni di assegnamento:

    j = 0k = j + 1

AN FI 99-00 Concetti Imperativi


Assegnamento1

ASSEGNAMENTO

L’espressione di assegnamento

variabile = espressione

  • denota il valore dell’espressione

  • ma cambia anche il valore della variabile: il nuovo valore della variabile è quello denotato dalla espressione.

AN FI 99-00 Concetti Imperativi


Esempio

ESEMPIO

Se k valeva 2, l’espressione

k = 7

  • denota il valore 7

  • e cambia il valore di k,che d’ora in poi vale 7 (non più 2)

AN FI 99-00 Concetti Imperativi


Esempio1

ESEMPIO

Se k valeva 2, l’espressione

j = k+1

  • denota il valore 3

  • e cambia il valore di j,che d’ora in poi vale 3 (qualunque valore avesse prima)

    L’assegnamento è distruttivo

AN FI 99-00 Concetti Imperativi


Espressioni di assegnamento

ESPRESSIONI DI ASSEGNAMENTO

Il valore denotato dall’espressione di

assegnamento può essere usato in altre

espressioni.Ad esempio,

3 + (k=7)

  • denota il valore 10

  • e cambia in 7 il valore di k

AN FI 99-00 Concetti Imperativi


Assegnamento variabili

ASSEGNAMENTO & VARIABILI

Una variabile in una espressione di

assegnamento:

  • è intepretata come il suo R-value, se compare a destra del simbolo =

  • è intepretata come il suo L-value, se compare a sinistra del simbolo =

3.22

a

x

AN FI 99-00 Concetti Imperativi


Esempio2

ESEMPIO

Se x valeva 2, l’espressione

x = x + 1

  • denota il valore 3

  • e cambia in 3 il valore di x

    • il simbolo x a destra dell’operatore = denota il valore attuale (R-value) di x, cioè 2

    • il simbolo x a sinistra dell’operatore = denota la cella di memoria associata a x (L-value), a cui viene assegnato il valore dell’espressione di destra (3)

    • l’espressione nel suo complesso denota il valore della variabile dopo la modifica, cioè 3.

AN FI 99-00 Concetti Imperativi


Assegnamento associativit

ASSEGNAMENTO: ASSOCIATIVITÀ

  • Come tutti gli operatori, anche l’operatore di assegnamento deve avere una sua associatività

    k = j = 1

    Prima k=j, o prima j=1 ?

  • l’operatore di assegnamento è associativo a destra:ciò consente espressioni di assegnamento multiplo

AN FI 99-00 Concetti Imperativi


Assegnamento associativit1

ASSEGNAMENTO: ASSOCIATIVITÀ

Esempi

k = j = 1interpretato come k = (j = 1)

i = j = k = 0interpretato come i = (j = (k=0))

i = k + 5 = 6NO: k+5 non ha un L-value!

Nota: anche volendo, sarebbe stato impossibile farlo

associativo a sinistra, in quanto ciò avrebbe reso

molte espressioni prive di significato. Ad esempio:

k = j = 2interpretato come (k=j) = 2 ???

Equivarrebbe a scrivere 1 = 2 !!!!

AN FI 99-00 Concetti Imperativi


Incremento e decremento

INCREMENTO (++) E DECREMENTO (--)

Gli operatori di incremento e decremento

sono usabili in due modi

  • come pre-operatori:++v

  • come post-operatori:v++

primaincremento, poiuso

primauso, poiincremento

AN FI 99-00 Concetti Imperativi


Esempi

ESEMPI

int i, j, k = 5;

i = ++k /* i vale 6, k vale 6 */

i = k++ /* i vale 5, k vale 6 */

int i=4, j, k = 5;

j = i + k++; /* j vale 9, k vale 6 */

j = ++k - k++; /* in cerca di guai! */

AN FI 99-00 Concetti Imperativi


Attenzione

ATTENZIONE…!!

int k = 6;

j = ++k - k++; /* in cerca di guai! */

Detti x = ++k e y = k++,

  • è certo che l’espressione venga valutata come j = x - y (da sinistra a destra)

  • è certo che alla fine k valga 8

  • ma non si sa se venga calcolato prima x o prima y, e qui la cosa fa molta differenza!

    • se prima x, poi y  j = 7 - 7 = 0

    • se prima y, poi x  j = 8 - 6 = 2

AN FI 99-00 Concetti Imperativi


Riferimenti

Riferimenti

  • Molti linguaggi imperativi permettono di trattare gli indirizzi di memoria come valori e di introdurre variabili che possono assumere come valore un indirizzo

a

a

3.22

px

b

x

AN FI 99-00 Concetti Imperativi


Il valore null

Il valore null

  • un simbolo (0, nil, oppure null) che denota un indirizzo cui non corrisponde alcuna cella fisica dell'elaboratore.

null

px

b

AN FI 99-00 Concetti Imperativi


Dereferenziamento

Dereferenziamento

  • L'operazione che permette, data una variabile che ha come valore un riferimento, di accedere al contenuto delle celle di memoria referenziate

AN FI 99-00 Concetti Imperativi


Puntatori

Puntatori

  • le variabili (i cui valori sono riferimenti) che il linguaggio permette possano comparire in espressioni aritmetiche.

    • px+1 denota l'indirizzo a+k essendo k il numero di celle di memoria occupate dal valore puntato da px

Vedremo meglio più avanti

AN FI 99-00 Concetti Imperativi


Gli operatori e del c

Gli operatori & e * del C

int x = 3;

x = x;

R-value

L-value

&x

*(&x)

AN FI 99-00 Concetti Imperativi


Gli operatori e del c1

Gli operatori & e * del C

int x = 3;

L’assegnamento

*&x = *&x+1;

equivale a

x = x+1;

AN FI 99-00 Concetti Imperativi


Puntatori in c

Puntatori in C

int* x;

la variabile x è un puntatore, destinata ad avere come r-value l’indirizzo di una cella di memoria

AN FI 99-00 Concetti Imperativi


Puntatori in c1

y

g

4

Puntatori in C

int* x;

int y = 4;

x = &y;

x

g

d

AN FI 99-00 Concetti Imperativi


Puntatori in c2

y

g

4

Puntatori in C

int* x;

int y = 4;

x = &y;

R-value di x = g

L-value di x =d

R-value di *x = 4

L-value di *x = g

x

g

d

AN FI 99-00 Concetti Imperativi


Operazioni sui puntatori

Operazioni sui puntatori

  • Assegnamento di valori (compatibili)

    • espressi come indirizzi di variabili

    • espressi come valori di puntatori

    • espresso come NULL (#include <stdlib.h>)

  • Applicazione dell’operatore * (dereferenziamento)

  • Confronti con valori di altri puntatori

  • Operazioni + e -

AN FI 99-00 Concetti Imperativi


Puntatori e type system

Puntatori e type system

int x = 3; double y = 3.0;

int* px = &x; double* py = &y;

int* q;

q = px; //ok

q = py;

  • Warning: assignment from incompatible pointer type

AN FI 99-00 Concetti Imperativi


Puntatori e type system1

Puntatori e type system

int x = 3; double y = 3.0;

int* px = &x; double* py = &y;

int* q;

*px= *py = 5.4;//ok

  • cambiano i valori associati a y e a x

  • x vale 5

AN FI 99-00 Concetti Imperativi


Dalle espressioni alle istruzioni

Dalle espressioni alle istruzioni

Dallo stile funzionale allo stile imperativo

AN FI 99-00 Concetti Imperativi


Espressioni

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 FI 99-00 Concetti Imperativi


Procedure

Procedure

  • costrutti che permettono di attribuire un nome ad un macrocomando e renderlo parametrico

if( x == 3 ) printf(“%f\n”, 2+x*sin(0.75) );

else writeln( "errore" );

void f1( int x ){

if( x == 3 ) printf(“%f\n”, 2+x*sin(0.75) );

else printf( "errore\n" );

}

AN FI 99-00 Concetti Imperativi


Comandi

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 FI 99-00 Concetti Imperativi


Istruzioni

ISTRUZIONI

  • Le istruzioni esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno del pro-gramma o del mondo circostante.

  • Le strutture di controllo permettono di aggregare istruzioni semplici in istruzioni più complesse.

AN FI 99-00 Concetti Imperativi


Istruzioni1

ISTRUZIONI

  • Una istruzione C è espressa dalle seguenti produzioni:

    <istruzione> ::= <istruzione-semplice>

    <istruzione> ::= <istruzione-di-controllo>

    <istruzione-semplice> ::= <espressione>;

  • Quindi, qualsiasi espressione seguita da un punto e virgola è una istruzione semplice.

AN FI 99-00 Concetti Imperativi


Esempi di istruzioni semplici

ESEMPI DI ISTRUZIONI SEMPLICI

x = 0; y = 1;/* due istruzioni */

x = 0, y = 1;/* una istruzione */

k++;

3;/* non fa nulla */

;/* istruz. vuota*/

AN FI 99-00 Concetti Imperativi


Istruzioni di controllo

ISTRUZIONI DI CONTROLLO

Una istruzione di controllo può essere:

  • una istruzione composta(blocco)

  • una istruzione condizionale(selezione)

  • una istruzione di iterazione(ciclo)

    come specificato dalla produzione:

    < istruzione-di-controllo > ::=<blocco> | <selezione> | <iterazione>

AN FI 99-00 Concetti Imperativi


Istruzioni di controllo1

ISTRUZIONI DI CONTROLLO

Le istruzione di controllo sono alla base della

programmazione strutturata (Dijkstra, 1969).

Concetti chiave:

  • concatenazioneocomposizione

  • selezione o istruzione condizionaleramifica il flusso di controllo in base al valore vero o falso di una espressione (“condizione di scelta”)

  • ripetizione o iterazioneesegue ripetutamente un’istruzione finché rimane vera una espressione (“condizionedi iterazione”)

AN FI 99-00 Concetti Imperativi


Teorema di jacopini b hm

TEOREMA DI JACOPINI-BÖHM

  • Le strutture di concatenazione, iterazione e selezione costituiscono un insieme completoin grado di esprimere tutte le funzioni calcolabili.

  • Dunque, l’uso di queste sole strutture di controllo non limita il potere espressivo.

  • La dimostrazione del teorema è basata sulla Turing-equivalenza di un “mini-linguaggio” che fornisca solo tali strutture di controllo.

AN FI 99-00 Concetti Imperativi


Blocco

BLOCCO

<blocco> ::= {

[ <dichiarazioni e definizioni> ]

{ <istruzione> }

}

  • dopo un blocco non occorre il punto e virgola (esso termina le istruzioni semplici, non separa istruzioni)

Lo scope dei simboli che compaiono entro il blocco è il blocco stesso

AN FI 99-00 Concetti Imperativi


Esempio di blocco

ESEMPIO DI BLOCCO

main() {/* INIZIO BLOCCO */

const float F1=9.0, F2=5, SH=32;

int c, f, temp = 20;

char scala = 'C';

c = (scala != 'F') ? temp

: (F2 / F1 * (temp - SH)) ;

f = (scala != 'F') ? (SH+temp*F1/F2) : temp;

}/* FINE BLOCCO */

AN FI 99-00 Concetti Imperativi


Una nota en passant

..una nota “en passant”...

main() {/* INIZIO BLOCCO */

const float F1=9.0, F2=5, SH=32;

int c, f, temp = 20;

char scala = 'C';

c = (scala != 'F') ? temp

: (F2 / F1 * (temp - SH)) ;

f = (scala != 'F') ? (SH+temp*F1/F2) : temp;

} /* FINE BLOCCO */

Il qualificatore const rendequeste variabili non modificabili

AN FI 99-00 Concetti Imperativi


Esempio di blocchi annidati

ESEMPIO DI BLOCCHI ANNIDATI

main() {/* INIZIO BLOCCO ESTERNO */

const float F1=9.0, F2=5, SH=32;

int c, f, temp = 20;

{/* INIZIO BLOCCO INTERNO */

char scala = ‘C’;

c = (scala != 'F') ? temp

: (F2 / F1 * (temp - SH)) ;

f = (scala != 'F') ? (SH+temp*F1/F2): temp;

}/* FINE BLOCCO INTERNO */

}/* FINE BLOCCO ESTERNO */

AN FI 99-00 Concetti Imperativi


Istruzioni condizionali

ISTRUZIONI CONDIZIONALI

<selezione> ::=

<scelta> | <scelta-multipla>

  • la seconda non è essenziale, ma migliora l’espressività.

  • l’espressione condizionale ternaria (.. ? … : …) fornisce già un mezzo per fare scelte, ma è poco leggibile in situazioni di medio/alta complessità. L’istruzione di scelta fornisce un altro modo per esprimere alternative.

AN FI 99-00 Concetti Imperativi


Istruzione di scelta semplice

vera

falsa

condizione

istruzione1

istruzione2

ISTRUZIONE DI SCELTA SEMPLICE

<scelta> ::= if <condizione> <istruzione1> [ else <istruzione2> ]

Una espressione logica o relazionale,che viene valutata al momento dellaesecuzione dell’istruzione if.

AN FI 99-00 Concetti Imperativi


Istruzione di scelta semplice1

vera

falsa

condizione

istruzione1

istruzione2

ISTRUZIONE DI SCELTA SEMPLICE

<scelta> ::= if <condizione> <istruzione1> [ else <istruzione2> ]

La parte else è opzionale:se omessa, in caso dicondizione falsa si passasubito all’istruzione chesegue l’if.

AN FI 99-00 Concetti Imperativi


Esempio di istruzione if

ESEMPIO DI ISTRUZIONE if

  • <istruzione1> e <istruzione2> sono ciascuna una singola istruzione

  • Qualora occorra specificare più istruzioni, si deve quindi utilizzare un blocco.

    if (n > 0){ /* inizio blocco */

    a = b + 5;

    c = (x<3) ? a : b;

    }/* fine blocco */else n = b;

AN FI 99-00 Concetti Imperativi


Istruzione if annidate

ISTRUZIONE if ANNIDATE

  • Come caso particolare, <istruzione1> o <istruzione2> potrebbero essere un altro if

  • Occorre attenzione ad associare le parti else (che sono opzionali) all’ if corretto

    if (n > 0)

    if (a>b) n = a;

    else n = b; /* riferito a if(a>b) */

    if (n > 0)

    { if (a>b) n = a; }

    else n = b; /* riferito a if(n>0) */

Regola semantica:l’else è sempre associato all’if più interno

Se ciò non soddisfa occor-re inserire esplicitamenteun blocco.

AN FI 99-00 Concetti Imperativi


Istruzione di scelta multipla

espressione di selezione

caso A

break

istruzioni1

caso B

break

istruzioni2

break

default

istruzioni

ISTRUZIONE DI SCELTA MULTIPLA

  • Consente di scegliere fra molte istruzioni (alternative o meno) in base al valore di una espressione di selezione.

  • L’espressione di sele-zione deve denotare un valore numerabile (intero, carattere,…).

AN FI 99-00 Concetti Imperativi


Istruzione di scelta multipla1

ISTRUZIONE DI SCELTA MULTIPLA

Se nessuna etichetta corri-sponde, si prosegue col ilramo default.

<scelta-multipla> ::=

switch(selettore){case <etichetta1> : < istruzioni> [ break; ]

case <etichetta2> : < istruzioni> [ break; ]…[ default: < istruzioni> ]

}

Il valore dell’espressione selettoreviene confron-

tato con le etichette dei vari casi: l’esecuzione

prosegue dal ramo corrispondente (se esiste).

Se neanche quello esiste, si prosegue con l’istruzionesuccessiva allo switch.

AN FI 99-00 Concetti Imperativi


Istruzione di scelta multipla2

ISTRUZIONE DI SCELTA MULTIPLA

Le etichette sono costantidello stesso tipo del selettore.

<scelta-multipla> ::=

switch(selettore){case <etichetta1> : < istruzioni> [ break; ]

case <etichetta2> : < istruzioni> [ break; ]…[ default: < istruzioni> ]

}

Il valore dell’espressione selettoreviene confron-

tato con le etichette dei vari casi: l’esecuzione

prosegue dal ramo corrispondente (se esiste).

Attenzione: <istruzioni>denota una sequenza di istruzioni (non occorre un blocco)

AN FI 99-00 Concetti Imperativi


Istruzione di scelta multipla3

espressione di selezione

caso A

break

istruzioni1

caso B

break

istruzioni2

break

default

istruzioni

ISTRUZIONE DI SCELTA MULTIPLA

I vari rami non sono mutua-mente esclusivi: imboccato un ramo, si eseguono anche tutti i rami successivi...

… a meno che non ci siail comando break a forzareesplicitamente l’uscita.

AN FI 99-00 Concetti Imperativi


Istruzioni di iterazione

ISTRUZIONI DI ITERAZIONE

<iterazione> ::=

<while> | <for> | <do-while>

  • Per il Teorema di Jacopini-Böhm, una struttura di controllo iterativa sarebbe sufficiente: averne di più migliora l’espressività del linguaggio.

  • Le istruzioni di iterazione:

    • hanno un solo punto di ingresso e un solo punto di uscita nel flusso del programma

    • perciò possono essere interpretate come una singola azione in una computazione sequenziale.

AN FI 99-00 Concetti Imperativi


Istruzione while

falsa

condizione

vera

istruzione

ISTRUZIONE while

<while> ::=while( <condizione> ) <istruzione>

L’istruzione viene ripetuta pertutto il tempo in cui la condi-zione rimane vera.

Se la condizione è falsa, l’itera- zione non viene eseguita neppure una volta.

In generale, non è noto quantevolte l’istruzione sarà ripetuta.

AN FI 99-00 Concetti Imperativi


Istruzione while1

falsa

condizione

vera

istruzione

ISTRUZIONE while

<while> ::=while( <condizione> ) <istruzione>

Prima o poi, direttamente oindirettamente, l’istruzione deve modificare la condizione:altrimenti, l’iterazione dureràper sempre!

Perciò, quasi sempre istruzioneè un blocco, al cui interno simodifica qualche variabileche compare nella condizione.

AN FI 99-00 Concetti Imperativi


Istruzione do while

istruzione

falsa

condizione

vera

ISTRUZIONE do...while

<do-while> ::=do <istruzione> while( <condizione> );

È una “variazione sul tema” della precedente: la condizione viene verificata dopo aver eseguito l’istruzione.

Se la condizione è falsa, l’itera- zione viene comunque ese-guita almeno una volta.

particolarmente adatta alleverifiche dopo un input

AN FI 99-00 Concetti Imperativi


Istruzione for

ISTRUZIONE for

È una evoluzione dell’istruzione while

rispetto a cui mira a eliminare alcune

frequenti sorgenti di errore:

  • mancanza delle necessarie inizializza-zionidelle variabili

  • mancanza della fase di modifica del ciclo(rischio di ciclo senza fine)

AN FI 99-00 Concetti Imperativi


Istruzione for1

espr-inizializzazione

falsa

condizione

Struttura delwhile

vera

istruzione

espr-modifica

ISTRUZIONE for

<for> ::=for( <espr-i> ; <cond> ;<espr-m>) <istruzione>

AN FI 99-00 Concetti Imperativi


Istruzione for2

espr-inizializzazione

falsa

condizione

vera

istruzione

espr-modifica

ISTRUZIONE for

<for> ::=for( <espr-i> ; <cond> ;<espr-m>) <istruzione>

Espressione di inizia-lizzazione:valutata una e una sola volta prima di iniziare l’itera-zione.

Espressione di inizia-lizzazione: valutata una e una sola volta primadi iniziare l’itera-zione.

AN FI 99-00 Concetti Imperativi


Istruzione for3

espr-inizializzazione

falsa

condizione

vera

istruzione

espr-modifica

ISTRUZIONE for

<for> ::=for( <espr-i> ; <cond> ;<espr-m>) <istruzione>

Condizione:valutata a ogni interazione,per decidere se proseguire(come in un while)Se manca si assume vera!

Condizione:valutata a ogni interazione,per decidere se proseguire(come in un while)

AN FI 99-00 Concetti Imperativi


Istruzione for4

espr-inizializzazione

falsa

condizione

vera

istruzione

espr-modifica

ISTRUZIONE for

<for> ::=for( <espr-i> ; <cond> ;<espr-m>) <istruzione>

Condizione:valutata a ogni interazione,per decidere se proseguire(come in un while)

Espressione di modifica:valutata a ogni interazione,dopo aver eseguito l’istru-zione.

AN FI 99-00 Concetti Imperativi


  • Login