Problema comprensione condizione

di il
23 risposte

Problema comprensione condizione

Ho questo codice che funziona, però non capisco il perchè della condizione del while :

 
        while(!(n<0 && n%2==0)&&!(n>0 && n%3==0))
        {
        somma +=n;
        cin>> n;
        }
   cout<<somma;
   
In particolare non capisco perchè invece dell'or ci vuole l'and che lega le due parentesi interne a quelle del while.Potreste spiegarmelo per favore? Grazie in anticipo.

23 Risposte

  • Re: Problema comprensione condizione

    Non ha senso la if con la condizione con la || e la while con la condizione con la &&

    Deciditi

    E ti avevo raccomandato di precisare quali dati dai in input, quando sono corretti e quando no. Ovvero quando il ciclo deve essere eseguito nuovamente e quando si deve uscire.
  • Re: Problema comprensione condizione

    I dati in input possono essere qualunque, non importa quello, importa capire perchè quella while funziona con quella condizione scritta così.
  • Re: Problema comprensione condizione

    Francamente la domanda è abbastanza incomprensibile.
    In ogni caso quella condizione è scritta "malissimo", pressochè incomprensibile se non si ha consuetudine con le priorità degli operatori C.

    Ti consiglio di riscriverla utilizzando le opportune parentesi, che renderanno esplicito cosa e perchè accade.
    In realtà ci sarebbe un pippone sulle condizioni AND e sulla possibilità (rara) di avere un compilatore "troppo furbo" (o troppo stupido a seconda dei punti di vista) che ottimizzi occultamente la valutazione.
    Nel tuo caso non ci sono funzioni richiamate o effetti collaterali, quindi non ci sono rischi.
    Tuttavia rammenta una certa cautela con codici del tipo
    if (questo AND quello) then...
    Può essere il caso (cuttone sto andando a cena)... di scriverlo
    if (questo) THEN if (quello) THEN...
  • Re: Problema comprensione condizione

    olegfresi ha scritto:


    I dati in input possono essere qualunque, non importa quello, importa capire perchè quella while funziona con quella condizione scritta così.
    Ma non mi spiego o non mi capisci?

    Più volte ti ho chiesto di fare un esempio di quei valori per cui, secondo quello che vuoi fare, il ciclo deve continuare perché da sommare e un esempio di valori per cui il ciclo deve terminare cosi' si vede SE IL CODICE E' CORRETTO.

    P.S. NON MODIFICARE il codice nei post già commentati altrimenti non si capisce più nulla e non ha senso più rispondere !
  • Re: Problema comprensione condizione

    Non avevo capito cosa intendessi. Un esempio di valori può essere: 4,5,8,2,14,-3,-7 e un valore per terminare il ciclo può essere 6.
  • Re: Problema comprensione condizione

    Allora l'esercizio originale era quello di creare un codice che facesse inserire dei numeri e li sommasse tra loro finchè non riceveva un numero positivo e divisibile per 3 oppure un numero negativo divisibile per 2. La condizione dentro la while era questa:
    !(n<0 && n%2==0)||!(n>0 && n%3==0)
    ma questo non funzionava e quindi l'ho dovuto cambiare in
    !(n<0 && n%2==0)&&!(n>0 && n%3==0)

    Non ho capito il perchè del cambiamento dall'or all'and.
  • Re: Problema comprensione condizione

    Ok, allora sostituisci questi valori alla n nell'espressione

    !(n<0 && n%2==0)&&!(n>0 && n%3==0)

    e controlla quando è vera e quando è falsa (prova con l'and e prova con la or)
  • Re: Problema comprensione condizione

    olegfresi ha scritto:


    Allora l'esercizio originale era quello di creare un codice che facesse inserire dei numeri e li sommasse tra loro finchè non riceveva un numero positivo e divisibile per 3 oppure un numero negativo divisibile per 2. La condizione dentro la while era questa:
    !(n<0 && n%2==0)||!(n>0 && n%3==0)
    ma questo non funzionava e quindi l'ho dovuto cambiare in
    !(n<0 && n%2==0)&&!(n>0 && n%3==0)

    Non ho capito il perchè del cambiamento dall'or all'and.
    Ma QUESTO NON FUNZIONAVA significa che non hai idea di quello che stai scrivendo?
    Perchè non provi a usare le parentesi, così da (forse) renderti più chiaro cosa combini?
  • Re: Problema comprensione condizione

    In pratica come mi dici tu se metto per esempio 4 allora per la prima è divisibile per 2 ma non è negativo quindi è false ma viene negata quindi diventa true, per la seconda 4 è positivo ma non divisibile per 3 quindi è false ma negandola diventa true. Ora ho un true && true che dà true e fa continuare il ciclo ma anche se avessi avuto true || true sarebbe true e continuerebbe il ciclo.Però quando lo scrivo con l'and funziona, con l'or no.
  • Re: Problema comprensione condizione

    Però quando lo scrivo con l'and funziona, con l'or no.
    Ma che dici ! Con il 4 è così ma prova con il 6
  • Re: Problema comprensione condizione

    Con il 6 dà complessivamente false ed esce dal ciclo.Ma perchè questo avviene con l'and che lega le due parentesi e non con l'or?
  • Re: Problema comprensione condizione

    Non hai fatto il ragionamento completo per il 6, dobbiamo aspettare 5 pagine di discussione?
  • Re: Problema comprensione condizione

    Io metto il 6, per la prima parentesi è positivo ma divisibile per 2 quindi false && true mi dà false che poi negato diventa true; per la seconda parentesi il 6 è sia positivo che divisibile per 3 quindi è true ma negandolo diventa false quindi complessivamente true && false mi dà false e esce dal ciclo.
  • Re: Problema comprensione condizione

    Continuiamo ... e per l'or il 6?
Devi accedere o registrarti per scrivere nel forum
23 risposte