Problema vettori (somme tra di essi)

di il
5 risposte

Problema vettori (somme tra di essi)

Salve, seguendo il libro Thinking in C++, alla fine del 2° capitolo mi è stato chiesto questo esercizio di cui troverete la traccia nel codice:

/*Creare tre oggetti vector<float> e riempire i primi due come nell'esercizio precedente.
Scrivere un ciclo for che somma ogni elemento corrispondente nei primi due vector 
e mette il risultato nel terzo vector. 
Visualizzare tutti e tre i vector.*/

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

int main(){
	vector<float> uno[3];
	vector<float> due[3];
	vector<float> risultato;
	int i,i_2,i_3;
	float num, num2;
	
	
	cout<<"-Inserisci i primi 3 valori-\n__________________________________\n";
	for(i=1;i<4;i++){
		
		cout<<"Inserisci il valore numero "<<i<<" : ";
		cin>>num;
		uno.push_back(num);
	}

	cout<<"\n-Inserisci i secondi 3 valori-\n_______________________________\n";
	for(i_2=1;i_2<4;i_2++){
		
		cout<<"Inserisci il valore numero "<<i_2<<" : ";
		cin>>num2;
		due.push_back(num2);
	}

	risultato[0]= uno[0]+due[0];
	risultato[1]= uno[1]+due[1];
	risultato[2]= uno[2]+due[2];

	cout<<"La somma tra questi due vettori e':\n";
	
	for(i_3=0;i_3<3;i_3++){
		cout<<risultato[i]<<"\t";
	}


}
Mi da questo tipo di errore:
C:\Users\Admin\Documents\C++ Projects\Esercizio 3 vettori somma.cpp In function 'int main()':
23 7 C:\Users\Admin\Documents\C++ Projects\Esercizio 3 vettori somma.cpp [Error] request for member 'push_back' in 'uno', which is of non-class type 'std::vector<float> [3]'
31 7 C:\Users\Admin\Documents\C++ Projects\Esercizio 3 vettori somma.cpp [Error] request for member 'push_back' in 'due', which is of non-class type 'std::vector<float> [3]'
34 22 C:\Users\Admin\Documents\C++ Projects\Esercizio 3 vettori somma.cpp [Error] no match for 'operator+' (operand types are 'std::vector<float>' and 'std::vector<float>')
34 22 C:\Users\Admin\Documents\C++ Projects\Esercizio 3 vettori somma.cpp

Cosa c'è di errato?

5 Risposte

  • Re: Problema vettori (somme tra di essi)

    In c++ è preferibile dichiarare gli indici di un vettore direttamente nell'header del for.
    togli quindi quella riga int i, i_2, i_3 e dichiara una i per ogni ciclo for:
    for(int i = 0; condizione; incremento)
    // istruzioni
    ricordati però che se i ti serve anche al di fuori del ciclo, questo metodo non è più applicabile (ma non è questo il caso).
  • Re: Problema vettori (somme tra di essi)

    Ho cercato di capire gli errori e sono riuscito a fare qualche passo avanti.. :
    
    /*Creare tre oggetti vector<float> e riempire i primi due come nell'esercizio precedente.
    Scrivere un ciclo for che somma ogni elemento corrispondente nei primi due vector 
    e mette il risultato nel terzo vector. 
    Visualizzare tutti e tre i vector.*/
    
    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main(){
    	vector<float> uno;
    	vector<float> due;
    	vector<float> risultato;
    	float num, num2;
    	int n;
    	
    	cout<<"Quanti valori vuoi inserire per ogni vettore?\n";
    	cin>>n;
    	
    	for(int i=0;i<n;i++){
    		
    		cout<<"Inserisci il valore numero "<<i+1<<" : ";
    		cin>>num;
    		uno.push_back(num);
    	}
    	
    	cout<<"Per il secondo vettore\n";
    	for(int i2=0;i2<n;i2++){
    		
    		cout<<"Inserisci il valore numero "<<i2+1<<" : ";
    		cin>>num2;
    		due.push_back(num2);
    	}
    
    	for(int i3=0;i3<n;i3++){
    	risultato[i3]= uno[i3]+due[i3];
    	}
    
    	cout<<"La somma tra questi due vettori e':\n";
    	
    	for(int i4=0;i4<n;i4++){
    		cout<<risultato[i4]<<"\t";
    	}
    	
    	system("PAUSE");
    	return 0;
    }
    
    Una volta inseriti i valori per il secondo vettore però mi da l'avviso che smette di funzionare :/
  • Re: Problema vettori (somme tra di essi)

    Quest'errore ti viene dato perchè il vector risultato non l'hai mai riempito e, quindi, ha size pari a 0.
    gli indici che applichi su un vector possono andare da 0 a vector.size() - 1. in questo caso risultato ha size = 0 e nel 3° for stai cercando di ottenere il 1°, 2° e 3° elemento di un vettore vuoto.
    anziché utilizzare quindi risultato devi fare un push_back della somma di uno + due, quindi:
    for(int i = 0; i < n; i++)
    	risultato.push_back(uno[i] + due[i]);
    
    p.s.: anziché usare i2 e i3 usa direttamente i, tanto quando esci dal primo for quella variabile non esiste più, quindi non hai due variabili con lo stesso nome.
  • Re: Problema vettori (somme tra di essi)

    Ha funzionato.
    Ti ringrazio tantissimo, mi hai fatto comprendere bene l'errore.

    Ecco il codice funzionante:
    
    /*Creare tre oggetti vector<float> e riempire i primi due come nell'esercizio precedente.
    Scrivere un ciclo for che somma ogni elemento corrispondente nei primi due vector 
    e mette il risultato nel terzo vector. 
    Visualizzare tutti e tre i vector.*/
    
    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main(){
    	vector<float> uno;
    	vector<float> due;
    	vector<float> risultato;
    	float num, num2;
    	int n;
    	
    	cout<<"Quanti valori vuoi inserire per ogni vettore?\n";
    	cin>>n;
    	
    	for(int i=0;i<n;i++){
    		
    		cout<<"Inserisci il valore numero "<<i+1<<" : ";
    		cin>>num;
    		uno.push_back(num);
    	}
    	
    	cout<<"Per il secondo vettore\n";
    	for(int i=0;i<n;i++){
    		
    		cout<<"Inserisci il valore numero "<<i+1<<" : ";
    		cin>>num2;
    		due.push_back(num2);
    	}
    	//smetto di inserire i valori per i 2 vettori
    	
    
    	for(int i=0;i<n;i++){
    	risultato.push_back(uno[i]+due[i]);
    	}
    
    	cout<<"La somma tra questi due vettori e':\n";
    	
    		for(int i=0;i<n;i++){
    			cout<<risultato[i]<<"\t";
    		}
    	
    	system("PAUSE");
    	return 0;
    }
    
  • Re: Problema vettori (somme tra di essi)

    AndreaLombax ha scritto:


    Ha funzionato.
    Ti ringrazio tantissimo, mi hai fatto comprendere bene l'errore.

    Ecco il codice funzionante:
    
    /*Creare tre oggetti vector<float> e riempire i primi due come nell'esercizio precedente.
    Scrivere un ciclo for che somma ogni elemento corrispondente nei primi due vector 
    e mette il risultato nel terzo vector. 
    Visualizzare tutti e tre i vector.*/
    
    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main(){
    	vector<float> uno;
    	vector<float> due;
    	vector<float> risultato;
    	float num, num2;
    	int n;
    	
    	cout<<"Quanti valori vuoi inserire per ogni vettore?\n";
    	cin>>n;
    	
    	for(int i=0;i<n;i++){
    		
    		cout<<"Inserisci il valore numero "<<i+1<<" : ";
    		cin>>num;
    		uno.push_back(num);
    	}
    	
    	cout<<"Per il secondo vettore\n";
    	for(int i=0;i<n;i++){
    		
    		cout<<"Inserisci il valore numero "<<i+1<<" : ";
    		cin>>num2;
    		due.push_back(num2);
    	}
    	//smetto di inserire i valori per i 2 vettori
    	
    
    	for(int i=0;i<n;i++){
    	risultato.push_back(uno[i]+due[i]);
    	}
    
    	cout<<"La somma tra questi due vettori e':\n";
    	
    		for(int i=0;i<n;i++){
    			cout<<risultato[i]<<"\t";
    		}
    	
    	system("PAUSE");
    	return 0;
    }
    
    mi fa piacere
    un'ulteriore pignoleria: num, num2 e num3 puoi evitarli utilizzando soltanto una variabile num che dichiari all'interno di ogni for:
    for (int i = 0; i < n; i++)
    {
    	int num;
    	// istruzioni
    }
Devi accedere o registrarti per scrivere nel forum
5 risposte