• Lunes 29 de Abril de 2024, 08:08

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

Páginas: [1] 2 3 ... 5
1
C/C++ / Re: Cosilla De Novato... Ayuda Plis!!!!
« en: Domingo 11 de Diciembre de 2005, 00:47 »
Me parece que tendrías que consultar algún libro de matemáticas que trate sobre la teoría de números o algún libro donde vengan algoritmos matemáticos para generar los números primos.
   Empleando un método de "fuerza bruta" y algo limitado, aquí te muestro un ejemplo para generar a lo más 1000 números primos. Revísalo y si tienes alguna duda de como se generan me mandas un mensaje para explicártelo
Código: Text
  1. borrado por juank
  2.  
  3.  

2
C/C++ / Re: Cosilla De Novato... Ayuda Plis!!!!
« en: Sábado 10 de Diciembre de 2005, 23:48 »
¿puedes poner el código donde intentaste resolverlo?

3
C/C++ / Re: Archivos
« en: Sábado 10 de Diciembre de 2005, 23:46 »
Para trabajar con archivos tienes que conocer las funciones para manejo de archivos que vienen con la librería estándar declaradas en <stdio.h>, o conocer los flujos estándar de entrada y salida cuyas clases viene declaradas en <iostream.h>.
   Por otra parte, buscar el comando específico que quieres y modificarlo depende de como esté estructurado el archivo en el cual se encuentra este comando. ¿Es un archivo de texto plano, sin estructura (los comúnmente con extensión .TXT)? ¿o, por el contrario, es un archivo de texto con campos fijos, donde, por ejemplo, el nombre del comando, su descripción y los ejemplos sean de un tamaño fijo?
   Puedes usar la función strstr, declarada en <string.h> para buscar el comando en una línea de texto.

