Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- // Для отладки
- int maxarray(void *, unsigned long, unsigned long, int (*)(void *, void *));
- int array[] = {
- 100,
- 200,
- 300,
- 400,
- 500
- };
- int compare(void *a, void *b)
- {
- int va = *(int *)a;
- int vb = *(int *)b;
- if (va == vb)
- return 0;
- return va < vb ? -1 : 1;
- }
- int main()
- {
- printf("%d\n", maxarray(array, 5, sizeof(int), compare));
- return 0;
- }
- // Решение
- #include <stdlib.h>
- #include <string.h>
- int maxarray(void *base, unsigned long nel, unsigned long width, int (*compare)(void *, void *))
- {
- void *max = base; // Максимальный элемент
- for (int i = 0; i <= (nel - 1) * width; i += width) { // Итерируемся по каждому элементу (с шагом в его ширину)
- if (compare(max, base + i) == -1) // Если текущий элемент больше
- max = base + i;
- }
- return (max - base) / width; // Разницу между указателями (в Б) делим на размер элемента
- }
Add Comment
Please, Sign In to add comment