Консультация № 192353
10.01.2018, 13:11
0.00 руб.
0 3 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Здравствуйте, помогите пожалуйста, мне нужно оформить фрагмент программы, где вычисляется F(x) в виде функции. Подскажите пожалуйста, что нужно сделать?



Приложение:
#include<math.h>
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[]){
float F,x,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);
x=x1;
while (x<=x2)
{
if (c<0 && x!=0) {F=-a*x-c; cout<<"F="<<F;}
else if(c>0 && x==0) {F=(x-a)/(-c); cout<<"F="<<F;}
else
if (x==a) cout <<"Error";
else {F=(b*x)/(x-a); cout<<"F="<<F;}

printf("\n x=%5.2f F=%5.2f ",x,F);
x+=dx;

}

getch();


return 0;
}

Обсуждение

давно
Посетитель
7438
7205
10.01.2018, 16:04
общий
Адресаты:
Я бы сделал так:
[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. Он тут более к месту.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401557
5
10.01.2018, 16:05
общий
Цитата: Лысков Игорь Витальевич
Спасибо вам большое
давно
Посетитель
7438
7205
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. Он тут более к месту.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа