Toliak

pureC1

Oct 26th, 2018
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.22 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3.  
  4. // Для отладки
  5.  
  6. int maxarray(void *, unsigned long, unsigned long, int (*)(void *, void *));
  7.  
  8. int array[] = {
  9.     100,
  10.     200,
  11.     300,
  12.     400,
  13.     500
  14. };
  15.  
  16. int compare(void *a, void *b)
  17. {
  18.     int va = *(int *)a;
  19.     int vb = *(int *)b;
  20.     if (va == vb)
  21.         return 0;
  22.     return va < vb ? -1 : 1;
  23. }
  24.  
  25. int main()
  26. {
  27.     printf("%d\n", maxarray(array, 5, sizeof(int), compare));
  28.  
  29.     return 0;
  30. }
  31.  
  32.  
  33. // Решение
  34.  
  35. #include <stdlib.h>
  36. #include <string.h>
  37.  
  38. int maxarray(void *base, unsigned long nel, unsigned long width, int (*compare)(void *, void *))
  39. {
  40.     void *max = base;                                       // Максимальный элемент
  41.     for (int i = 0; i <= (nel - 1) * width; i += width) {   // Итерируемся по каждому элементу (с шагом в его ширину)
  42.         if (compare(max, base + i) == -1)                   // Если текущий элемент больше
  43.             max = base + i;                                
  44.     }
  45.     return (max - base) / width;                            // Разницу между указателями (в Б) делим на размер элемента
  46. }
Add Comment
Please, Sign In to add comment