PDA

Ver la Versión Completa : Modularizar el programa principal


byivan
17-01-2007, 15:25:59
Buenas compañeros,

Necesito terminar una practica y para ello tengo que modularizar el programa principal.

Para ello creo diferentes procedimientos, pero a la hora de ejecutar el programa no funciona bien.

Para vosotros debe ser algo sencillo, es un juego de POKER simple.

Alguna alma caritativa puede ayudarme?

Espero vuestro mensajes,
o agregadme a byivan2002@hotmail.com

os lo agradezco muxo.

Onti
17-01-2007, 15:34:23
Hola Bienvenido!!

Te recomiendo leas la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), ahora bien sobre tu consulta, con la información que nos das, es muy difícil ayudar. debes ser mas especifico en la consulta :)

marcoszorrilla
17-01-2007, 15:35:47
Lo normal es que vayas diciendo que es lo que no te funciona y alguien te irá diciendo como arreglarlo de manera que tendrías que ir haciendo preguntas concretas, una por hilo.

Por ejemplo, trabajo con D7 y estoy usando Base de datos Firebird, he creado el procedimiento p314 con este código lo llamo desde el formulario xxxx y me da este error.....

Un Saludo.

byivan
17-01-2007, 15:36:36
Os pongo un enlace para descargar el archivo?

Joer si esk es uan tonteria de nada, es cortar 5 cachitos y pegarlos en 5 procedures, pero nose k coño de efectos laterales o lo que sea, y logo no hace lo correcto.

Te pongo un enlace para descargarlo, y lo echas un vistazo?

Gracias.

Edit: Acabo leer las normas de estilo, siento el titulo en mayusculas, no puedo modificarlo :(

kuan-yiu
17-01-2007, 17:07:43
Estaría bien que dijeras, por ejemplo, qué error te sale, en qué línea de código salta...

ContraVeneno
17-01-2007, 19:41:21
Estaría mucho mejor que leyeras la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), como ya te dijeron. Esto para evitar futuros errores y malos entendidos.
;)

Edito: Perdón, no había leído que ya habías leido la lectura recomendada.
:P

byivan
17-01-2007, 19:50:35
Primiero agradecer vuestros mensajes, gracias.

El problema está en que el compilador compila todo perfectamente, y en tiempo de ejecucion del programa, no se desarrolla bien.

- Antes de modularizar todo funcionaba perfectamente, pero tras modularizar da resultados que no son los esperados, por lo que no debo modularizarlo correctamente.

Os adjunto el link para que veais el problema:

http://www.megaupload.com/?d=LSNYN75C

Teneis que modularizar el programa principal que se encuentra en el archivo JuegoPoquer.dpr

Espero que podais ayudarme,
muchas gracias por vuestra atencion.

Un saludo.

ContraVeneno
17-01-2007, 20:14:07
¿y como para cuando hay que entregar el sistema ya modulizado?

byivan
17-01-2007, 20:43:09
Me urge tremenda prisa pues tengo que entregarla ya.
No es nada complicado(si para mi) solo se trata de modularizar 5 parrafos de codigo en 5 procedure
por favor echale un vistazo

muchas gracias , un saludo

ContraVeneno
17-01-2007, 20:47:28
Hombre byivan, creo que te hace falta un nuevo detector de sarcasmo...

byivan
17-01-2007, 21:22:39
Hombre byivan, creo que te hace falta un nuevo detector de sarcasmo...


Sarcasmo: Burla o ironía mordaz, hiriente y humillante.

Humildad: Actitud de la persona que no presume de sus logros, reconoce sus fracasos y debilidades y actúa sin orgullo.

Onti
17-01-2007, 21:32:57
Trate de descargar tu prog del link indicado pero tengo el siguiente mensaje:

"Todos los puertos de descarga asignados a su país (Bolivia) están en uso. Por favor, inténtelo nuevamente dentro de unas horas o instale la barra de herramientas de Megaupload Toolbar para obtener acceso inmediato - con la barra de herramientas usted no sufrirá más limitaciones."

Me gustaría darte una mano, pero no pienso instalar ese ToolBar

byivan
17-01-2007, 21:37:33
Raul muchas gracias por tu atencion, de veras.

Puedes agregarme al msn : byivan2002@hotmail.com
y te paso el programita por alli, o si lo prefieres mandame un correo a mi direccion y te contesto a tu correo con el programita.
Que te parece?

Un saludo

lag_0
17-01-2007, 21:42:10
y la nota será para ti o para quien haga tu practica?

si los hay con morro

byivan
17-01-2007, 21:54:22
y la nota será para ti o para quien haga tu practica?

si los hay con morro

No me confundas, la práctica esta hecha en su totalidad ( me ha llevado bastante tiempo) sólo que busco ayuda porque nosé modularizar (me crea conflicto) un parrafo de apenas 7 lineas ...

