Título: Corrección ejercicio en C de un bingo Publicado por: vaillo33 en 11 Enero 2019, 11:47 am Buenas, les dejo por aqui mi código, me estoy volviendo loco intentando ver lo que he hecho mal, no encuentro el error, me podéis ayudar??. El enunciado del problema sería el siguiente:
En este ejercicio implementaremos el juego del bingo simplificado. Habrá dos jugadores, con sus respectivos cartones compuestos por 20 números aleatorios del 1 al 100 (todos los números de un cartón han de ser forzosamente distintos). Por otro lado, se irá generando una secuencia de números aleatorios comprendidos también entre 1 y 100, que representan las bolas que van saliendo del bombo (esta secuencia tampoco podrá tener números repetidos). La mecánica del programa será la siguiente: en cada iteración, mostraremos los números que han ido saliendo del bombo hasta el momento, así como los dos cartones, donde habremos tachado (en vez del número saldrá una X) los números que ya hayan salido. Esperaremos entonces a que el usuario pulse una tecla y a continuación sacaremos una nueva bola del bombo, actualizaremos los cartones con la nueva bola y volverá a aparecer toda la información (lista con las bolas que han salido y cartones actualizados). El programa terminará cuando alguno de los dos cartones se complete, con lo que el jugador asociado a dicho cartón ganará. Código: #include <stdio.h> Título: Re: Corrección ejercicio en C de un bingo Publicado por: MAFUS en 11 Enero 2019, 12:50 pm Encierra tu código entre etiquetas code
Aprieta sobre edición en tu mensaje, después aprieta el botón # y cortas el código y lo pegas en medio de las dos etiquetas que te han aparecido. Título: Re: Corrección ejercicio en C de un bingo Publicado por: vaillo33 en 11 Enero 2019, 13:07 pm Graciaas!!, ¿Alguien encuentra mis fallos?? :o
Título: Re: Corrección ejercicio en C de un bingo Publicado por: Serapis en 11 Enero 2019, 16:22 pm El tiempo es oro. No pidas que revisen todo tu código para buscar fallos. Aparte que hay diferentes tipos de fallos, comenzando por el enfoque del problema...
Es infinitamente mejor (si quieres recibir ayuda), señalar que te falla. Así quien quiera ayudar se centra en la parte del código específica... para indicarte porqué falla. Título: Re: Corrección ejercicio en C de un bingo Publicado por: vaillo33 en 11 Enero 2019, 16:31 pm La parte del código que falla es al crear una bola, y revisar el carton 1, para ver si tiene ese número el poner una X en vez del numero, pero muchas gracias por tu consejo nebire!
Título: Re: Corrección ejercicio en C de un bingo Publicado por: Serapis en 11 Enero 2019, 21:13 pm Tienes el código un poco enfarragoso.
antes de ponserse a escribir código, es mejor verlo en tu mente... Realmente se trata de reflejar tal como lo hacmeos en la realidad. Y así acostumbra a escribir en prosa, primero... verás que luego es casi traducir/transcribir... Al iniciar el juego: 1 - Si no quedan cartones, crear x cartones. Esta sola línea ya sugiere 3 cosas: - Señala que debe haber un campo que refleje el número de cartones libres. - Una función que crea cartones. - Un parámetro en la función que señala cuantos cartones se van a crear... - Previamente debe quedar claro, cuantas bolas contiene el bingo: 80, 90, 100, 120, etc... - Previamente debe quedar claro, cuantos valores contiene cada cartón... 12,15, etc... Y podría ser algo así: Código: entero BolasXBingo = 100 Código: Funcion CrearCartones(entero NumCartones, entero Inicio) 2 - Repartir cartones entre los jugadores. Esta línea sugiere varias cosas: - Hay varios jugadores, luego un campo debe reflejar cuantos jugadores son. - Cuántos jugadores mínimos, se requieren para jugar el bingo. Quien dice jugadores, dice cartones. - Es válido que un jugador tenga más de 1 cartón?. - Los cartones simplemente se 'reparten' o se 'compran'... Comprando la dinámica dle juego se complica un poco más, pués hay que poner precio a los cartones y ver si el jugador tiene suficiente dinero para comprar, además de llevar la cuenta del dinero de cada jugador más el de la banca. -- Se puede simplicar repartiendo siempre por ejemplo x cartones (1,2 por ejemplo) a cada jugador. -- Se puede simplificar dejando constante el número de jugadores (2,3,4,5,6 por ejemplo). - Implica una función Repartir, que toma el siguiente cartón disponible y lo entrega al jugador. Esto puede hacerse de 2 maneras, o se invoca una funcion 'getCarton', donde el jugador es un parámetro de dicha función, donde se devuelve el cartón y al recibir se entrega al jugador. Seguimos completando la función 'nuevapartida'... y el código fuera de funciones... Código: entero JugadoresEnPartida = 2 // NUEVO: esto se pone arriba RepartirCartones será una función que reparta todos los catones necesarios de la partida (en la modalidad simple para el juego basta así) que a su vez invoca a otra función que entrega el siguiente cartón disponible en la banca, en el array CartonesBanca. Código: // hemos estabecido (para ejemplo) que se reparte 1 carton por jugador, y que aunque haya dos jugadores, su valor se almacena en JugadoresEnPartida y los cartones de cada en el array CartonesDeJugadores 3,4 y 5 - Ya tenemos creados los cartones y cada jugador con su cartón, aún faltan 3 cosas... iniciar el sorteo, verificar cuando se extrae una bola si tal o cual cartón la contiene y verificar cuando se canta bingo (cuando el juego acaba). Volvemos a editar la función nueva partida... ya que es el 'main' del juego, la función principal. Código: entero ValorPremio = 100 // NUEVO: esto se pone arriba 3 - Recrear el bombo con sus bolas y barajarlas todas de una sola vez. Código: funcion BarajarBingo 4 - Como en el bombo se han barajado ya todas las bolas de una sola vez, el sorteo consiste en sacarlas en orden... Código: entero = Funcion Sortear Ahora verificamos cartones, esto es, tachamos la bola extraída en cada cartón que la contenga. Código: Funcion VerificarCartones(entero BolaExtraida) 5 - Esta función revisa cada cartón para ver si alguno tiene tachada todas las bolas. Es más óptimo hacer esta revisión al mismo tiempo que revisa la bola a tachar, lo anoto más abajo como una observación. Código: entero = Funcion VerificarPremiado NOTAS: - Pasar el pseudocódigo a código queda a tu esfuerzo. - Puede haber más de un premiado a la vez (esto es, tendrían un cartón idéntico), queda también a tu esfuerzo, o bien impedir esto, o bien repartir el premio entre los jugadores, así como verificar todos los cartones en busca d epremio. En el pseudocódigo se asume que solo un jugador puede ganar, luego si swe encuentra un ganador se aborta el resto de la búsqueda. - No se añade pseudocódigo para la función EntregarPremio, queda a tu esfuerozo, si resulta de interés al caso. - Una ligera optimización sobre cartones: En el propio cartón se podría indicar además las bolas restantes para bingo, por ejemplo al inicio o final del string del cartón se podría poner el número de bolas sin tachar (cuandos e crea el cartón se pone el número total de blas por cartón) y cuando se tache una, tomar el valor, restar uno y actualizar dicho valor (resulta muy fácil si es al comienzo o final dle string). Si un cartón llega a cero, será premiado, con lo que la misma función de verificar cartones para tachar bolas y buscar cartón premiado sería la misma.... como cada bola va encerrada entre guiones "-34-", este valor podría diferenciarse encerrándolo de forma diferente, así nunca se encontrará por error ese número, como una bola y se tache. - Finalmente nota, que el pseudocófigo no es óptimo, ateniéndose a: "juego del bingo simplificado". Ya que por ejemplo, al crear cartones, nunca se buscan aleatoriamente los números, sino que las bolas del bingo deben proporcionar números de cartones exactos (por ejemplo de un bingo de 100 bolas, da 5 cartones de 20 números, un bingo de 90 bolas da 6 cartones de 15 números, un bingo de 84 bolas da 7 cartones de 12 bolas, etc...), entonces las bolas del bingo, primero se crea un array del 1 a la última bola, y se baraja... entonces ese array acotado en tandas de 20, 15, 12... esto es, según la cantidad de bolas por cartón, son lo que definen un cartón. Así en ese array las bolas dle primer cartón son las que ocupan las posiciones en el array del 0 al 19, el 2º cartón 20 a 39... el 5º cartón 80 a 99). Y para ser equitativos, además habría de cumplirse ciertos requisitos mucho más restrictivos sobre los cartones, esto es estar equitativamente compensados en el reparto de bolas, a nadie le haría gracia tener las bolas 5,6,7,8,9 y 24,25,26,27,28 en su cartón...sino mas bien 2 o 3 bolas de cada decena... Cuando no es así, no es verdaderamente equitativo el azar para cada jugador. Eso sí, para un ejecrcicio vale... - Quizás se me haya escapado algún gazapo... confío que en tal caso puedas verlo sobre la marcha. Título: Re: Corrección ejercicio en C de un bingo Publicado por: vaillo33 en 11 Enero 2019, 21:57 pm Muchismaas gracias, realmente me has ayudado mas de lo que esperaba, tus consejos los utilizaré cada vez que tenga que programar!!!!. :D
|