сократить условие кода
я написал код чтобы вычислить функцию , но потом задался вопросом , как написать условие в коде одной строкой ? Может кто подсказать?
int main()
{
double x, y, f;
printf("Введите x: ");
scanf("%lf", &x);
printf("Введите y: ");
scanf("%lf", &y);
if ((x >= 0) && (x < 5))
printf("получилось %f ", f=2*x-y);
if (( x<0) && (y<0))
printf("получилось %f", f= pow(x,2));
else
printf("получилось %f", f = 5*y+1);
printf("Значение функции: %f", f);
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, если я нигде не ошибся (но вроде не должен...), то
double x, y;
printf("Введите x: ");
scanf("%lf", &x);
printf("Введите y: ");
scanf("%lf", &y);
int z = (x>=0)*(x<5)+2*(y<0)*(x<0);
double f = z*(2-z)*(2*x-y)+z*(z-1)*(x*x)/2+(z-1)*(z-2)*(5*y+1)/2;
printf("Значение функции: %f", f);
Но стало ли от этого понятнее и легче?...
Или даже
double f = ((x>=0)*(x<5)+2*(y<0)*(x<0))*(2-(x>=0)*(x<5)-2*(y<0)*(x<0))*(2*x-y)+((x>=0)*(x<5)+2*(y<0)*(x<0))*((x>=0)*(x<5)+2*(y<0)*(x<0)-1)*(x*x)/2+((x>=0)*(x<5)+2*(y<0)*(x<0)-1)*((x>=0)*(x<5)+2*(y<0)*(x<0)-2)*(5*y+1)/2;
Убедиться в эквивалентности вашему коду можно тут: https://ideone.com/pfIvea