Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<math.h>
- #define N 20
- int universalMax(void *array,int arrSize, int elemSize, int (*cmp)(const void*, const void*));
- int cmpForInt(const void* arg1, const void*arg2){
- if(*(int*)arg1 > *(int*)arg2)
- return 1;
- if(*(int*)arg1 < *(int*)arg2)
- return -1;
- return 0;
- }
- int cmpForChar(const void* arg1, const void* arg2){
- if(((char*)arg1)[0] == ((char*)arg2)[0])
- return 0;
- if(((char*)arg1)[0] > ((char *)arg2)[0])
- return 1;
- return -1;
- }
- int cmpForDouble(const void* arg1, const void* arg2){
- double e=0.0001;
- if(fabs(*(double*)arg1 - *(double*)arg2) < e)
- return 0;
- if(*(double*)arg1 > *(double*)arg2)
- return 1;
- return -1;
- }
- int main() {
- int elemSize,i,el;
- scanf("%d",&elemSize);
- void *arr;
- arr=malloc(elemSize*N);
- for(i=0;i<N;i++){
- if(elemSize == sizeof(int)){
- scanf("%d",(int*)arr+i);
- }
- if(elemSize == sizeof(char)){
- scanf("%s",(char*)(arr+i));
- }
- if(elemSize == sizeof(double))
- scanf("%lf",(double*)arr+i);
- }
- switch(elemSize){
- case sizeof(int):
- printf("%d\n",universalMax(arr,N,elemSize,cmpForInt));
- break;
- case sizeof(char):
- printf("%d\n",universalMax(arr,N,elemSize,cmpForChar));
- break;
- case sizeof(double):
- printf("%d\n",universalMax(arr,N,elemSize,cmpForDouble));
- break;
- }
- return 0;
- }
- int universalMax(void *array,int arrSize, int elemSize, int (*cmp)(const void*, const void*)){
- void *max=array;
- int i;
- for(i=0;i<arrSize;i++){
- if(cmp(array+i*elemSize,max) > 0)
- max=array+i*elemSize;
- }
- return (max-array)/elemSize;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement