PDA

Visualizza la versione completa : [C] Operatori logici vari


Felaween
23-10-2006, 18:30
Partiamo con l'operatore condizionale "?" :D

Mi vengono dati degli esercizi... purtroppo non riesco a capire il ragionamento...

Allora in sintesi questo operatore funziona così: Esp 1 ? Esp 2 : Esp 3;

Il programma verifica se Esp 1 è vero, in caso affermativo Esp 2 viene considerato, in caso negativo considero Esp 3...

Allora procediamo con gli esercizi che mi bloccano...

x=y ? 5 : y+7 (per y=0) cioè il mio problema è: x vale 0? Non so come posso saperlo se non mi viene data la x... La soluzione comunque data è: 7... Mi piacerebbe capire il perchè...

Lo stesso problema, ovvero non riesco a capire se ESP 1 è vera o falsa a causa della x.. vi riporto le espressioni date... se me le potete spiegare al volo per cortesia...

2) x=y > 2? y++ : ++y; (per y=4) dichiarare il valore di y e x [x=4][y=5]

3) ++y ? 1 : 2; (per y=-1) dichiarare il valore di x [x=2]
4) y++ ? 1 : 2; (per y=-1) dichiarare il valore di x [x=1]
5) y > 3 ? --y : ++y; (per y=4) dichiarare il valore di y e x [x=3][y=3]

In verde ho riportato le soluzioni date... grazie a chiunque mi aiuti :D

LeleFT
23-10-2006, 18:40
Innanzitutto devi partire da una considerazione:
0 è sempre FALSO; qualsiasi numero diverso da 0 è sempre vero.

Ora cominciamo:

x=y ? 5 : y+7;
Significa: se y vale 0, allora assegna ad x il valore 5, altrimenti assegna ad x il valore di y + 7.


x=y > 2? y++ : ++y
Significa: se y è maggiore di 2 assegna ad x il valore y, quindi incrementa y di 1, altrimenti (se y non è maggiore di 2) incrementa y di 1 e assegna tale valore ad x.

Attenzione che qui si gioca con la tipologia degli operatori: la forma prefissa scatta prima della valutazione, mentre la forma suffissa scatta dopo la valutazione.


++y ? 1 : 2;
Significa: incrementa y di uno e se il valore è diverso da zero, l'espressione vale 1 altrimenti vale 2.


y > 3 ? --y : ++y;
Significa: se y è maggiore di 3, allora decrementalo di 1, altrimenti incrementalo di 1. Il valore dell'espressione sarà quello di y dopo la valutazione.

Ciao. :ciauz:

LeleFT
23-10-2006, 18:46
Originariamente inviato da Felaween
cioè il mio problema è: x vale 0? Non so come posso saperlo se non mi viene data la x... Questa non l'avevo notata: fai attenzione!!! Un segno di uguale induce un'assegnazione non un confronto!! Il confronto si fa con due segni di uguale:



x = y ? 5 : y+7 // E' un'istruzione: Assegno a x il valore di un'espressione

è diverso da

x == y ? 5 : y+7 // E' un'espressione (la valuto e basta)

Ciao. :ciauz:

doraemon83
23-10-2006, 18:54
basta che consideri questo :

una espressione vera ha valore 1;
una espressione falsa ha valore 0;

quindi

1? 10 : 12 ti da come risultato 10 perché la condizione è vera.
0? 10 : 12 da come risultato 12 perché la condizione è falsa.

Ora

avendo

x=y ? 5 : y+7 (per y=0)

si ha che y vale 0 quindi la condizione viene valutata falsa, eseguendo quindi y+7. Quindi il risultato è 7 e il valore viene assegnato alla x.

Con questo criterio puoi facilmente risolvere gli altri

ciao ciao

LeleFT
24-10-2006, 14:52
Originariamente inviato da doraemon83
basta che consideri questo :

una espressione vera ha valore 1;
una espressione falsa ha valore 0;

Questo è vero solo in parte: se si parla del valore della valutazione di un espressione si può anche essere d'accordo. Ma se si guarda alla sola valutazione le cose cambiano: qualsiasi valore diverso da 0 è considerato come vero:


x = -32 ? 1 : 2;

In questo caso, x assume valore 1.

Ciao. :ciauz:

doraemon83
24-10-2006, 15:36
Hai ragione... grazie per la precisazione :biifu:

Loading