Stack Overflow en español Asked on August 26, 2021
RENGLONES
vale 3, COLUMNAS
5 y cuantosCartones
depende la cantidad de cartones que el usuario quiera jugar. Necesito hacer que no se repitan los números dentro de cada cartón, pero como son 3 cartones diferentes si se pueden repetir en los globales. Es decir:
¿Alguien sabe como hacer eso? El orden de la imagen es indiferente yo hice esto pero solo me funciona para 1 cartón, así que ni idea.
void cargar_carton_aleatorio(int m[][RENGLONES][COLUMNA],int cuantosCartones) {
int numero,comprobar;
for (int cuan = 0;cuan < cuantosCartones;cuan++) {
for (int r = 0; r < RENGLONES;r++) {
for (int c = 0;c < COLUMNA;c++) {
do {
numero = rand() % 16;
comprobar = verificar_repetidos(m,cuantosCartones,numero);
} while(comprobar != -1);
m[cuan][r][c] = numero;
}
}
}
}
int verificar_repetidos(int m[][RENGLONES][COLUMNA],int cuantosCartones,int numeroBuscado) {
int pos = -1;
for (int cuan = 0;cuan < cuantosCartones;cuan++){
for (int r = 0;r < RENGLONES;r++){
for (int c = 0;c < COLUMNA;c++){
if (m[cuan][r][c] == numeroBuscado){
pos = m[cuan][r][c];
}
}
}
}
return pos;
}
//CODIGO 2 para ver como hacerlo para que el usuario ingrese los números, lo mismo de antes, solo me funciona para 1. y cuando quiero rellenar los otros cartones me toma siempre los numeros como repetidos cuando no tendría que ser así.
void cargar_carton_manual(int m[][RENGLONES][COLUMNA],int cuantosCartones) {
int numero,comprobar;
for (int cuan = 0; cuan<cuantosCartones; cuan++){
for (int r=0;r<RENGLONES;r++){
for (int c=0;c<COLUMNA;c++){
printf("Ingrese numero para: Carton %d pos [%d][%d]: ",cuan,r,c);
scanf("%d",&numero);
while(verificar_repetidos(m,cuantosCartones,numero) != -1){
printf("Ingrese numero para: Carton %d pos [%d][%d]: ",cuan,r,c);
scanf("%d",&numero);
}
m[cuan][r][c] = numero;
}
}
}
mostrarCarton(m,cuantosCartones);
}
int verificar_repetidos(int m[RENGLONES][COLUMNA],int cuantosCartones,int numeroBuscado) {
int pos = -1;
for (int r=0;r<RENGLONES;r++){
for (int c=0;c<COLUMNA;c++){
if (m[r][c] == numeroBuscado){
pos = m[r][c];
//printf("Numero repetidot");
}
}
}
return pos;
}
El problema es que tu función que verifica repetidos utiliza todos los cartones, ese es el motivo por el cual solo funciona con 1... Porque como usas números del 1 al 16 en cartones de 15 números únicos es garantizado que exista en el segundo carton un numero que siempre esté repetido y tu código se queda dando vueltas buscando algo que nunca va a encontrar (un número que no esté en el primer cartón), la manera de corregirlo es cambiar tu función verificar_repetidos
para que solo use un cartón.
Aquí agrego tú código con el ajuste y también utilizando tu mismo código hice una función extra para poder ver como la matriz se va llenando y comprobare que funcione.
Suerte en tu programación!
#include <stdio.h>;
#include <math.h>;
#define CARTONES 5
#define RENGLONES 3
#define COLUMNA 5
void imprimirMatriz(int m[][RENGLONES][COLUMNA],int cuantosCartones){
for (int cuan = 0; cuan<cuantosCartones; cuan++){
printf("Carton #%dn",cuan+1);
for (int r = 0; r < RENGLONES; r++){
printf("[");
for (int c=0; c < COLUMNA; c++){
printf("%dt",m[cuan][r][c]);
if(c!=COLUMNA-1){
printf(",");
}
}
printf("]n");
}
}
}
int verificar_repetidos(int m[RENGLONES][COLUMNA],int cuantosCartones,int numeroBuscado){
int pos = -1;
for (int r=0;r<RENGLONES;r++){
for (int c=0;c<COLUMNA;c++){
if (m[r][c] == numeroBuscado){
pos = m[r][c];
printf("Numero repetido %dn", pos);
}
}
}
return pos;
}
void cargar_carton_aleatorio(int m[][RENGLONES][COLUMNA],int cuantosCartones){
int numero,comprobar;
for (int cuan = 0; cuan<cuantosCartones; cuan++){
for (int r = 0; r < RENGLONES; r++){
for (int c=0; c < COLUMNA; c++){
do{
numero = rand() % 16;
comprobar = verificar_repetidos(m[cuan],cuantosCartones,numero);
}while(comprobar != -1);
m[cuan][r][c] = numero;
imprimirMatriz(m,cuantosCartones);
}
}
}
}
int main()
{
int input[CARTONES][RENGLONES][COLUMNA];
cargar_carton_aleatorio(input, CARTONES);
return 0;
}
Correct answer by FranAcuna on August 26, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP