Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703

    [c/c++]inizializzazione variabile a 0, perchè?

    mmm, allora, avrei un quesito da sottoporvi;
    presumendo di avere un compilatore che effettui solamente:
    -somma
    -confronto
    -decremento unitario

    e dovendo fare una moltiplicazione, dovrò inventarmi un algoritmo.. cioè basta fare la somma del numero N volte(es. 4x5 ---> 4+4+4+4+4)
    ora, seguendo uno schema di flusso per la risoluzione in c++ o c ad esempio:
    date tre variabili (a=5,b=3,p) il prof mi ha detto di inizializzare p=0, per quale motivo???
    P.s "p" sarà il risultato della moltiplicazione, cioè diventerà 15..
    Io non capisco se è obbligatorio inizializzare la variabile p=0 oppure si tratta solmente di una sintassi migliore.
    grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti ha detto di farlo perche' il risultato sara' ottenuto tramite una serie di somme all'interno di p.

    All'inizio di un programma C, le variabili hanno un valore non determinato e quindi, se p non e' 0 all'inizio della serie di somme, il risultato finale sara' sbagliato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    mm..non ho capito molto bene..cioè, ho provato comunque a buttar giu due linee di codice ma non va:
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int a;
        int b;
        int p;
        cout << "primo numero";
        cin >> a;
        cout << "secondo numero";
        cin >> b;
        for(p=0 ;p<b; p++) //faccio un ciclo, per il numero di volte di "b-1"
        {
         p= p+a;  //p si incrementa a tutti i cicli del valore di a
        }
        cout << p;  //stampo il risultato di p
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    mmm..non mi funzia, dove sbaglio..sicuramente è il concetto!grazie mille

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    p conterrà il risultato. Devi azzerarla PRIMA della for e NON devi usarla come contatore per la for ... per il ciclo userai un'altra variabile contatore (ad esempio i) ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    ti ringrazio, ora dovrebbe essere corretto... quindi, riassumendo gli errori:
    la variabile p conterrà solo il risultato, l'inizializzazione a 0 è dovuta al fatto che al suo interno vengono eseguite delle operazioni(per qualsiasi tipo di operazione aritmetica e non avrei dovuto farla partire da 0?);
    infine per il ciclo viene utilizzato un contatore, cioè la variabile i.
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int a;
        int b;
        int p=0;
        int i;
        cout << "primo numero";
        cin >> a;
        cout << "secondo numero";
        cin >> b;
        for(i=0 ;i<b; i++)
        {
         p=p+a;
          
        }
        cout << p;
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }

  6. #6
    si, ed eliminerei le parentesi graffe della for visto che contiene una sola istruzione
    Pointlab - User Interface e Graphic design

  7. #7
    Puoi anche togliere la variabile contatore, la system e l'inclusione di cstdlib in questa maniera:
    codice:
    #include <iostream>
    //non ti servono altri header
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int a,b,p;
        cout << "Inserisci il primo numero: ";
        cin >> a;
        cout << "Inserisci il secondo numero: ";
        cin >> b;
        for(p=0; b; b--)
            p+=a;
        cout << p <<endl;
        cout<<"Premere Invio per uscire..."; //la system è il male
        cin.sync();
        cin.ignore();
        return EXIT_SUCCESS; //se ti dà errore su questa riga sostituisci EXIT_SUCCESS con 0
    }
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    che potevo togliere ulteriori header l'ho capito oggi a lezione^^; tuttavia mi servirebbe un aiuto sulla comprensione di questa parte del code:
    cin.sync();
    cin.ignore();
    return EXIT_SUCCESS

    grazie

  9. #9
    codice:
    cin.sync();
    Scarta tutti i caratteri presenti nel buffer di lettura di cin; quando si usano le funzioni di input formattato (come l'operatore di estrazione >>) nel buffer rimane sempre il newline, che ci darebbe problemi per l'istruzione successiva.
    codice:
    cin.ignore();
    Ignora tutti i caratteri inseriti dall'utente fino a quando preme Invio. In sostanza, quindi attende la pressione di Invio. Se non pulissimo il buffer probabilmente la funzione ritornerebbe immediatamente, perché troverebbe il newline "avanzato" dall'ultima operazione di input formattato.
    codice:
    return EXIT_SUCCESS
    Termina il programma restituendo come codice di uscita EXIT_SUCCESS (solitamente 0), ossia un valore che viene solitamente interpretato come indicativo del buon esito dell'esecuzione del programma.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    per le prime due linee di code devo guardarmele nel dettaglio, per la terza istruzione, in pratica sarebbe come un "return 0"?
    Ti ringrazio dell'aiuto, provvederò ad informarmi su quegli statement.

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.