Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define N 10
  5. #define M 300
  6. #define eps 0.000001
  7.  
  8. int compInt(const void *element1, const void*element2)
  9. {
  10. return *(int*)element1 - *(int*)element2;
  11. }
  12. int compChar(const void *element1, const void*element2)
  13. {
  14. return (*(char*)element1 - *(char*)element2);
  15. }
  16. int compDouble(const void *element1, const void*element2)
  17. {
  18. if ((*(double*)element1)-(*(double*)element2)>eps)
  19. return 1;
  20. else if ((*(double*)element1)-(*(double*)element2)<eps)
  21. return -1;
  22. else
  23. return 0;
  24. }
  25. int compStr (const void*element1, const void* element2)
  26. {
  27. return strcmp(*(char**)element1, *(char**)element2);
  28. }
  29.  
  30. void swapChar(const void*element1, const void* element2)
  31. {
  32. char tmp;
  33. tmp = *(char*)element1;
  34. *(char*)element1 =*(char*) element2;
  35. *(char*)element2 = tmp;
  36. }
  37.  
  38. void swapInt(const void*element1, const void* element2)
  39. {
  40. int tmp;
  41. tmp = *(int*)element1;
  42. *(int*)element1 =*(int*) element2;
  43. *(int*)element2 = tmp;
  44. }
  45.  
  46. void swapDouble(const void*element1, const void* element2)
  47. {
  48. double tmp;
  49. tmp = *(double*)element1;
  50. *(double*)element1 =*(double*) element2;
  51. *(double*)element2 = tmp;
  52. }
  53. void swapStr(const void*element1, const void* element2)
  54. {
  55. char *tmp = *(char **)element1;
  56. *(char **)element1 = *(char **)element2;
  57. *(char **)element2 = tmp;
  58. }
  59.  
  60. int main()
  61. {
  62. int size_of_element, i = 0, j = 0, flag;
  63. scanf("%d", &flag);
  64. scanf("%d", &size_of_element);
  65. getchar();
  66. void * arr;
  67. int(*cmp)(const void*, const void*);
  68. void(*swap)(const void*, const void *);
  69. arr = (void*) malloc(N*size_of_element);
  70. switch (size_of_element)
  71. {
  72. case 1:
  73. for (i = 0; i < N; i++)
  74. scanf(" %c", &((char*)arr)[i]);
  75. cmp = compChar;
  76. swap = swapChar;
  77. break;
  78. case 4:
  79. if(flag) //int
  80. {
  81. for (i = 0; i < N; i++)
  82. scanf("%d", &((int*)arr)[i]);
  83. cmp = compInt;
  84. swap = swapInt;
  85. }
  86. else //str(char *)
  87. {
  88. for (i = 0; i < N; i++)
  89. {
  90. ((char **)arr)[i] = (char *)malloc(M);
  91. fgets(((char **)arr)[i], M, stdin);
  92. }
  93. cmp = compStr;
  94. swap = swapStr;
  95. }
  96. break;
  97. case 8:
  98. for (i = 0; i < N; i++)
  99. scanf("%lf", &((double*)arr)[i]);
  100. cmp = compDouble;
  101. swap = swapDouble;
  102. break;
  103. }
  104. for (i = 0; i < N - 1; i++)
  105. {
  106. for (j = 0; j < N - 1 - i; j++)
  107. {
  108. if (cmp(arr + j*size_of_element, arr + (j + 1)*size_of_element) > 0)
  109. swap(arr + j*size_of_element, arr + (j + 1)*size_of_element);
  110. }
  111. }
  112. printf("\n");
  113. switch (size_of_element)
  114. {
  115. case 1:
  116. for (i = 0; i < N; i++)
  117. printf("%c ", ((char*)arr)[i]);
  118. break;
  119. case 4:
  120. if (flag)
  121. for (i = 0; i < N; i++)
  122. printf("%d ", ((int*)arr)[i]);
  123. else
  124. for (i = 0; i < N; i++)
  125. printf("%s", ((char **)arr)[i]);
  126. break;
  127. case 8:
  128. for (i = 0; i < N; i++)
  129. printf("%lf ", ((double*)arr)[i]);
  130. break;
  131. }
  132. printf("\n");
  133. return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement