Cpp/Exámenes Resueltos (Segundo Semestre)/Junio2017DG/listaLonja.cpp

116 lines
2.6 KiB
C++
Raw Normal View History

2019-06-20 13:06:16 +02:00
#include "listaLonja.h"
using namespace std;
//Funciones auxiliares:
bool busquedaRecursiva(tListaLotes & lista, tLotes& nuevo, int& ini, int& fin, int& pos);
void inicializar(tListaLotes & lista){
lista.cont = 0;
}
int numLotes(tListaLotes & lista){
return lista.cont;
}
bool insertar(tListaLotes & lista, tLotes& nuevo){
bool insertado = false;
int pos = 0;
if (!buscar(lista, nuevo, pos)) {
lista.lote[lista.cont] = new tLotes;
lista.lote[lista.cont]->lote = nuevo.lote;
lista.lote[lista.cont]->tipo = nuevo.tipo;
lista.lote[lista.cont]->precio = nuevo.precio;
lista.lote[lista.cont]->peso = nuevo.peso;
lista.cont++;
}
else {
lista.lote[lista.cont] = new tLotes;
for (int i = lista.cont; i > pos; i--){
lista.lote[i] = lista.lote[i - 1];
}
lista.lote[pos]->tipo = nuevo.tipo;
lista.lote[pos]->lote = nuevo.lote;
lista.lote[pos]->precio = nuevo.precio;
lista.lote[pos]->peso = nuevo.peso;
lista.cont++;
insertado = true;
}
return insertado;
}
bool cargar(tListaLotes & lista){
bool carga = false;
ifstream archivo;
tLotes aux;
inicializar(lista);
archivo.open("datos.txt");
if (!archivo.is_open()) {
cout << "Error al caragar el archivo." << endl;
}
else {
while (!archivo.fail() && lista.cont < MAX_LOTES) {
archivo >> aux.lote;
archivo >> aux.tipo;
archivo >> aux.precio;
archivo >> aux.peso;
if (!archivo.eof()) {
insertar(lista, aux);
}
}
carga = true;
}
return carga;
}
bool buscar(tListaLotes& lista, tLotes& nuevo, int& pos){
bool encontrado = false;
int ini = 0, fin = lista.cont - 1;
encontrado = busquedaRecursiva(lista, nuevo, ini, fin, pos);
return encontrado;
}
bool busquedaRecursiva(tListaLotes& lista, tLotes& nuevo, int& ini, int& fin, int& pos) {
bool encontrado = false;
if (ini <= fin) {
pos = (ini + fin) / 2;
if (nuevo < *lista.lote[pos]) {
fin = pos - 1;
encontrado = busquedaRecursiva(lista, nuevo, ini, fin, pos);
}
else if (*lista.lote[pos] < nuevo){
ini = pos + 1;
encontrado = busquedaRecursiva(lista, nuevo, ini, fin, pos);
}
else {
encontrado = true;
}
}
return encontrado;
}
void obeternerLote(tListaLotes& lista, tLotes* lote, int& pos){
lote = lista.lote[pos];
}
void mostrar(tListaLotes& lista, tListaComprador& comprador){
for (int i = 0; i < comprador.cont; i++){
mostrarPrecio(*lista.lote[i], *comprador.comprador[i]);
}
}
void liberar(tListaLotes & lista){
for (int i = 0; i < lista.cont; i++){
delete lista.lote[i];
}
}