No creo que sea apropiado tu comentario, puesto que la práctica me la he currado durante un mes, y solo es ultimar un detalle que ya le he dado mil vueltas.

Un saludo desde Madrid

lag_0
17-01-2007, 23:00:58
y por que no pasteas los codigos que te fallen aquí y explicas el fallo y no pones tu email con intencion de que te ayude alguien sin tan solo mover un dedo? Que esperabas asistencia gratis por e-mail? Es club delphi no club hermanitas de la caridad y aún así con respeto y educación se hacen ayudas desinteresadamente claro que se harán siempre y cuando el que pide ayuda esté interesado en trabajar.

A que esperas, pastea tu codigo y el error y la versión de delphi que estás utilizando y verás que rapido encuentras una solución.

byivan
17-01-2007, 23:11:25
Aqui está el codigo, se trata de modularizar el programa principal, meter los 5 primeros bloques (o parrafos de instrucciones) cada uno en un procedure para así hacer el programa principal lo menos extenso posible.

El problema me surgió al modularizar el 3º bloque que contiene otro subprograma,y creo que se crea un conflicto de variables (un efecto lateral) y aunque el compilador lo da por bueno, en el tiempo de ejecución no se obtienen resultados esperados (en el descarte del poker cambia todas las cartas en vez de las deseadas,....)


GRacias :



PROGRAM JuegoPoquer;
{$APPTYPE CONSOLE}

USES
SysUtils,
PoquerDados in 'PoquerDados.pas',
PoquerDadosES in 'PoquerDadosES.pas',
TiposPoquerDados in 'TiposPoquerDados.pas';
{El prograa principal del Juega del Poquer usa las unidades de importación
´PoquerDados´ y ´PoquerDadosES´ de la biblioteca ´LibPoquerDados´ y la
unidad ´TiposPoquerDados´}

PROCEDURE LeeDados(VAR vec:TValorDados);
{Este procedimiento genera la tirada de 4 dados}
VAR
i:integer;
BEGIN
FOR i:=1 TO 4 DO BEGIN
Vec[i]:=TiraDado;
END;
END;

PROCEDURE LeeMano (v:TValorDados; VAR Mano:TMano);
{Este procedimiento se encarga de leer los campos de una mano, a partir del
valor de los dados}
VAR
dat:TDatosCombinacion;
BEGIN
dat:=Combinacion(v);
Mano.Dados:=v;
Mano.Combinacion:=dat;
END;

PROCEDURE CambiaDados(v:TValorDados;cad:string; VAR vec:TValorDados);
{Este procedimiento lo he creado para la opción que se da a ambos jugadores de
volver a tirar algún dado. Le entra el valor de los dados antiguos y un string
con información a cerca de los dados q se desean volver a tira, y salen los
dados actualizados con las nuevas tiradas}
VAR
i:integer;
BEGIN
vec:=v;
FOR i:= 1 TO length(cad) DO BEGIN
IF cad[i]='1' THEN
vec[1]:=Tiradado
ELSE IF cad[i]='2' THEN
vec[2]:=tiradado
ELSE IF cad[i]='3' THEN
vec[3]:=tiradado
ELSE IF cad[i]='4' THEN
vec[4]:=tiradado;
END;
{Se comprueva si algún elemento del string es un 1, 2, 3 o 4, y si lo es
se tira el dado que corresponde a ese número}
END;

VAR
{Variables que uiliza el programa principal}
dados1,dados2:TValorDados;
jugador1,jugador2:TMano;
cambio:string;
Gana1,iguales:boolean;
fin:char;


BEGIN {PROGRAMA PRINCIPAL}

REPEAT

writeln('Jugador 1:'); {BLOKE 1}
readln;
LeeDados(dados1); {Genera aleatoriamente los dados del jugador 1}
LeeMano(dados1,jugador1);
EscribeMano(jugador1);
writeln;
writeln;
writeln;
{Jugada del Jugador 1, por pantalla se escriben los dados que ha sacado
y la cominación que tiene (mano del jugador 1)}


writeln('Jugador 2:'); {BLOKE2}
readln;
LeeDados(dados2); {Genera aleatoriamente los dados del jugador 2}
LeeMano(dados2,jugador2);
EscribeMano(jugador2);
writeln;
writeln;
writeln;
{Jugada del jugador 2, por pantalla se escriben los dados que ha sacado
y la cominación que tiene (mano del jugador 1)}


{BLOKE3}
writeln('Jugador 1, indique los dados que desea volver a tirar separados por -:');
readln(cambio);
CambiaDados(dados1,cambio,dados1);
writeln;
writeln('Jugador 1:');
LeeMano(dados1,jugador1);
EscribeMano(jugador1);
writeln;
writeln;
writeln;
{Se da opción al jugador 1, para que vuelva a tirar algún dado, yse escribe
la nueva mano}

