|
|
|
| Помогите пожалуйста!! вот смотрите есть код он как бы почти правильный только он подсчитывает неправильно
Пример надо вводить
0
0
2
-5
5
1
Он должен выводить 1.666
как этого добится помогите,очень вас прошу!! вот сам код
#include <iostream.h>
#include <conio.h>
void main (void)
{
float x,a,b,c,f,xk,dx,xn;
cin >> a >> b >> c >> xn >> xk >>dx;
for (x=xn;x<=xk;x=x+dx)
{ if(x<0&& b!=0)f=+a*(x*x)+b;
else if (x>0 && b==0) f=x-a/x-c;
else if (f=x/c);
cout<<"f="<<f;
}
getch();
} | |
|
|
|
|
|
|
|
для: jazzben
(26.09.2008 в 20:48)
| | >{ if(x<0&& b!=0)f=+a*(x*x)+b;
В этой строке =+ что означает += или = | |
|
|
|
|
|
|
|
для: jazzben
(26.09.2008 в 20:48)
| | Какова логика работы программы 1.666 никак не получается из того, что тут приведено... Как звучит исходная задача? | |
|
|
|
|
|
|
|
для: cheops
(27.09.2008 в 13:05)
| | Для данного вещественного a,b,c вычислить значения следующей функции f,на интервалах Xn до Xk шагом dx : (продолжение на картинке) вот:
http://pic.ipicture.ru/uploads/080922/maNcuT62PT.jpg | |
|
|
|
|
|
|
|
для: jazzben
(27.09.2008 в 16:32)
| | Слушайте, начал делать
#include <iostream.h>
#include <conio.h>
using namespace std;
int main (void)
{
float x,a,b,c,f,xk,dx,xn;
// 0 0 2 -5 5 1
cin >> a >> b >> c >> xn >> xk >>dx;
for (x = xn, f = 0; x <= xk; x=x+dx)
{
if(x < 0 && b != 0) f += 2 / (a*x + b);
else if (x > 0 && b == 0) f += (x - a) / (x - c);
else f += x/c;
}
cout << "f=" <<f;
getch();
} |
Но при c = 2 у вас же деление на ноль происходит... (2 - 0) / (2 - 2) = 2 / 0. Переменная c обязательно 2 должна быть равна? | |
|
|
|
|
|
|
|
для: cheops
(28.09.2008 в 11:08)
| | Накидал за 5 минут... Не судите строго, но вроде бы работает...
Если что не так, то говори, исправлю! xD
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
//#include <math.h>
#include <iostream>
using namespace std;
void main (void)
{
float x,a,b,c,f,xk,dx,xn;
a=0;b=0;c=2;xn=-5;xk=5;dx=1;
//cin >> a >> b >> c >> xn >> xk >>dx;
x=xn;
bool flag=false;
while(x<=xk)
{
flag=false;
if((x<0)&&(b!=0))
f=a*x*x+b;
else if((x>0)&&(b==0))
if((x-c)==0)
flag=true;
else
f=(x-a)/(x-c);
else
{
if(c==0)
flag=true;
else
f=x/c;
}
if(!flag)
cout<<"When x = "<<x<<"\tthen f = "<<f<<endl;
x+=dx;
}
getch();
}
|
| |
|
|
|
|
|
|
|
для: StarWorm
(17.11.2008 в 03:00)
| | формально, в принцыпе, все правильно, но с дробными числами нельзя обращаться, как Вы это сделали в программе | |
|
|
|
|
|
|
|
для: AlMag
(17.11.2008 в 15:52)
| | Что именно нельзя делать с числами типа float?! Может я конечно многого не зна... Но обычные арифметические операции и сравнения с ними производить можно! :)
Или я не прав??? | |
|
|
|
|
|
|
|
для: StarWorm
(17.11.2008 в 15:58)
| | ну я бы не рискнул писать или всегда используйте epsilon
| |
|
|
|
|
|
|
|
для: AlMag
(18.11.2008 в 00:52)
| | Вот с этим я соглашусь, т.к. при программировании в C++ сталкивался с такой проблемой, что при шаге дробного числа, например, 0.2 у него получался шаг .1999999999999999 и из-за этого потом при проверке не сходились данные!
У меня такой вопрос: с чем может быть связано данное несоответствие, хотя в отладчике на той строчке где "происходит шаг" обе переменные имеют правильное значение... | |
|
|
|
|
|
|
|
для: StarWorm
(18.11.2008 в 08:42)
| | да, с дробными числами надо очень осторожно, например a/100 это не тоже самое, что a/10/10 | |
|
|
|