Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: C++, maturità

  1. #1

    C++, maturità

    Durante la mia terza prova di maturità, il professore esterno venuto nella mia scuola, ci ha dato questo quesito:

    Cosa compare a video dopo l'esecuzione di questo programma:

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {

    int a=1,x,z;

    cout << (z=0 && x!=4 && a++) << endl;
    cout << (a<2 && x!=(4 && z >-1 )) << endl;
    getchar();

    }


    Dopo averlo tirato in mezzo per tre ore, mi ha confermato che compariva:

    01

    In realtà compare:

    0
    1

    Dopo vari tentativi non sono ancora riuscito a capire cosa faccia comparire "1".
    Confido nel vostro sapere per una risposta.

    Grazie

  2. #2
    Il secondo cout stampa il risultato di quell'espressione booleana. Se la valuti vedi che risulta vera, quindi il risultato è 1.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  3. #3
    Però la variabile x non viene inizializzata, se x valesse 1 il programma fornirebbe in uscita:

    0
    0
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  4. #4
    Ma in c++ le variabili non vengono inizializzate automaticamente a 0? Mi pareva di si :master:
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  5. #5
    Ma in c++ le variabili non vengono inizializzate automaticamente a 0? Mi pareva di si
    Prova a stampare il valore di x (variabile locale, non globale).

    codice:
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int x;
    	cout << "x vale " << x << endl;
    	return 0;
    }
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  6. #6
    Originariamente inviato da GreyFox86
    Ma in c++ le variabili non vengono inizializzate automaticamente a 0? Mi pareva di si :master:
    le variabili dichiarate static sono inizializzate a zero, altrimenti è indefinito (rimane quello che c'era già)
    ciao
    sergio

  7. #7
    Ah giusto le static ma anche i campi delle classi se non sbaglio.
    Il codice di pallinopinco senza inizializzazione stampa 0 lo stesso però penso che dipenda dall'implementazione del compilatore.
    Nel caso del codice di amodio10 "z" è inizializzato cmq, dalla prima espressione cout. In effetti manca solo ad "x" l'inizializzazione.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  8. #8
    non dipende dalla implementazione del compilatore e che probabilmente uno zero è già presente in quella locazione di memoria.
    ciao
    sergio

  9. #9
    Hai ragione, era un caso fortuito
    Tanto per divertircisi un po':

    codice:
    gr3yfox test $ cat o.cpp 
    #include<iostream>
    
    using namespace std;
    
    int main(int argc, char **argv) {
            {
                    int x = -143;
                    cout << &x << " " << x << endl;
            }
            {
                    int x;
                    cout << &x << " " << x << endl;
            }
            int x;
            cout << &x << " " << x << endl;
    
    }
    
    gr3yfox test $ g++ o.cpp -o o -O0 && ./o
    0x7fffed34e0d0 -143
    0x7fffed34e0cc 0
    0x7fffed34e0d4 32767
    gr3yfox test $ g++ o.cpp -o o -O1 && ./o
    0x7fff1fe34bc0 -143
    0x7fff1fe34bc0 -143
    0x7fff1fe34bc4 32767
    Le tre variabili x differenti se compilate senza ottimizzazioni finiscono in celle differenti, mentre se si ottimizzza il compilatore riesce a capire che le prime due possono condividere lo stesso indirizzo.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  10. #10
    Grazie a tutti ragazzi.....grazie hai vostri ragionamenti ho capito dove sbagliavo.....non facevo l'And e non capivo......inoltre in realtà (mi è venuto in mente dopo) le variabili erano dichiarate globale quindi sono inizializzate a 0 (se non mi sbaglio)....grazie mille

    Ciauz

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 © 2024 vBulletin Solutions, Inc. All rights reserved.