Не используя условный оператор, найти минимальный элемент линейного массива - C (СИ)
Формулировка задачи:
Подскажите пожалуйста как можно реализовать на Си задачу: "Не используя условный оператор, найти минимальный элемент линейного массива". Заранее Спасибо.
Решение задачи: «Не используя условный оператор, найти минимальный элемент линейного массива»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
double abs2(double x) { return sqrt(x*x); }
int get_res(double a,double b)
{
int c=(int)abs2(a-b)/(a-b);
int d[]={1,-1};
return d[(unsigned int) c>>31];
}
double max(double a,double b)
{
int c=get_res(a,b);
return (a+a*c)/2+(b-b*c)/2;
}
int main()
{
double a=1,b=12;
printf("%f\n",max(a,b));
return 0;
}
Объяснение кода листинга программы
В данном коде решается задача поиска минимального элемента в линейном массиве, но без использования условного оператора.
- В функции
abs2происходит вычисление абсолютного значения числаx. - В функции
get_resнаходится результат сравнения чиселaиbс помощью функцииabs2. Результат приводится к типуint, т.к. в данной задаче предполагается, что числаaиbимеют типdouble. - В функции
maxнаходится максимальное значение из двух чиселaиbс помощью функцииget_res. Затем вычисляется среднее арифметическое этих чисел с учетом коэффициентаc. - В функции
mainзадаются значения переменныхaиb, и выводится результат вызова функцииmax. Значения переменных: a=1b=12c=3(результат вычисленияabs2(a-b)/(a-b))d[] = {1,-1}(массив для хранения значений 1 и -1)max(a,b)(результат вызова функцииmaxс аргументамиaиb)