#include #include #include #include #define ARRAY_SIZE 10 ///////////////// Struct - Union - Enum Definitions ////////////////////////////// typedef enum _myTypes { t_integer = 0, t_double = 1, }MyTypes; typedef union _vals { double *dVals; int *iVals; }Vals; typedef union _result { double dResult; int iResult; }Result; typedef struct _myArray { MyTypes type; Vals vals; double (*GetMathAvr)(int elemNumber,Result res); Result (*GetSum)(void const *elems,int elemNumber); int (*GetMax)(void const *elems,int elemNumber); int (*GetMin)(void const *elems,int elemNumber); }MyArray; ///////////////////////// Function Definitions //////////////////////////////////// double GetMathAvrDouble(int elemNumber,Result res) { return (double)res.dResult / elemNumber; } double GetMathAvrInt(int elemNumber,Result res) { return (double)res.iResult / elemNumber; } Result GetSumDouble(void const *elems,int elemNumber) { double const *myElems = (double *)elems; int i; double sum = 0.0; Result res; for (i = 0; i < elemNumber; ++i) sum += myElems[i]; res.dResult = sum; return res; } Result GetSumInt(void const *elems,int elemNumber) { int const *myElems = (int *)elems; int i,sum = 0; Result res; for (i = 0; i < elemNumber; ++i) sum += myElems[i]; res.iResult = sum; return res; } int GetMaxInt(void const *elems,int elemNumber) { int const *myElems = (int *)elems; int i, maxIndex = 0; int max = myElems[0]; for (i = 1; i < elemNumber; ++i) { if (myElems[i] > max) { max = myElems[i]; maxIndex = i; } } return maxIndex; } int GetMinInt(void const *elems,int elemNumber) { int const *myElems = (int *)elems; int i, minIndex = 0; int min = myElems[0]; for (i = 1; i < elemNumber; ++i) { if (myElems[i] < min) { min = myElems[i]; minIndex = i; } } return minIndex; } int GetMaxDouble(void const *elems,int elemNumber) { double const *myElems = (double *)elems; int i, maxIndex = 0; double max = myElems[0]; for (i = 1; i < elemNumber; ++i) { if (myElems[i] > max) { max = myElems[i]; maxIndex = i; } } return maxIndex; } int GetMinDouble(void const *elems,int elemNumber) { double const *myElems = (double *)elems; int i, minIndex = 0; double min = myElems[0]; for (i = 1; i < elemNumber; ++i) { if (myElems[i] < min) { min = myElems[i]; minIndex = i; } } return minIndex; } void StartOperation(MyArray *array,void *myVals) { if (array->type == 0) //integer { array->vals.iVals = (int *)myVals; array->GetSum = GetSumInt; array->GetMin = GetMinInt; array->GetMax = GetMaxInt; array->GetMathAvr = GetMathAvrInt; } else if (array->type == 1) //double { array->vals.dVals = (double *)myVals; array->GetSum = GetSumDouble; array->GetMin = GetMinDouble; array->GetMax = GetMaxDouble; array->GetMathAvr = GetMathAvrDouble; } } //////////////////////// Main Function /////////////////////////////////// int main() { MyArray array; int opNum = 0,i; int myIntArray[] = {1,2,3,4,5,6,7,8,9,10}; double myDoubleArray[] = {1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10}; Result tmpRes; while (opNum < 1 || opNum > 3) { printf("Tamsayi islemleri icin : 1\n"); printf("Ondalikli sayi islemleri icin : 2\n"); printf("Programdan cikmak icin : 3\n"); printf("Giriniz..\n"); scanf("%d",&opNum); } if (opNum == 1) { array.type = t_integer; StartOperation(&array,(void *)myIntArray); printf("Dizinin Elemanlari :\n"); for (i = 0; i < ARRAY_SIZE; ++i) printf("%d\n",array.vals.iVals[i]); tmpRes = array.GetSum(array.vals.iVals,ARRAY_SIZE); printf("Toplam = %d\n",tmpRes.iResult); printf("En Kucuk Eleman = %d\n",array.vals.iVals[array.GetMin(array.vals.iVals,ARRAY_SIZE)]); printf("En Buyuk Eleman = %d\n",array.vals.iVals[array.GetMax(array.vals.iVals,ARRAY_SIZE)]); printf("Aritmetik Ortalama = %lf\n",array.GetMathAvr(ARRAY_SIZE,tmpRes)); } else if (opNum == 2) { array.type = t_double; StartOperation(&array,(void *)myDoubleArray); printf("Dizinin Elemanlari :\n"); for (i = 0; i < ARRAY_SIZE; ++i) printf("%lf\n",array.vals.dVals[i]); tmpRes = array.GetSum(array.vals.dVals,ARRAY_SIZE); printf("Toplam = %lf\n",tmpRes.dResult); printf("En Kucuk Eleman = %lf\n",array.vals.dVals[array.GetMin(array.vals.dVals,ARRAY_SIZE)]); printf("En Buyuk Eleman = %lf\n",array.vals.dVals[array.GetMax(array.vals.dVals,ARRAY_SIZE)]); printf("Aritmetik Ortalama = %lf\n",array.GetMathAvr(ARRAY_SIZE,tmpRes)); } else if (opNum == 3) { printf("Program Sonlaniyor...\n"); } return 0; }