4
C/C++ / Re: Ayuda
« en: Sábado 10 de Diciembre de 2005, 20:59 »
La función int rand (); declarada en <stdlib.h> te regresa un número pseudo-aleatoreo entre 0 y RAND_MAX, donde RAND_MAX es una constante definida en <stdlib.h>. Si quieres un número aleatoreo entre 0 y 1, sólo tienes que dividir el número que te regresa la función rand () entre RAND_MAX (teniendo en cuenta convertir alguno de los operandos de la división al tipo double o float, de lo contrario se efectúa una división entera truncando los decimales). Te muestro un ejemplo:
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;time.h&#62;
  5.  
  6. main ()
  7. {
  8.    int i;
  9.  
  10.    srand (time (NULL));
  11.    printf (&#34;&#092;n&#34;);
  12.    for (i = 0; i &#60; 20; i++)
  13.       printf (&#34;%g&#092;n&#34;, rand() / ((double)RAND_MAX));
  14.  
  15.    return EXIT_SUCCESS;
  16. }
  17.  
  18.  

5
C/C++ / Re: Un Jueguito
« en: Viernes 9 de Diciembre de 2005, 05:01 »
El programa se detiene porque estás usando la función getche, la cual detiene la ejecución del programa hasta que presionas una tecla. Si quieres que esto no suceda puedes usar la función kbhit, declarada en el archivo de cabecera <conio.h>, al igual que la función getche. La función kbhit regresa un valor de verdadero si se presionó una tecla y falso en caso contrario, pero no retira el caracter presionado del buffer interno del teclado que guarda el sistema, por lo que tienes que llamar después a una función que lo retire como getche o getch.
   Por otra parte, no es conveniente usar la función delay, ya que en el lapso que le des estás incapacitada de responder a los eventos del teclado. Para esto es mejor usar la función time que regresa la hora del sistema y la función difftime que regresa el tiempo transcurrido en segundos entre dos tiempos.
   Te muestro un ejemplo sencillo que aclara su uso. Con las ideas aquí expuestas puedes terminar tu programa.
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;conio.h&#62;
  5. #include &#60;ctype.h&#62;
  6. #include &#60;time.h&#62;
  7.  
  8. int main ()
  9. {
  10.    char ch;
  11.    time_t timer1, timer2;
  12.    double segundos_transcurridos = 1.0;
  13.  
  14.    clrscr ();
  15.    time (&timer1);
  16.    gotoxy (1, 1);
  17.    printf (&#34;Presiona la letra 'q' para salir...&#34;);
  18.    gotoxy (1, 10);
  19.    printf (&#34;Digito presionado:&#34;);
  20.    gotoxy (1, 20);
  21.    printf (&#34;Segundos transcurridos:&#34;);
  22.    while (1) {
  23.       if (kbhit ())
  24.          if ((ch = getch ()) == 'q')
  25.             break;
  26.          else if (isdigit (ch)) {
  27.             gotoxy (19, 10);
  28.             printf (&#34;%c&#34;, ch);
  29.          }
  30.       if (difftime (time (&timer2), timer1) &#62; segundos_transcurridos) {
  31.          gotoxy (25, 20);
  32.          printf (&#34;%2.g&#34;, segundos_transcurridos);
  33.          segundos_transcurridos++;
  34.       }
  35.    }
  36.  
  37.    return EXIT_SUCCESS;
  38. }
  39.  
  40.  

6
C/C++ / Re: Metodo De Burbuja
« en: Viernes 9 de Diciembre de 2005, 00:00 »
Bueno, no sé si sea una pérdida de tiempo volverte a decir esto, pero ahí va, quizá alguien más que lea este foro lo comprenda

En el documento donde te indican cómo hacer preguntas viene
Citar
ANTES DE PREGUNTAR

Antes de hacer una pregunta técnica por email, o en un grupo de noticias, o en un sitio de charla de un sitio web, haga lo siguiente:

Trate de encontrar una respuesta leyendo el manual.

Trate de encontrar una respuesta leyendo un FAQ (Frequently Answered Questions - Preguntas contestadas frecuentemente )

Trate de encontrar una respuesta buscando en la web

Trate de encontrar una respuesta preguntándole a un amigo calificado
El método de la burbuja, por el cual estás preguntando, cualquiera que haya estudiado la carrera de computación o que se haya introducido a este mundo y tenga alguna experiencia, sabe que este método viene explicado en cualquier libro básico de computación, por lo que la primera indicación de la cita, la cual dice
Citar
Trate de encontrar una respuesta leyendo el manual.
es obvio que no la has llevado a cabo, porque no creo que no te puedas conseguir algún libro de programación básica. Pero bueno, admitamos que a lo mejor, por el momento, en este instante no tienes a la mano un libro. Sigamos con la segunda indicación, la que te pide que leas un FAQ. Bueno, a los que comienzan a explorar este mundo de la computación e internet quizá nunca hayan oído hablar de este tipo de documentos y puede que también tu estés en este caso. Pero ahora viene la tercera indicación
Citar
Trate de encontrar una respuesta buscando en la web
si me dices que nunca has oído hablar del google o del yahoo, eso definitivamente no te lo voy a creer, pues el hecho de haber entrado en este foro indica que ya conoces al menos cómo buscar cosas en la red. Buscando la palabra método de la burbuja en las páginas en español del google inmediatamente me salieron infinidad de referencias de páginas y sin ir más lejos, en la primera página, la cual es esta
http://www.itlp.edu.mx/publica/tutoriales/.../tema%202_3.htm
viene explicado este método y hasta el código en C para ordenar N números enteros.
   Esto nos indica que eres del tipo de lector que quiere que todo se lo den "cocinado" sin poner nada de su parte al exponer un problema

7
C/C++ / Re: Un Jueguito
« en: Jueves 8 de Diciembre de 2005, 01:56 »
compilé tu ejemplo sin errores y lo probé varias veces ¿cuáles son los errores que mencionas?

8
C/C++ / Re: Gracias!! Ayuda
« en: Miércoles 7 de Diciembre de 2005, 23:45 »
La función printf está declarada en el encabezado <stdio.h> y pertence a la librería estándar de entrada y salida, y la puedes encontrar tanto en el lenguaje C como en C++.
   El flujo estándar de salida cout es parte de los flujos de entrada y salida, y las clases donde viene definido este flujo están declaradas en el archivo de encabezado <iostream.h>. Sólo está soportado en el lenguaje C++, por lo que en C es imposible usarlo.
   En las clases donde viene definido este flujo, el operador << está sobrecargado con los tipos básicos del lenguaje C++, por lo que si quieres escribir a la salida estándar (que puede ser la pantalla o un redireccionamiento hacia un archivo) cualquiera de estos tipos sólo tienes, por ejemplo en el caso de un tipo entero, que ponerlo así
Código: Text
  1.  
  2. int d;
  3. cout &#60;&#60; d;
  4.  
  5.  
como Jugador[numjugador]->numder está declarado como un entero, entonces
Código: Text
  1.  
  2. cout &#60;&#60; Jugador[numjugador][i]-&#62;numder;
  3.  
  4.  
es equivalente a
Código: Text
  1.  
  2. printf (&#34;%d &#34;, Jugador[numjugador][i]-&#62;numder);
  3.  
  4.  

9
C/C++ / Re: Un Jueguito
« en: Miércoles 7 de Diciembre de 2005, 11:37 »
por cierto ¿por qué adjuntaste el archivo KBHIT.DLL en tu último "post"?

10
C/C++ / Re: Un Jueguito
« en: Miércoles 7 de Diciembre de 2005, 11:34 »
Cuando estás redactando una respuesta te aparecen varios botones pequeños arriba de donde estás escribiendo; comienzan con una B en negritas, seguida de una I, una U, etc. Hay uno de esos botones que dice CODE, al presionarlo te escribe en donde está el cursor esto [ CODE ] y si lo vuelves a presionar te escribe esto [ /CODE ] (aquí le estoy poniendo espacios entre los paréntesis cuadrados para que se vea y no me lo formatee), de tal forma que, por ejemplo una de las funciones que escribiste quedarían así
Código: Text
  1.  
  2. int aleatorio()
  3. {
  4.    int num=0;
  5.  
  6.    num = random(9)+1;
  7.  
  8.    return num;
  9. }
  10.  
  11.  
aunque aquí yo le puse las identaciones en las instrucciones que están entre las llaves. Deberías de ponerlas en tu código para poder revisarlo más fácilmente

11
C/C++ / Re: Un Jueguito
« en: Miércoles 7 de Diciembre de 2005, 03:41 »
¿puedes poner el código entre las etiqueta [ CODE ] y [ /CODE ] (sin los espacios), para poder revisarlo mejor?

12
C/C++ / Re: Un Jueguito
« en: Miércoles 7 de Diciembre de 2005, 01:43 »
bueno, más bien la pregunta sería si tu tienes alguna idea de cómo hacerlo puesto que eres tú quien lo va a hacer, y sobre esa idea podemos opinar qué tan factible es. A "bote pronto" se me ocurre que tienes que hacer un ciclo esperando la respuesta del usuario mientras pintas y despintas la MOLE. Para controlar el tiempo puedes usas las funciones declaradas en el encabezado <time.h>, para el sonido puedes mandar a escribir el caracter '\a' el cual provoca que se oiga un sonido pero cómo se oiga es dependiente de la pc en la cual se ejecute el programa. Necesitas hacer una función que te pinte el tablero del juego, otra que que te pinte y te quite la MOLE y declarar variables para llevar la cuenta del nivel del juego y de las atrapadas y erradas. Bien, habiendo dicho esto ¿tienes alguna idea de como implementar esto en C (o C++)? ¿tienes otra idea de cómo hacerlo?

13
C/C++ / Re: Un Jueguito
« en: Martes 6 de Diciembre de 2005, 23:37 »
¿cual compilador usas?

14
C/C++ / Re: Gracias!! Ayuda
« en: Domingo 4 de Diciembre de 2005, 18:27 »
Hola gdan_m. Modifiqué un poco el programa para que corriera en el Dev C++. Tenía un error en la función Juega que el compilador Turbo C no me lo detectaba pero en el Dev C++ abortaba el programa. Ya lo corregí. Puse unas líneas de comentarios para indicar cual código modifiqué o agregué.
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;time.h&#62;
  5. /******************************************************************************/
  6. /******************* Se sustituyó &#60;conio.h&#62; por este encabezado ***************/
  7. #include &#60;windows.h&#62;
  8. /******************************************************************************/
  9. /******************************************************************************/
  10.  
  11. #define MAXFICHASXJUGADOR 21
  12.  
  13. struct ficha {
  14.   int numder;
  15.   struct ficha *der;
  16.   int numizq;
  17.   struct ficha *izq;
  18. };
  19. typedef struct ficha FICHA;
  20. typedef struct ficha *PTRFICHA;
  21.  
  22. FICHA Ficha[28];
  23. PTRFICHA Jugador[4][MAXFICHASXJUGADOR], Monton[28], cabeza, cola;
  24.  
  25. /******************************************************************************/
  26. /******************* Código que se agregó *************************************/
  27. HANDLE hConsoleOut, hConsoleIn;
  28.  
  29. void randomize ()
  30. {
  31.   srand (time (NULL));
  32. }
  33.  
  34. int random (int num)
  35. {
  36.   return rand () % num;
  37. }
  38.  
  39. void clrscr ()
  40. {
  41.   /* Obtiene una consola para esta aplicación */
  42.   AllocConsole();
  43.   /* Obtiene manejadores para la entrada y salida de la consola */
  44.   hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
  45.   hConsoleIn = GetStdHandle(STD_INPUT_HANDLE);
  46. }
  47.  
  48. void gotoxy (int x, int y)
  49. {
  50.   COORD coordScreen;
  51.   coordScreen.X = x - 1;
  52.   coordScreen.Y = y - 1;
  53.   SetConsoleCursorPosition (hConsoleOut, coordScreen);
  54. }
  55.  
  56. /*****************************************************************************/
  57. /******************************************************************************/
  58.  
  59. void InicializaFichas ()
  60. {
  61.   int i, j;
  62.  
  63.   for (i = 0; i &#60; 7; i++)
  64.      for (j = i; j &#60; 7; j++) {
  65.         int k, m;
  66.         for (k = m = 0; m &#60; i; m++)
  67.            k += 7 - m;
  68.         Ficha[k + j - i].numder = i;
  69.         Ficha[k + j - i].numizq = j;
  70.         Ficha[k + j - i].der = Ficha[k + j - i].izq = NULL;
  71.      }
  72.   randomize ();
  73. }
  74.  
  75. void NuevoJuego ()
  76. {
  77.   int i, j;
  78.  
  79.   for (i = 0; i &#60; 28; i++) {
  80.       Ficha[i].der = Ficha[i].izq = NULL;
  81.      Monton[i] = Ficha + i;
  82.   }
  83.   for (i = 0; i &#60; 4; i++)
  84.      for (j = 0; j &#60; 7; j++)
  85.         Jugador[i][j] = NULL;
  86.   cabeza = cola = NULL;
  87. }
  88.  
  89. PTRFICHA EscogeFicha ()
  90. {
  91.   int i, bandera;
  92.   PTRFICHA p;
  93.  
  94.   for (bandera = i = 0; i &#60; 28; i++)
  95.      if (Monton[i] != NULL) {
  96.         bandera = 1;
  97.         break;
  98.      }
  99.   if (!bandera)   /* no hay fichas en el monton */
  100.      return NULL;
  101.  
  102.   while (1) {
  103.      i = random (28);
  104.      if (Monton[i] != NULL) {
  105.         p = Monton[i];
  106.         Monton[i] = NULL;
  107.         return p;
  108.      }
  109.   }
  110. }
  111.  
  112. void ReparteFichas (int numjugador)
  113. {
  114.   int i;
  115.   for (i = 0; i &#60; 7; i++)
  116.      Jugador[numjugador][i] = EscogeFicha ();
  117. }
  118.  
  119. void ImprimeFichasJugador (int numjugador, int pantalla)
  120. {
  121.   int i, startcol;
  122.  
  123.   startcol = !pantalla ? 1 : 41;
  124.   gotoxy (startcol + 11, 5 + numjugador*4);
  125.   for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  126.      if (Jugador[numjugador][i] != NULL)
  127.         printf (&#34;%d &#34;, Jugador[numjugador][i]-&#62;numizq);
  128.   gotoxy (startcol, 5 + numjugador*4 + 1);
  129.   printf (&#34;Jugador #%d &#34;, numjugador + 1);
  130.   for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  131.      if (Jugador[numjugador][i] != NULL)
  132.         printf (&#34;- &#34;);
  133.   gotoxy (startcol + 11, 5 + numjugador*4 + 2);
  134.   for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  135.      if (Jugador[numjugador][i] != NULL)
  136.         printf (&#34;%d &#34;, Jugador[numjugador][i]-&#62;numder);
  137. }
  138.  
  139. void ImprimeMonton (int pantalla)
  140. {
  141.   int i, startcol;
  142.  
  143.   startcol = !pantalla ? 1 : 41;
  144.   gotoxy (startcol + 11, 21);
  145.   for (i = 0; i &#60; 28; i++)
  146.      if (Monton[i] != NULL)
  147.         printf (&#34;%d &#34;, Monton[i]-&#62;numizq);
  148.   gotoxy (startcol, 22);
  149.   printf (&#34;Mont¢n     &#34;);
  150.   for (i = 0; i &#60; 28; i++)
  151.      if (Monton[i] != NULL)
  152.         printf (&#34;- &#34;);
  153.   gotoxy (startcol + 11, 23);
  154.   for (i = 0; i &#60; 28; i++)
  155.      if (Monton[i] != NULL)
  156.         printf (&#34;%d &#34;, Monton[i]-&#62;numder);
  157. }
  158.  
  159. void ImprimeJuego ()
  160. {
  161.   int i;
  162.   PTRFICHA ptr;
  163.  
  164.   gotoxy (12, 1);
  165.   for (ptr = cabeza; ptr != NULL; ptr = ptr-&#62;der)
  166.      printf (&#34;%d &#34;, ptr-&#62;numizq);
  167.   gotoxy (1, 2);
  168.   printf (&#34;Juego      &#34;);
  169.   for (ptr = cabeza; ptr != NULL; ptr = ptr-&#62;der)
  170.      printf (&#34;- &#34;);
  171.   gotoxy (12, 3);
  172.   for (ptr = cabeza; ptr != NULL; ptr = ptr-&#62;der)
  173.      printf (&#34;%d &#34;, ptr-&#62;numder);
  174. }
  175.  
  176. void ImprimeEstadoDelJuego (int numjugadores, int paso)
  177. {
  178.   int i, j, startcol;
  179.   static int mitad_pantalla = 0;
  180.  
  181.   for (i = 3; i &#60; 24; i++) {
  182.      gotoxy (40, i + 1);
  183.      printf (&#34;³&#34;);
  184.   }
  185.   startcol = !mitad_pantalla ? 1 : 41;
  186.   for (i = 3; i &#60; 24; i++) {
  187.      gotoxy (startcol, i + 1);
  188.      for (j = 0; j &#60; 39; j++) printf (&#34; &#34;);
  189.   }
  190.   gotoxy (startcol, 4);
  191.   for (i = 0; i &#60; 14; i++) printf (&#34;#&#34;);
  192.   printf (&#34; Paso: %3d &#34;, paso);
  193.   for (i = 0; i &#60; 14; i++) printf (&#34;#&#34;);
  194.   if (numjugadores &#60; 4)
  195.      ImprimeMonton (mitad_pantalla);
  196.   for (i = 0; i &#60; numjugadores; i++)
  197.      ImprimeFichasJugador (i, mitad_pantalla);
  198.   ImprimeJuego ();
  199.   mitad_pantalla = !mitad_pantalla;
  200.   gotoxy (1, 25);
  201.   printf (&#34;&#092;tpresiones una tecla para continuar...&#34;);
  202. /******************************************************************************/
  203. /******************* Código que se modificó ***********************************/
  204.   getchar ();
  205. /******************************************************************************/
  206. /******************************************************************************/
  207. }
  208.  
  209. int Ganador (int numjugadores)
  210. {
  211.   int i, j, bandera;
  212.  
  213.   for (i = 0; i &#60; numjugadores; i++) {
  214.      for (bandera = j = 0; j &#60; MAXFICHASXJUGADOR; j++)
  215.         if (Jugador[i][j] != NULL) {
  216.            bandera = 1;
  217.            break;
  218.         }
  219.      if (!bandera)
  220.         return i + 1;
  221.   }
  222.   return 0;
  223. }
  224.  
  225. int JuegoCerrado ()
  226. {
  227.   int contador;
  228.   PTRFICHA ptr;
  229.  
  230.   if (cabeza == NULL || cabeza-&#62;numizq != cola-&#62;numder)
  231.      return 0;
  232.   contador = 0;
  233.   for (ptr = cabeza; ptr != NULL; ptr = ptr-&#62;der) {
  234.      if (ptr-&#62;numizq == cabeza-&#62;numizq)
  235.         contador++;
  236.      if (ptr-&#62;numder == cabeza-&#62;numizq)
  237.         contador++;
  238.   }
  239.   return contador == 8;
  240. }
  241.  
  242. void Juega (int jugadoractual)
  243. {
  244.   int i;
  245.   PTRFICHA ptr;
  246.  
  247.   /* El juego va a comenzar. El jugador tiene 7 fichas iniciales   */
  248.   /* se toma la £ltima ficha de las 7 como la que va a comenzar la */
  249.   /* partida. Se pod¡a haber escogido una al azar pero se hace as¡ */
  250.   /* por simplicidad. Los apuntadores cabeza y cola apuntan a este */
  251.   /* elemento                                                      */
  252.   if (cabeza == NULL) {
  253.      cola = cabeza = Jugador[jugadoractual][6];
  254.      Jugador[jugadoractual][6] = NULL;
  255.      return;
  256.   }
  257.  
  258.   /* Si el flujo del programa contin£a hasta aqu¡ es que ya comenz¢ */
  259.   /* la partida. Se recorren las fichas del jugador actual para ver */
  260.   /* si alguna de ellas encaja en uno de los extremos. En caso de   */
  261.   /* que si, entonces se escoje esta ficha y se inserta en la lista */
  262.   for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  263. /******************************************************************************/
  264. /******************* Código que se agregó *************************************/
  265.      if (Jugador[jugadoractual][i] == NULL)
  266.         continue;
  267. /******************************************************************************/
  268. /******************************************************************************/
  269.      else if (Jugador[jugadoractual][i]-&#62;numder == cabeza-&#62;numizq ||
  270.          Jugador[jugadoractual][i]-&#62;numizq == cabeza-&#62;numizq) {
  271.         if (Jugador[jugadoractual][i]-&#62;numizq == cabeza-&#62;numizq) {
  272.            int intercambio = Jugador[jugadoractual][i]-&#62;numizq;
  273.            Jugador[jugadoractual][i]-&#62;numizq = Jugador[jugadoractual][i]-&#62;numder;
  274.            Jugador[jugadoractual][i]-&#62;numder = intercambio;
  275.         }
  276.         cabeza-&#62;izq = Jugador[jugadoractual][i];
  277.         Jugador[jugadoractual][i]-&#62;der = cabeza;
  278.         cabeza = Jugador[jugadoractual][i];
  279.         Jugador[jugadoractual][i] = NULL;
  280.         return;
  281.      } else if (Jugador[jugadoractual][i]-&#62;numizq == cola-&#62;numder ||
  282.                 Jugador[jugadoractual][i]-&#62;numder == cola-&#62;numder) {
  283.         if (Jugador[jugadoractual][i]-&#62;numder == cola-&#62;numder) {
  284.            int intercambio = Jugador[jugadoractual][i]-&#62;numder;
  285.            Jugador[jugadoractual][i]-&#62;numder = Jugador[jugadoractual][i]-&#62;numizq;
  286.            Jugador[jugadoractual][i]-&#62;numizq = intercambio;
  287.         }
  288.         cola-&#62;der = Jugador[jugadoractual][i];
  289.         Jugador[jugadoractual][i]-&#62;izq = cola;
  290.         cola = Jugador[jugadoractual][i];
  291.         Jugador[jugadoractual][i] = NULL;
  292.         return;
  293.      }
  294.  
  295.   /* No se encontraron fichas en el jugador actual que encajaran, */
  296.   /* entonces se escogen fichas del mont¢n hasta que una de ellas */
  297.   /* encaje en la lista o hasta que se agote el mont¢n            */
  298.   while (1) {
  299.      if ((ptr = EscogeFicha ()) == NULL)
  300.         return;
  301.      if (ptr-&#62;numder == cabeza-&#62;numizq || ptr-&#62;numizq == cabeza-&#62;numizq) {
  302.         if (ptr-&#62;numizq == cabeza-&#62;numizq) {
  303.            int intercambio = ptr-&#62;numizq;
  304.            ptr-&#62;numizq = ptr-&#62;numder;
  305.            ptr-&#62;numder = intercambio;
  306.         }
  307.         cabeza-&#62;izq = ptr;
  308.         ptr-&#62;der = cabeza;
  309.         cabeza = ptr;
  310.         return;
  311.      } else if (ptr-&#62;numizq == cola-&#62;numder || ptr-&#62;numder == cola-&#62;numder) {
  312.         if (ptr-&#62;numder == cola-&#62;numder) {
  313.            int intercambio = ptr-&#62;numder;
  314.            ptr-&#62;numder = ptr-&#62;numizq;
  315.            ptr-&#62;numizq = intercambio;
  316.         }
  317.         cola-&#62;der = ptr;
  318.         ptr-&#62;izq = cola;
  319.         cola = ptr;
  320.         return;
  321.      }
  322.      for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  323.         if (Jugador[jugadoractual][i] == NULL) {
  324.            Jugador[jugadoractual][i] = ptr;
  325.            break;
  326.         }
  327.   }
  328. }
  329.  
  330. int main ()
  331. {
  332.   int i, paso = 0, jugadoractual, numjugadores = 2;
  333.  
  334.   clrscr ();
  335.   InicializaFichas ();
  336.   NuevoJuego ();
  337.  
  338.   for (i = 0; i &#60; numjugadores; i++)
  339.      ReparteFichas (i);
  340.   ImprimeEstadoDelJuego (numjugadores, paso);
  341.   jugadoractual = random (numjugadores);
  342.   while (1) {
  343.      if (Ganador(numjugadores) || JuegoCerrado())
  344.         break;
  345.      Juega (jugadoractual);
  346.      if (jugadoractual &#60; numjugadores - 1)
  347.         jugadoractual++;
  348.      else
  349.         jugadoractual = 0;
  350.      paso++;
  351.      ImprimeEstadoDelJuego (numjugadores, paso);
  352.   }
  353.   if (Ganador(numjugadores))
  354.      printf (&#34;&#092;nEl ganador es el jugador #%d&#34;, Ganador(numjugadores));
  355.   else if (JuegoCerrado())
  356.      printf (&#34;&#092;nEl juego se cerr¢&#34;);
  357. /******************************************************************************/
  358. /******************* Código que se agregó *************************************/
  359.   getchar();
  360. /******************************************************************************/
  361. /******************************************************************************/
  362. }
  363.  
  364.  

15
C/C++ / Re: Imprimir Desde Visual C
« en: Sábado 3 de Diciembre de 2005, 08:49 »
En modo consola puedes usar la función fprintf que funciona igual que la función printf, excepto que esta es para archivos. Cuando corres un programa hay predefinidos unos identificadores a archivo que tu puedes usar sin tener que abrirlos, estos son
Citar
stdin - entrada estándar
stdout - salida estándar
stderr - salida de errores estándar
stdprn - salida a la impresora
stdnul - salida y entrada nula
en este caso, en el primer parámetro de la función fprintf pones stdprn para que mande la salida a la impresora.

16
C/C++ / Re: Necesito Ayuda Por Favor Es Urgente
« en: Sábado 3 de Diciembre de 2005, 08:42 »
Bueno, eso depende de como van a estar los datos del número y el nombre en las líneas que componen el archivo. Por ejemplo, los sistemas de gestión de bases de datos antiguos traían una opción (seguramente los de ahora también los traen pero no sé si funcionan igual) para pasar una tabla a un archivo de texto plano (o sea sin formato). Entonces si, por ejemplo, la tabla se componia con registros cuyos campos eran nombre, un dato entero y un dato en punto flotante, un registro como este
Citar
Miguel de Cervantes y Saavedra, 1547, 3.1416
lo pasaba a una línea de texto de esta manera
Citar
"Miguel de Cervantes y Saavedra", "1547", "3.1416"
y así, el siguiente registro de la tabla, lo convertía a esta línea de texto con los campos entrecomillados y la añadía al archivo de texto.

   Vamos a suponer que el archivo de texto del que tu quieres leer los datos para pasarlos al árbol binario tenga este formato, o sea, un entero entrecomillado, una coma, y después un nombre entrecomillado en cada línea, entonces este es el fragmento de un código que extrae estos campos.
Código: Text
  1.  
  2. #define MAXSTR 512
  3.  
  4. int i, numero;
  5. char *p = cadena, nombre[MAXSTR];
  6.  
  7. for (; *p && *p != '&#092;&#34;'; p++) /* busca las comillas que comienzan el numero */
  8.   &#59;
  9. p++;
  10. sscanf (p, &#34;%d&#34;, &numero);
  11. for (; *p && *p != '&#092;&#34;'; p++) /* busca las comillas que finalizan el numero */
  12.   &#59;
  13. for (p++; *p && *p != '&#092;&#34;'; p++) /* busca las comillas que comienzan el nombre */
  14.   &#59;
  15. for (p++, i = 0; *p && *p != '&#092;&#34;'; i++, p++)
  16.    nombre[i] = *p;
  17. nombre[i] = '&#092;0';
  18. Inserta (numero, nombre);
  19.  
  20.  

17
C/C++ / Re: Gracias!! Ayuda
« en: Viernes 2 de Diciembre de 2005, 21:17 »
gdan_m, se me olvidó decirte ayer (bueno en realidad no sé si donde estás ya se acabó el día, aca en esta parte del planeta donde me encuentro son en este momento las 1:10pm) que siguieras contestando en la misma liga donde iniciaste la discusión, porque proseguir la misma en distintas ligas confunde a la gente que ve el foro; me imagino que sí sabes donde presionar el botón para contestar ¿no? Si quieres mantengámonos en esta donde te estoy escribiendo.

   Bueno, con respecto a tu programa, no sé cual es la manera en que juegan el dominó allá. Acá lo jugamos generalmente cuatro personas, se reparten las 28 fichas entre ellos (por lo que no quedan fichas en el montón, y por lo tanto, cuando una persona no tiene ficha que sacar pasa su turno a la siguiente persona) y se juega de parejas, donde cada pareja se coloca una frente a la otra y al comenzar el juego el que tiene la ficha 6|6 es el que sale y los jugadores van colocando las fichas por turno por mano derecha, o sea, el que está a la derecha del que colocó la última ficha es al que le corresponde jugar. El juego se acaba cuando una de las parejas coloca su última ficha o cuando el juego está cerrado por los dos extremos. En caso de que el juego quede cerrado se suman los puntos de cada pareja y gana el que tenga menos puntos y en caso de que esta suma sea igual gana la pareja que haya sacado la ficha al principio. El encuentro se pacta a 100 puntos, de modo que cuando una pareja gana un juego, los puntos de la pareja contraria se le suman a la pareja ganadora y se vuelven a repartir las fichas pero en este caso, al comenzar, ya no se saca la ficha 6|6 al principio, sino que la pareja ganadora es la que decide qué ficha sacar. Gana el encuentro la primera pareja que rebase los 100 puntos. Las reglas es que las parejas no se deben de hablar ni hacer señas y la única vez en que se les permite hablar es cuando tienen la mano y les corresponde sacar al comienzo del juego y uno al otro se preguntan solamente si saca uno o saca el otro. Generalmente se juega de apuesta pero aún sin jugar de apuesta el juego es muy adictivo.

   Como al comienzo escribiste que van a ser dos jugadores entonces voy a suponer que se reparten 7 fichas a cada uno, para más simplicidad voy a elegir un jugador al azar para que comienze la partida y también al azar este jugador va a sacar su primera ficha. Después, por turno, cada jugador va poniendo una ficha que esté en los extremos de las que están en la mesa; caso de que un jugador no tenga ficha que sacar, escoge fichas del montón hasta encontrar alguna que cuadre en la mesa y de no ser así cede el turno al otro jugador. El juego acaba cuando un jugador termine de tirar su última ficha o cuando el juego está cerrado. Por cierto aquí voy a tener que cambiar el tamaño de las fichas que los jugadores puedan tener, el cual lo voy a poner a 28 - 7 = 21, que son el máximo que en teoría un jugador puede tener, al jugar de dos uno en contra del otro.

   La lista la voy a utilizar cuando un jugador tira una ficha. En este caso la inserto al comienzo o al final, con lo cual cambiarán los apuntadores cabeza o cola.

   Te paso el programa, al final de cuentas no resultó tan fácil; bueno fácil si, lo que fue es laborioso, aparte que para las pruebas tuve que usar las funciones clrscr() que limpia la pantalla, la función gotoxy (x, y) que mueve el cursor a la coordenada (x, y) de la pantalla y la función getch() que espera a que el usuario presione una tecla sin hacer "eco" en la pantalla, para poder ver el resultado anterior junto con el actual y no se corriera la pantalla. Además de estas funciones que son propias del compilador use la función random (num), que me regresa un número pseudo-aleatoreo entre 0 y num - 1. El programa lo corrí con el Turbo C v2.0, pero si usas otro compilador y no reconoce estas funciones me dices para ver como lo podemos cambiar para que corra en él.

   Córrelo, haz varias pruebas y si no entiendes algo del programa me dices para explicártelo.
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;time.h&#62;
  5. #include &#60;conio.h&#62;
  6.  
  7. #define MAXFICHASXJUGADOR 21
  8.  
  9. struct ficha {
  10.    int numder;
  11.    struct ficha *der;
  12.    int numizq;
  13.    struct ficha *izq;
  14. };
  15. typedef struct ficha FICHA;
  16. typedef struct ficha *PTRFICHA;
  17.  
  18. FICHA Ficha[28];
  19. PTRFICHA Jugador[4][MAXFICHASXJUGADOR], Monton[28], cabeza, cola;
  20.  
  21. void InicializaFichas ()
  22. {
  23.    int i, j;
  24.  
  25.    for (i = 0; i &#60; 7; i++)
  26.       for (j = i; j &#60; 7; j++) {
  27.          int k, m;
  28.          for (k = m = 0; m &#60; i; m++)
  29.             k += 7 - m;
  30.          Ficha[k + j - i].numder = i;
  31.          Ficha[k + j - i].numizq = j;
  32.          Ficha[k + j - i].der = Ficha[k + j - i].izq = NULL;
  33.       }
  34.    randomize ();
  35. }
  36.  
  37. void NuevoJuego ()
  38. {
  39.    int i, j;
  40.  
  41.    for (i = 0; i &#60; 28; i++) {
  42.        Ficha[i].der = Ficha[i].izq = NULL;
  43.       Monton[i] = Ficha + i;
  44.    }
  45.    for (i = 0; i &#60; 4; i++)
  46.       for (j = 0; j &#60; 7; j++)
  47.          Jugador[i][j] = NULL;
  48.    cabeza = cola = NULL;
  49. }
  50.  
  51. PTRFICHA EscogeFicha ()
  52. {
  53.    int i, bandera;
  54.    PTRFICHA p;
  55.  
  56.    for (bandera = i = 0; i &#60; 28; i++)
  57.       if (Monton[i] != NULL) {
  58.          bandera = 1;
  59.          break;
  60.       }
  61.    if (!bandera)   /* no hay fichas en el monton */
  62.       return NULL;
  63.  
  64.    while (1) {
  65.       i = random (28);
  66.       if (Monton[i] != NULL) {
  67.          p = Monton[i];
  68.          Monton[i] = NULL;
  69.          return p;
  70.       }
  71.    }
  72. }
  73.  
  74. void ReparteFichas (int numjugador)
  75. {
  76.    int i;
  77.    for (i = 0; i &#60; 7; i++)
  78.       Jugador[numjugador][i] = EscogeFicha ();
  79. }
  80.  
  81. void ImprimeFichasJugador (int numjugador, int pantalla)
  82. {
  83.    int i, startcol;
  84.  
  85.    startcol = !pantalla ? 1 : 41;
  86.    gotoxy (startcol + 11, 5 + numjugador*4);
  87.    for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  88.       if (Jugador[numjugador][i] != NULL)
  89.          printf (&#34;%d &#34;, Jugador[numjugador][i]-&#62;numizq);
  90.    gotoxy (startcol, 5 + numjugador*4 + 1);
  91.    printf (&#34;Jugador #%d &#34;, numjugador + 1);
  92.    for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  93.       if (Jugador[numjugador][i] != NULL)
  94.          printf (&#34;- &#34;);
  95.    gotoxy (startcol + 11, 5 + numjugador*4 + 2);
  96.    for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  97.       if (Jugador[numjugador][i] != NULL)
  98.          printf (&#34;%d &#34;, Jugador[numjugador][i]-&#62;numder);
  99. }
  100.  
  101. void ImprimeMonton (int pantalla)
  102. {
  103.    int i, startcol;
  104.  
  105.    startcol = !pantalla ? 1 : 41;
  106.    gotoxy (startcol + 11, 21);
  107.    for (i = 0; i &#60; 28; i++)
  108.       if (Monton[i] != NULL)
  109.          printf (&#34;%d &#34;, Monton[i]-&#62;numizq);
  110.    gotoxy (startcol, 22);
  111.    printf (&#34;Mont¢n     &#34;);
  112.    for (i = 0; i &#60; 28; i++)
  113.       if (Monton[i] != NULL)
  114.          printf (&#34;- &#34;);
  115.    gotoxy (startcol + 11, 23);
  116.    for (i = 0; i &#60; 28; i++)
  117.       if (Monton[i] != NULL)
  118.          printf (&#34;%d &#34;, Monton[i]-&#62;numder);
  119. }
  120.  
  121. void ImprimeJuego ()
  122. {
  123.    int i;
  124.    PTRFICHA ptr;
  125.  
  126.    gotoxy (12, 1);
  127.    for (ptr = cabeza; ptr != NULL; ptr = ptr-&#62;der)
  128.       printf (&#34;%d &#34;, ptr-&#62;numizq);
  129.    gotoxy (1, 2);
  130.    printf (&#34;Juego      &#34;);
  131.    for (ptr = cabeza; ptr != NULL; ptr = ptr-&#62;der)
  132.       printf (&#34;- &#34;);
  133.    gotoxy (12, 3);
  134.    for (ptr = cabeza; ptr != NULL; ptr = ptr-&#62;der)
  135.       printf (&#34;%d &#34;, ptr-&#62;numder);
  136. }
  137.  
  138. void ImprimeEstadoDelJuego (int numjugadores, int paso)
  139. {
  140.    int i, j, startcol;
  141.    static int mitad_pantalla = 0;
  142.  
  143.    for (i = 3; i &#60; 24; i++) {
  144.       gotoxy (40, i + 1);
  145.       printf (&#34;³&#34;);
  146.    }
  147.    startcol = !mitad_pantalla ? 1 : 41;
  148.    for (i = 3; i &#60; 24; i++) {
  149.       gotoxy (startcol, i + 1);
  150.       for (j = 0; j &#60; 39; j++) printf (&#34; &#34;);
  151.    }
  152.    gotoxy (startcol, 4);
  153.    for (i = 0; i &#60; 14; i++) printf (&#34;#&#34;);
  154.    printf (&#34; Paso: %3d &#34;, paso);
  155.    for (i = 0; i &#60; 14; i++) printf (&#34;#&#34;);
  156.    if (numjugadores &#60; 4)
  157.       ImprimeMonton (mitad_pantalla);
  158.    for (i = 0; i &#60; numjugadores; i++)
  159.       ImprimeFichasJugador (i, mitad_pantalla);
  160.    ImprimeJuego ();
  161.    mitad_pantalla = !mitad_pantalla;
  162.    gotoxy (1, 25);
  163.    printf (&#34;&#092;tpresiones una tecla para continuar...&#34;);
  164.    getch ();
  165. }
  166.  
  167. int Ganador (int numjugadores)
  168. {
  169.    int i, j, bandera;
  170.  
  171.    for (i = 0; i &#60; numjugadores; i++) {
  172.       for (bandera = j = 0; j &#60; MAXFICHASXJUGADOR; j++)
  173.          if (Jugador[i][j] != NULL) {
  174.             bandera = 1;
  175.             break;
  176.          }
  177.       if (!bandera)
  178.          return i + 1;
  179.    }
  180.    return 0;
  181. }
  182.  
  183. int JuegoCerrado ()
  184. {
  185.    int contador;
  186.    PTRFICHA ptr;
  187.  
  188.    if (cabeza == NULL || cabeza-&#62;numizq != cola-&#62;numder)
  189.       return 0;
  190.    contador = 0;
  191.    for (ptr = cabeza; ptr != NULL; ptr = ptr-&#62;der) {
  192.       if (ptr-&#62;numizq == cabeza-&#62;numizq)
  193.          contador++;
  194.       if (ptr-&#62;numder == cabeza-&#62;numizq)
  195.          contador++;
  196.    }
  197.    return contador == 8;
  198. }
  199.  
  200. void Juega (int jugadoractual)
  201. {
  202.    int i;
  203.    PTRFICHA ptr;
  204.  
  205.    /* El juego va a comenzar. El jugador tiene 7 fichas iniciales   */
  206.    /* se toma la £ltima ficha de las 7 como la que va a comenzar la */
  207.    /* partida. Se pod¡a haber escogido una al azar pero se hace as¡ */
  208.    /* por simplicidad. Los apuntadores cabeza y cola apuntan a este */
  209.    /* elemento                                                      */
  210.    if (cabeza == NULL) {
  211.       cola = cabeza = Jugador[jugadoractual][6];
  212.       Jugador[jugadoractual][6] = NULL;
  213.       return;
  214.    }
  215.  
  216.    /* Si el flujo del programa contin£a hasta aqu¡ es que ya comenz¢ */
  217.    /* la partida. Se recorren las fichas del jugador actual para ver */
  218.    /* si alguna de ellas encaja en uno de los extremos. En caso de   */
  219.    /* que si, entonces se escoje esta ficha y se inserta en la lista */
  220.    for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  221.       if (Jugador[jugadoractual][i]-&#62;numder == cabeza-&#62;numizq ||
  222.           Jugador[jugadoractual][i]-&#62;numizq == cabeza-&#62;numizq) {
  223.          if (Jugador[jugadoractual][i]-&#62;numizq == cabeza-&#62;numizq) {
  224.             int intercambio = Jugador[jugadoractual][i]-&#62;numizq;
  225.             Jugador[jugadoractual][i]-&#62;numizq = Jugador[jugadoractual][i]-&#62;numder;
  226.             Jugador[jugadoractual][i]-&#62;numder = intercambio;
  227.          }
  228.          cabeza-&#62;izq = Jugador[jugadoractual][i];
  229.          Jugador[jugadoractual][i]-&#62;der = cabeza;
  230.          cabeza = Jugador[jugadoractual][i];
  231.          Jugador[jugadoractual][i] = NULL;
  232.          return;
  233.       } else if (Jugador[jugadoractual][i]-&#62;numizq == cola-&#62;numder ||
  234.                  Jugador[jugadoractual][i]-&#62;numder == cola-&#62;numder) {
  235.          if (Jugador[jugadoractual][i]-&#62;numder == cola-&#62;numder) {
  236.             int intercambio = Jugador[jugadoractual][i]-&#62;numder;
  237.             Jugador[jugadoractual][i]-&#62;numder = Jugador[jugadoractual][i]-&#62;numizq;
  238.             Jugador[jugadoractual][i]-&#62;numizq = intercambio;
  239.          }
  240.          cola-&#62;der = Jugador[jugadoractual][i];
  241.          Jugador[jugadoractual][i]-&#62;izq = cola;
  242.          cola = Jugador[jugadoractual][i];
  243.          Jugador[jugadoractual][i] = NULL;
  244.          return;
  245.       }
  246.  
  247.    /* No se encontraron fichas en el jugador actual que encajaran, */
  248.    /* entonces se escogen fichas del mont¢n hasta que una de ellas */
  249.    /* encaje en la lista o hasta que se agote el mont¢n            */
  250.    while (1) {
  251.       if ((ptr = EscogeFicha ()) == NULL)
  252.          return;
  253.       if (ptr-&#62;numder == cabeza-&#62;numizq || ptr-&#62;numizq == cabeza-&#62;numizq) {
  254.          if (ptr-&#62;numizq == cabeza-&#62;numizq) {
  255.             int intercambio = ptr-&#62;numizq;
  256.             ptr-&#62;numizq = ptr-&#62;numder;
  257.             ptr-&#62;numder = intercambio;
  258.          }
  259.          cabeza-&#62;izq = ptr;
  260.          ptr-&#62;der = cabeza;
  261.          cabeza = ptr;
  262.          return;
  263.       } else if (ptr-&#62;numizq == cola-&#62;numder || ptr-&#62;numder == cola-&#62;numder) {
  264.          if (ptr-&#62;numder == cola-&#62;numder) {
  265.             int intercambio = ptr-&#62;numder;
  266.             ptr-&#62;numder = ptr-&#62;numizq;
  267.             ptr-&#62;numizq = intercambio;
  268.          }
  269.          cola-&#62;der = ptr;
  270.          ptr-&#62;izq = cola;
  271.          cola = ptr;
  272.          return;
  273.       }
  274.       for (i = 0; i &#60; MAXFICHASXJUGADOR; i++)
  275.          if (Jugador[jugadoractual][i] == NULL) {
  276.             Jugador[jugadoractual][i] = ptr;
  277.             break;
  278.          }
  279.    }
  280. }
  281.  
  282. int main ()
  283. {
  284.    int i, paso = 0, jugadoractual, numjugadores = 2;
  285.  
  286.    clrscr ();
  287.    InicializaFichas ();
  288.    NuevoJuego ();
  289.  
  290.    for (i = 0; i &#60; numjugadores; i++)
  291.       ReparteFichas (i);
  292.    ImprimeEstadoDelJuego (numjugadores, paso);
  293.    jugadoractual = random (numjugadores);
  294.    while (1) {
  295.       if (Ganador(numjugadores) || JuegoCerrado())
  296.          break;
  297.       Juega (jugadoractual);
  298.       if (jugadoractual &#60; numjugadores - 1)
  299.          jugadoractual++;
  300.       else
  301.          jugadoractual = 0;
  302.       paso++;
  303.       ImprimeEstadoDelJuego (numjugadores, paso);
  304.    }
  305.    if (Ganador(numjugadores))
  306.       printf (&#34;&#092;nEl ganador es el jugador #%d&#34;, Ganador(numjugadores));
  307.    else if (JuegoCerrado())
  308.       printf (&#34;&#092;nEl juego se cerr¢&#34;);
  309. }
  310.  
  311.  

18
C/C++ / Re: Gracias!! Ayuda
« en: Viernes 2 de Diciembre de 2005, 08:00 »
Disculpame por tardar en contestarte, es que estaba contestandole a otro compañero en otro foro. Bueno ahora ya viene lo interesante, pues el hacer que la maquina "juegue" no es algo trivial y tiene que ver con la teoria de juegos en computacion. Si lo que quieres es que la maquina solo tire las fichas sin ver si es la mejor jugada entonces es facil y solo hay que escoger aleatoreamente una ficha que encaje en cualquier extremo
esto es lo que quieres?

19
C/C++ / Re: Juego
« en: Viernes 2 de Diciembre de 2005, 04:01 »
Pensando un poco en tu programa aquí está una idea de cómo hacerlo. Necesitas tener una estructura como la que pusiste pero además debes de indicar en los números qué parte de la ficha es. Lo que quiero decir es que cuando coloques una ficha en la lista debes de poder identificar cual parte es la que se une y cual queda libre. Por esto yo pondría la estructura así
Código: Text
  1.  
  2. struct ficha {
  3.    int numder;
  4.    struct ficha *der;
  5.    int numizq;
  6.    struct ficha *izq;
  7. };
  8.  
  9.  
  Después definiría un arreglo de 28 objetos de esta estructura, las cuales representarían las fichas del dominó. Definiría un jugador como teniendo 7 apuntadores a estas estructuras, y como puedo tener hasta cuatro jugadores, entonces definiría un arreglo de 4 de estos. Definiría una variable Monton que tuviera 28 apuntadores a esta estructura para que contenga las fichas que no se repartan entre los jugadores. Por último definiría dos variables que apunten a esta estructura para que contengan la cabeza y la cola de la lista del juego, o sea, de las fichas que se vayan poniendo en la mesa.
   Esto en código sería
Código: Text
  1.  
  2. typedef struct ficha FICHA;
  3. typedef struct ficha *PTRFICHA;
  4.  
  5. FICHA Ficha[28];
  6. PTRFICHA Jugador[4][7], Monton[28], cabeza, cola;
  7.  
  8.  
  Ahora necesito varias funciones.
   Una función InicializaFichas que me inicialize el arreglo Ficha con los números de la 28 fichas del dominó. Esta función se llamaría una sólo vez en el programa.
   Una función NuevoJuego que llamaría cada vez que se comienze un juego y que inicializaría las variables Monton, Jugador, cabeza y cola.
   Una función EscogeFicha que me regresaría aleatoreamente un apuntador a una ficha del montón.
   Una función ReparteFichas que escogería aleatoreamente 7 fichas del montón para el jugador que yo le indicara
   Bueno, esto es sólo una idea para comenzar, no se que te parezca. Hice un pequeño programa para que veas como trabajan estas funciones
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;time.h&#62;
  5.  
  6. struct ficha {
  7.    int numder;
  8.    struct ficha *der;
  9.    int numizq;
  10.    struct ficha *izq;
  11. };
  12. typedef struct ficha FICHA;
  13. typedef struct ficha *PTRFICHA;
  14.  
  15. FICHA Ficha[28];
  16. PTRFICHA Jugador[4][7], Monton[28], cabeza, cola;
  17.  
  18. void InicializaFichas ()
  19. {
  20.    int i, j;
  21.  
  22.    for (i = 0; i &#60; 7; i++)
  23.       for (j = i; j &#60; 7; j++) {
  24.          int k, m;
  25.          for (k = m = 0; m &#60; i; m++)
  26.             k += 7 - m;
  27.          Ficha[k + j - i].numder = i;
  28.          Ficha[k + j - i].numizq = j;
  29.          Ficha[k + j - i].der = Ficha[k + j - i].izq = NULL;
  30.       }
  31.    randomize ();
  32. }
  33.  
  34. void NuevoJuego ()
  35. {
  36.    int i, j;
  37.  
  38.    for (i = 0; i &#60; 28; i++) {
  39.        Ficha[i].der = Ficha[i].izq = NULL;
  40.       Monton[i] = Ficha + i;
  41.    }
  42.    for (i = 0; i &#60; 4; i++)
  43.       for (j = 0; j &#60; 7; j++)
  44.          Jugador[i][j] = NULL;
  45.    cabeza = cola = NULL;
  46. }
  47.  
  48. PTRFICHA EscogeFicha ()
  49. {
  50.    int i;
  51.    PTRFICHA p;
  52.  
  53.    while (1) {
  54.       i = random (28);
  55.       if (Monton[i] != NULL) {
  56.          p = Monton[i];
  57.          Monton[i] = NULL;
  58.          return p;
  59.       }
  60.    }
  61. }
  62.  
  63. void ReparteFichas (int numjugador)
  64. {
  65.    int i;
  66.    for (i = 0; i &#60; 7; i++)
  67.       Jugador[numjugador][i] = EscogeFicha ();
  68. }
  69.  
  70. void ImprimeFichasJugador (int numjugador)
  71. {
  72.    int i;
  73.    printf (&#34;&#092;n&#092;n&#34;);
  74.    for (i = 0; i &#60; 7; i++)
  75.       printf (&#34;%d &#34;, Jugador[numjugador][i]-&#62;numizq);
  76.    printf (&#34;&#092;n&#34;);
  77.    for (i = 0; i &#60; 7; i++)
  78.       printf (&#34;- &#34;);
  79.    printf (&#34;&#092;n&#34;);
  80.    for (i = 0; i &#60; 7; i++)
  81.       printf (&#34;%d &#34;, Jugador[numjugador][i]-&#62;numder);
  82. }
  83.  
  84. int main ()
  85. {
  86.    int i;
  87.  
  88.    InicializaFichas ();
  89.    NuevoJuego ();
  90.  
  91.    for (i = 0; i &#60; 4; i++)
  92.       ReparteFichas (i);
  93.    for (i = 0; i &#60; 4; i++)
  94.       ImprimeFichasJugador (i);
  95. }
  96.  
  97.  
  Si te interesa la idea podemos seguir para ver como se programaría más en detalle. Si tienes otra idea de cómo hacerlo, bueno, al menos ya más o menos con esto te podrás hacer una idea de como hacerlo.

20
C/C++ / Re: Imprimir Desde Visual C
« en: Viernes 2 de Diciembre de 2005, 00:45 »
¿tu programa va correr en modo consola o en modo gráfico siguiendo el esquema de ventanas y mensajes de Windows?

21
C/C++ / Re: Librerias De C++
« en: Viernes 2 de Diciembre de 2005, 00:21 »
¿qué compilador estás usando?

22
C/C++ / Re: Juego De Domino
« en: Viernes 2 de Diciembre de 2005, 00:17 »
El juego que quieres implementar es el juego normal de dominó donde se reparten 7 fichas, sale el que tiene la "mula" de 6 (o el que tenga la "mula" mayor) y se van poniendo las fichas que tengan igual número de puntos ya sea en uno u otro extremo ¿no es ninguna variante como la de formar múltiplos de 5 u otro juego?
   ¿En la solución de este programa necesariamente debes de usar listas?
   La estructura de ficha que tienes en tu programa ¿tú la creaste o también debe de ser así?
   ¿Quién es el identificador Ficha que usas para declarar un arreglo?

23
C/C++ / Re: Ayuda....matrices
« en: Viernes 2 de Diciembre de 2005, 00:01 »
primero tienes que definir la matriz así
Código: Text
  1.  
  2. double Matriz[10][10];
  3.  
  4.  
como no especificaste el tipo de los elementos pues yo le puse que van a ser números de punto flotante.
   Para llenar los valores de la matriz tienes que hacer dos for anidados para accesar a todos los elemento y darles valores ya sea desde el teclado, por medio de un archivo o generándolos aleatoreamente.
   Para determinar la posición del número mayor, siendo que todos son distintos, sólo tienes que declarar dos variables fila y columna, inicializarlas con los valores (0, 0), que corresponden al primer elemento de la matriz y hacer un recorrido por todos los demás elementos viendo si M[j] > M[fila][columna], y en caso de ser así actualizar la fila y la columna con estos nuevos valores.
   Para calcular la suma de cada columna y de cada fila declaras dos vectores asi
Código: Text
  1.  
  2. double SumaCol[10], SumaFil[10];
  3.  
  4.  
inicializas todos sus valores a 0 (zero) y haces un recorrido sumando sus respectivos valores. Por ejemplo para las columnas sería
Código: Text
  1.  
  2. for (j = 0; j &#60; 10; j++)
  3.    for (i = 0; i &#60; 10; i++)
  4.       SumaCol[j] += Matriz[i][j];
  5.  
  6.  
  Sumar dos matrices, si ya programaste lo anterior, pues es algo trivial. Sólo tienes que declarar tres matrices, llenar dos con valores y efectuar la suma de cada elemento y depositarla en su respectiva posición de la otra matriz.

24
C/C++ / Re: Cursor En C
« en: Jueves 1 de Diciembre de 2005, 23:39 »
bueno, en modo consola, pero ¿cuál compilador estás usando? ¿en qué sistema operativo programas?

25
C/C++ / Re: Juego De Domino
« en: Jueves 1 de Diciembre de 2005, 23:34 »
explica más detalladamente lo que quieres hacer (cómo vas a representar las fichas, la estructura de datos que vas a usar, cómo se van a desplegar en la pantalla, etc), cómo trataste de implementarlo y si hiciste algún programa "postéalo" para poder revisarlo

Páginas: [1] 2 3 ... 5