10.01.2018, 16:12
общий
это ответ
Здравствуйте, PavelKotik!
Я бы сделал так:
[code h=200]#include<math.h>
#include<conio.h>
#include<stdio.h>
bool fun(float x, float a, float b, float c, float *F)
{
if (c<0 && x!=0)
{
*F = (-a*x-c);
return true;
}
else if (c>0 && x==0)
{
*F = ((x-a)/(-c));
return true;
}
else if (fabs(x-a) < 0.0001)
return false;
else
{
*F = ((b*x)/(x-a));
return true;
}
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
float x,F,dx,x1,x2,a,b,c;
printf("Vvedite X-nachalnoe: "); scanf("%f",&x1);
printf("Vvedite X-konechnoe: "); scanf("%f",&x2);
printf("Vvedite dx: "); scanf("%f",&dx);
printf("Vvedite a: "); scanf("%f",&a);
printf("Vvedite b: "); scanf("%f",&b);
printf("Vvedite c: "); scanf("%f",&c);
for (x=x1; x<=x2; x+=dx)
{
if (fun(x,a,b,c,&F))
printf("\n x=%5.2f F=%5.2f ", x, F);
else
printf("\n x=%5.2f Error",x);
}
getch();
return 0;
}
[/code]
Несколько замечаний:
1) Т.к. возможен вариант недопустимости аргументов, то пришлось возвращать признак корректности параметров.
А результат возвращать по указателю на переменную.
2) Сравнение двух вещественных чисел на совпадение надо делать только на сравнение модуля их разности с маленьким числом!
3) Ну и заменил цикл while на for. Он тут более к месту.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен