Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas de seguimiento en una sentencia IF (https://www.clubdelphi.com/foros/showthread.php?t=39673)

Oibafrufat 26-01-2007 17:39:59

Problemas de seguimiento en una sentencia IF
 
Buen día

Les comento: trabajo la versión 6 de Delphi y en los últimos días he tenido problemas con en ciertas sentencias IF, las cuales al hacer un seguimiento paso a paso siendo la condición verdadera, ingresa por la misma y una vez termina, sigue por la falsa, agradecería si alguien tiene alguna respuesta lógica al respecto.

if i<ListaPalabras.Count-1 then
pasa aki temp := temp + ' ' + ListaPalabras[i]
else
y pasa x aki break;

Enan0 26-01-2007 19:15:05

Hola.
Mira esa sentencia IF no tienen nada de raro. al ver el break inmagino que esta dentro de un bucle For, lo cual tambien le da Sentido al I

Estaria bueno si pegas un poco mas de Codigo. porque esa sentecia aparentemente anda perfecto.

tambien estaria bueno que comentes ListaPalabras que tipo de componente es.

Saludos

Oibafrufat 27-01-2007 00:06:31

Agradezco tu respuesta, tal vez como es mi primera vez, me hace falta ser más dinámico en mis comentarios.... imaginate. tal vez no es la sentencia, sino que delphi en otras sentencias if.... hace su paso por la parte falsa y la verdadera al mismo tiempo, efectivamente esto hace parte de un bucle
Código Delphi [-]
           while true do
           begin
             CodEqMzVal := Geo.RetornaCodigoEqMzVal(QGeoVarios,temp,Ciudad);
             if CodEqMzVal <> '' then
             begin
               CodEqMzValOk := CodEqMzVal;
               CodMzNivOk := Geo.RetornaNivelYNomMzVal(QGeoVarios,CodEqMzValOk,Ciudad,NomMzVal);
               NivelOk := Geo.RetornaNivelMzNiv(QGeoVarios,CodMzNivOk,Ciudad,NombreNivel,SiTabla);
               iok := i;
               i := i+1;
               if i < ListaPalabras.Count-1 then
                 temp := temp + ' ' + ListaPalabras[i];
               else
                 break;
             end
             else
             begin
               i := i+1;
               if i < ListaPalabras.Count-1 then
                 temp := temp + ' ' + ListaPalabras[i]
               else
                 break;
             end;
           end;
Mira yo le doy vueltas y vueltas y no entiendo xq sucede y no es en la única parte que pasa. hace esto en el primer if y pasa normal por el segundo...

ListaPalabras es un TStringList, en el cual almaceno las palabras de una frase.

Espero haberme hecho entender... gracias...

Lepe 27-01-2007 02:13:06

Yo no le veo sentido, ¿acaso este código no es el mismo?
Código Delphi [-]
           while true do
           begin
             CodEqMzVal := Geo.RetornaCodigoEqMzVal(QGeoVarios,temp,Ciudad);
             if CodEqMzVal <> '' then
             begin
               CodEqMzValOk := CodEqMzVal;
               CodMzNivOk := Geo.RetornaNivelYNomMzVal(QGeoVarios,CodEqMzValOk,Ciudad,NomMzVal);
               NivelOk := Geo.RetornaNivelMzNiv(QGeoVarios,CodMzNivOk,Ciudad,NombreNivel,SiTabla);
               iok := i;
             end;
             i := i+1;
             if i < ListaPalabras.Count-1 then
               temp := temp + ' ' + ListaPalabras[i];
             else
               break;
           end;

igual el optimizador de delphi hace algo por el estilo.

Saludos

basti 27-01-2007 04:33:04

El "While True", sólo lo utilizaría si es estrictamente necesario, y en este caso no lo es, creo que así te quedaría más claro, y evitarías tener que usar un break.
Código Delphi [-]
           while i < ListaPalabras.Count-1 do
           begin
             CodEqMzVal := Geo.RetornaCodigoEqMzVal(QGeoVarios,temp,Ciudad);
             if CodEqMzVal <> '' then
             begin
               CodEqMzValOk := CodEqMzVal;
               CodMzNivOk := Geo.RetornaNivelYNomMzVal(QGeoVarios,CodEqMzValOk,Ciudad,NomMzVal);
               NivelOk := Geo.RetornaNivelMzNiv(QGeoVarios,CodMzNivOk,Ciudad,NombreNivel,SiTabla);
               iok := i;
             end;
             i := i+1;
             if i < ListaPalabras.Count-1 then
               temp := temp + ' ' + ListaPalabras[i];
           end;


La franja horaria es GMT +2. Ahora son las 01:18:20.

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