[C] Come invertire valori di un array

di il
15 risposte

[C] Come invertire valori di un array

Salve ho un problema con l'esercizio seguente, mi potreste dare qualche suggerimento su come concluderlo ?
Il testo mi chiede di
-dichiarare un array di 5 elementi
-chiedere all'utente dei valori interi che dovrò memorizzare nell'array
-stampare l'array
-invertire i suoi elementi
-stampare gli elementi invertiti.
Procedo in questo modo

#include<stdio.h>
#define n 5
int main ()
{
	int A[n];
	int i;
	for (i=0;i<n;i++)
	{
	printf("immetti l'elemento %d del vettore A", i);
	scanf("%d", &A[i]);
    }
    for (i=0;i<n;i++)
    {
    	printf ("%d\n", A[i]);
	}

	getchar();
}
Le mie difficoltà inziano quando devo invertire gli elementi dell'array. Ho letto che devo utilizzare una variabile di appoggio e poi un ciclo for, ma non saprei da dove iniziare. Grazie anticipatamente per l'aiuto.

15 Risposte

  • Re: [C] Come invertire valori di un array

    Ciao, prima di tutto le costanti (nel tuo caso n) abituati a scriverle in maiuscolo (quindi N); dopodichè, comincia a pensare per funzioni: perchè non predisponi una funzione che esegue l'inserimento e una che effettua la stampa? La funzione di stampa, quantomeno, ti può essere molto utile perchè puoi richiamarla anche per "debug".
    Infine, venendo al punto, inizia scrivendo una funzione che effettua l'inversione per un array con N=3.
  • Re: [C] Come invertire valori di un array

    candaluar ha scritto:


    Ciao, prima di tutto le costanti (nel tuo caso n) abituati a scriverle in maiuscolo (quindi N); dopodichè, comincia a pensare per funzioni: perchè non predisponi una funzione che esegue l'inserimento e una che effettua la stampa? La funzione di stampa, quantomeno, ti può essere molto utile perchè puoi richiamarla anche per "debug".
    Infine, venendo al punto, inizia scrivendo una funzione che effettua l'inversione per un array con N=3.
    Grazie per la risposta. Ma non mi è chiara, io per il momento ho studiato appena quello che sta scritto nel codice postato, quindi gli array, il costrutto for(e il while) e l'if e switch. Quindi non ho capito cosa intendi con una funzione ch effettua l'inversione per un array N=3. Date le mie conoscenze informatiche presuppongo che l'esercizio si debba risolvere con un ciclo for ma non so come impostarlo. Come scritto sono appena agli inizi di programmazione . Nel caso se hai qualche consiglio anche per i testi per approfondire te ne sarei grato (per il momento sto utilizzando Programmazione in C di Kim N. King)
    Terrò a mente il tuo suggerimento per le costanti.
  • Re: [C] Come invertire valori di un array

    Allora non usare funzioni e scrivi tutto nel main.

    Suggerimento : scambia il primo elemento con l'ultimo (copi il primo in una variabile temporanea, l'ultimo nel primo e la variabile nell'ultimao). Ripeti per il secondo e il penultimo. E così via, con un ciclo for che parta dal primo e si fermi a metà array.
  • Re: [C] Come invertire valori di un array

    oregon ha scritto:


    Allora non usare funzioni e scrivi tutto nel main.

    Suggerimento : scambia il primo elemento con l'ultimo (copi il primo in una variabile temporanea, l'ultimo nel primo e la variabile nell'ultimao). Ripeti per il secondo e il penultimo. E così via, con un ciclo for che parta dal primo e si fermi a metà array.
    Oregon ma scambiare il primo con l'ultimo con una variabile temporamena lo devo fare con il ciclo for ? Oppure devo scrivere qualcosa del tipo
    temp=A[4];
    A[4]=A[0];
    A[0]=temp;
  • Re: [C] Come invertire valori di un array

    Con il ciclo for .... infatti ti parlo di un ciclo for che va dal primo a metà array ...
  • Re: [C] Come invertire valori di un array

    oregon ha scritto:


    Con il ciclo for .... infatti ti parlo di un ciclo for che va dal primo a metà array ...
    Ho provato ma mi stampa lo stesso array
    Ecco il codice
    
    for(i=0;i<n/2;i++)
    	{
        temp=A[i];
    	A[i]=A[y];
    	A[y]=temp;
    	y--;
    	}
    	for (i=0;i<n;i++)
    	{
    	printf("%d\n", i);
        }
        
  • Re: [C] Come invertire valori di un array

    Qual è il valore di partenza di y ?
  • Re: [C] Come invertire valori di un array

    Il valore di partenza è il valore della quarta componente dell'array A quindi y=A[4], giusto ? Dopo aver letto il tuo messaggio l'ho inserito prima del ciclo for ma non è cambiato niente
  • Re: [C] Come invertire valori di un array

    No.

    y deve partire dalla lunghezza-1 dell'array, nel tuo caso N-1
  • Re: [C] Come invertire valori di un array

    oregon ha scritto:


    No.

    y deve partire dalla lunghezza-1 dell'array, nel tuo caso N-1
    ok, e lo dichiaro prima del ciclo for ?
  • Re: [C] Come invertire valori di un array

    Mi sembra ovvio ... se lo metti nel ciclo o alla fine del ciclo secondo te è uguale?

    In ogni caso, rifletti, prova, controlla ... non attendere ogni suggerimento ...
  • Re: [C] Come invertire valori di un array

    oregon ha scritto:


    Mi sembra ovvio ... se lo metti nel ciclo o alla fine del ciclo secondo te è uguale?

    In ogni caso, rifletti, prova, controlla ... non attendere ogni suggerimento ...
    Anche se può non sembrarti non aspetto ogni suggerimento, sono due giorni che sto su questo problemino e ho deciso di registrarmi e scrivere su questo forum è solo dopo ore passate davanti allo schermo.
    Per il momento ho scritto questo codice ma continua a non funzionare. A schermo mi appare due volte l'array, ma il secondo non è invertito.
    #include<stdio.h>
    int main ()
    #define n 5
    {
    	int A[n];
    	int i, temp, y;
    	for (i=0;i<n;i++)
    	{
    	printf("immetti l'elemento %d del vettore A", i);
    	scanf("%d", &A[i]);
        }
        for (i=0;i<n;i++)
        {
        	printf ("%d\n", A[i]);
    	}
    	y=n-1;
    		for(i=0;i<n/2;i++)
    	{
        temp=A[i];
    	A[i]=A[y];
    	A[y]=temp;
    		y--;
    	}
    	for (i=0;i<n;i++)
    	{
    	printf("%d\n", i);
        }
    getchar();
    }
  • Re: [C] Come invertire valori di un array

    ...sicuro che nel printf( ) del seguente ciclo "for" vada scritta la variabile "i" così solitaria ? ...non manca forse qualcos'altro ?

    Quasar3.14 ha scritto:


    
    	for (i=0;i<n;i++)
    	{
    	printf("%d\n", i);
        }
    
    }
  • Re: [C] Come invertire valori di un array

    vuott ha scritto:


    ...sicuro che nel printf( ) del seguente ciclo "for" vada scritta la variabile "i" così solitaria ? ...non manca forse qualcos'altro ?

    Quasar3.14 ha scritto:


    
    	for (i=0;i<n;i++)
    	{
    	printf("%d\n", i);
        }
    
    }
    Grazie ragazzi, finalmente il programma funziona. Ovviamente sostituendo alla "i" A.
    Grazie ancora per l'aiuto.
Devi accedere o registrarti per scrivere nel forum
15 risposte