Delphi - Problemas con IF (ejercicio de Módulo)

 
Vista:

Problemas con IF (ejercicio de Módulo)

Publicado por Antonio (3 intervenciones) el 23/11/2005 19:06:32
Hola a todos. Puede que este problema sea sencillo para los de este foro, pero es un ejercicio que me han mandado en el módulo y no consigo encontrar el error. Está escrito para Delphi 5:

{Comprobación de si es Escalera Real}
IF (Aux_Combinacion.Tipo = NADA) THEN BEGIN
FOR Bucle := 1 TO 4 DO BEGIN
IF (Dados[Bucle] = R) THEN Esc1 := True;
IF (Dados[Bucle] = K) THEN Esc2 := True;
IF (Dados[Bucle] = Q) THEN Esc3 := True;
IF (Dados[Bucle] = J) THEN Esc4 := True;
END {FOR};
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN {=======ERROR=======}
Aux_Combinacion.Tipo := EscaleraReal;
END {THEN}
{Comprobación de si es Escalera al AS}
ELSE IF (Aux_Combinacion.Tipo = NADA) THEN BEGIN {== SIGUIENTE ELSE IF ==}
FOR Bucle := 1 TO 4 DO
IF (Dados[Bucle] = A) THEN Esc1 := True;
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN
Aux_Combinacion.Tipo := EscaleraAlAS;
END {ELSE IF};

El error está en que una vez que ha llegado a la zona que he marcado como ERROR, si es FALSE, no entra en el siguiente ELSE IF, y lo que hace es saltarse todo lo demás y llegar al final. He mirado los BEGIN's y END's y parece estar todo en su sitio. Quisiera saber donde está el problema para que pueda pasar al siguiente ELSE IF sin problemas.
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con IF (ejercicio de Módulo)

Publicado por Ariel (61 intervenciones) el 23/11/2005 21:17:19
Hola

no entiendo mucho eso de escalera real
mira aqui esta tu mismo codigo, con lo que pienso
q podria estar mal

{Comprobación de si es Escalera Real}
IF (Aux_Combinacion.Tipo = NADA) THEN BEGIN
FOR Bucle := 1 TO 4 DO BEGIN
IF (Dados[Bucle] = R) THEN Esc1 := True Else Esc1 := False; {si no es verdadero}
IF (Dados[Bucle] = K) THEN Esc2 := True Else Esc2 := False;
IF (Dados[Bucle] = Q) THEN Esc3 := True Else Esc3 := False;
IF (Dados[Bucle] = J) THEN Esc4 := True Else Esc4:= False;
END {FOR};
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN
Aux_Combinacion.Tipo := EscaleraReal
{Comprobación de si es Escalera al AS}
ELSE IF (Aux_Combinacion.Tipo = NADA) THEN BEGIN {== SIGUIENTE ELSE IF ==}
FOR Bucle := 1 TO 4 DO
IF (Dados[Bucle] = A) THEN Esc1 := True;
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN
Aux_Combinacion.Tipo := EscaleraAlAS;
END {ELSE IF};

//----------------------FIJATE EN ESTA PARTE -------------
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN {=======ERROR=======}
Aux_Combinacion.Tipo := EscaleraReal;
END {THEN} {====AQUI TIENES UN END ¿DONDE ESTA TU BEGIN?===}

Espero que te sirva y si no vuelve a escribir al foro, para encontrar la solucion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con IF (ejercicio de Módulo)

Publicado por Antonio (3 intervenciones) el 24/11/2005 00:14:34
Ese es el END del primer IF principal.
Cuando pongo
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN ....;
ese solo que haga una cosa si se cumple y nada más. Pero es como una instrucción más dentro del THEN principal.
Lo que quiero es que si no me ha modificado la parte de
Aux_Combinacion.Tipo := EscaleraReal
pues Aux_Combinacion.Tipo sigue siendo NADA, así que debería pasar al siguiente ELSE IF.
No explico lo que hace el programa porque realmente eso no tiene importancia (o eso creo) simplemente pregunto que por qué se me salta hasta el final cuando hace esa instrucción que puse en {== ERROR ==}.
Muchas gracias por contestar!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con IF (ejercicio de Módulo)

