Perché questo programma si comporta così??

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Perché questo programma si comporta così??

    aleasia ha scritto:


    Non mi interessava del secondo mi interessava del primo e l'output è giusto al 10000 % ho ricontrollato ma comunque grazie lo stesso
    Non e' all'output a cui facevo riferimento, ma a come funziona l'operatore && del C.
    C'e' un aspetto nel suo funzionamento che chi e' alle prime armi generalmente non prende in considerazione o non ricorda.

    Quindi la domanda iniziale e': perche' 3 zeri e 3 uno?
    Questa e' semplice.


    Passo successivo, perche' t vale uno, poi zero, poi di nuovo uno, ecc?
    Questa e' un po' piu' complicata perche' coinvolge comprendere:

    1) come funziona &&
    2.1) come funziona l'operatore di confronto per uguaglianza ==
    2.2) come funziona l'operatore di confronto per disuguaglianza !=
    3) come funziona l'operatore di assegnamento =
    4) come funziona l'operatore !
    4) le precedenze tra &&, =, ==, !=, !

    Penultimo passo, perche' t vale inizialmente 1.

    Ultimo passo, t viene inizializzato con 0 o 1?

    Naturalmente il tutto senza eseguire il codice, ma solo analizzandolo staticamente.
  • Re: Perché questo programma si comporta così??

    aleasia ha scritto:


    Cosa c'entra mi è chiara si non ti preoccupare perché l'ho scritta così tanto conta solo !0.
    Quindi, t quanto vale? Senza eseguire il codice, ovviamente.
  • Re: Perché questo programma si comporta così??

    T vale 0 e se esegui il codice vale 1 poi di nuovo 0 quando il codice smette per esempio questo è un altro while


    #include<iostream>
    using namespace std;


    int main()

    {

    int a = 0;
    int t = ! 00!=!(0); qui t è uguale a 0


    while(t == (t =t == 1 == 1) && (t = t == 0) )


    {
    if (t == 1)
    {
    cout<< t; qui t vale 1

    }
    }
    if (t == 0)
    {

    cout<<t; qui t vale di nuovo 0


    }

    cin >>a;


    }


    ma qui while si ferma e non continua all'infinito e non va a ritroso t quindi vale sempre 0 ma per un attimo vale 1 quando si esegue il while forse è solo una questione di precedenza sicuramente ma non è come scrivere

    while (t == 0)

    {
    t = 1

    }

    etcetera perché altrimenti t varrebbe 1 alla fine dell'esecuzione quindi qual'è la precedenza tra tutte che conta che lo fa diventare nuovamente 0??
  • Re: Perché questo programma si comporta così??

    Quando t vale 0 questa riga

    t = t == 1 ==0

    cambia t in 1 perché

    1==0 vale 0
    t==0 vale 1

    Invece se t vale 1 allora t viene cambiato in 0 perché

    1==0 vale 0
    t==0 vale 0
  • Re: Perché questo programma si comporta così??

    True true
    true false
    false true
    false false

    mentre qui ci sono due true che non dovrebbero esserci o forse tre

    leggi cosa ho scritto




    ho capito l'operatore && ma la riga destra

    dove

    t = t == 1 == 1

    1== 1 true
    t== 1 true

    paragonata alla sinistra dove

    1==0 false
    t ==1 true
    paragonate è false quindi giusto ma

    non è lei che decide perché diventa sia 1 e 0 perché deve paragonarsi alla seconda riga
    dove è sempre true quindi un true c'è e non dovrebbe esserci un paragone tra due true






    t = t == 1 == 0 && t =t==1 ==1

    quando t == 1 (riga sinistra) && t == 1 (riga destra) fa true è l'&& che è in mezzo alle due righe perché paragona anche quelle per precedenza e non solo una non fa sempre false come dovrebbe fare tra (1 && 0) è costretto a fare true come se fosse 1 && 0 == 1&& 1 true è come se non ci fosse lo 0 ma poi è costretto a fare un altro paragone ed è false poi di nuovo true perché paragona di nuovo la riga di sinistra ci sono due true e dovrebbe essercene solo uno.
  • Re: Perché questo programma si comporta così??

    Non ho capito niente della tua risposta. Se scrivi qualcosa di più comprensibile forse ci capiamo.

    Non so se hai compreso quello che ti ho scritto prima ...

    La parte dopo && la puoi ignorare ... Prova anche il while solo con la prima parte
  • Re: Perché questo programma si comporta così??

    Proviamo così


    c'è un solo && ok fin qui va bene tra la riga destra e la sinistra (non guardare l'ultimo codice devi guardare il codice dove le due righe dove per riga sinistra intendo t ==(t=t==1==0) ,e per riga destra t==(t=t==1==1)

    poi in una riga per precedenza ci sono due && invisibili diciamo
    uno è tra t== 1 e l'altro è tra 1 == 0 cioè nella riga sinistra t==(t = t == 1 ==0) ma poi c'è && tra la riga destra e la sinistra
    per precedenza come voi dite che fa ancora altri paragoni ,ma per esempio il paragone tra l'espressione (1&&0) è false e basta mentre tra (1==1 && 1 ==0) quanti sono i paragoni cioè 1==1 è come 1 && 1 cioè true poi c'è 1==0 false ok true && false cioè false .quindi?? quanti true ho nella mia espressione delle due righe sopra?? più di uno di sicuro. funziona anche senza && non avevo notato.
    ma il secondo e ultimo codice no mi sembra
  • Re: Perché questo programma si comporta così??

    In questo codice non posso ignorare &&


    #include<iostream>
    using namespace std;


    int main()

    {

    int a = 0;
    int t = ! 00!=!(0); qui t è uguale a 0


    while(t == (t =t == 1 == 1) && (t = t == 0) )


    {
    if (t == 1)
    {
    cout<< t; qui t vale 1

    }
    }
    if (t == 0)
    {

    cout<<t; qui t vale di nuovo 0


    }

    cin >>a;


    }


    ma qui while si ferma e non continua all'infinito e non va a ritroso t quindi vale sempre 0 ma per un attimo vale 1 quando si esegue il while forse è solo una questione di precedenza
  • Re: Perché questo programma si comporta così??

    E anche nell'altro codice se metto prima a sinistra t==(t =t==1==1) non posso ignorare && mi dispiace.
Devi accedere o registrarti per scrivere nel forum
23 risposte