Programma inverte solo numeri pari in un array

di Anonimizzato29943 il
9 risposte
Buonasera, sono bloccato in questo esercizio in cui dovrei la funzione "int invertipari (int v[], int dim)" solo che non riesco a venirci a capo, quella che ho scritto è una mia idea però non so se sia corretta...
La funzione riceve come argomenti un vettore di interi e la sua dimensione. La funzione deve invertire il contenuto del vettore limitatamente ai numeri pari (cioè scambiando le coppie di elementi in posizioni simmetriche solo se entrambi hanno valore pari). Inoltre, la funzione deve restituire il numero di scambi effettuati.

Grazie in anticipo
#include <stdio.h>

#include <stdlib.h>

void swap_int (int *pa, int *pb);

int invertipari (int v[], int dim)

{

   int cnt = 0;

   int i, j;

   int *pa = 0, *pb = 0;



   for (i=0; i< (dim/2); i++)

   {

      if (v[i] % 2 == 0)

      {

         // il numero è pari

         *pa = v[i];

         cnt++;

      }

   }

   for (j=(dim-1); j >= (dim/2); j-- )

   {

      if (v[j] %2 == 0)

      {

         // il numero è pari

         *pb = v[j];

      }

   }

   swap_int (pa, pb);

return cnt;

}



/* NON MODIFICARE NULLA NELLA PARTE CHE SEGUE */


#define DIMMAX 1000



int invertipari (int v[], int dim);

int leggi_vettore (int vettore[], int dim_max);

void stampa_vettore (int vettore[], int dim);





int main()

{

   int v[DIMMAX];

   int dim;



   /* leggi il vettore */

   dim = leggi_vettore (v, DIMMAX);



   /* stampa il vettore originale */

   printf ("vettore originale:\n");

   stampa_vettore (v, dim);



   /* inverti il vettore */

   printf ("numero di elementi invertiti: %d\n", invertipari (v, dim));



   /* stampa il vettore */

   printf ("vettore con inversioni:\n");

   stampa_vettore (v, dim);



   return EXIT_SUCCESS;

}





int leggi_vettore (int vettore[], int dim_max)

{

   int n, i;



   // printf ("inserisci il numero di valori da scrivere nel vettore: ");

   scanf ("%d", &n);

   if (n > dim_max)

   {

      printf ("attenzione: il valore massimo consentito e` %d, il numero di valori è stato ridotto\n", dim_max);

      n = dim_max;

   }



   for (i = 0; i < n; i++)

   {

      // printf ("v[%d] = ", i);

      scanf ("%d", &vettore[i]);  /* NOTA: vettore e` un indirizzo, vettore[i] e` un intero */

   }



   return n;   /* NOTA: i e` arrivato allo stesso valore */

}





void stampa_vettore (int vettore[], int dim)

{

   int i;



   for (i = 0; i < dim; i++)

   {

      printf("v[%d] = %d\n", i, vettore[i]);

   }



   return;

}





void swap_int (int *pa, int *pb)

{

   int t;



   t = *pa;

   *pa = *pb;

   *pb = t;



   return;

}



9 Risposte

  • Posizioni simmetriche rispetto a cosa? Se il vettore è {2, 4, 6, 8, 1} cosa ti aspetti che succeda?

    P.s.: fai una funzione unica per l'inversione. Spezzettare il codice in tantissime funzioni ne rallenta l'esecuzione (cosa che sicuramente non noterai negli esercizi di base).
  • Problema simile alla classica inversione di stringa

    Non vedo grandi difficoltà
    Un minimo di ricerca....


    Per Weierstrass:
    Non credo che sia stato lo OP a spezzettare

    Secondo me dopo la scritta : non modificare nulla ....
    C'è semplicemente i testo base dell'esercizio
  • Però continua a darmi core dumping creati non capisco il perchè
  • Perché il programma va ad accedere ad aree non sue della memoria


    Ma ti compila sta roba?
    Cosa che è la swap_int()?
  • Ok alla fine ho risposto era un problema nella scrittura di swap dichiaravo dei puntatori che non erano necessari
  • *risolto
  • E va?

    Il programma del primo post?
  • Si si quello del primo post e funziona
  • Provato?

    Con che sequenza?

    E cosa è uscito?
Devi accedere o registrarti per scrivere nel forum
9 risposte