PDA

Visualizza la versione completa : [c] invertire array di interi


enrico999
24-04-2008, 17:05
Ciao, come faccio ad invertire un'array di interi?

Ad esempio, ho un vettore che contiene (1,2,3,4) e dopo averlo invertito deve contenere (4,3,2,1)

Sapete darmi una mano?


CIAO!

preben
24-04-2008, 17:08
Scrivi una funzione alla quale passi l'indirizzo del tuo array. All'interno della funzione, grazie ad una variabile temporanea, scambi i valori dell'array.
Ciao!

preben
24-04-2008, 17:22
Ad esempio:


#include <stdio.h>

void scambia(int *);

int main(){

int a[] = {1, 2, 3, 4};
int *pi, i;
pi = a;

scambia(pi);
for(i = 0; i < 4; ++i){
printf("%d\n", a[i]);
}
}

void scambia(int *p){
int temp;
int i;
for(i = 0; i < 2; ++i){
temp = p[0 + i];
p[i] = p[3 - i];
p[3 - i] = temp;
}
}


N.B: a questo punto lo devi ottimizzare per un vettore di lunghezza arbitraria. Provaci non difficile.
Ciao!

enrico999
24-04-2008, 17:27
da quello che ho capito, mi sembra che per invertire un array devo fare un ciclo for...

giusto??

enrico999
24-04-2008, 17:36
Allora nel mio esercizio ho:

int vettore[]= {1,2,3,4,5} ;
int dim = 5; // il vettore contiene dim elementi !
float risultato;

come faccio a fare un ciclo for che mi inverta l'ordine degli elementi del vettore?

mondobimbi
24-04-2008, 18:02
#include <stdio.h>
int main()
{
int vettore[]= {1,2,3,4,5} ;
int dim = 5; // il vettore contiene dim elementi !
// copi il vettore su se stesso
int i;
for (i=0; i < dim / 2; ++i) {
int tmp = vettore[i];
vettore[i]=vettore[dim-1-i];
vettore[dim-1-i]=tmp;
}
for (i=0; i < dim; ++i)
printf("%d\n", vettore[i]);

return (0);
}

XWolverineX
24-04-2008, 19:21
Non so se sia lecito farlo (nel senso se l'esercizio lo permette...)



#include <stdio.h>
int main()
{
int vettore[]= {1,2,3,4,5};
int contrario[5];
int dim = 5;

for (int i = dim,j = 0; i != 0; i--,j++)
contrario[j] = vettore[i];

return (0);
}


Se dim non fisso sostituisci l'array fisso con l'allocazione dinamica.

O fai, a modi sceriffo, uno strrev con un cast.

menphisx
25-04-2008, 06:06
#include <stdio.h>

int main(void){

int array[] = {1, 2, 3, 4, 5};
int i, j, m;

i = 0;
/*Calcola la dimensione*/
j = sizeof(array) / sizeof(int) - 1;
/*Calcola il punto medio*/
m = (i + j + 1) / 2;

printf("Size: %d\nMiddle: %d\n", j, m);

for(i = 0; i < m && j >= m; i++, j--){

/*XOR Swap*/
array[i] ^= array[j];
array[j] ^= array[i];
array[i] ^= array[j];

printf("Exchanged %d with %d\n", array[j], array[i]);

}

for(i = 0; i < (sizeof(array) / sizeof(int)); i++)
printf("%d\t", array[i]);

putchar('\n');

return 0;

}


Funziona con qualsiasi dimensione; non usa array di appoggio, ne variabili di appoggio.

mondobimbi
25-04-2008, 09:34
facciamogli del male :mame:


#include <stdio.h>

int main(void){

int array[] = {1, 2, 3, 4, 5, 6, 7};
int i, j;

/*Calcola la dimensione*/
j = sizeof(array) / sizeof(int) - 1;

for(i = 0; i < j; ++i, --j){

/*XOR Swap*/
array[i] ^= array[j] ^= array[i] ^= array[j];

printf("Exchanged %d with %d\n", array[j], array[i]);

}

for(i = 0; i < (sizeof(array) / sizeof(int)); i++)
printf("%d\t", array[i]);

putchar('\n');

return 0;

}

menphisx
26-04-2008, 05:36
All'inizio avevo pensato anchio a quello swap, poi l'ho spezzettato per far un favore a enrico999 :D

Loading