ayuda en proyecto

Iniciado por Marioman1532, 31 Julio 2019, 17:32 PM

0 Miembros y 1 Visitante están viendo este tema.

Marioman1532

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



Sputnik_

Marioman

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

Saludos
Las personas lo suficientemente locas como para pensar que pueden cambiar el mundo son las que lo cambian.

Marioman1532

#2
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.

MAFUS

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.