@Evg
18849 / 6804 / 492
Регистрация: 30.03.2009
Сообщений: 19,077
|
18.07.2013, 18:20
|
|
Что-то мне кажется, что тут излишне сложные решения:
C #include <stdio.h>
/* Оригинальная функция (для проверки) */
int func1 (int a, int value1, int result1, int result2)
{
int b;
if (a == value1)
b = result1;
else
b = result2;
return b;
}
/* Переписанная функция */
int func2 (int a, int value1, int result1, int result2)
{
int b;
/* Операция !x в Си всегда будет возвращать либо 1 (если x == 0),
* либо 0 (если x !=0 ). Такой операцией мы легко вычислим признак,
* равны между собой две переменные, или нет */
int is_equal = ! (a - value1);
/* А если на основании признака нужно вернуть первое или второе
* значение, то это делается обычным взвешенным выражением,
* коэффициэнты которого будут либо (1, 0), либо (0, 1) */
b = is_equal * result1 + (1 - is_equal) * result2;
return b;
}
int main (void)
{
printf ("%d\n", func1 (5, 6, -1, 2));
printf ("%d\n", func1 (5, 5, -1, 2));
printf ("%d\n", func2 (5, 6, -1, 2));
printf ("%d\n", func2 (5, 5, -1, 2));
return 0;
} Добавлено через 41 секунду
Ой я дятел.... условие невнимательно прочитал
1
|