• Jueves 14 de Noviembre de 2024, 07:59

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - angels

Páginas: [1]
1
C/C++ / Dibujar En Un Tablero
« en: Jueves 18 de Agosto de 2005, 15:05 »
Buenas a todos!

Sigo con mi práctica y la verdad es que me he quedao en blanco. No sé como debo plantear la siguiente función:

Tengo la siguiente estructura de tablero:
Código: Text
  1.  
  2.  
  3. typedef struct {
  4.            int altura;
  5.            int ancho;
  6.            tCasilla **casillas
  7. }tTablero;
  8.  
  9.  
  10.  

En el menú principal cojo las variables del usuario que me indican el tamaño del tablero y dónde quiere la cabeza del gusano. Por ejemplo:

********
**c*****
********
********

Ahora bien, ahora debe realizar la función que comprueba si puedo jugar, es decir cuando saco una carta, a partir de la cabeza mover X casillas o a la derecha, izquierda, arriba o abajo.

La verdad es que no sé por dónde empezar. ¿trabajo con árboles,...? ¿Me podéis dar una pista, por favor?

Muchísimas gracias a todos.

2
C/C++ / Re: Error Con Los Punteros
« en: Jueves 18 de Agosto de 2005, 14:49 »
Buenas tardes a todos!!


Muchas gracias rir3760. He dejado la función CreaCuc como me habías indicado y no se cuelga.

Muchas gracias chuidiang. Es realmente bueno este artículo sobre punteros, me ha aclarado varias cosas. Te lo agradezco.


Sois estupendos. Hasta la próxima.  :)

3
C/C++ / Error Con Los Punteros
« en: Miércoles 17 de Agosto de 2005, 13:44 »
Buenas tardes a todos!


Veréis creo que debo tener un lio con el uso de punteros pues el programa me da error y no sé por qué. Espero que podáis ayudarme u orientarme. Mis dudas son:

Con esta estructura:
Código: Text
  1.  
  2. /* Información */
  3. typedef struct {
  4.                 int direccion;
  5.                 int medida;
  6. }tInfoTram;
  7. /* Nodo de la cola */
  8. typedef struct {
  9.                 tInfoTram infotram;
  10.                 struct tTramo *seguent;
  11. }tTramo;
  12. /* Gusano */
  13. typedef struct {
  14.                 tTramo *CabezaCuc;
  15.                 tTramo *ColaCuc;
  16. }tCuc;
  17.  
  18.  

Puedo hacer:
Código: Text
  1.  
  2. tCuc *CreaCuc(void);
  3.  
  4. tCuc *CreaCuc(void) {
  5.  
  6.      tCuc *cuc;
  7.      cuc = NULL;
  8.      return (cuc);
  9.     
  10. }
  11.  
  12.  

Pero no me deja hacer:
Código: Text
  1.  
  2. tCuc *CreaCuc(void) {
  3.  
  4.      tCuc *cuc;
  5.      cuc->CabezaCuc = NULL;
  6.      cuc->ColaCuc = NULL;
  7.      return (cuc);
  8.     
  9. }
  10.  
  11.  

Y creo que por ese motivo la siguiente función Jugar siempre dice que inserta en gusano no null cuando en el primer tramo el gusano si es null.
Código: Text
  1.  
  2. typedef struct {
  3.                 tTauler *Tablero;
  4.                 tPila *P1, *P2;
  5.                 tCuc *Cuc;
  6.                 int nTiradas;
  7.                 int nRondas;
  8. }tJoc;
  9.  
  10.  

Código: Text
  1.  
  2. int main(void) {
  3. ...
  4.  
  5. tJoc Juego;
  6. ...
  7. Juego = InicialitzarJoc(&Juego, altura, ancho);
  8.                                   
  9. Juego.Tablero->caselles[fila-1][columna-1] = CABEZA;                                      
  10. i = TableroAPantalla(Juego.Tablero);
  11.  
  12. /* Generar la pila de cartas aleatóriamente */
  13. Juego.P1 = GenerarPilaCartes();
  14.                                                                       
  15.  /* Repetir */    
  16. Repetir(&Juego);                          
  17.  
  18.  

Código: Text
  1.  
  2. tJuego InicialitzarJoc(tJoc *Juego, int altura, int ancho) {
  3.         
  4.      Juego->Tablero = CrearTauler(altura, ancho);
  5.      Juego->P1 = IniciarPila();
  6.      Juego->P2 = IniciarPila();
  7.      [COLOR=red]Juego->Cuc = CreaCuc();[/COLOR]
  8.      Juego->nRondas = 0;
  9.      Juego->nTiradas = 0;
  10.      return *Juego;
  11.  
  12. }
  13.  
  14. int Jugar(tJoc *Juego, tCarta *carta) {
  15.    
  16.    
  17.     int i;
  18.     tCarta C;
  19.     tTramo *tram;
  20.        
  21.     tram = CrearTramo(carta->pal, carta->num);
  22.     /* Añado el tramo al gusano */
  23.     [COLOR=red]i = AfegeixTramCuc(Juego->Cuc, tram);[/COLOR]
  24.    
  25.     switch (carta->pal) {
  26.    
  27.            case 1:
  28.                 printf("OROS: Derecha\n");
  29.                
  30.                 break;
  31.            case 2:
  32.                 printf("BASTOS: Izquierda\n");
  33.                 break;
  34.            case 3:
  35.                 printf("COPAS: Arriba\n");
  36.                 break;
  37.            case 4:
  38.                 printf("ESPADAS: Abajo\n");
  39.                 break;                
  40.     }
  41. }
  42.  
  43. void Repetir(tJoc *Juego) {
  44.     
  45.      int i;
  46.      tCarta C;  
  47.      tPila pila;                  
  48.     
  49.      /* Repetir */    
  50.      while (Juego->P1->cap != NULL) {
  51.           
  52.            /* Sacar una carta C de P1 */
  53.            i = Desempilar(Juego->P1, &C);
  54.                     
  55.            /* If C se puede jugar entonces */
  56.            If (Jugar(&Juego, &C)) {      
  57.                /* Añadir C al gusano */
  58.               /* Actualizar el tablero */
  59.               /* Sumar 1 a la puntuación */
  60.               /* Else */
  61.               /* Añadir C a P2 */
  62.               /* Restar k puntos de la puntuación */              
  63.            } /* Fin de If */
  64.  
  65. /* Mostrar el tablero por pantalla */
  66. /* Si el usuario quiere, pedir otra acción */
  67.    } /* Fin del While */
  68. }
  69.  
  70.  
  71.  

En Repetir y Jugar hay trozos que me faltan (comentarios) pero como soy novata prefiero ir paso a paso y aprender. El caso es que al llamar a añadir tramo al gusano para jugar (AfegeixTramCuc(Juego->Cuc, tram)) me trata el primer tramo como si el gusano no fuera null. Me podéis orientar? No he puesto todo el código porque es muy grande. Espero que quede claro y no falten datos.

Muchas gracias a todos. Gracias a vosotros estoy aprendiendo mucho.

4
C/C++ / Re: Pila De Cartas En Orden Aleatorio
« en: Martes 16 de Agosto de 2005, 12:46 »
Muchas gracias piyey. He hecho dos funciones y parece que funciona. Al final ha quedado así:

Código: Text
  1.  
  2. void InicialitzarCartes (tCarta *cartes) {
  3.      
  4.      int k;
  5.    
  6.      for (k=0;k<MAX_NUM_CARTES;k++){
  7.          cartes[k].num = 1 + k%12;
  8.          cartes[k].pal = 1 + k%4;
  9.      }
  10.  
  11. }
  12.  
  13. void BarrejarCartes (tCarta *cartes) {
  14.      
  15.      int i, j;
  16.      tCarta temp;
  17.      
  18.      // Inicializar el generador de números aleatorios
  19.      srand ((int)time(NULL));
  20.      
  21.      // Intercambiar cartas
  22.      for (i = 0; i < MAX_NUM_CARTES; i++) {
  23.          j = rand() % MAX_NUM_CARTES;
  24.          temp = cartes[i];
  25.          cartes[i] = cartes[j];
  26.          cartes[j] = temp;      
  27.      } /* Fi de for */  
  28.    
  29. }
  30.  
  31. tPila *GenerarPilaCartas(void) {
  32.  
  33.       int i, k;  
  34.       tPila *auxPila;
  35.       tCarta *carta;  
  36.       tCarta cartes[48]; //Array auxiliar.
  37.      
  38.       InicialitzarCartes(cartes);
  39.       BarrejarCartes(cartes);
  40.          
  41.       auxPila = IniciarPila();
  42.       for(k = 0; k < MAX_NUM_CARTES; k++) {
  43.             carta = &cartes[k];
  44.             i = Empilar (&auxPila, carta);            
  45.      }
  46.      return auxPila;
  47.      
  48. }
  49.  
  50.  
  51.  

Muchas gracias a todos. Hasta la próxima!  :hola:

5
C/C++ / Re: Pila De Cartas En Orden Aleatorio
« en: Martes 9 de Agosto de 2005, 14:26 »
Buenas a todos!

He estado mirando y he vuelto ha encontrar un par de fallos. Pero crea un montón de cartas. No me crea las 48 cartas desordenadas en la pila. Me podéis dar una pista?

Al final el código me ha quedado:

Código: Text
  1.  
  2. void OrdreAleatori(tPila *pila) {
  3.      
  4.      int i, j, k;
  5.      int p, n, trobat;
  6.      encontrado = FALSE;
  7.      tCarta *nou;
  8.      tNode *aux, *mou;
  9.          
  10.      for (k = 0; k < MAX_NUM_CARTES; k++) {
  11.          srand(time(0)/rand());
  12.          p = rand()%(MAX_PAL+1)+1;
  13.          n = rand()%(MAX_NUM+1)+1;
  14.          nou = CrearCarta(p, n);
  15.          aux = (tNode *) malloc (sizeof(tNode));
  16.              if (aux != NULL) {
  17.                 aux->carta = *nou;
  18.                 aux->seguent = NULL;  
  19.              }    
  20.          if (!EsBuidaPila(pila)) {
  21.             mou = pila->cap;            
  22.             while ((!encontrado) && (mou != NULL)) {
  23.                if ((aux->carta.pal == mou->carta.pal) && (aux->carta.num  == mou->carta.num)) {
  24.                          encontrado = TRUE;
  25.                      }
  26.                       mou = mou->seguent;
  27.                 }
  28.         }
  29.         i = Empilar(pila, nou);        
  30.      }
  31.      MostrarLlistaDePila(pila);
  32. }
  33.  
  34.  
Muchísimas gracias por vuestra ayuda y atención.

Muchas gracias JuanK por el aviso.  :D

6
C/C++ / Pila De Cartas En Orden Aleatorio
« en: Martes 9 de Agosto de 2005, 13:08 »
Buenos días a todos!!!

Abusando una vez más de vosotros, os pido un poco de ayuda. Espero que me podáis ayudar pues necesito una pista.

Veréis debo hacer una baraja de cartas española en una pila. Debe estar desordenada y sin repeticiones. He hecho esta función pero no acaba de hacer lo que debe.

void OrdenAleatorio (tPila *pila) {
     int i, p,n;
     tCarta *nou;
     tNode *aux, mou;

     srand(time(0));
     p = rand()%(MAX_PAL)+1;
     n = rand()%(MAX_NUM)+1;
     nou = CrearCarta(p,n);

     if (EsVaciaPila(pila)) {
          aux = (tNode *) malloc (sizeof(tNode));
          if (aux != NULL) {
               aux->carta = *nou;
               aux->seguent = NULL;
               pila->cap = aux;
          }
      }
      mou = *pila->cap;
      do {
           if ((aux->carta->pal == mou->carta->pal) && (aux->carta->num ==mou->carta->pal)) {
                mou = mou->seguent;
           }
      }while (mou.seguent == NULL);
i = Empilar(pila, nou);
}

Y las estructuras:
typedef struct {
     int pal;
     int num;
}tCarta;
typedef struct {
     tCarta carta;
     struct tNode *seguent;
}tNode;
typedef struct {
     tNode *cap;
}tPila


Me podéis orientar sobre por dónde continuar?

Muchísimas gracias a todos! Os lo agradezco mucho  :hola:

7
C/C++ / Re: Error En El Puntero A Pila
« en: Martes 9 de Agosto de 2005, 11:57 »
Buenos días a todos!!

Muchas gracias carlos20! Tenías razón. He probado lo que me dijiste y me funcionaba así que el problema era la función "EsVaciaPila(pila)". Yo tenía:

int IniciarPila (tPila *pila) {
     pila = NULL;
     return (1);
}
int EsVaciaPila (tPila *pila) {
     if (pila == NULL) {
          return(TRUE);
     }
     else {
          return(FALSE);
     }
}


Y lo he dejado como:


int IniciarPila (tPila *pila) {
     pila->cap = NULL;
     return (1);
}
int EsVaciaPila (tPila *pila) {
     if (pila->cap == NULL) {
          return(TRUE);
     }
     else {
          return(FALSE);
     }
}

Por si sirve de ayuda a alguien.


Vuelvo a daros las gracias! Sois geniales.   :lol:

8
C/C++ / Re: Error En El Puntero A Pila
« en: Lunes 8 de Agosto de 2005, 09:18 »
Buenos días a todos!

Muchas gracias JuanK! me equivoqué al copiar el codigo con el nombre de las varaiables porque los cambié para que se entendieran mejor y se me coló. En el código lo tengo igual que tú pero cuando compilo me da un Warning de incompatibilidad de tipo y cuando lo ejecuto funciona hasta allí y se me cuelga.

En cuanto a lo de que el código... Se trata de una práctica, las estructuras son del profe y la función la he hecho yo, me he guiado por libros etc. porque soy novata y estoy intentando aprender. Supongo que por eso la función no funciona. Creía que lo había entendido pero si no funciona supongo que no es así. Me podéis ayudar? Alguna pista de qué hago mal?

Muchas gracias por adelantado a todos!!

9
C/C++ / Error En El Puntero A Pila
« en: Sábado 6 de Agosto de 2005, 11:46 »
Hola a todos!

Es mi primer mensaje en este foro y espero que se ajuste correctamente a sus normas. Antes de nada os doy las gracias por anticipado a todos. Espero que alguien pueda darme una pista porque he probado ya un montón de cosas y la verdad no veo dónde me "cuelo".

Debo poder manejar una pila de cartas i en la función de apilarlas me da error en asignar el puntero a la cabeza de la pila al nuevo nodo. El trozo de código es:
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
int Empilar (tPila *pila, tCarta *carta) {
    
    tNode *nuevo;
            
    if (EsVaciaPila(pila)) {  
       nuevo = (tNode *) malloc (sizeof(tNode));
       if (nuevo != NULL) {
          nuevo->carta = *carta;
          nuevo->seguent = NULL;
          pila->cap = nou;
          return 0;
       }
       else {
          printf ("Error en la assignación de memoria.\n");
          printf ("\n Finalizamos el programa.\n");
          exit(1);
       }
    }
    else {
       nuevo = (tNode *) malloc (sizeof(tNode));
       if (nuevo != NULL) {
          nuevo->carta = *carta;
          nuevo->seguent = pila->cap;
          pila->cap = nou;
          return 0;
       }
       else {
          printf ("Error en la assignación de memòria.\n");
          printf ("\n Finalizamos el programa.\n");
          exit(1);
       }    
    }
}

Las estructuras son:

typedef struct {
                int pal;
                int num;
}tCarta;

typedef struct {
                tCarta carta;
                struct tNode *seguent;
}tNode;

typedef struct {
                tNode *cap;
}tPila;
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
Creo que el problema que cuelga el programa es esta asignación pero... Seguiré probando...

Muchas gracias por la ayuda!!!
Saludos a todos.

Páginas: [1]