Open bleite12 opened 1 month ago
Proba sacando el srand de Gcarton (no deberia estar ahi) y llamando srand antes de llamar a GCarton con j1
(*): en esta función es bastante común que el algoritmo para generar X dígitos aleatorios sin repetir sea el siguiente: Crear un vector auxiliar de 9 chars en cero Para i desde 0 hasta X-1 hacer Elegir un dígito al azar entre 1 y 9 Si ya estaba marcado en el vector auxiliar volver al punto 2.a Marcarlo en el vector auxiliar Guardar el dígito en la posición i del vector incognita
El problema con este algoritmo es que si X es cercano a 9 (por ejemplo 7), a medida que avanza i se incrementa la posibilidad de que el dígito ya haya salido, y algo similar pasará con el juego del bingo: las primeras bolillas se mostrarán rápidamente pero a medida que avanza el juego tardará más tiempo es mostrar las nuevas bolillas, ya que el algoritmo planteado arriba sería similar a: sacar una bolilla del bolillero, si no había salido entonces anunciarla, volver a meter la bolilla en el bolillero.
Se debería encontrar un algoritmo que asegure que el siguiente dígito no sea uno de los que ya salieron, y lo mismo al sacar una bolilla en el bingo.
Cómo hacer en forma eficiente para obtener bolillas lo podés encontrar en #75
tambien te queria consultar como es que funciona lo de pasarle la fila directamente, porque yo recuerdo que cuando le pasaba una fila a una funcion tenia que hacer 2 for y guardar la fila en un vector auxuliar.
int controlaCarton(TipoCarton carton, int bolilla){
buscarBolilla(carton, bolilla);
int cantidadlineas=0;
for(int i = 0 ; i < FILS ; i++) {
cantidadlineas += controlarLineas(carton[i]); // Pasás directamente la fila 'carton[i]'
}
return cantidadlineas;//retorna la cantidad de lineas armadas.
}
int controlarLineas(TipoLinea fila){//le paso una fila entera (marcada con 0 ?)
for(int i = 0 ; i<COLS ; i++ ){
if(fila[i]!=0){
return 0;
}
}
return 1;//si llego aca es que ningun elemento de la linea es distinto de 0 entonces esta completada
}
Así está bien. No es necesario guardar en un vector auxiliar. Un cartón es una "matriz" de 3 filas por 5 columnas, pero para el compilador en realidad es un vector de 3 elementos, donde cada elemento es un vector de 5 enteros, entonces en la función controlarCarton, carton[i] es la fila i, o sea el i-ésimo elemento de carton: un vector de 5 enteros. Y TipoLinea es un alias para un vector de enteros, entonces es lo mismo decir int controlarLineas(TipoLinea fila){ que int controlarLineas(int fila[]){
Cualquier duda avisanos.
hola, no se porque cuando corro el programa me genera 2 cartones iguales o me dice que hay un ganador antes de que termine.