Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] Problema con lo shift verso sinistra.

    Buon pomeriggio a tutti, ho un problema con lo shift verso sinistra di un vettore.
    codice:
    /*Shiftare verso sinistra gli elementi di un vettore (es: input: 1,2,3,4 output: 2,3,4,1)*/
    
    #include<iostream>
    using namespace std;
    void InputNumerosita (int &n)                       //Numerosita inserita da utente
    {
     cout<<"Quanti numeri vuoi inserire? ";
     cin>>n;
     while(n<0)
     {
      cout<<"Errore reinserisci: ";
      cin>>n;
     }
    }
    void InputVettore (int v[], int n)   //Inserimento valori del vettore
    {
     int i;
     for(i=0;i<n;i++)
     {
      cout<<"Inserisci il " << i+1 << " ^ valore del vettore: ";
      cin>>v[i];
     }
    }
    void VisuaVettore (int v[], int n) //visualizzazione valori del vettore
    {
     cout<<endl<<"Questi sono i valori del nuovo vettore: "<<endl;
     int i;
     for(i=0;i<n;i++)
     {
      cout<<v[i]<<"\t";
     }
    }
    void shiftsx (int v[], int n)  //PROBLEMA SHIFT
    {
     int i;
     for(i=0;i<n-1;i++)
     {
      v[i]=v[i+1];
      
     }
     v[n-1]=0;
    }
    main()
    {
     const int dim=50;
     int v[dim];
     int n;
     InputNumerosita(n);
     InputVettore(v,n);
     shiftsx(v,n);
     VisuaVettore(v,n);
     return 0;
    }


    Il programma parte e svolge tutto perfettamente, ma lo shift no.

    (es: input: 1,2,3,4 output: 2,3,4,1)

    2016-08-25_152243.jpg

    come potete vedere da l'immagine qui sopra, i dati di output non sono come nell'esempio.
    inserisco 1,2,3,4 e l'output è 2,3,4,0
    so di aver messo nel codice v[n-1]=0 ma provandole tutte ho lasciato cosi.
    Spero di essermi spiegato, gradirei una mano!
    Ultima modifica di MItaly; 28-08-2016 a 16:27

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non è uno shift ma una rotazione. E se metti a zero l'ultimo elemento ovviamente non funzionerà mai

    Deve essere


    codice:
    int tmp=v[0];
    
    for(i=0;i<n-2;i++)
       v[i]=v[i+1];
    
    v[n-1]=tmp;
    

    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Grazie mille, quindi aggiungendo una variabile risolvo il problema?

    dicendo "Non e uno shift ma una rotazione" mi stai dicendo che ho sbagliato proprio algoritmo?

  4. #4
    Ok, niente, ho capito tutto.
    Grazie mille per il tuo tempo!

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.