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 09-02-2011
Parabol77 Parabol77 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 10
Poder: 0
Parabol77 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 09-02-2011
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
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?
Responder Con Cita
  #3  
Antiguo 09-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 09-02-2011 a las 11:11:22.
Responder Con Cita
  #4  
Antiguo 09-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 09-02-2011 a las 11:12:55.
Responder Con Cita
  #5  
Antiguo 10-02-2011
Parabol77 Parabol77 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 10
Poder: 0
Parabol77 Va por buen camino
¡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.
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
Problema con condicionales "compuestos" Parabol77 Varios 2 18-11-2010 16:27:33
Se puede hacer consultas SQL condicionales con Firebird David SQL 2 04-04-2008 15:34:54
condicionales en SQL Max_E. SQL 2 31-10-2006 19:28:33
SQL´s con condicionales AMINOA2R Firebird e Interbase 3 02-02-2006 09:33:14


La franja horaria es GMT +2. Ahora son las 08:33:00.


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