Prime funzioni

di il
12 risposte

Prime funzioni

Ciao a tutti! sto imparando ad utilizzare le funzioni e stavo cercando di scrivere un programmino che fa la somma di due numeri... ho scritto questo:

#include <iostream>
#include <cstdlib>
using namespace std;

int a, b, num, num1, num2, sum;
void Lettura() {
    cout<<"Inserire il fattore: ";
    cin>>num ;
}
void Somma() {
    sum+=num;
}
void Stampa() {
    cout<<"La somma vale "<<sum<<endl;
}
int main () {
    Lettura();
    Lettura();
    Somma();
    Stampa();
    system("PAUSE");
    return 0;
}
ma ovviamente non funziona perchè la seconda volta che inserisco il fattore questo si sovrappone al primo. in teoria avrei risolto facendo così

int main () {
    Lettura();
    Somma();
    Lettura();
    Somma();
    Stampa();
    system("PAUSE");
    return 0;
}
ma mi sembra molto poco elegante. come posso fare per fargli leggere due numeri e chiamare la funzione somma una sola volta? Grazie a tutti.

12 Risposte

  • Re: Prime funzioni

    Prima di tutto inizializzi tutti i vari contatori a 0. Nello stato in cui sono adesso tengono valore di default indefinito. Puoi fare una cosa del genere:
    
    void Lettura() {
        cout<<"Inserire il 1° fattore: ";
        cin>>num1 ;
        cout<<"Inserire il 2° fattore: ";
        cin>>num2 ;
    }
    
    void Somma() {
        sum = num1 + num2;
    }
    
  • Re: Prime funzioni

    Ok, ma potrei fare in modo di decidere solo all'interno del main quanti fattori considerare? cioè chiamare n volte la funzione Lettura() memorizzando n valori diversi?
  • Re: Prime funzioni

    Tutto si può fare. devi solo decidere com'è che le vuoi fare ste funzioni. Se ad ogni lettura aggiungi un dato nuovo puoi anche considerare la possibilità di inserire un vettore di interi e ad ogni chiamata di lettura metti il valore di input nel vettore incrementando la posizione. Quando chiami somma questa farà la scansione di tutto il vettore sommando tutto i valori.
  • Re: Prime funzioni

    Capisco. ad esempio ho letto che si possono usare dei parametri, e chiamare ad esempio
    Lettura(a);
    Lettura(b);
    ma mi dà errore...evidentemente per la sintassi. potresti dirmi come si scrive correttamente?
  • Re: Prime funzioni

    
    void Lettura(int a, int b)
    {
    num1 = a;
    num2 = b;
    }
    
    void Somma(int a, int b)
    {
     sum = a +b;
    }
    
    
  • Re: Prime funzioni

    Ok grazie
  • Re: Prime funzioni

    Ecco...quello che cercavo di fare era più o meno questo
    
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    void Lettura(int num) {
        cout<<"Inserire il fattore: ";
        cin>>num ;
    }
    void Somma(int a, int b, int sum) {
        sum=a+b;
    }
    void Stampa(int sum) {
        cout<<"La somma vale "<<sum<<endl;
    }
    int main () {
        int a, b, sum;
        Lettura(a);
        Lettura(b);
        Somma(a, b, sum);
        Stampa(sum);
        system("PAUSE");
        return 0;
    }
    
    ma la somma viene un numero casuale...non è che potresti darci un'occhiata?
    Grazie
  • Re: Prime funzioni

    Il tuo problema è che passi i dati per valore e non per riferimento. Il valore che tu inserisci va perso non appena la funzione termina. Cambia le dichiarazioni nelle funzioni Somma e Lettura così:
    
    void Lettura(int &num)
    void Somma(int & a, int & b, int & sum)
    
  • Re: Prime funzioni

    Ovviamente adesso funziona ma potresti spiegarmi meglio che cosa significa la '&' per favore?
  • Re: Prime funzioni

    Leggi quì
    http://programmazione.html.it/guide/lezione/1175/chiamata-per-valore-e-per-indirizzo/
  • Re: Prime funzioni

    Magnifico! grazie mille per la tua infinita pazienza!
    p.s. Ma quanto ci si mette ad imparare tutte le cose che sai tu sulla programmazione? voglio dire...hai una risposta ad ogni domanda...è da molto che ti dedichi all'informatica?
  • Re: Prime funzioni

    Non ho una risposta ad ogni domanda, semplicemente ci sono passato sopra tante volte a questi problemi. Quando diventerai bravo (ci vuole del tempo ma lo diventerai), ci saranno sempre nuove cose da scoprire e vedrai che non avrò una risposta su tutto
Devi accedere o registrarti per scrivere nel forum
12 risposte