[c++] inversione di un vettore

Messaggioda Appinmate » 04/09/2018, 16:29

Buongiorno a tutti! Avrei un problema con questo esercizio:
Codice:
#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 :) (avevo pensato di inserire un
Codice:
cout <<temp;
all'interno del for ma non mi viene comunque giusto.Qulcuno potrebbe anche spiegarmi il perché
Codice:
cout << temp;
non va bene? Grazie in anticipo :)
Appinmate
Junior Member
Junior Member
 
Messaggio: 150 di 342
Iscritto il: 26/06/2018, 12:47

Re: [c++] inversione di un vettore

Messaggioda Super Squirrel » 05/09/2018, 11:29

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:
Codice:
#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.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 283 di 1486
Iscritto il: 16/05/2013, 22:05

Re: [c++] inversione di un vettore

Messaggioda Appinmate » 05/09/2018, 17:01

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.. :oops:
Appinmate
Junior Member
Junior Member
 
Messaggio: 152 di 342
Iscritto il: 26/06/2018, 12:47

Re: [c++] inversione di un vettore

Messaggioda Super Squirrel » 05/09/2018, 19:08

Tornando al post iniziale
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 <<temp;
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?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 284 di 1486
Iscritto il: 16/05/2013, 22:05


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite