[c++] inversione di un vettore
Buongiorno a tutti! Avrei un problema con questo esercizio:
questo sarebbe il codice che ho utilizzato per invertire un vettore ma non mi viene giusto.Qualcuno sa spiegarmi il perché? Grazie in anticipo
(avevo pensato di inserire un
#include <iostream> #include <math.h> #include <vector> #include <stdlib.h> using namespace std; void inverti(vector<int>& v) {int i,l=v.size(),j;int temp; for(i=0,j=l-1;i<j;i=i+1,j=j-1) {int temp=v[i];v[i]=v[j];v[j]=temp; } int main () { vector<int> V(3,0),W(4,0),Z(3,0),T(7,0); V[0]=1;V[1]=2;V[2]=1; W[0]=1;W[1]=2;W[2]=2;W[3]=1; Z[0]=1;Z[1]=2;Z[2]=2; T[0]=1;T[1]=2;T[2]=3;T[3]=-3;T[4]=2;T[5]=1;T[6]=10; cout << "inverti V "; inverti(V); cout << "inverti W ";inverti(W); cout << "inverti Z ";inverti(Z); cout << "Inverti T "; inverti(T); system("pause");}
questo sarebbe il codice che ho utilizzato per invertire un vettore ma non mi viene giusto.Qualcuno sa spiegarmi il perché? Grazie in anticipo

cout <<temp;all'interno del for ma non mi viene comunque giusto.Qulcuno potrebbe anche spiegarmi il perché
cout << temp;non va bene? Grazie in anticipo

Risposte
Innanzitutto al fine di rendere il codice più chiaro e leggibile ti consiglio di rispettare l'indentazione e la spaziatura.
In ogni caso:
- le librerie math e stdlib non servono;
- evita di utilizzare system("pause"), peraltro se lanci il programma tramite IDE non serve;
- nella funzione inverti() c'è qualcosa che non torna con le graffe;
- al posto di i=i+1 e j=j-1 puoi utilizzare gli operatori di incremento e decremento.
Detto ciò il codice diventerebbe qualcosa del genere:
La funzione inverti() deve occuparsi di invertire il vettore, non di mostrarlo... a tal fine basta implementare una funzione stampa_vettore().
Per la cronaca, dal punto di vista logico la funzione inverti() è funzionante, ma potrebbe essere riscritta utilizzando il solo indice i.
In ogni caso:
- le librerie math e stdlib non servono;
- evita di utilizzare system("pause"), peraltro se lanci il programma tramite IDE non serve;
- nella funzione inverti() c'è qualcosa che non torna con le graffe;
- al posto di i=i+1 e j=j-1 puoi utilizzare gli operatori di incremento e decremento.
Detto ciò il codice diventerebbe qualcosa del genere:
#include <iostream> #include <vector> using namespace std; void inverti(vector<int> &v) { int i; int j; int temp; for(i = 0, j = v.size() - 1; i < j; ++i, --j) { temp = v[i]; v[i] = v[j]; v[j] = temp; } } int main() { vector<int> V(5,0); V[0] = 1; V[1] = 2; V[2] = 3; V[3] = 4; V[4] = 5; cout << "inverti V "; inverti(V); }
La funzione inverti() deve occuparsi di invertire il vettore, non di mostrarlo... a tal fine basta implementare una funzione stampa_vettore().
Per la cronaca, dal punto di vista logico la funzione inverti() è funzionante, ma potrebbe essere riscritta utilizzando il solo indice i.
Grazie.. ma perché devo mettere printvector? Ma lo devo aggiungere nel void? Scusa le domande probabilmente molto banali ma frequento un cdl in mate e questo è il primo esame che devo dare di info..

Tornando al post iniziale
Che intendi con non mi viene giusto? Il fatto che il vettore invertito non venga mostrato è ovvio, perchè non c'è nessun frammento di codice che se ne occupi.
Senza entrare troppo nei "dettagli", quel for, per un vettore di 5 elementi, esegue due iterazioni, quindi anche se metti un cout mostrerà solo 2 dei 5 elementi.
In che senso? Sai cosa sono le funzioni?
questo sarebbe il codice che ho utilizzato per invertire un vettore ma non mi viene giusto.Qualcuno sa spiegarmi il perché?
Che intendi con non mi viene giusto? Il fatto che il vettore invertito non venga mostrato è ovvio, perchè non c'è nessun frammento di codice che se ne occupi.
avevo pensato di inserire un
cout <all'interno del for ma non mi viene comunque giusto. Qulcuno potrebbe anche spiegarmi il perché
Senza entrare troppo nei "dettagli", quel for, per un vettore di 5 elementi, esegue due iterazioni, quindi anche se metti un cout mostrerà solo 2 dei 5 elementi.
ma perché devo mettere printvector? Ma lo devo aggiungere nel void?
In che senso? Sai cosa sono le funzioni?