Piccolo programmino

di il
15 risposte

Piccolo programmino

#include <iostream>
using namespace std;

void leggi_numeri(int i,int j)
{ do{
do {
cout << "scrivi due numeri positivi;"<< endl;
cout <<"a = ";
cin >> i ;cout << endl;
cout << "b = ";
cin>> j;
cout<< endl;} while ( i <0 || j<0);
if (i ==0 || j == 0)
cout << "non è possibile";}
while ( i==0 || j== 0);}
int main()
{
int somma;
int prodotto;
int i, j;
char r;
cout << "MENU'" << endl;
cout <<"a) somma i due numeri" << endl;
cout<< "b) fai il prodotto" << endl;
cin >> r;
switch (r)
{ case'a':

leggi_numeri(i, j);
somma=i+j;
cout << somma;
break;

case 'b':
int prodotto = 1;
leggi_numeri(i, j);
prodotto=i*j;
cout << prodotto;
break;
}
system("PAUSE");
return 0;
}
è un programma per fare la somma e il prodotto di due numeri,non mi dà errore,ma quando faccio la somma mi esce una serie di numeri e non la somma reale

15 Risposte

  • Re: Piccolo programmino

    
    void leggi_numeri(int &i,int &j)
    { 
    	do
    	{
    		do 
    		{
    			cout << "scrivi due numeri positivi;"<< endl;
    			cout <<"a = ";
    			cin >> i ;
    			cout << endl;
    			cout << "b = ";
    			cin>> j;
    			cout<< endl;
    		} while ( i <0 || j<0);
    		if (i == 0 || j == 0)
    			cout << "non è possibile";
    	}while ( i==0 || j== 0);
    }
    
    int main()
    {
    	int somma;
    	int prodotto;
    	int i, j;
    	char r;
    	cout << "MENU'" << endl;
    	cout <<"a) somma i due numeri" << endl;
    	cout<< "b) fai il prodotto" << endl;
    	cin >> r;
    	switch (r)
    	{ case'a':
    
    	leggi_numeri(i, j);
    	somma=i+j;
    	cout << somma;
    	break;
    
    	case 'b':
    		int prodotto = 1;
    		leggi_numeri(i, j);
    		prodotto=i*j;
    		cout << prodotto;
    		break;
    	}
    	system("PAUSE");
    	return 0;
    }
    
  • Re: Piccolo programmino

    Praticamente hai riscritto il mio programma?
  • Re: Piccolo programmino

    
    void leggi_numeri(int &i,int &j)
    
    hai imparato cos'è il passaggio variabili x riferimento?
  • Re: Piccolo programmino

    Sì infatti ho trovato che si faceva così,anche se non mi è chiaro il perchè
  • Re: Piccolo programmino

    Allora non hai imparato cos'è il passaggio x riferimento
  • Re: Piccolo programmino

    Io ho capito che si deve usare gli indirizzi,però sul libro non è molto chiaro
  • Re: Piccolo programmino

    Scusa ma su che libro studi? Noi altri come abbiamo fatto senza internet?
  • Re: Piccolo programmino

    Su programmazione in c++,considera che devo studiare tutto da sola e già informatica come materia non la sopporto,quindi non mi è facile assimilare
  • Re: Piccolo programmino

    Cosa c'è scritto su passaggio x riferimento?
  • Re: Piccolo programmino

    È un puntatore ad indirizzo di memoria e non richiede l'uso di un operatore di indirizzamento
  • Re: Piccolo programmino

    Ma a me non è chiaro perchè non posso utilizzare il valore direttamente,quale sarebbe il problema?
  • Re: Piccolo programmino

    Passaggio per riferimento come la parola dice è un riferimento ad una locazione di memoria.
    Pensaci un attimo: una variable nominata i sta nella memoria ram in una posizione qualsiasi diciamo nel 1000 byte per semplicità. Adesso il tuo programmino non facceva il passaggio per riferimento ma andava a leggere il valore della cella 1000 e lo passava(copiando il contenuto della cella in un altro posto temporaneo) all funzione leggi. La funzione leggi modificava questa posizione temporanea e all'uscita della funzione questa posizione viene marcata come non usata e la poszione 1000 non veniva affatto modificata. con il passaggio per riferimento tu dici al programma di non andare a leggere cosa c'è nella posizione 1000 ma ti passare la poszione 1000 alla funzione leggi. Sarà poi questa a modificare il contenuto. Questa ha due vantaggi:
    1. Non c'è una copia temporanea
    2. in variabili molto grosse tipo struct enorme questo (la non copia) ha un impatto considerevole sulla velocità.
    Svantaggio: perdi temporaneamente il controllo della variabile nel senso che non sai se la funzione a cui lo passi saprà gestirlo.

    leggi questa pagina e fatti una cultura + approfondita:
    http://programmazione.html.it/guide/lezione/1175/chiamata-per-valore-e-per-indirizzo/
  • Re: Piccolo programmino

    Se ho capito bene è così:se utilizzo una variabile il cui valore può variare devo usare il suo indirizzo e non la copia del valore,se invece ad esempio avessi avuto int i= 4 allora l'indirizzo non serviva,poichè il valore di i non varia
  • Re: Piccolo programmino

    Tu cambi il valore di i nella funzione leggi. Qualsiasi fosse questo valore esso viene sovrascritto nella funzione leggi se la variabile i lo passi per riferimento. Se lo passi per valore i non cambia perche ti viene fatto la copia temporanea.
Devi accedere o registrarti per scrivere nel forum
15 risposte