Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-04-2008
Hitman014 Hitman014 is offline
Registrado
 
Registrado: mar 2008
Posts: 8
Poder: 0
Hitman014 Va por buen camino
Arrow Donde Esta EL Error??? (Sencillo, Nivel Principiante)

Bien tengo que hacer un "programa" que me de el resultado de la formula general, formula es esta:



entonces hize lo que crei y parece todo andar bien, pero cuando me fijo bien, el resultado que me da es el que pongo en B, pero negativo.

osea tengo que poner 3 valores (a,b,c) y en la barra de resultado me pone como respuesta lo mismo que puse en b, pero negativo (si pongo 4, me pone -4)

Donde puede estar el problema??

Este es el codigo que tengo:

Código:
var
a,b,c: integer;
x1,x2,x,d: real;
begin
a:= strtoint (edit1.text);
b:= strtoint (edit2.text);
c:= strtoint (edit3.text);
if a = 0 then
ShowMessage('Error!! No se puede Dividir entre 0')

else
x1:= sqrt (d);
x:= (b*b) - 4 *(a*c);
d:= x/2*(a);

x2:= -b + x1;
if x2 > 0 then
ShowMessage('Error!! Raiz Negativa Es Imaginario');

edit4.Text := floattostr (x2);

end;
espero puedan ayudarme

Última edición por Hitman014 fecha: 06-04-2008 a las 00:06:12.
Responder Con Cita
  #2  
Antiguo 06-04-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Hola. Veo varias errores (despistes).

ShowMessage('Error!! No se puede Dividir entre 0')

Bueno, en realidad, si a=0, entonces deja de ser una ecuación de segundo grado, por lo que es más fácil resolverla: x=-c/b

a·x^2 + b·x + c = 0
si a=0
b·x + c = 0 ; b·x = -c ; x = - c / b


Pero vayamos a la programación.

else
x1:= sqrt (d);
x:= (b*b) - 4 *(a*c);
d:= x/2*(a);


Al principio haces sqrt(d), pero d no tiene ningún valor asignado anteriormente, así que la función sqrt se saca un resultado cero de la manga. Después x2:= -b + x1; pues -b + 0... por eso te falla.

Lo que tienes que hacer es escribir las cosas ordenadamente, pues es así como el compilador interpreta el código. Quedaría algo así:

Código Delphi [-]
var
  a, b, c: Integer;
  x1, x2, r: Real;
begin
  a:= StrToInt (Edit1.Text);
  b:= StrToInt (Edit2.Text);
  c:= StrToInt (Edit3.Text);
  If a = 0 then Edit4.Text:=FloatToStr(-c/b) else
    begin //también te faltó esto, pues sino sólo se ejecuta la
          //siguiente línea con el else, y todas las demás sin condición
    r:= b*b - 4*a*c; //r=lo de dentro de la raíz
    if r<0 then ShowMessage('Error!! Raiz Negativa Es Imaginario') else
      begin
      r:=Sqrt(r); //ahora r=raíz
      x1:=(-b+r)/(2*a);
      x2:=(-b-r)/(2*a); //Te recuerdo que tiene dos soluciones 
      Edit4.Text:= FloatToStr(x1) + ' y ' + FloatToStr(x2);
      end;
    end;
end;

Espero que lo hayas entendido.

Y por favor, la próxima vez elabora un poco más la pregunta. Por ejemplo, coloca el código de forma más ordenada, dinos por qué/para qué utilizas las variables, etc... ayudará a obtener una mejor respuesta

Salu2.

Última edición por ixMike fecha: 06-04-2008 a las 02:07:53. Razón: Un par de errores tipográficos
Responder Con Cita
  #3  
Antiguo 06-04-2008
Hitman014 Hitman014 is offline
Registrado
 
Registrado: mar 2008
Posts: 8
Poder: 0
Hitman014 Va por buen camino
hize todo como me dijiste, pero ahora me sale un error al momento de correrlo

VER IMAGEN

hubo una parte que no la puse igual como me dijiste, porque al ser dos resultados lo que voy a hacer es que el resultado de -b + resultado
y que en el otro edit, me de el resultado de -b - resultado, haciendo la misma operacion en dos botones diferentes, nada mas cambiando el signo de + & -.

Me refiero a esta parte:

Cita:
Empezado por ixMike Ver Mensaje
r:=Sqrt(r); //ahora r=raíz
x1:=(-b+r)/(2*a);
x2:=(-b-r)/(2*a); //Te recuerdo que tiene dos soluciones

espero ayuda para poder terminarlo ya!!

gracias
Responder Con Cita
  #4  
Antiguo 06-04-2008
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
Hola

¿Definiste r como float?

Si el discriminante (b**2 - 4*a*c) es mayor que 0 no hay raices imaginarias, eso ocurre en la situación opuesta

Salu2
Responder Con Cita
  #5  
Antiguo 06-04-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Ese error te sale porque has puesto if r>0 then ShowMessage('Error!! Imaginario'); cunado es r<0. Te sale porque está haciendo la raíz de un número negativo.

Ya que copias, podrías usar Ctrl+C, Ctrl+V

Añado: a otra vez no tapes el código con el mensajito de error, o mejor aún, copia el código aquí para que podamos verlo

Última edición por ixMike fecha: 06-04-2008 a las 02:49:05.
Responder Con Cita
  #6  
Antiguo 06-04-2008
Hitman014 Hitman014 is offline
Registrado
 
Registrado: mar 2008
Posts: 8
Poder: 0
Hitman014 Va por buen camino
gracias por todo!! ese mismo era el problema "<"
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
donde esta el error??? UREÑA Conexión con bases de datos 16 28-06-2007 19:45:17
jedi cvs: manejar versiones a nivel módulo y a nivel proyecto pvizcay Varios 3 17-04-2007 16:17:59
Acertijo en PHP. ¿Donde esta el error? papulo PHP 3 30-11-2005 18:47:28
donde está el error? :S jorodgar Varios 7 17-06-2005 15:32:08
Donde esta el error ?? tgsistemas SQL 2 31-01-2005 14:29:34


La franja horaria es GMT +2. Ahora son las 16:52:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi