[C] verificare alternanza tra elementi pari e dispari di un vettore e in caso affermativo scambiarli di posto

Chiar2
Salve a tutti, ho da proporvi un esercizio che non dovrebbe essere difficile, ma non so per quale motivo non riesco a farlo bene.
Prima di tutto, ecco la traccia:

Si scriva in linguaggio C un programma che dato in ingresso un vettore di numeri interi ed il suo riempimento esegua le seguenti operazioni:
1. Visualizza il vettore
2. Controlla se nel vettore gli elementi pari e dispari sono alternati
3. In caso affermativo scambia di posizione gli elementi pari con l’elemento successivo (dispari) se presente, in caso negativo il programma termina.
4. Il programma visualizza il vettore ottenuto.

Ad esempio:
- il vettore: 10 15 18 11 rispetta la proprietà di alternanza richiesta. Lo scambio modifica il vettore che diventa: 15 10 11 18.
- il vettore: 2 5 4 7 6 rispetta la proprietà di alternanza richiesta. Lo scambio modifica il vettore che diventa: 5 2 7 4 6.



Si considerino i casi particolari (vettore vuoto, vettore contenente un solo elemento, etc.)
Si strutturi il programma in sottoprogrammi. Si preveda un sottoprogramma per ciascuna delle seguenti funzionalità: inserimento del vettore, stampa del vettore, controllo dell’alternanza e modifica della sequenza degli elementi; lo studente piò, se lo ritiene opportuno, introdurre anche ulteriori sottoprogrammi.

Questo, invece, è ciò che ho provato a fare io:
Ho strutturato il codice in 3 file in un progetto, in uno c'è il main, in un altro la definizione delle funzioni e nel terzo la libreria, questo è il codice che riguarda la definizione delle funzioni:

void leggi_vettore(int v[], int n)
{
	int i;
	for(i=0; i<n; i++)
	{
		printf("Inserire l'elemento %d del vettore\n", i);
		scanf("%d", &v[i]);
		
	}
}
void stampa_vettore(int v[], int n)
{
	int i;
	for(i=0; i<n; i++)
	{
		printf("%d\t", v[i]);
	}
	printf("\n");
}

int check_alternanza(int v[], int n)
{
	int i;
	int j;
	int vero;
	for(i=0; i<n-1; i++)
	{
		j=i+1;
		vero=0;
		while(j<n-1 && !vero)
		{
		
		  if(v[i]%2==0 && v[j]%2==0)
		  vero=1;
		  else
		  {
		  
		  i++;
		  j++;
          }
		
	    }
	}

	return vero;
}
void scambia(int v[], int n)
{
	int i;
	int j;
	int tmp;
	
	for(i=0; i<n-1; i+=2)
	{
		for(j=i+1;j<n;j+=2)
		{
			
			
			
        	tmp=v[j];
	        v[j]=v[i];
	        v[i]=tmp;
	    }
    }
    stampa_vettore(v, n);
}


Mentre questo è il main:

int main(int argc, char *argv[]) {
	int n;
	int v[SIZE];
	int i;
	int vero;
	int a;
	int b;
	printf("Inserire la dimensione del vettore\n");
	scanf("%d", &n);
	leggi_vettore(v, n);
	stampa_vettore(v, n);
	vero=check_alternanza(v, n);
	if(vero==0)
	{
	printf("Vi è alternanza pari e dispari tra gli elementi\n");
	scambia(v,n);
    }
	else
	printf("Non vi è alternzanza pari e dispari tra gli elementi\n");
	return 0;
}


Non ho copiato anche la parte di include ecc ma l'ho messa. In ogni caso, il programma non fa ciò che dovrebbe fare, vorrei capire in cosa sbaglio, sono alle prime armi e vorrei davvero imparare, quindi se qualcuno può darmi una mano, grazie mille.

Risposte
kobeilprofeta
le ho guardate di sfuggita, ma non mi sembra giusta nè la check, nè lo scambio

farei qualcosa del genere
int check (int *v, int n)
{
 int primo=v[0]%2;
 int secondo;
 for (i=1;i<n;i++)
 {
   secondo=v[i]%2;
   if (primo==secondo)
      return 0;
   primo=secondo;
 }
 return 1;
}

Chiar2
grazie! ho corretto tutto, anche la funzione scambia, ora funziona bene!

kobeilprofeta
Prego

Hai capito come funziona (:)) la mia funzione di check?

Chiar2
Si!! Ti ringrazio davvero tanto :) poi dopo aver capito quella, non so come, mi è venuta anche l'illuminazione sulla funzione scambia!

kobeilprofeta
perfetto :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.