Test Foro de elhacker.net SMF 2.1

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



#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int *barajear(int max);

char *cartas[] = {
"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"};

int main() {
int *baraja = barajear(54);
int i = 0;
char c;
while(i<54) {
printf("%s\n",cartas[baraja[i]]);
c = fgetc(stdin);
i++;
}
}

int *barajear(int max) {
char *no_repetidos = NULL;
int *desorden = NULL;
int r = 0;
register int i = 0;
sranddev();
srand(time(NULL));
while(no_repetidos == NULL){
no_repetidos = calloc(max,sizeof(char));
}
while(desorden == NULL){
desorden = calloc(max,sizeof(int));
}
do {
r = rand() % max;
if(no_repetidos[r] == 0) {
desorden[i] = r;
no_repetidos[r] = 1;
i++;
}
}while(i < max);
free(no_repetidos);
return desorden;
}


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.