Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con condicionales encadenados (https://www.clubdelphi.com/foros/showthread.php?t=72295)

Parabol77 09-02-2011 09:51:29

Problema con condicionales encadenados
 
Muy buenas a todos. Estoy haciendo un programa y, en la siguiente secuencia, tengo algún problema. El programa compila y ejecuta correctamente, pero no hace lo que quiero. A continuación expongo el código y lo que quiero conseguir con él:

Código:

  If Deje1/Dengr<=0.4 Then D:=Deje1
  Else
      Begin
      If Deje2/Dengr<=0.4 Then D:=Deje2
      Else
        Begin
        If Deje3/Dengr<=0.4 Then D:=Deje3
        Else
            Begin
            If Deje4/Dengr<=0.4 Then D:=Deje4
            Else
              Begin
              If Deje5/Dengr<=0.4 Then D:=Deje5
              Else
                  Begin
                  If Deje6/Dengr<=0.4 Then D:=Deje6
                  Else
                    D:=Deje7;
                  end
              end
            end
        end
      end;

Lo que quiero conseguir es lo siguiente: Tengo los datos Dengr, y Deje1 a Deje7 (Los llamaré Deje# para mayor comodidad). Como salida, tengo la variable D, que se corresponderá al Deje# "válido".

Para que ese Deje# sea válido, la relación (Deje#/Dengr) debe ser menor o igual que 0.4. Para ello, empiezo a comparar con Deje1. Si Deje1/Dengr <= 0.4, D será Deje1 y se acabaría la secuencia de condicionales. Si no, se compararía Deje2/Dengr, y si es <=0.4, D sería Deje2. El proceso avanzaría si no se cumple la condición (<=0.4) para los Deje# siguientes, hasta que, en caso de que Deje6/Dengr no sea menor o igual que 0.4, D sea directamente Deje7. Espero haberlo explicado de forma inteligible.

El problema que tengo es que el programa me saca un resultado para D, pero no cumple la condición D/Dengr<=0.4

Creo que el error está en algún end, algún punto y coma... Pero he estado trasteando y no doy con el fallo. Agradecería cualquier tipo de ayuda.

Muchas gracias de antemano.
Un saludo.

aposi 09-02-2011 10:46:03

Cita:

El problema que tengo es que el programa me saca un resultado para D, pero no cumple la condición D/Dengr<=0.4
el resultado es deje7?

ecfisa 09-02-2011 10:54:22

Hola Parabol77

Bueno, creo que el problema te lo estás haciendo con tanto begin y end innecesarios...

Basándome en la explicación, sería:
Código Delphi [-]
...
   if Deje1/Dengr <= 0.4 then
     D := Deje1
   else if Deje2/Dengr <=0.4 then
     D:=  Deje2
   else if Deje3/Dengr <= 0.4 then
     D:=  Deje3
   else if Deje4/Dengr <= 0.4 then
     D:=  Deje4
   else if Deje5/Dengr <= 0.4 then
     D:=  Deje5
   else if Deje6/Dengr <= 0.4 then
     D:=  Deje6
   else
     D:=  Deje7;
...

Un saludo.

ecfisa 09-02-2011 11:06:00

Hola de nuevo.

Creo que mejor te dejo un ejemplo ;)

Código Delphi [-]
...
function NoSe(Dengr,Deje1,Deje2,Deje3,Deje4,Deje5,Deje6,Deje7: Double): Double;
begin
  if Deje1/Dengr <= 0.4 then
    Result := Deje1
  else if Deje2/Dengr <=0.4 then
    Result:=  Deje2
  else if Deje3/Dengr <= 0.4 then
    Result:=  Deje3
  else if Deje4/Dengr <= 0.4 then
    Result:=  Deje4
  else if Deje5/Dengr <= 0.4 then
    Result:=  Deje5
  else if Deje6/Dengr <= 0.4 then
    Result:=  Deje6
  else
    Result:=  Deje7;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  D,Dengr: Double;
begin
  Dengr := 10;
  D:= NoSe(Dengr,7,6,5,5,5,4,1);
  ShowMessage(FloatToStr(D));
end;

Verás que la función devuelve 4, que es el primer número del parámetro que cumple la condicion. Ya que 4/10 es <= 0.4 y los predecesores no.

Un saludo.

Parabol77 10-02-2011 17:24:00

¡Muchas gracias a ambos!

Perdón por contestar tan tarde, pero he estado un poco ocupado.

Resulta que al final, el error venía de otras acciones que había antes del código que he puesto, pero al menos he caido en poner todos esos condicionales de manera mucho más sencilla. ;)

Gracias de nuevo.
Un saludo.


La franja horaria es GMT +2. Ahora son las 19:08:44.

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