Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<math.h>
  5.  
  6. #define N 20
  7.  
  8. int universalMax(void *array,int arrSize, int elemSize, int (*cmp)(const void*, const void*));
  9.  
  10. int cmpForInt(const void* arg1, const void*arg2){
  11. if(*(int*)arg1 > *(int*)arg2)
  12. return 1;
  13. if(*(int*)arg1 < *(int*)arg2)
  14. return -1;
  15. return 0;
  16.  
  17. }
  18.  
  19. int cmpForChar(const void* arg1, const void* arg2){
  20. if(((char*)arg1)[0] == ((char*)arg2)[0])
  21. return 0;
  22. if(((char*)arg1)[0] > ((char *)arg2)[0])
  23. return 1;
  24. return -1;
  25. }
  26.  
  27. int cmpForDouble(const void* arg1, const void* arg2){
  28. double e=0.0001;
  29. if(fabs(*(double*)arg1 - *(double*)arg2) < e)
  30. return 0;
  31. if(*(double*)arg1 > *(double*)arg2)
  32. return 1;
  33. return -1;
  34. }
  35. int main() {
  36. int elemSize,i,el;
  37. scanf("%d",&elemSize);
  38. void *arr;
  39. arr=malloc(elemSize*N);
  40. for(i=0;i<N;i++){
  41. if(elemSize == sizeof(int)){
  42. scanf("%d",(int*)arr+i);
  43. }
  44. if(elemSize == sizeof(char)){
  45. scanf("%s",(char*)(arr+i));
  46. }
  47. if(elemSize == sizeof(double))
  48. scanf("%lf",(double*)arr+i);
  49. }
  50. switch(elemSize){
  51. case sizeof(int):
  52. printf("%d\n",universalMax(arr,N,elemSize,cmpForInt));
  53. break;
  54. case sizeof(char):
  55. printf("%d\n",universalMax(arr,N,elemSize,cmpForChar));
  56. break;
  57. case sizeof(double):
  58. printf("%d\n",universalMax(arr,N,elemSize,cmpForDouble));
  59. break;
  60. }
  61. return 0;
  62. }
  63.  
  64. int universalMax(void *array,int arrSize, int elemSize, int (*cmp)(const void*, const void*)){
  65. void *max=array;
  66. int i;
  67. for(i=0;i<arrSize;i++){
  68. if(cmp(array+i*elemSize,max) > 0)
  69. max=array+i*elemSize;
  70.  
  71. }
  72. return (max-array)/elemSize;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement