Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Donde Esta EL Error??? (Sencillo, Nivel Principiante) (https://www.clubdelphi.com/foros/showthread.php?t=55034)

Hitman014 06-04-2008 00:03:49

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

ixMike 06-04-2008 00:33:38

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.

Hitman014 06-04-2008 02:28:47

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 (Mensaje 277865)
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 :D:D

Robert01 06-04-2008 02:41:55

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

ixMike 06-04-2008 02:45:16

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 :D:D

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 ;)

Hitman014 06-04-2008 04:42:55

gracias por todo!! ese mismo era el problema "<"


La franja horaria es GMT +2. Ahora son las 16:09:22.

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