UNIVERSIDAD DE COSTA RICA CI-0202 Principios de Informática ESCUELA DE CIENCIAS DE LA Profesor Adolfo Di Mare COMPUTACION E INFORMATICA Tarea programada Nº 11 Sudoku() Carnet: ________ Nombre: __________________________________ /// Dimensión de un tablero de Sudoku. const int Sudoku_DIM = 3*3; /// Define el tipo \c Sudoku como una matriz bidimensional. /// - Las dimensiones máximas de la matriz son Sudoku_DIM x Sudoku_DIM. typedef char Sudoku[Sudoku_DIM][Sudoku_DIM]; /** Retorna \true si el Sudoku \c S está resuelto. - El Sudoku \c S está resuelto si se cumplen estas condiciones: - El Sudoku ya está lleno (no tiene espacios en blanco). - En cada fila aparece cada uno de los dígitos [1..9]. - En cada columna aparece cada uno de los dígitos [1..9]. */ bool Sudoku_Resuelto( const Sudoku S ); Inserte su función en el archivo Sudoku.cpp aquí incluido. NOTA: Este programa trabaja sólo con la pantalla. No escribe en la impresora. ================================= Políticas de Corrección de Tareas ================================= 1) Correcta indentación del código fuente. 2) Correcto espaciado del código fuente. 3) Código fuente escrito de manera que se legible y claro. 4) Uso de indentificadores significativos. 5) Uso de Doxygen para la especificación de todos los métodos, funciones y campos de clase. :::::::::: Sudoku.cpp :::::::::: // Sudoku.cpp (c) 2006 adolfo@di-mare.com /** \file Sudoku.cpp \brief Ejemplo Sudoku de uso de matrices bidimensionales de tamaño fijo. \author Adolfo Di Mare \date 2006 */ #include const char Blanco = ' '; ///< Espacio en blanco /// Dimensión de un tablero de Sudoku. const int Sudoku_DIM = 3*3; /// Define el tipo \c Sudoku como una matriz bidimensional. /// - Las dimensiones máximas de la matriz son Sudoku_DIM x Sudoku_DIM. typedef char Sudoku[Sudoku_DIM][Sudoku_DIM]; /** Retorna \true si el Sudoku \c S está resuelto. - El Sudoku \c S está resuelto si se cumplen estas condiciones: - El Sudoku ya está lleno (no tiene espacios en blanco). - En cada fila aparece cada uno de los dígitos [1..9]. - En cada columna aparece cada uno de los dígitos [1..9]. */ bool Sudoku_Resuelto( const Sudoku S ); /// Vacea completo el Sudoku \c S. /// - Constructor. void Sudoku_Clear( Sudoku S ) { for (int i=0; i // cin && cout #include // isdigit() /// Obtiene de \CIN el valor para \c S. /// - Funciona bien si el valor fue grabado con \c Sudoku_ostream(). istream& Sudoku_istream( istream& CIN, Sudoku S ) { Sudoku_Clear( S ); for (int i=0; i> str; // NO FUNCIONA S[i][j] = str[j*2+1]; #endif } /// Graba en el flujo \c COUT el valor de \c S. /// - Lo graba como una matriz de tamaño Sudoku_DIM x Sudoku_DIM. ostream& Sudoku_ostream( ostream & COUT, const Sudoku S ) { for (int i=0; i BOOOM !!!". */ void Reporta_Sudoku_Resuelto( bool res, const Sudoku S ) { bool real_res = Sudoku_Resuelto( S ); cout << "Sudoku_Resuelto() ==> "; if (real_res) { cout << "true"; } else { cout << "false"; } if (res != real_res) { cout << " ==> BOOOM !!!"; } cout << endl; Sudoku_ostream( cout, S ); cout << endl; } #include // strcpy() #include // struct ffblk #include // FA_DIREC #include // printf() #include /// Programa principal. /// - Invoca \c Reporta_Sudoku_Resuelto() con varios datos de prueba. /// - Lee cada dato de prueba de un archivo diferente. /// - Cada dato de prueba es un tablero Sudoku lleno, almacenado /// en un archivo llamado Sudoku.0* y que incluye al final una /// indacación \c true o \c false que dice si ese Sudoku está o /// no resuelto. int main() { Sudoku S; Sudoku_Init( S ); struct ffblk FILE_BLOCK; int done; int ALL = WILDCARDS | EXTENSION | FILENAME | DIRECTORY | DRIVE; // Lee todos los archivos solución del directorio actual done = findfirst("Sudoku.0*",&FILE_BLOCK, ALL); while( !done ) { if( FILE_BLOCK.ff_attrib & FA_DIREC ) { // OJO: FA_DIREC es de // Como es un directorio // se lo brinca } else { printf("Archivo [%s] ==> ", FILE_BLOCK.ff_name); ifstream Fcin( FILE_BLOCK.ff_name ); Sudoku_istream( Fcin, S ); char str_res[8]; Fcin >> str_res; bool res; res = ( 0 == strcmp( str_res, "true" ) ? true : false ); Reporta_Sudoku_Resuelto( res, S ); Fcin.close(); } done = findnext(&FILE_BLOCK); } return 0; } bool Sudoku_Resuelto( const Sudoku S ) { // http://www.geocities.com/jaapsch/sudoku.htm return true || S[0][0]; } // EOF: Sudoku.cpp