Функция: подсчет количества сравнений чисел, выполняемых при операциях сортировки/поиска - C (СИ)
Формулировка задачи:
Подсчет количества сравнений чисел, выполняемых при операциях сортировки, многократного линейного и многократного бинарного поиска.Помогите написать функцию)
Решение задачи: «Функция: подсчет количества сравнений чисел, выполняемых при операциях сортировки/поиска»
textual
Листинг программы
#include <stdio.h> /* с(expr) - сравнение*/ #define c(x) compare(x, 0) /* cn() - возврат кол-ва сравнений */ #define cn() compare(0, 1) /* cr() - сброс счетчика сравнений */ #define cr() compare(0, -1) unsigned compare(int cmp, int op) { static unsigned countcmps = 0; if (!op) { countcmps++; return cmp; } if (op == -1) countcmps = 0; return countcmps; } int main() { /* 2 сравнения */ printf("1 > 0?: %d\n5 < 3?: %d\n5 || 3?: %d\n1 && 0?: %d\n", c(1 > 0), c(5 < 3), c(5 || 3), c(1 && 1)); /* кол-во сравнений */ printf("total compares: %d, then reset: cr()\n", cn()); cr(); /* сброс счетчика */ printf("total compares: %d\n", cn()); return 0; }
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций вывода
- Определяем макросы c(x) и cn() для подсчета сравнений в функции main()
- Определяем макрос cr() для сброса счетчика сравнений
- Создаем функцию compare(int cmp, int op) для подсчета количества сравнений
- В функции compare(int cmp, int op) используем статическую переменную countcmps для хранения количества сравнений
- Если op равно 0, увеличиваем countcmps на 1 и возвращаем cmp
- Если op равно -1, сбрасываем countcmps в 0 и возвращаем countcmps
- Возвращаем countcmps в случае всех остальных значений op
- В функции main() выполняем 4 сравнения с использованием макроса c(x) и выводим результаты
- Выводим общее количество сравнений с использованием макроса cn() и сбрасываем счетчик с помощью макроса cr()
- Выводим общее количество сравнений после сброса счетчика
- Завершаем программу с возвратом 0
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д