Ciao ragazzi, sono al secondo anno di informatica e tra 2 settimane ho il parziale di linguaggi di programmazione.
Ho fatto 3 esercizi e non so se portano, più che altro cosa che mi interessa non so se ho ragionato correttamente.
Esercizio 1
. Si dica cosa stampa il seguente frammento in uno pseudolinguaggio con passaggio per riferimento e scope dinamico.
int x = 10;
void foo ( int y , int z ){
x = x -1;
y = y +10;
z = z +y;
write (x ); //118
}
{
int x = 50;
foo (x , x );
write (x );} //118

Esercizio 2 // Questo proprio non l ho capito.
L’esecuzione del seguente frammento di codice su una certa implementazione risulta nella stampadel valore 2.

int x = 10;
void foo ( int y , int z ){
x =0;
y=z +z;}

int V [10];
for ( int i =0 , i <10 , i ++) V[ i ]= i ;

{
int x = 4;
foo (V [x],V [x ++])
write (V [x ]);}

Si fornisca una possibile spiegazione

Esercizio 3.
Si dica cosa stampa il frammento con con scope statico e deep binding.

{ int m = 15;
int n = 15;
void foo ( int f () , int n ){
int m = 25;
if ( n ==0) { int n = 35;f ();}
else {m = 45;n = 45;foo (f ,0);}
}
int g (){
write (n ,m );
}
{
int m = 55;
foo (g ,1);
}}

// io qua ho pensato che la n del else va a modificare la n più esterna che inizialmente vale 15, quindi poi la funzione g stamperà m=15 e n=45. Però non sono molto sicuro.

Sono in voi!
(più che le soluzioni, ditemi come avete ragionato. Grazie mille a tutti!)