Функция поиска максимального элемента в массиве - C (СИ) (70493)

Узнай цену своей работы

Формулировка задачи:

Составьте функцию maxarray, возвращающую индекс максимального элемента произвольного массива. Функция должна быть объявлена как
int maxarray(void *base, unsigned long nel, unsigned long width, 
        int (*compare)(void *a, void *b)) 
{ 
        ... 
}
Здесь параметр base означает указатель на начало массива, nel – количество элементов в массиве, width – размер каждого элемента массива в байтах, а compare – указатель на функцию сравнения двух элементов, работающую аналогично функции сравнения для библиотечной функции qsort.

Решение задачи: «Функция поиска максимального элемента в массиве»

textual
Листинг программы
int maxarray(void *base, unsigned long nel, unsigned long width, 
        int (*compare)(void *a, void *b)) 
{ int im = 0, i; char *p1, *p2;
    for(i=1; i<nel; i++) {
      p1 = (char *)base + im*width;
      p2 = (char *)base + i*width;
      if (compare(p1, p2) < 0) im = 1;
   }
   return im;. 
}

Объяснение кода листинга программы

  1. Создается функция maxarray, которая принимает в качестве аргументов указатель на начало массива (base), количество элементов в массиве (nel), ширину каждого элемента (width) и функцию сравнения двух элементов (compare).
  2. Внутри функции объявляются три переменные: im, i и p1. Переменная im инициализируется значением 0, а переменная i будет использоваться в цикле. Переменная p1 будет использоваться для хранения адреса первого элемента в текущей строке массива.
  3. Запускается цикл, который выполняется до тех пор, пока i меньше количества элементов в массиве (nel).
  4. Внутри цикла происходит вычисление адреса первого элемента в текущей строке массива (p1). Для этого к базовому адресу (base) добавляется произведение значения переменной im на ширину каждого элемента (width).
  5. Также внутри цикла происходит вычисление адреса второго элемента в текущей строке массива (p2). Для этого к базовому адресу (base) добавляется произведение значения переменной i на ширину каждого элемента (width).
  6. Затем вызывается функция сравнения двух элементов (compare), передавая в нее адреса p1 и p2. Если результат сравнения меньше 0, то это означает, что первый элемент больше второго, поэтому значение переменной im обновляется на 1.
  7. После завершения цикла, возвращается значение переменной im.
  8. Значение переменной im будет содержать номер максимального элемента в массиве.

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы