Форум: Форум C++Разное
Новые темы: 00
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка в коде программы!!!
 
 автор: jazzben   (26.09.2008 в 20:48)   письмо автору
 
 

Помогите пожалуйста!! вот смотрите есть код он как бы почти правильный только он подсчитывает неправильно
Пример надо вводить
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();
}

  Ответить  
 
 автор: cheops   (27.09.2008 в 13:03)   письмо автору
 
   для: jazzben   (26.09.2008 в 20:48)
 

>{ if(x<0&& b!=0)f=+a*(x*x)+b;
В этой строке =+ что означает += или =

  Ответить  
 
 автор: cheops   (27.09.2008 в 13:05)   письмо автору
 
   для: jazzben   (26.09.2008 в 20:48)
 

Какова логика работы программы 1.666 никак не получается из того, что тут приведено... Как звучит исходная задача?

  Ответить  
 
 автор: jazzben   (27.09.2008 в 16:32)   письмо автору
 
   для: cheops   (27.09.2008 в 13:05)
 

Для данного вещественного a,b,c вычислить значения следующей функции f,на интервалах Xn до Xk шагом dx : (продолжение на картинке) вот:

http://pic.ipicture.ru/uploads/080922/maNcuT62PT.jpg

  Ответить  
 
 автор: cheops   (28.09.2008 в 11:08)   письмо автору
 
   для: 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 должна быть равна?

  Ответить  
 
 автор: StarWorm   (17.11.2008 в 03:00)   письмо автору
 
   для: 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();
}

  Ответить  
 
 автор: AlMag   (17.11.2008 в 15:52)   письмо автору
 
   для: StarWorm   (17.11.2008 в 03:00)
 

формально, в принцыпе, все правильно, но с дробными числами нельзя обращаться, как Вы это сделали в программе

  Ответить  
 
 автор: StarWorm   (17.11.2008 в 15:58)   письмо автору
 
   для: AlMag   (17.11.2008 в 15:52)
 

Что именно нельзя делать с числами типа float?! Может я конечно многого не зна... Но обычные арифметические операции и сравнения с ними производить можно! :)
Или я не прав???

  Ответить  
 
 автор: AlMag   (18.11.2008 в 00:52)   письмо автору
 
   для: StarWorm   (17.11.2008 в 15:58)
 

ну я бы не рискнул писать
 if (x==a) 
или
 if (x==0) 
всегда используйте epsilon
 if (fabs(x-a)<eps) 

  Ответить  
 
 автор: StarWorm   (18.11.2008 в 08:42)   письмо автору
 
   для: AlMag   (18.11.2008 в 00:52)
 

Вот с этим я соглашусь, т.к. при программировании в C++ сталкивался с такой проблемой, что при шаге дробного числа, например, 0.2 у него получался шаг .1999999999999999 и из-за этого потом при проверке не сходились данные!
У меня такой вопрос: с чем может быть связано данное несоответствие, хотя в отладчике на той строчке где "происходит шаг" обе переменные имеют правильное значение...

  Ответить  
 
 автор: AlMag   (18.11.2008 в 14:26)   письмо автору
 
   для: StarWorm   (18.11.2008 в 08:42)
 

да, с дробными числами надо очень осторожно, например a/100 это не тоже самое, что a/10/10

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования