PDA

Ver la Versión Completa : Case else


intercubo
19-02-2008, 04:08:57
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:
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
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
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
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:


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


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