Publicado por Carlos (6 intervenciones) el 24/11/2005 08:41:44
IF (Aux_Combinacion.Tipo = NADA) THEN (1*)
BEGIN
FOR Bucle := 1 TO 4 DO
BEGIN
IF (Dados[Bucle] = R) THEN Esc1 := True;
IF (Dados[Bucle] = K) THEN Esc2 := True;
IF (Dados[Bucle] = Q) THEN Esc3 := True;
IF (Dados[Bucle] = J) THEN Esc4 := True;
END {FOR};
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN {=======ERROR=======}
A ux_Combinacion.Tipo := EscaleraReal; (3*)
END {THEN}
{Comprobación de si es Escalera al AS}
ELSE IF (Aux_Combinacion.Tipo = NADA) THEN (2*)
BEGIN {== SIGUIENTE ELSE IF ==}
FOR Bucle := 1 TO 4 DO
IF (Dados[Bucle] = A) THEN Esc1 := True;
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN
Aux_Combinacion.Tipo := EscaleraAlAS;
END {ELSE IF};
(2*) Este ElseIF depende del IF (1*), y no del IF (3*) que es el que tu quieres si es que entendi bien, ve la estructura para que te des cuenta.
La opcion (2*) solo se ejecuta en el caso de que el IF (1*) sea falso, no tiene nada q ver con el IF (3*)
Espero servirte de ayuda y mucha suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con IF (ejercicio de Módulo)

Publicado por Ariel (61 intervenciones) el 24/11/2005 14:16:36
Hola

Mira, aqui ordene para mi gusto un poco el codigo q tenias.

ahora si no te sirve nada de esto, entonces no podemos ayudarte mucho
porque lo que tienes de codigo aqui es poco, no sabemos que quieres
no sabemos que quieres comparar datos[Bucle]=R, q es R, K,Q,J.

ahora si no te sirve esto envia mas codigo para poder ayudarte.

Saludos.

{---solo agregue esto, para iniciar estas variables con False-----}
Esc1 := False;
Esc2 := False;
Esc3 := False;
Esc4 := False;

{Comprobación de si es Escalera Real}
IF (Aux_Combinacion.Tipo = NADA) THEN
BEGIN
FOR Bucle := 1 TO 4 DO
BEGIN
IF (Dados[Bucle] = R) THEN Esc1 := True;
IF (Dados[Bucle] = K) THEN Esc2 := True;
IF (Dados[Bucle] = Q) THEN Esc3 := True;
IF (Dados[Bucle] = J) THEN Esc4 := True;
END;
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN {=======ERROR=======}
Aux_Combinacion.Tipo := EscaleraReal;
END
ELSE
IF (Aux_Combinacion.Tipo = NADA) THEN
BEGIN
FOR Bucle := 1 TO 4 DO
IF (Dados[Bucle] = A) THEN Esc1 := True;
IF (Esc1 AND Esc2 AND Esc3 AND Esc4) THEN
Aux_Combinacion.Tipo := EscaleraAlAS;
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

(Corregido) Muchas Gracias :)

Publicado por Antonio (3 intervenciones) el 24/11/2005 15:22:02
Ya corregí el código, era un fallo que tenía porque no había entendido lo del ELSE IF. Uno de esos errores "tontos" pero que no los ves y te empeñas porque crees que los tienes bien. El fallo era lo que dijo Carlos, que no dependía de uno de los IFs.
Muchas gracias a todos.
Ya me pasaré por aquí de vez en cuando porque sois de gran ayuda, y a ver si dentro de poco me paso pero para contestar a otros :D.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar