Espressioni con operatori ?
(x == 2 || x-- == -1 && !(y - x) >= 0) && ((y > x-- ? x : y--) == y < x)
[1] y=1; x=3
[2] y=0; x=2
[3] y=1; x=2
Risposta : [3]
Io ho :
2==2 vero
Valuto quindi :
&& ((y > x-- ? x : y--) == y < x)
1>2 falso, quindi ho y--
(y--)==y
Ma 1<1 è falso, quindi 0.
Alla fine ho 1==0 che è falso.
Quindi dov'è che sbaglio ?
Risposte
Qual è la domanda? E quali sono i valori iniziali delle variabili?
La traccia dell'esercizio è la seguente :
Data una coppia di interi (y, x), indicare per quali valori di (y, x) la seguente espressione risulta vera.
Data una coppia di interi (y, x), indicare per quali valori di (y, x) la seguente espressione risulta vera.
Personalmente trovo che al tuo professore piaccia mettere in difficoltà gli studenti.
Supponiamo che si abbia [inline]x == 2[/inline] e [inline]y == 1[/inline]. Allora [inline]x == 2[/inline] è vero e quindi anche [inline](x == 2 || x-- == -1 && !(y - x) >= 0)[/inline] è vero. I valori di [inline]x[/inline] e [inline]y[/inline] non sono cambiati.
Quindi [inline]y[/inline] è minore di [inline]x[/inline], quindi la il blocco ritorna [inline]y[/inline] (ovvero [inline]1[/inline]) e diminuisce [inline]y[/inline] e [inline]x[/inline] di \(\displaystyle 1 \). Siccome [inline]y[/inline] è ancora minore di [inline]x[/inline] si ha [inline]1 == true[/inline], che è vero.
Supponiamo che si abbia [inline]x == 2[/inline] e [inline]y == 1[/inline]. Allora [inline]x == 2[/inline] è vero e quindi anche [inline](x == 2 || x-- == -1 && !(y - x) >= 0)[/inline] è vero. I valori di [inline]x[/inline] e [inline]y[/inline] non sono cambiati.
Quindi [inline]y[/inline] è minore di [inline]x[/inline], quindi la il blocco ritorna [inline]y[/inline] (ovvero [inline]1[/inline]) e diminuisce [inline]y[/inline] e [inline]x[/inline] di \(\displaystyle 1 \). Siccome [inline]y[/inline] è ancora minore di [inline]x[/inline] si ha [inline]1 == true[/inline], che è vero.
Non ho ancora capito come valuti questa espressione :
Io ho un'espressione condizionale, che risultando falsa, considero solo y-- e decremento la x portandola a 1 .
Ora ho (y--)==y
Ma y
((y > x-- ? x : y--) == y < x)
Io ho un'espressione condizionale, che risultando falsa, considero solo y-- e decremento la x portandola a 1 .
Ora ho (y--)==y
Questi due codici sono equivalenti:
bool test1(int x, int y) { return ((y > x-- ? x : y--) == y < x); } bool test2(int x, int y) { int value1 = (y > x-- ? x : y--); return value1 == y < x; }
Ok, allora se ho capito bene la situazione è questa :
value1=y-- (quindi assegno a value1 il valore 1 e poi decremento la y, portandola a 0)
Ora ho :
value1 == 0<1 ( poichè ho decrementato anche la x precedentemente) , quindi 0<1 è vero
1=1
Giusto ?
value1=y-- (quindi assegno a value1 il valore 1 e poi decremento la y, portandola a 0)
Ora ho :
value1 == 0<1 ( poichè ho decrementato anche la x precedentemente) , quindi 0<1 è vero
1=1
Giusto ?
Si, è così.
Ciao! Sono il tuo Tutor AI, il compagno ideale per uno studio interattivo. Utilizzo il metodo maieutico per affinare il tuo ragionamento e la comprensione. Insieme possiamo:
- Risolvere un problema di matematica
- Riassumere un testo
- Tradurre una frase
- E molto altro ancora...
Il Tutor AI di Skuola.net usa un modello AI di Chat GPT.
Per termini, condizioni e privacy, visita la relativa pagina.
Per termini, condizioni e privacy, visita la relativa pagina.