Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Marioman1532 en 31 Julio 2019, 17:32 pm



Título: ayuda en proyecto
Publicado por: Marioman1532 en 31 Julio 2019, 17:32 pm
Hola necesito ayuda para la elaboracion de este programa:

Escribir un programa que permita jugar a la lotería. Las especificaciones son:
1.   Una tabla (matriz) de 4X4 para enteros
2.   Llenar la tabla con valores al azar desde 1 hasta 54
3.   Mostrar la tabla
4.   Tirar números entre 1 y 54 para ir “llenando” la tabla.
5.   Mostrar cada número que aparezca
En caso de ganar, mostrar los números con que se ganó y el mensaje GANADOR.
Reglas:
•   No se puede repetir ningún número en la tabla.
•   Las formas de ganar pueden ser:
Llenar una fila
Llenar una columna
Llenar una diagonal
Llenar los cuadros del centro
Llenar los cuadros de la esquina




Título: Re: ayuda en proyecto
Publicado por: Sputnik_ en 31 Julio 2019, 17:40 pm
Marioman

¿En que parte del problema te has estancado? No esperes que te resuelvan la tarea completa,

Saludos


Título: Re: ayuda en proyecto
Publicado por: Marioman1532 en 31 Julio 2019, 17:45 pm
por el momento tengo una parte en donde se barajean las cartas pero me sale error

Código
  1. #include<stdio.h>
  2. #include<time.h>
  3. #include<stdlib.h>
  4.  
  5. int *barajear(int max);
  6.  
  7. char *cartas[] = {
  8. "El Gallo","El diablito","La dama","El Catrin","El paraguas","La sirena","La escalera","La botella","El barril","El arbol","El melon","El valiente","El gorrito","La muerte","La pera","La bandera","El bandolon","El violoncello","La garza","El pajarito","La mano","La bota","La luna","El cotorro","El borracho","El corazon","El negrito","La sandia","El tambor","El camaron","Las jaras","El musico","La araña","El soldado","La estrella","El cazo","El mundo","El apache","El nopal","El alacran","la rosa","La calavera","La campana","El cantarito","El venado","El sol","La corona","La chalupa","El pino","El pescado","La palma","La maceta","El arpa","La rana"};
  9.  
  10. int main() {
  11. int *baraja = barajear(54);
  12. int i = 0;
  13. char c;
  14. while(i<54) {
  15. printf("%s\n",cartas[baraja[i]]);
  16. c = fgetc(stdin);
  17. i++;
  18. }
  19. }
  20.  
  21. int *barajear(int max) {
  22. char *no_repetidos = NULL;
  23. int *desorden = NULL;
  24. int r = 0;
  25. register int i = 0;
  26. sranddev();
  27. srand(time(NULL));
  28. while(no_repetidos == NULL){
  29. no_repetidos = calloc(max,sizeof(char));
  30. }
  31. while(desorden == NULL){
  32. desorden = calloc(max,sizeof(int));
  33. }
  34. do {
  35. r = rand() % max;
  36. if(no_repetidos[r] == 0) {
  37. desorden[i] = r;
  38. no_repetidos[r] = 1;
  39. i++;
  40. }
  41. }while(i < max);
  42. free(no_repetidos);
  43. return desorden;
  44. }
  45.  

MOD: No hacer doble post. Usa el boton modificar. Etiquqtea Geshi.


Título: Re: ayuda en proyecto
Publicado por: MAFUS en 31 Julio 2019, 19:21 pm
Una forma simple sería que crearás un array de enteros del mismo número de elementos que el que cartas y lo llenaras con 0, 1, 2, 3... Cada número representa un índice en el array cartas.

Así, supongamos que el array se llama baraja, baraja[0] contendría el 0 y ese 0 sería el índice para acceder a cartas, así cartas[baraja[0]] sería como cartas[0] que devolvería "El gallo".

Para desordenar el mazo de cartas sólo debes desordenar baraja y esto es tan sencillo cómo:
En un bucle que recorra todos los elementos de baraja siendo i la variable contador para este:
A cada iteración sacas un aleatorio entre 0 y el número de elementos menos 1 (en tu programa desde 0 hasta 53 ambos incluidos). Intercambias el elemento de baraja i con el elemento marcado con índice el número aleatorio.

Cuando se termine el bucle tendrás la baraja desordenada y sin repetir ningún elemento.