Invertire gli elementi di un vettore

di il
26 risposte

Invertire gli elementi di un vettore

Ciao! Ho bisogno d'aiuto su un'esercizio:
Descrivere un algoritmo codificato in linguaggio C/C++ che: definisce un vettore di nome x contenente 10 numeri interi; legge 10 valori da standard input e li inserisce nel vettore x. Inverte gli elementi del vettore x (ad esempio il vettore [1|2|3|4|5|6] deve diventare [6|5|4|3|2|1]).

Cosa sbaglio? Se non è tutto sbagliato!
#include <iostream>
using namespace std;

int main()
{
	int x[10],i, j; 
	for (i = 0; i < 10; i++)
	{
		cin >> x[i];
	}
	for (i = 0; i < 10; i++)
	{
		x[9 - i] = x[i];
	}
	for (i = 0; i < 10; i++)
	{
		cout << x[i];
	}
        system("pause");
		return 0;
}

26 Risposte

  • Re: Invertire gli elementi di un vettore

    La parte sbagliata è questa
    
       for (i = 0; i < 10; i++)
       {
          x[9 - i] = x[i];
       }
    
    Riflettici un po'
  • Re: Invertire gli elementi di un vettore

    oregon ha scritto:


    La parte sbagliata è questa
    
       for (i = 0; i < 10; i++)
       {
          x[9 - i] = x[i];
       }
    
    Riflettici un po'
    Sinceramente non ne ho proprio idea
  • Re: Invertire gli elementi di un vettore

    Per scambiare gli elementi dovresti avere una variabile ausiliaria da usare come "contenitore temporaneo". Inoltre ti basta interrompere gli scambi a metà del vettore, non arrivare "fino in fondo".
  • Re: Invertire gli elementi di un vettore

    giulia18395 ha scritto:



    Sinceramente non ne ho proprio idea
    Non stai SCAMBIANDO due valori. Cosa stai facendo all'interno della for?

    Scrivi su un foglio quello che stai facendo, passaggio per passaggio e capirai.

    Dovresti arrivarci da sola, altrimenti non impari.
  • Re: Invertire gli elementi di un vettore

    Immagina di avere dei cubetti di legno messi in fila e vuoi ribaltare l'ordine SENZA CAMBIARE la forma della fila: cioe', se togli un cubetto, lo devi sostituire con un'altro.

    USANDO una mano sola
  • Re: Invertire gli elementi di un vettore

    @ giulia18395

    Parti da un concetto più semplice e ragionaci sopra per qualche secondo...

    Immagina di avere due variabili di numeri interi: A e B, cioè la variabile di interi A, e la variabile di interi B.
    Ammettiamo che il contenuto della variabile A=5, e ammettiamo che il contenuto della variabile B=7.
    Come credi di scambiare il contenuto delle due variabili senza perderne il valore ? Cioè come pensi di mettere il contenuto della variabile A all'interno della variabile B e poi fare la stessa cosa tra B ed A ?

    quindi fare in modo che dopo lo scambio, A=7 e B=5...

    1 METODO
    -------------
    Devi naturalmente utilizzare una terza variabile C di comodo, quindi...
    1) inserisci il valore di A dentro C
    2) inserisci il valore di B dentro A
    3) inserisci il valore di C dentro B

    Ecco che per magia hai scambiato il valore contenuto all'interno delle due variabili A e B senza creare danni. La terza variabile C di comodo serve proprio per fare in modo che quando metti il contenuto di B dentro A non si perde per sempre il contenuto di A che altrimenti non potresti più mettere successivamente dentro B, perchè se metti direttamente il contenuto di B dentro A senza l'uso di C, cancelli immediatamente quello che era prima il contenuto di A proprio perchè lo hai sostituito con B.

    2 METODO
    -------------
    Oppure utilizzare una seconda soluzione leggermente più complessa, allungare il vetttore da 10 a 11 elementi e shiftare il tutto... ma meglio andare sul più semplice dei metodi... lascia stare questo secondo metodo

    Capito il ragionamento... i computer sono macchine totalmente stupide, e hanno bisogno anche delle più semplici regole per lavorare bene, regole di logica naturalmente.

    Ora estendi questo ragionamento al tuo vettore ed il gioco è fatto...
  • Re: Invertire gli elementi di un vettore

    ramcrack ha scritto:


    Devi naturalmente utilizzare una terza variabile C di comodo, quindi...
    Per la cronaca, visto che in questo caso stiamo parlando di variabili di tipo intero, si potrebbe anche fare a meno di utilizzare una terza variabile.

    Mi riferisco a qualcosa del genere:
    x = x + y;
    y = x - y;
    x = x - y;
  • Re: Invertire gli elementi di un vettore

    @ Nippolo

    Ti faccio i miei complimenti, sinceri... il tuo metodo è un'integrazione in più (validissima per altro...) al classico metodo che fa uso di una terza variabile e che viene ormai sempre spiegata nelle lezioni di base, che si tratti di scuola secondaria oppure università...

    Ne farò tesoro anch'io, da buon matematico e fisico mi piace come alternativa

    Augurandomi che la nostra utente giulia18395 stia leggendo e ne faccia tesoro della discussione, anche perchè su questo forum noto spessissimo che tutti chiedono e chiedono, ma poi quando si aiuta qualcuno, nessuno poi ringrazia...
    Spariscono quasi tutti come per magia... pufff !!!
  • Re: Invertire gli elementi di un vettore

    Ti faccio i miei complimenti, sinceri... il tuo metodo è un'integrazione in più (validissima per altro...) al classico metodo che fa uso di una terza variabile
    Anche se credo sia più lento rispetto al metodo tradizionale, inoltre introduce un rischio di overflow!
    ... anche perchè su questo forum noto spessissimo che tutti chiedono e chiedono, ma poi quando si aiuta qualcuno, nessuno poi ringrazia...
    Spariscono quasi tutti come per magia... pufff !!!
    Non è tanto il fatto che non ringraziano il problema, quanto invece il fatto che pochissimi ti danno la soddisfazione di stabilire un confronto/discussione su argomenti tecnici/teorici.
  • Re: Invertire gli elementi di un vettore

    Se vi può interessare (e stimolare) lo scambio si può fare con l'operatore xor

    x = x ^ y
    y = x ^ y
    x = x ^ y
  • Re: Invertire gli elementi di un vettore

    ramcrack ha scritto:


    @ Nippolo

    Ti faccio i miei complimenti, sinceri... il tuo metodo è un'integrazione in più (validissima per altro...) al classico metodo che fa uso di una terza variabile e che viene ormai sempre spiegata nelle lezioni di base, che si tratti di scuola secondaria oppure università...

    Ne farò tesoro anch'io, da buon matematico e fisico mi piace come alternativa

    Augurandomi che la nostra utente giulia18395 stia leggendo e ne faccia tesoro della discussione, anche perchè su questo forum noto spessissimo che tutti chiedono e chiedono, ma poi quando si aiuta qualcuno, nessuno poi ringrazia...
    Spariscono quasi tutti come per magia... pufff !!!
    Tranquillo avrei ringraziato sicuramente, non ho scritto solo perchè prima vorrei provare a farlo con i vostri consigli, ma per cause personali purtroppo non ho molto tempo da dedicare alla programmazione in questo periodo... più tardi ci riprovo e vi faccio sapere!!
  • Re: Invertire gli elementi di un vettore

    oregon ha scritto:


    Se vi può interessare (e stimolare) lo scambio si può fare con l'operatore xor

    x = x ^ y
    y = x ^ y
    x = x ^ y
  • Re: Invertire gli elementi di un vettore

    giulia18395 ha scritto:


    più tardi ci riprovo e vi faccio sapere!!
    Bene... facci sapere
  • Re: Invertire gli elementi di un vettore

    ramcrack ha scritto:


    giulia18395 ha scritto:


    più tardi ci riprovo e vi faccio sapere!!
    Bene... facci sapere
    mentre lo stavo facendo mi sono accorta che non mi usciva neanche questo, ma credo che in realtà siao molto simili (3. Dichiarare un vettore x a 10 interi e y di 10 interi, riempire x e copiare il vettore x nel vettore y al contrario)
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int x[10], i, y[10], j;
    	cout << "riempire il vettore x: ";
    	for (i = 0; i < 10; i++)
    	{
    		cin >> x[i];
    	}
    	for (i = 0; i < 10;i--)
    	{
    		y[j] = x[i];
    	}
    	cout << "vettore y: " << y[i];
    
    	system("pause");
    	return 0;
    }
Devi accedere o registrarti per scrivere nel forum
26 risposte