programa muestra resultado que no deberia

Iniciado por ivanel93, 22 Septiembre 2012, 06:02 AM

0 Miembros y 1 Visitante están viendo este tema.

ivanel93

hola me gustaría recibir ayuda por parte de el equipo del foro tengo un progrma que calcula la ley de columb y al dividir entre cero se indetermina y se supone que me muestra un rotulo diciendo que no se puede calcular y el resultado debe dar cero, pero en este caso no lo hace me muestra un resultado , que no deberia de salir me pueden ayudar diciendo que esta mal, por que la profesora solo me confundio



Código (cpp) [Seleccionar]
#include<iostream.h>
#include<conio.h>
#include<math.h>

class coul
{
  protected:
   float q1,q2,r,d;
  public:
   void lee();
   void calc();
   void imp();
};

void coul::lee()
{
  cout<<"\n Para el calculo de la ley de Coulumb de Q1, Q2 y R"<<endl;
  cout<<"\n Da Q1 = ";
  cin>>q1;
  cout<<"\n Da Q2 = ";
  cin>>q2;
  cout<<"\n Da R = ";
  cin>>r;
}

void coul::calc()
{
  float k=9E9;
  if(r!=0)
   d=(k*(q1*q2))/pow(r,2);
  else
   cout<<"\n No se puede calcular con R = "<<r<<endl;
}
void coul::imp()
{
   cout<<"\n\n RESULTADO "<<endl;
   cout<<"\n D = "<<d<<endl;
}

void main()
{
  clrscr();
  coul x;
  x.lee();
  x.calc();
  x.imp();
  getch();
}

Stakewinner00

nose si te referias a esto pero bueno te cuelgo el codigo

en este caso si R=0 el resultado es 0

Código (cpp) [Seleccionar]
#include<iostream.h>
#include<conio.h>
#include<math.h>

class coul
{
  protected:
   float q1,q2,r,d;
  public:
   void lee();
   void calc();
   void imp();
};

void coul::lee()
{
  cout<<"\n Para el calculo de la ley de Coulumb de Q1, Q2 y R"<<endl;
  cout<<"\n Da Q1 = ";
  cin>>q1;
  cout<<"\n Da Q2 = ";
  cin>>q2;
  cout<<"\n Da R = ";
  cin>>r;
}

void coul::calc()
{
  float k=9E9;
  if(r!=0)
   d=(k*(q1*q2))/pow(r,2);
  else
   cout<<"\n No se puede calcular con R = "<<r<<endl;
}
void coul::imp()
{
   cout<<"\n\n RESULTADO "<<endl;
   if (r!=0)
   cout<<"\n D = "<<d<<endl;
   else
      cout<<"\n D = "<<0<<endl;
}

void main()
{
  coul x;
  x.lee();
  x.calc();
  x.imp();
  getch();
}

flony

#2
no se si te sirva pero lo arregle un poco y el cero me da que no lo puede calcular...como vos queres
#include<iostream>
#include<math.h>
using namespace std;
class coul
{
 protected:
  double q1,q2,r,d;
 public:
  void lee();
  void calc();
  void imp();
};

void coul::lee()
{
 cout<<"\n Para el calculo de la ley de Coulumb de Q1, Q2 y R"<<endl;
 cout<<"\n Da Q1 = ";
 cin>>q1;
 cout<<"\n Da Q2 = ";
 cin>>q2;
 cout<<"\n Da R = ";
 cin>>r;
}

void coul::calc()
{
 double k=9E9;
 if(r!=0)
  d=(k*(q1*q2))/pow(r,2);
 else
  cout<<"\n No se puede calcular con R = "<<r<<endl;
}
void coul::imp()
{
  cout<<"\n\n RESULTADO "<<endl;
  if (r!=0)
  cout<<"\n D = "<<d<<endl;
  else
     cout<<"\n D = "<<0<<endl;
}

void main()
{
 coul x;
 x.lee();
 x.calc();
 x.imp();
 cin.get();
}

habia unos problemas de pasar float a double y no usas nunca usin namespace std;
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leosansan

#3
Que con r=0 de 0 u otra cosa no es muy propio:
#include <iostream>
#include<math.h>
using namespace std;
class coul
{
   protected:
   float q1,q2,r,d;
   public:
   void lee();
   void calc();
   void imp();
};

void coul::lee()
{
 cout<<"\n Para el calculo de la ley de Coulumb de Q1, Q2 y R"<<endl;
 cout<<"\n Da Q1 = ";
 cin>>q1;
 cout<<"\n Da Q2 = ";
 cin>>q2;
 r=0;
 while (r==0)
   {
       cout<<"\n Da R = ";
       cin>>r;
       if(r==0)
           cout<<"\n No se puede calcular con R = "<<r<<endl;
   }

}

void coul::calc()
{
 float k=9E9;

  d=(k*(q1*q2))/pow(r,2);
 
}
void coul::imp()
{
  cout<<"\n\n RESULTADO "<<endl;
  cout<<"\n D = "<<d<<endl;
}

int main()
{
 coul x;
 x.lee();
 x.calc();
 x.imp();

}[code=cpp]
[/code]

ivanel93

ok para lo básico esta bien por parte de Stakewinner00, y si
flony ya se eso del usngnaspce pero esque compilo en tc :( aun no me adapto a los otros como dev  y cb, por cierto tome en cuenta lo de los doubles, y pues para lo que quería Stakewinner00 me dio la solución pero me agrado el código de leosansan forzando a ingresar un numero hasta que realice la operación, pero lo que tengo duda es por que me salia un resultado, aun ingresando todas las vbles como ceros?

Javier235

Cita de: ivanel93 en 25 Septiembre 2012, 05:57 AM
... pero lo que tengo duda es por que me salia un resultado, aun ingresando todas las vbles como ceros?

¿Qué es lo que te mostraba? Algún mensaje de error? o resultado numérico? Mostrá algo si podés...

ivanel93

el código original( el primero que postee) al ingresar todos los datos en cero( eso incluye la distancia) que al ser dividido entre cero, si daba el rotulo de que no se podía realizar, pero en el resultado mostraba un valor algo de "x10e9..." ó "x10e-9..."  no recuerdo pero según lo que se al suceder eso( dividir entre cero) debería mostrar el cero de la operación realizada, si soy algo claro?

leosansan

Cita de: ivanel93 en  2 Octubre 2012, 04:59 AM
el código original( el primero que postee) al ingresar todos los datos en cero( eso incluye la distancia) que al ser dividido entre cero, si daba el rotulo de que no se podía realizar, pero en el resultado mostraba un valor algo de "x10e9..." ó "x10e-9..." 
Lo que sucede es que la variable no está inicializada, por lo que contendrá basura. Prueba a inicializar con un valor cocreto, por ejemplo "d=0" y veras la diferencia.

ivanel93

esta bien lo checare y regreso par aver que pasa :D