Esercizio precedenze
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!
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
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?).
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?).
Il linguaggio è C!
Potresti dirmi come impostarlo e cosa dire?
Ho molti esercizi così e vorrei avere uno spunto...
Grazie
Potresti dirmi come impostarlo e cosa dire?
Ho molti esercizi così e vorrei avere uno spunto...
Grazie
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.
Le scritture sono semplici:
Seppur un compilatore dovrebbe essere sufficientemente intelligente da evitare il passaggio
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 <- 8 j <- 3 k <- 5 i <- (4 * k)/janche se forse andrebbe contato anche il passaggio
t <- 4 * kdove 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
