Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [c] invertire array di interi

    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!

  2. #2
    Utente di HTML.it L'avatar di preben
    Registrato dal
    Mar 2008
    Messaggi
    78
    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!

  3. #3
    Utente di HTML.it L'avatar di preben
    Registrato dal
    Mar 2008
    Messaggi
    78
    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!

  4. #4
    da quello che ho capito, mi sembra che per invertire un array devo fare un ciclo for...

    giusto??

  5. #5
    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?

  6. #6
    codice:
    #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);
    }

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Non so se sia lecito farlo (nel senso se l'esercizio lo permette...)

    codice:
    #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.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    codice:
    #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.

  9. #9
    facciamogli del male
    codice:
    #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;
    
    }

  10. #10
    All'inizio avevo pensato anchio a quello swap, poi l'ho spezzettato per far un favore a enrico999

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.