/* Questo programma contiene alcuni esempi di manipolazione di arrays unidimensionali mediante funzioni. La cosa piu' importante da ricordare (e di cui osservare l'uso) e' che il passaggio di un array unidimensionale ad una funzione corrisponde al passaggio del puntatore al primo elemento dell'array */ #include <stdio.h> int IntRand(void); /* QUESTA FUNZIONE GENERA INTERI UNIFORMEMENTE DISTRIBUITI FRA ZERO E 100 */ void DivideOddEven(int Data[100], int *DataOdd, int DataEven[], int); /* QUESTA FUNZIONE SEPARA GLI ELEMENTI DISPARI E PARI DEL VETTORE Data IN DUE VETTORI DISTINTI */ int CountOdd(int DataOdd[], int); /* QUESTA FUNZIONE CONTA IL NUMERO DI ELEMENTI DISPARI DEL VETTORE Data */ main(){ int N=5000, *i,k,NOdd,NEven; int Data[N], DataOdd[N],DataEven[N]; for(i=Data;i<Data+N;i++){ *i=IntRand(); } for(k=0;k<N;k++){ printf("Data[%i]=%i\n\n",k, Data[k]); } DivideOddEven(Data, DataOdd, DataEven, N); NOdd=CountOdd(Data, N); printf("Il numero di elementi dispari e' %d e questi elementi sono \n",NOdd); for(k=0;k<NOdd;k++){ printf("DataOdd[%d]=%d \n",k,*(DataOdd+k)); } NEven=N-NOdd; printf("Il numero di elementi pari e' %d e questi elementi sono \n",NEven); for(k=0;k<NEven;k++){ printf("DataEven[%d]=%d \n",k,*(DataEven+k)); } } int IntRand(void){ return lrand48()%(100+1); } void DivideOddEven(int Source[], int Odd[], int Even[], int LEN){ int *pSource; for(pSource=Source; pSource<Source+LEN; pSource++){ if(*pSource % 2){*Odd = *pSource; *Odd++;}else{ *Even=*pSource; *Even++;} } } int CountOdd(int Dat[], int M){ int *PDat; int NumOdd=0; for(PDat=Dat;PDat<Dat+M;PDat++){ if(*PDat%2){NumOdd++;} } return NumOdd; }