Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Case else (https://www.clubdelphi.com/foros/showthread.php?t=53349)

intercubo 19-02-2008 04:08:57

Case else
 
hola:

quisiera saber si puedo poner un for dentro del else de un case, porque al parecer no esta ejecutando lo que yo quiero:

aqui esta el codigo:
Código Delphi [-]
Case Ord(C) of
      97..122:
      Col:=0; //Caracter
      48..57:
      Col:=2;  //Numero
      10,13:
      Col:=22;  //Enter
      else //else del case
        begin
          for x:=0 to 24 do
             Begin
              if C=Columnas[x] then
                Begin
                  Col:=x;  //Caracter de la Matriz
                End
              else
                Col:=24; //Otra cosa
             end;
        end;

Gracias!!!

egostar 19-02-2008 04:30:33

Cita:

Empezado por intercubo (Mensaje 266841)
hola:

quisiera saber si puedo poner un for dentro del else de un case, porque al parecer no esta ejecutando lo que yo quiero:

Me pregunto que es lo que no hace:confused:.....:rolleyes::rolleyes::rolleyes:

Salud OS

intercubo 19-02-2008 04:35:38

Código Delphi [-]
Case Ord(C) of      97..122:      Col:=0; //Caracter      
48..57:      Col:=2;  //Numero      10,13:      Col:=22;  //Enter      
else //else del case        
begin          
for x:=0 to 24 do             
Begin              
if C=Columnas[x] then                
Begin                  
Col:=x;  //Caracter de la Matriz                
End              
else                
Col:=24; //Otra cosa             
end;       
 end;

Col siempre toma el valor 24, aunque C si sea igual a uno de los valores del arreglo Columnas[] cuando no es una de las 2 primeras opciones (caracter o numero)

egostar 19-02-2008 04:50:37

Cita:

Empezado por intercubo (Mensaje 266845)
Col siempre toma el valor 24, aunque C si sea igual a uno de los valores del arreglo Columnas[] cuando no es una de las 2 primeras opciones (caracter o numero)

Pues he probado tu código y si me da el número de indice del arreglo columnas. :rolleyes:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  x,y: integer;
begin
  C := #123; // #123 = caracter {
  for y := 0 to 24 do begin
      Columnas[y] := Char(y+100); //Aquí ingreso los caracteres 100 al 124
  end;
  Case Ord(C) of
     97..122: Col:=0; //Caracter
     48..57: Col:=2;  //Numero
     10,13: Col:=22;  //Enter
     else begin
            for x := 0 to 24 do begin
                if C=Columnas[x] then begin
                   Col:=x;  //Caracter de la Matriz
                end
                else Col:=24; //Otra cosa
            end;
     end;
  end;
end;

El caracter #123={ está en el indice 23 de Columnas......

No entiendo cual es tu problema

Salud OS

egostar 19-02-2008 04:54:22

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  x,y: integer;
begin
  C := #123; // #123 = caracter {
  for y := 0 to 24 do begin
      Columnas[y] := Char(y+100); //Aquí ingreso los caracteres 100 al 124
  end;
  Case Ord(C) of
     97..122: Col:=0; //Caracter
     48..57: Col:=2;  //Numero
     10,13: Col:=22;  //Enter
     else begin
            for x := 0 to 24 do begin
                if C=Columnas[x] then begin
                   Col:=x;  //Caracter de la Matriz
                   ShowMessage('Salio en Columna '+Inttostr(x)); //Muestro el valor de x
                   Exit; //Salgo del for
                end
                else Col:=24; //Otra cosa
            end;
     end;
  end;
end;

Edito: Aunque creo que se donde está el problema, como no haces un brake en el for, por eso es que sigue mostrando Col=24....., he corregido el código agregando un Exit.

Vaya genere otro post en lugar de editar el anterior....... bueno, inc(egostar) :D:D:D

intercubo 19-02-2008 05:11:59

gracias, funciona bien con el exit, pero el problema es que al parecer se sale de los 2 for, solo quiero que se salga del inmediato superior, como puedo hacer eso, o que otra solucion tengo?

de antemano muchas gracias por la ayuda!

jachguate 19-02-2008 08:12:53

En lugar de exit; llama a break;

Hasta luego.

;)

egostar 19-02-2008 17:38:12

Cita:

Empezado por jachguate (Mensaje 266855)
En lugar de exit; llama a break;

Hasta luego.

;)

Pues gracias amigo jachguate, me creeras que no me acordaba del famoso brake, de hecho nunca he tenido que usar el abortar un bucle..., exit, halt, brake son palabras que no uso normalmente....:rolleyes::cool:

Salud OS

jachguate 19-02-2008 23:00:43

Bueno, yo si las uso... aún recuerdo que break fue introducido en Turbo Pascal 7 (si no me traiciona la memoria) y desde el inicio le vi la utilidad, pues da una salida elegante para casos donde no nos quedaba mas que retorcer un poco las cosas:

Código Delphi [-]
procedure PagarSalarios;
var
  I: Integer;
begin
  for I:= 0 to Empleados.Count - 1 do
  begin
    PagarSalarioEmpleado(Empleados[i]);
    if SaldoCuenta < 0 then
      Break;
  end;
end;
:D que mal ejemplo, verdad.. :D :D

Hasta luego.

;)

egostar 19-02-2008 23:03:56

Cita:

Empezado por jachguate (Mensaje 267081)
Bueno, yo si las uso... aún recuerdo que break fue introducido en Turbo Pascal 7 (si no me traiciona la memoria) y desde el inicio le vi la utilidad, pues da una salida elegante para casos donde no nos quedaba mas que retorcer un poco las cosas:

Bueno, si la use cuando trabajaba con Turbo Pascal, pero con delphi no he tenido que usarla hasta ahora, no se si sea bueno o malo, :rolleyes::rolleyes: o todo lo contrario. :D:D:D

Salud OS


La franja horaria es GMT +2. Ahora son las 12:34:29.

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