128 lines
2.9 KiB
C++
128 lines
2.9 KiB
C++
//Sudoku - Fernando Méndez Torrubiano
|
|
#include "ListaSudokus.h"
|
|
using namespace std;
|
|
|
|
void iniciar(tListaSudokus& lista) {
|
|
|
|
lista.contador = 0;
|
|
for (int i = 0; i < MAX_SDK; i++){
|
|
iniciar(lista.registro[i], "", 0);
|
|
}
|
|
|
|
}
|
|
|
|
int numElems(const tListaSudokus& lista) {
|
|
int num = lista.contador;
|
|
|
|
return num;
|
|
}
|
|
|
|
bool cargar(tListaSudokus& lista) {
|
|
bool carga = false;
|
|
ifstream archivo;
|
|
tListaSudokus aux;
|
|
int cont = 0;
|
|
|
|
iniciar(lista);
|
|
|
|
archivo.open("registroSudokus.txt");
|
|
if (!archivo.is_open()) {
|
|
cout << "Error al leer los datos." << endl;
|
|
carga = false;
|
|
}
|
|
else {
|
|
while ((lista.contador < MAX_SDK) && (cargar(lista.registro[lista.contador], archivo))) {
|
|
cont = lista.contador;
|
|
while ((cont > 0) && (lista.registro[cont] < lista.registro[cont - 1])) { //(operator<(lista.registro[cont], lista.registro[cont - 1]))
|
|
aux.registro[cont] = lista.registro[cont];
|
|
lista.registro[cont] = lista.registro[cont - 1];
|
|
lista.registro[cont - 1] = aux.registro[cont];
|
|
cont--;
|
|
}
|
|
lista.contador++;
|
|
}
|
|
carga = true;
|
|
}
|
|
archivo.close();
|
|
|
|
return carga;
|
|
}
|
|
|
|
void mostrar(const tListaSudokus& lista) {
|
|
|
|
cout << endl << right << setw(22) << "FICHERO DE CARGA" << setw(10) << "NIVEL" << endl;
|
|
cout << setfill('-') << setw(45) << "\n" << setfill(char(0));
|
|
for (int i = 0; i < lista.contador; i++) {
|
|
cout << right << i + 1 << "." << setw(20) << lista.registro[i].nomTablero << setw(10) << lista.registro[i].puntos << endl;
|
|
}
|
|
cout << setfill('-') << setw(45) << "\n" << setfill(char(0));
|
|
|
|
}
|
|
|
|
////
|
|
|
|
bool guardar(const tListaSudokus& lista) {
|
|
ofstream archivo;
|
|
bool guardado = false;
|
|
int i = 0;
|
|
|
|
archivo.open("registroSudokus.txt");
|
|
if (!archivo.is_open()) {
|
|
cout << "Error al guardar." << endl;
|
|
}
|
|
else {
|
|
while ((i < lista.contador) && (!guardado)) {
|
|
if (guardar(lista.registro[i], archivo)) {
|
|
i++;
|
|
}
|
|
}
|
|
guardado = true;
|
|
}
|
|
|
|
return guardado;
|
|
}
|
|
|
|
bool buscar(const tListaSudokus& lista, string nombArch) {
|
|
bool encontrado = false;
|
|
int i = 0;
|
|
|
|
while ((!encontrado) && (i < lista.contador)) {
|
|
if (lista.registro[i].nomTablero != nombArch) {
|
|
i++;
|
|
}
|
|
else {
|
|
encontrado = true;
|
|
}
|
|
}
|
|
|
|
return encontrado;
|
|
}
|
|
|
|
bool insertar(tListaSudokus& lista, const tRegSudoku& sudoku) {
|
|
bool insertado = false;
|
|
tListaSudokus aux;
|
|
int cont = 0;
|
|
|
|
if (buscar(lista, sudoku.nomTablero)) {
|
|
cout << "El tablero ya existe." << endl;
|
|
}
|
|
else {
|
|
if (lista.contador < MAX_SDK) {
|
|
cont = lista.contador;
|
|
while ((cont > 0) && (operator<(sudoku, lista.registro[cont - 1]))) {
|
|
aux.registro[cont] = lista.registro[cont];
|
|
lista.registro[cont] = lista.registro[cont - 1];
|
|
lista.registro[cont - 1] = aux.registro[cont];
|
|
cont--;
|
|
}
|
|
iniciar(lista.registro[cont], sudoku.nomTablero, sudoku.puntos);
|
|
lista.contador++;
|
|
insertado = true;
|
|
}
|
|
else {
|
|
cout << "La lista está llena." << endl;
|
|
}
|
|
}
|
|
|
|
return insertado;
|
|
} |