Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Modularizar el programa principal (https://www.clubdelphi.com/foros/showthread.php?t=39337)

byivan 17-01-2007 15:25:59

Modularizar el programa principal
 
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, 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, 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

Cita:

Empezado por ContraVeneno
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:

Cita:

"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

Cita:

Empezado por lag_0
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 :


Código Delphi [-]
 
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. 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 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

Cita:

Empezado por byivan
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.


La franja horaria es GMT +2. Ahora son las 10:24:25.

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