PDA

Visualizza la versione completa : [C] Invertire valori di un array


Necsus
18-05-2007, 09:42
Dovrei fare un programma che inverta i valori di un array utilizzando sempre lo stesso array.Ho provato a fare in questo modo ma non riesce:


#include<stdio.h>
#include<stdlib.h>
void leggiArray(int*,int);
void invertiArray(int*,int);
int main()
{
int dim=0,array[dim];
printf("Inserisci lunghezza array: ");
scanf("%d",&dim);
leggiArray(array,dim);
invertiArray(array,dim);
system("pause");
return 0;
}
void leggiArray(int*array,int dim)
{
for(int i=0;i<dim;i++)
{
printf("Inserisci valore: ");
scanf("%d",&array[i]);
}

}
void invertiArray(int*array,int dim)
{
int i=dim,v;
for(int j=0;j<dim;j++)
{
i--;
v=array[j];
array[j]=array[i];
array[i]=v;
}
for(int cont=0;cont<dim;cont++)
printf("%d\n",array[cont]);
}


Grazie Necsus.

Whitecrowsrain
18-05-2007, 09:55
Prova a copiare l'array in uno ausiliario e poi fai scorrere questo all'indietro e copi i valori in quello originale che invece partirÓ con indice 0..

ecco come :



void invertiArray(int*array,int dim)
{
int aux[dim];
int i=dim,v,j=0;

//copiamo l'array in quello ausiliare
aux=array;

for(i;i>0;i--)
{
array[j]=aux[i];
j++;
}
}


P.S:
Scusa se ci sono errori ma il mio c risulta un pochino arrugginito dato che Ŕ un po' che non lo spolvero (ora uso prevalentemente DELPHI e PHP ) ma l'idea dovrebbe essere quella giusta! :fighet:

alka
18-05-2007, 09:56
Originariamente inviato da Necsus
Dovrei fare un programma che inverta i valori di un array utilizzando sempre lo stesso array.Ho provato a fare in questo modo ma non riesce
Manca sempre il linguaggio... :fagiano:

Whitecrowsrain
18-05-2007, 09:58
Originariamente inviato da alka
Manca sempre il linguaggio... :fagiano:

emm.. dammi almeno il tempo di modificare il post..non mi ero accorto di aver lasciato aperto il ta g [code]! :ciapet: :D

alka
18-05-2007, 09:59
Originariamente inviato da Whitecrowsrain
emm.. dammi almeno il tempo di modificare il post..non mi ero accorto di aver lasciato aperto il tag [...]
Non mi stavo riferendo a te. :berto:

Whitecrowsrain
18-05-2007, 10:02
Originariamente inviato da alka
Non mi stavo riferendo a te. :berto:

Scusa... ho letto male! :cry: cmq la mia era solo una battutina! :ignore: sta mattina sono di buon di buon umore!

bigmickey
18-05-2007, 10:40
Attento tu scrivi

int dim=0,array[dim]; (qui la dimensione Ŕ zero)

Il fatto che poi dim cambi non implica che cambi anche la dimensione dell' array.

Forse Ŕ meglio usare malloc

Whitecrowsrain
18-05-2007, 11:07
Originariamente inviato da bigmickey
Attento tu scrivi

int dim=0,array[dim]; (qui la dimensione Ŕ zero)

Il fatto che poi dim cambi non implica che cambi anche la dimensione dell' array.

Forse Ŕ meglio usare malloc

giÓ.. mi era sfuggita questa cosa perchŔ mi ero concentrato sull'inveritre i dati..

quindi sta attento, nella funzione che ti ho postato dim deve contenere la dimensione dell'array!

Alucard.Forum
18-05-2007, 12:36
Tralasciando l'inizio in cui l'utente inserisce gli int che mi vanno a riempire l'array...
Anziche' un array ausiliario utilizzerei un int ausiliario (int aux;)

Inversione:




...

for (i=0; i<dim/2; i++) {
aux=array[i];
array[i]=array[dim-i-1];
array[dim-i-1]=aux;
}

...

Necsus
18-05-2007, 15:35
Originariamente inviato da bigmickey
Attento tu scrivi

int dim=0,array[dim]; (qui la dimensione Ŕ zero)

Il fatto che poi dim cambi non implica che cambi anche la dimensione dell' array.

Forse Ŕ meglio usare malloc

Grazie, il problema era questo!

Loading