Ciao a tutti Ho questo codice (dato dal prof) e devo capire un pò come funziona. Solo che ho trovato un problema. Il codice è questo:
#include <stdio.h>
#define NMax 100
void p(int*,int*);
void d(int*,int);
void u(int*,int,int*,int,int*,int*);
int q(int*,int);
void main()
{int vet1[NMax],vet2[NMax],res[2*NMax];
int i,j,n1,n2,nr;
p(vet1,&n1);
p(vet2,&n2);
if(q(vet1,n1)&&q(vet2,n2))
{u(vet1,n1,vet2,n2,res,&nr);
d(res,nr);
}else printf("\nSituazione atipica");
}
void p(int*v,int*n)
{int i;
printf("\n");
do
{scanf("%d",n);
printf("\n");
}
while(*n>NMax);
for(i=0;i<*n;i++)
scanf("%d",v+i);
}
void d(int*v, int n)
{int i;
printf("\n");
for(i=0;i<n;i++)
printf("%d ",v[i]);
printf("\n");
}
void u(int a[], int na, int b[], int nb, int c[], int *n)
{int i,j,k;
i=j=k=0;
while (i<na &&j<nb)
if(k%2) c[k++]=a[i++];
else c[k++]=b[j++];
*n=k;
}
int q(int *v,int n)
{int i;
for(i=0;i<n-1;i++)
if(v[i]%2) return 0;
return 1;
}
Il problema che ho trovato è nella funzione q e in particolare quando la richiama nel main. Ipotizziamo che inserisco in input: 2 4 6 2 8 10, non capisco perchè in output mi da 8 4 10. Spiego meglio dove mi blocco: nella funzione q, if (v
%2) return 0, quindi se i numeri sono tutti pari mi restituisce 0 (falso). Torniamo all'if del main, se sia q(vet1,n1) che q(vet2,n2) restituiscono 0, la condizione dell'if non dovrebbe essere falsa e quindi stampare Situazione atipica?? Aiutatemi, davvero non capisco. So che quasi sicuramente sbaglio in qualcosa nel mio ragionamento, vorrei capire cosa Grazie