Esercizio sugli operatori aritmetici

di il
3 risposte

Esercizio sugli operatori aritmetici

Ciao a tutti, sono un nuovo iscritto al forum e anche un neofita sia di programmazione sia di linguaggi e sto cercando di imparare.
Stavo svolgendo un esercizio il quale mi chiede:
se u=2, v=3, w=5, x=7 e y=11, qual è il valore di ciascuna delle seguenti espressioni, supponendo che si tratti di valori di tipo int?
1) u + v*w + x
2) u + y%v*w + x
3) u++/v + u++*w

Per quanto riguarda 1) e 2) non ho avuto problemi risultano rispettivamente 24 e 19; per quanto riguarda il 3) ho alcuni dubbi da chiedere: io a primo impatto avrei detto 16 però simulando l'operazione su netbeans questo mi restituisce 15.
Seguendo la logica di java in teoria (se non ho sbagliato) si dovrebbe partire per prima con l'operazione di incremento cioè u++ e poi la divisione e la moltiplicazione come se fossero operazioni aritmetiche normali, per concludere con la somma.
Per cui seguendo il ragionamento appena fatto avre che u=2 passerebbe a u=3 poi avrei la nuova operazione: 3/3 + 3*5 che ovviamente produce 16 e qui arriviamo alle mie domande:
-Perchè (ammesso che non abbia sbagliato a ragionare) netbeans mi restituisce 15?
-per quanto riguarda l'incremento di u++ in quell'operazione (3) si esegue solo una volta e questo mi genera u=3 oppure bisogna considerare due istruzioni separate? nel senso il primo incremento u++ mi genera u=3 e il secondo incremento u++ mi genera u=4? perchè se fosse così a sua volta il risultato sarebbe ancora diverso.

Se può essere utile inserisco il codice che ho eseguito su netbeans:
package esercizio2_4;

public class Esercizio2_4 {
 
    public static void main(String[] args) {
        
        int u = 2, v = 3, w = 5, x = 7, y = 11;
        System.out.println(u+v*w+x);
        System.out.println(u+y%v*w+x);
        System.out.println(u++/v + u++*w);
                                        
    }
}
Ringrazio anticipatamente a chi mi aiuterà

3 Risposte

  • Re: Esercizio sugli operatori aritmetici

    wall87 ha scritto:


    riguarda il 3) ho alcuni dubbi da chiedere: io a primo impatto avrei detto 16 però simulando l'operazione su netbeans questo mi restituisce 15.
    Premessa: in C/C++ una espressione come es. x++ + x++ ha un comportamento non ben specificato (dipende dal compilatore). Le specifiche di C/C++ insomma non chiariscono in modo inequivocabile cosa deve succedere ... la cosa viene lasciata alla implementazione del compilatore.
    In Java invece il comportamento è ben precisamente specificato. Un effetto collaterale (es. postincremento) è subito immediatamente visibile nel resto della espressione.

    Nel tuo caso u++/v + u++*w

    Il primo u vale 2. Post-incremento infatti vuol dire che PRIMA usa il valore e POI lo incrementa. Il "usare" significa che viene tenuto ed usato nella operazione. Il post-incremento è VISIBILE al resto della espressione. Quindi nel secondo u++ il u è GIA' a 3.

    Quindi 2 / 3 + 3 * 5
    Essendo 2 / 3 una divisione "intera" dà 0.
    Risultato: 15
  • Re: Esercizio sugli operatori aritmetici

    Grazie andbin, dunque se ho capito bene allora prima avviene la divisione tra u e v e successivamente u viene incrementato, successivamente c'è l'equivalente con la moltiplicazione cioè prima si moltiplica u con w che però sta volta vede l'incremento precedente per cui fa 3*5 e poi incrementa ulteriormente u avendo alla fine dei conti, se dovessi stampare u, che è uguale a 4, ho detto giusto?
  • Re: Esercizio sugli operatori aritmetici

    Ciao,
    se vuoi un consiglio, metti un po' di parentesi, il codice si legge meglio e ti eviti sorprese...

    Buon lavoro
Devi accedere o registrarti per scrivere nel forum
3 risposte