Código
/*Manejo de estructuras*/ #include<stdio.h> #include<iostream.h> #include<string.h> #include<windows.h> #include <stdlib.h> #include <time.h> #include <conio.h> //struct typedef struct carton{ int a[5][5]; }; typedef struct cartonM{ int b[15][5]; }; void gotoxy(int fila,int col); void generar_c(carton *cart); void generar_cartonM(cartonM *cartM); void imprimir(carton *cart, int fil, int col); void imprimirM(cartonM *cartM, int fil, int col); void marcar_carton(int num,carton *cart,cartonM *cartM); int asignar_columna(int fila,int columna,carton *cart, int limite); int asignar_columnaM(int fila,int columna,cartonM *cartM, int limite); int cantar(int limite,cartonM *cartM); bool sin_repetir_pizarra(int num,cartonM *cartM); int main(){ srand (time(NULL)); carton jugador,maquina; cartonM maestra,limite; char opcion='0'; while(opcion!='3'){ system("cls"); printf("[1] MOSTRAR CARTON \n"); printf("[2] CANTAR NUMEROS \n"); printf("[3] Salir\n"); printf("Ingrese opcion:\n"); opcion=getch(); switch(opcion){ case '1': system("cls"); //jugador generar_c(&jugador); imprimir(&jugador,2,2); //maquina generar_c(&maquina); imprimir(&maquina,2,20); //Maestra generar_cartonM(&maestra); imprimirM(&maestra,2,50); system("pause"); break; case '2': system("cls"); //jugador imprimir(&jugador,2,2); //maquina imprimir(&maquina,2,20); //Maestra imprimirM(&maestra,2,50); //cantar cantar(&limite,&cartonM); cantar(&limite,&cartonM); system("pause"); break; case '3': exit(0); break; default: system("cls"); printf("Opcion invalida\n"); system("pause"); break; }//fin de switch } system("pause"); return 0; } //generar los cartones int asignar_columna(int fila,int columna,carton *cart, int limite){ int num=0; num=limite+(rand()%15); for(int k=0; k< fila; k++) //Numeros que no se repitan { if(num==cart->a[k][columna]) { num = limite+(rand()%15); k=-1; } } return num; } int asignar_columnaM(int fila,int columna,cartonM *cartM, int limite){ int num=0; num=limite+(rand()%15); for(int k=0; k< fila; k++) //Numeros que no se repitan { if(num==cartM->b[k][columna]) { num = limite+(rand()%15); k=-1; } } return num; } void generar_c(carton *cart){//Jugador y Maquina int num=0; for(int j=0, limite=1;j<5;j+=1,limite+=15){//columna for(int i=0;i<5;i+=1){//fila num=asignar_columna(i,j,cart,limite); //Numeros que no se repitan cart->a[i][j]=num; } } } void generar_cartonM(cartonM *cartM){//Maestra int num=0; for(int j=0, limite=1;j<5;j+=1,limite+=15){//columna for(int i=0;i<15;i+=1){//fila num=asignar_columnaM(i,j,cartM,limite); cartM->b[i][j]=0; } } } int cantar(int limite,cartonM *cartM){ int num=0; int i,dupl; for(int i=0;i<75;i+=1){ do{ num = limite+(rand()%75); }while(sin_repetir_pizarra(num,cartM)); if(num<=15){ printf("B %i\n",num); } else if(num>15 && num<=30){ printf("I %i\n",num); } else if(num>30 && num<=45){ printf("N %i\n",num); } else if(num>45 && num<=60){ printf("G %i\n",num); } else{ printf("0 %i\n",num); } return 0; } } bool sin_repetir_pizarra(int num,cartonM *cartM){ for(int i=0; i<15; i++){ if((num>=1) && (num<=15)){ if(num == cartM->b[i][0]){//SI EL NUMERO ESTA DEVUELVE VERDADERO return true; } } if((num>=16) && (num<=30)){ if(num == cartM->b[i][1]){//SI EL NUMERO ESTA DEVUELVE VERDADERO return true; } } if((num>=31) && (num<=45)){ if(num == cartM->b[i][2]){//SI EL NUMERO ESTA DEVUELVE VERDADERO return true; } } if((num>=46) && (num<=60)){ if(num == cartM->b[i][3]){//SI EL NUMERO ESTA DEVUELVE VERDADERO return true; } } if((num>=61) && (num<=75)){ if(num == cartM->b[i][4]){//SI EL NUMERO ESTA DEVUELVE VERDADERO return true; } } } return false; } void marcar_carton(int num,carton *cart,cartonM *cartM){ for(int i=0;i<5,i<15;i+=1){//filas for(int j=0;j<5;j+=1){//columnas if(cart->a[i][j]==num){ cart->a[i][j]=0; } if(cart->a[i][j]==num){ cart->a[i][j]=0; } if(cartM->b[i][j]==0){ if (num<=15){ cartM->b[num-1][0]=num; } } if(cartM->b[i][j]==0){ if (num>15 && num<=30){ cartM->b[num-16][1]=num; } } if(cartM->b[i][j]==0){ if (num>30 && num<=45){ cartM->b[num-31][2]=num; } } if(cartM->b[i][j]==0){ if (num>45 && num<=60){ cartM->b[num-46][3]=num; } } if(cartM->b[i][j]==0){ if (num>60 && num<=75){ cartM->b[num-61][4]=num; } } } } } //imprimir void imprimir(carton *cart, int fil, int col){ int c=col; gotoxy(fil-2,col);printf("B"); gotoxy(fil-2,col+4);printf("I"); gotoxy(fil-2,col+7);printf("N"); gotoxy(fil-2,col+10);printf("G"); gotoxy(fil-2,col+13);printf("O"); for(int i=0;i<5;i+=1){//filas for(int j=0;j<5;j+=1){//columnas gotoxy(fil,col);printf("%i",cart->a[i][j]); col+=3; } col=c; fil+=3; } } void imprimirM(cartonM *cartM, int fil, int col){//Maestra int c=col; gotoxy(fil-2,col);printf("B"); gotoxy(fil-2,col+4);printf("I"); gotoxy(fil-2,col+7);printf("N"); gotoxy(fil-2,col+10);printf("G"); gotoxy(fil-2,col+13);printf("O"); for(int i=0;i<15;i+=1){//filas for(int j=0;j<5;j+=1){//columnas gotoxy(fil,col);printf("%i",cartM->b[i][j]); col+=3; } col=c; fil+=3; } } void gotoxy(int fila,int col){ HANDLE hConsoleOutput; COORD d; hConsoleOutput = GetStdHandle (STD_OUTPUT_HANDLE); d.X=col; d.Y=fila; SetConsoleCursorPosition (hConsoleOutput, d); }