PDA

Visualizza la versione completa : prodotto scalare (vettore per vettore) c++


crasty7
20-03-2015, 13:22
Ragazzi chiedo il vostro aiuto! deo fare il prodotto scalare tra due vettori..il programma procede bene inizializza bene gli array ma mi sbaglia il rpodotto scalare non riesco a capire il motivo! vi posto sotto il codice! grazie in anticipo!


#include <iostream>
#define LEN 20


using namespace std;


int main () {


int A[LEN], B[LEN];
int i,n,sum;


cout<<"inserisci il numero degli elementi dell'array A"<<endl;


cin>>n;






for ( i=0; i<n; i++){
cout<<"inserisci il ["<<i+1<<"] valore dell'array"<<endl;
cin>>A[i];
}
for (i=0;i<n;i++){


cout<<"l'array e'["<<A[i]<<"]"<<endl;
}
cout<<"inserisci il numero degli elementi dell'array B"<<endl;

cin>>n;


for ( i=0; i<n; i++){
cout<<"inserisci il ["<<i+1<<"] valore dell'array"<<endl;

cin>>B[i];
}
for (i=0;i<n;i++){


cout<<"l'array e'["<<B[i]<<"]"<<endl;
}
for (int i=0; i<n; i++){
sum=0;
sum+=A[i]*B[i];
i=i+1;
}




cout<<"il prodotto scalare e'"<<sum<<""<<endl;


system ("pause");
return 0;


}

MItaly
20-03-2015, 13:39
for (int i=0; i<n; i++){
sum=0;
sum+=A[i]*B[i];
i=i+1;
}
Stai riazzerando sum prima di sommare ciascun elemento...

crasty7
20-03-2015, 13:41
for (int i=0; i<n; i++){
sum=0;
sum+=A[i]*B[i];
i=i+1;
}
Stai riazzerando sum prima di sommare ciascun elemento...

giusto che stupido non ci avevo pensato! Grazie mille!

Scara95
20-03-2015, 13:42
for (int i=0; i<n; i++){
sum=0;
sum+=A[i]*B[i];
i=i+1;
}
Stai riazzerando sum prima di sommare ciascun elemento...
Inoltre incrementi 2 volte i.

crasty7
20-03-2015, 14:54
Inoltre incrementi 2 volte i.

ragazzi ok il programma funziona ora l'ho fatto con le funzioni ma il programma parte ma ad un certo punto s'interrompe ora vi posto il tutto con la funzione spero in un vostro aiuto!

codice:
#include <iostream>
#define LEN 20
using namespace std;
int scalare(int A[LEN],int B[LEN],int sum);
int main () {


int A[LEN], B[LEN];
int i,n,sum;


cout<<"inserisci il numero degli elementi dell'array A"<<endl;
cin>>n;


for ( i=0; i<n; i++){
cout<<"inserisci il ["<<i+1<<"] valore dell'array"<<endl;
cin>>A[i];
}


cout<<"inserisci il numero degli elementi dell'array B"<<endl;
cin>>n;


for ( i=0; i<n; i++){
cout<<"inserisci il ["<<i+1<<"] valore dell'array"<<endl;
cin>>B[i];
}


scalare (A,B,sum);


cout<<"il prodotto scalare e'"<<sum<<""<<endl;
system ("pause");
return 0;
}


int scalare (int A[LEN],int B[LEN],int sum){
sum=0;
int n;
for (int i=0; i<n; i++){
sum+=A[i]*B[i];
i=i+1;
}
return sum;
}

Scara95
20-03-2015, 15:02
Non hai chiaro il concetto di scope. Devi andartelo a studiare.
Ci sono alcuni errori concettuali gravi: il valore di sum non cambierà nel main; nella funzione scalare dichiari n, questa non ha nessun rapporto con n nel main e assumerà un valore random.

Scara95
20-03-2015, 15:13
Così è corretto, vedi se capisci perché è differente dal tuo. (Oltre al fatto che come avevo detto incrementavi 2 volte i)

#include <iostream>
#define LEN 20


using namespace std;


int scalare(int A[LEN], int B[LEN], int len);


int main () {
int A[LEN], B[LEN];
int i,n,sum;
cout<<"Inserisci il numero degli elementi dei vettori: ";
cin>>n;


for ( i=0; i<n; i++){
cout<<"A["<<i+1<<"]: ";
cin>>A[i];
}


for ( i=0; i<n; i++){
cout<<"B["<<i+1<<"]: ";
cin>>B[i];
}

sum = scalare(A,B,n);
cout<<"il prodotto scalare e'"<<sum<<endl;
//Io ho tolto la chiamata a system
//per utilizzarla comunque dovresti includere cstdlib
return 0;
}


int scalare (int A[LEN], int B[LEN], int len){
int sum = 0;
for (int i=0; i<len; i++){
sum+=A[i]*B[i];
}
return sum;
}

crasty7
20-03-2015, 15:18
Così è corretto, vedi se capisci perché è differente dal tuo. (Oltre al fatto che come avevo detto incrementavi 2 volte i)

#include <iostream>
#define LEN 20


using namespace std;


int scalare(int A[LEN], int B[LEN], int len);


int main () {
int A[LEN], B[LEN];
int i,n,sum;
cout<<"Inserisci il numero degli elementi dei vettori: ";
cin>>n;


for ( i=0; i<n; i++){
cout<<"A["<<i+1<<"]: ";
cin>>A[i];
}


for ( i=0; i<n; i++){
cout<<"B["<<i+1<<"]: ";
cin>>B[i];
}

sum = scalare(A,B,n);
cout<<"il prodotto scalare e'"<<sum<<endl;
//Io ho tolto la chiamata a system
//per utilizzarla comunque dovresti includere cstdlib
return 0;
}


int scalare (int A[LEN], int B[LEN], int len){
int sum = 0;
for (int i=0; i<len; i++){
sum+=A[i]*B[i];
}
return sum;
}


capito! Grazie Mille dell'aiuto!!!

Scara95
20-03-2015, 15:52
capito! Grazie Mille dell'aiuto!!!
Sicuro che hai capito?!
Prego :ciauz:

Loading