Ver Mensaje Individual
  #2  
Antiguo 06-04-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Reputación: 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