Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] Problema Operatori vari...

    Partiamo con l'operatore condizionale "?"

    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

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    Innanzitutto devi partire da una considerazione:
    0 è sempre FALSO; qualsiasi numero diverso da 0 è sempre vero.

    Ora cominciamo:
    codice:
    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.

    codice:
    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.

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

    codice:
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319

    Re: [C] Problema Operatori vari...

    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:

    codice:
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    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

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    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:
    codice:
    x = -32 ? 1 : 2;
    In questo caso, x assume valore 1.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Hai ragione... grazie per la precisazione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.