{BLOKE4}
writeln('Jugador 2, indique los dados que desea volver a tirar separados por -:');
readln(cambio);
CambiaDados(dados2,cambio,dados2);
writeln;
writeln('Jugador 2:');
LeeMano(dados2,jugador2);
EscribeMano(jugador2);
writeln;
writeln;
writeln;
{Se da opción al jugador 1, para que vuelva a tirar algún dado, yse escribe
la nueva mano}

{BLOKE5}
writeln('RESULTADOS FINALES:');
writeln;
writeln('Jugador 1:');
writeln;
EscribeMano(jugador1);
writeln;
writeln;
writeln('Jugador 2:');
writeln;
EscribeMano(jugador2);
writeln;
writeln;

{FIN MODULARIZACION}



MayorOIgual(jugador1,jugador2,Gana1,iguales);


{Llamada al procedimiento ´MayorOIgual´ para saber que jugador gana la
partida}



IF Gana1 THEN
writeln('¡!! GANA JUGADOR 1 ¡!!')
ELSE
IF iguales THEN
writeln('¡!! HAY EMPATE ¡!!')
ELSE
writeln('¡!! GANA JUGADOR 2 ¡!!');
writeln;
write('Otra ronda? (S/N)');
REPEAT
readln(fin);
writeln;
UNTIL (fin='s') or (fin='S') or (fin='n') or (fin='N');
writeln;
UNTIL (fin='N') or (fin='n')
END.

ContraVeneno
17-01-2007, 23:56:16
ByIvan, estoy seguro que en este lugar siempre se ayuda a quien lo necesita; sin hacer distinción de ningún tipo. Y te lo digo porque ya tengo un buen tiempecito por este club y siempre he encontrado solución a mis problemas.

Lo único que se pide a cambio es que se cumplan un pequeño número de normas de convivencia (que nisiquiera son reglas estrictas), vamos pues, que lo único que se pide es que se sigua una guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php). Y desafortunamente, a pesar de que has dicho que ya la leíste, a mi me parece que no lo has hecho porque sigues haciendo cosas que van en contra de esta guía. Entonces pues, te invito a que la leas nuevamente.

Y te invito a que conozcas tambien la posibilidad de utilizar etiquetas vb (http://www.clubdelphi.com/foros/showthread.php?t=10005) para encerrar tu código y sea mas legible para todos nosotros. Edito: Este párrafo ya no es necesario ya que Marcos ha modificado tu mensaje

Ahora bien, dicho lo que se tenía que decir, mencionas que no tienes ningún error de sintaxis. Entonces, si nos dices que es lo que sale mal y en que parte de tu código esto no se realiza como debe de ser, tal vez este club te pueda dar una idea de como resolver ese problema específico.

A mi me parece que lo que requieres son dos procedimientos más (uno que realize lo que tienes en bloque 1 y 2, y otro que realize lo que tienes en el bloque 3 y 4), este procedimiento recibiendo un parámetro que indique que jugador es para hacer la distinción correspondiente.

Pero como te mencioné, si nos dices que es lo que sale mal, y en que parte de tu código las cosas no se hacen como se supone, tal vez pueda tener una mejor idea.

Saludos.

byivan
18-01-2007, 00:00:55
Joer pues parala proxima vez, me anoto lo del código para que sea mas legible, lo siento.

El porblema es que al meter en un procedure el bloque 3 4 y 5 me produce un problema en tiempo de ejecucion (el compilador lo pasa)
por tanto me gustaria que me escribieseis como serian los procedures del bloque 3 4 y 5.

Muchas gracias!

ContraVeneno
18-01-2007, 00:06:33
El porblema es que al meter en un procedure el bloque 3 4 y 5 me produce un problema en tiempo de ejecucion...

No creo que sea conveniente meter el bloque 3, 4 y 5 en un solo procedure porque no realizan lo mismo. El bloque 1 y 2 si hacen lo mismo, eso si se puede hacer en otro procedimiento, el bloque 3 y 4 tambien hacen lo mismo, por lo que se pueden meter en un solo procedimiento, el 5 ya no porque no hace lo mismo.

No, yo no te voy a escribir ningún código porque no es mi trabajo hacer tu trabajo.

Saludos.

byivan
18-01-2007, 00:10:35
Pues así entocnes no resuelvo nada, dado que ya intente esta mañana meter un procedure por bloke, y aun así solo funcionaban los 2 primeros, por eso pido ke me escribieseis como pasariais vosotros los 3 restantes.

No veo otra forma de que podais ayudarme, y tampoco hay que escribir mucho...

Todo lo que as sugerido ya lo he intentado esta mañana.

Onti
18-01-2007, 00:55:22
Esto te dara una idea de como hacerlo


Procedure InicioJugada(NomJugador:String;Dado:TValorDados;Jugador:TMano);
Begin
writeln(NomJugador);
readln;
LeeDados(Dado);
LeeMano(Dado,Jugador);
EscribeMano(Jugador);
End;