Esercizio precedenze

ladyna1
Testo dell'esercizio:

In relazione ai costrutti della seconda riga:

int i=8, j=3, k=5;
i = 4 * k++ / j;

dire quante operazioni di lettura e scrittura in memoria (per recuperare e sovrascrivere il valore delle variabili) si effettuano, in quale ordine, e qual e' il valore finale di ciascuna delle variabili. Giustificare la risposta.

Scrivendo il programma ho trovato che i valori finali sono: i=6, j=3 e k=6. E' corretto?
Potete spiegarmi il resto dell'esercizio? Non saprei proprio come impostare la risposta ne come esaminare l'espressione.

Grazie!

Risposte
onlyReferee
Ciao ladyna,
innanzitutto in questo tipi di esercizi bisogna specificare anche il linguaggio di programmazione in cui è scritto il codice. Vedendo sole queste due istruzioni potrebbe infatti essere sia C che C++, Java ed altri. Questo perché in teoria l'ordine di precedenza con cui sono valutati gli operatori potrebbe differire da linguaggio a linguaggio.
Poi...nel caso della prima istruzione è banale capire quante operazioni di scrittura (in questo caso c'è solo quella) sono effettuate. Nella seconda istruzione, prova a ragionare sulla precedenza con cui vengono valutati gli operatori nel linguaggio preso in considerazione per valutare il valore dell'espressione (attenta a quel ++!). Inoltre considera che hai soltanto valori interi nel computo del valore finale. Riguardo al numero di letture/scritture effettuate nella seconda istruzione...anche qui è abbastanza banale (per quante variabili viene richiamato il valore e quante assegnazioni ci sono?).

ladyna1
Il linguaggio è C!
Potresti dirmi come impostarlo e cosa dire?
Ho molti esercizi così e vorrei avere uno spunto...
Grazie

onlyReferee
Esponi pure qualche altro tentativo prima... Se dovessi darti altri aiuti senza che ci ragioni sopra va a finire che dovrei postare tutto l'esercizio.

vict85
Le scritture sono semplici:
i <- 8
j <- 3
k <- 5
i <- (4 * k)/j
anche se forse andrebbe contato anche il passaggio
t <- 4 * k
dove t è una variabile temporanea.

Seppur un compilatore dovrebbe essere sufficientemente intelligente da evitare il passaggio
i <- 8
.

Per la lettura ho qualche dubbio sul fatto o meno che consideri leggere da un registro come una lettura.

Inoltre non è detto che il compilatore non riduca il tutto in
i = 6
j = 3
k =6
:-D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.