Problema moltiplicazioni multiple c++

di il
14 risposte

Problema moltiplicazioni multiple c++

Salve, vorrei un aiuto su una parte di un programma che sto scrivendo, in pratica vorrei fare in modo che un utente inserisca il numero di cifre che andrà a mettere nella moltiplicazione, per poi, ovviamente, metterle. Il problema è che qualunque cifra io metta il risultato è sempre 0, qualcuno mi può spiegare in cosa ho sbagliato? Sono alle prime armi

int main()
{
    int m,a,totale,cont(0);
    cout << "INSERIRE IL NUMERO DI FATTORI CHE SI ANDRANNO A MOLTIPLICARE" << endl;
    cin >> m;
    while (cont<m)
    {
        cout << "INSERIRE IL FATTORE DA MOLTIPLICARE" << endl;
        cin >> a;
        totale=totale*a;
        cont++;
    }
    cout << "IL TOTALE DELLA MOLTIPLICAZIONE E':  " << totale << endl;

    return 0;
}

14 Risposte

  • Re: Problema moltiplicazioni multiple c++

    Ciao!

    Quanto vale la variabile totale prima del ciclo?

    P.S.
    Se ci rifletti la variabile cont non serve!
  • Re: Problema moltiplicazioni multiple c++

    Ciao, il totale è a 0. Perché il cont non serve? L'ho messo per poter uscire dal ciclo sennò continuerebbe all'infinito, non mi vengono in mente altri modi perché me l'hanno insegnato così e ho sempre usato questo metodo.
  • Re: Problema moltiplicazioni multiple c++

    Ciao, il totale è a 0.
    A questo punto le domande sono due:
    - come mai la variabile totale vale 0? A me non sembra che tu abbia inizializzato tale variabile!
    - ipotizziamo pure che totale sia inizializzato a 0, quanto fa 0 per un numero?
    Perché il cont non serve? L'ho messo per poter uscire dal ciclo sennò continuerebbe all'infinito, non mi vengono in mente altri modi perché me l'hanno insegnato così e ho sempre usato questo metodo.
    Una cosa del genere non potrebbe andare?
    cin >> m;
    while(m > 0)
    {
        ...
        m--;
    }
  • Re: Problema moltiplicazioni multiple c++

    Si ha sicuramente più senso rispetto a ciò che avevo scritto io ma dopo che mi hai fatto notare il problema con il "totale" non so come portare a termine questo codice, questo metodo l'ho usato per le addizioni e sottrazioni e purtroppo non ho pensato che per le moltiplicazioni non potesse andare bene, ma ora come potrei andare avanti?

    edit: Ho risolto dopo varie prove. Ecco il codice finito
    
    int main()
    {
        int m,a,totale (1),cont(0);
        cout << "INSERIRE IL NUMERO DI FATTORI CHE SI ANDRANNO A MOLTIPLICARE" << endl;
        cin >> m;
        while (m>0)
        {
            cout << "INSERIRE IL FATTORE DA MOLTIPLICARE" << endl;
            cin >> a;
            totale=totale*a;
            m--;
        }
        cout << "IL TOTALE DELLA MOLTIPLICAZIONE E':  " << totale << endl;
    
        return 0;
    }
    
    
  • Re: Problema moltiplicazioni multiple c++

    edit: Ho risolto dopo varie prove
    Esatto, l'1 è detto elemento neutro della moltiplicazione.
    ...questo metodo l'ho usato per le addizioni e sottrazioni...
    Per l'addizione ok, ma per la sottrazione non sono sicuro che vada bene... se vuoi posta il codice che gli do un'occhiata!
  • Re: Problema moltiplicazioni multiple c++

    Bhe effettivamente nella sottrazione qualcosa che non va c'è... facendo la sottrazione 5-5-5 (ad esempio) come risultato mi da -15 invece di -5
    
    int cont (0),m;
        double a,totale (0)
        cout << "INSERIRE IL NUMERO DI FATTORI CHE SI ANDRANNO A SOTTRARRE" << endl;
        cin >> m;
        while (cont<m)
        {
            cout << "INSERIRE IL FATTORE DA SOTTRARRE" << endl;
            cin >> a;
            totale=totale-a;
            cont++;
        }
        cout << "IL TOTALE DELLA SOTTRAZIONE E':  " << totale << endl;
    
  • Re: Problema moltiplicazioni multiple c++

    Quel codice calcola -5-5-5
  • Re: Problema moltiplicazioni multiple c++

    Si è esattamente quello il problema ma come lo risolvo?
  • Re: Problema moltiplicazioni multiple c++

    Innanzitutto bisogna definire cosa deve fare il programma, ossia cosa si intende per "sottrazioni multiple"...
    Nell'esempio "5-5-5" che hai riportato nel precedente post, gli input da tastiera sarebbero 5, 5 e 5, giusto? In pratica vuoi che il programma dal primo valore inserito vada a sottrarre i successivi m-1 valori?
  • Re: Problema moltiplicazioni multiple c++

    @Nippolo, DI NUOVO

    Se e' vero che
    
    m=10;
    while(m--) { ... }
    


    lo esegue ESATTAMENTE 10 volte

    MENTRE
    
    m=10;
    while(--m) { ... }
    
    lo esegue NOVE volte

    Mentre CHE SUCCEDE SE "m" VALE ZERO?
    O UN NUMERO NEGATIVO?

    Da nessuna parte c'e' scritto che l'inesperto e' in gradi di scrivere codice SENZA ERRORI!!!!!!

    E' UN TRICK per smanettoni, NON PER GENTE che e' alle prime armi, e che ha qualche controindicazione, se uno non sa quello che fa!!!!!!

    INFINITAMENTE meglio
    
    m=10;
    c = 0;
    while (c++ < m) { ... }
    
    OPPURE
    
    for(int c=0; c<m; ++c){ ... }
    
    o anche (CHE VA PERFETTAMENTE BENE)
    
    while(c < m){ ...; c++; }
    
    while(c < m){ ...; c += 1; }
    

    DEVI SEMPRE TENERE PRESENTE che per chi e' alle prime armi, il codice e' come il cinese: per uno fino a che non ci ha fatto la mano, e' INCOMPRENSIBILE!

    ED I TRICK sono il colpo all nuca


    EVITATE I TRICK come la lebbra, l'ebola, la dengue, la peste bubbonica, ...

    - rende il codice meno leggibile
    - puo' avere effetti collaterali non previsti
    - NON MIGLIORA le performance dell'appplicazione (un miglioramento di qualche nanosecondo NON SERVE A NULLA)
  • Re: Problema moltiplicazioni multiple c++

    Nippolo ha scritto:


    gli input da tastiera sarebbero 5, 5 e 5, giusto?
    Si, vorrei che nella console l'utente possa mettere "5 , 5 , 5" tutti positivi, in modo tale che come risulto dia -5 (5-5-5) e non -15 (-5-5-5), pensavo bastassero delle parentesi nell'operazione di sottrazione, e invece no
  • Re: Problema moltiplicazioni multiple c++

    lyoski ha scritto:


    Si è esattamente quello il problema ma come lo risolvo?
    Ma non è un problema ... è quello che fa quel codice.

    Comunque, se vuoi fare 5-5-5 allora il primo input va assegnato a totale e devi fare un ciclo in meno. Ma è un altro programma, un altro obiettivo.
  • Re: Problema moltiplicazioni multiple c++

    @migliorabile, guarda che non ho inserito alcun operatore di decremento all'interno della condizione del while... ho scritto semplicemente m>0... ciò implica che:
    - non ho introdotto nessuna diversificazione tra operatore di decremento prefisso e postfisso che magari potrebbe far storcere il naso ad un neofita;
    - se m vale 0 o è NEGATIVO non succede nulla di strano, semplicemente non entra nel ciclo, stessa cosa che accadrebbe nel caso in cui si utilizzasse la variabile cont.

    Detto questo mi sembra di non aver introdotto nessun trick da smanettoni... se altre volte alcune osservazioni potevano essere condivisibili, questa volta mi tocca dirti che tutto il discorso che fai secondo me non sta molto in piedi! Attendo una tua replica!

    lyoski ha scritto:


    Si, vorrei che nella console l'utente possa mettere "5 , 5 , 5" tutti positivi, in modo tale che come risulto dia -5 (5-5-5) e non -15 (-5-5-5), pensavo bastassero delle parentesi nell'operazione di sottrazione, e invece no
    Se la risposta alla mia precedente domanda

    In pratica vuoi che il programma dal primo valore inserito vada a sottrarre i successivi m-1 valori?

    è affermativa, allora la soluzione è quella prospettata da @oregon.
  • Re: Problema moltiplicazioni multiple c++

    Si ho fatto come ha proposto @oregon ed ora va perfettamente, metto il codice in caso serva a qualcuno.
    
    int cont (1),m;
        double a,totale (0);
        cout << "INSERIRE IL NUMERO DI FATTORI CHE SI ANDRANNO A SOTTRARRE" << endl;
        cin >> m;
        cout << "INSERIRE IL FATTORE DA SOTTRARRE" << endl;
        cin >> totale;
        while (cont<m)
        {
            cout << "INSERIRE IL FATTORE DA SOTTRARRE" << endl;
            cin >> a;
            totale=totale-a;
            cont++;
        }
        cout << "IL TOTALE DELLA SOTTRAZIONE E':  " << totale << endl;
        
Devi accedere o registrarti per scrivere nel forum
14 risposte