Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <cstdio>
- #include <iostream>
- #include <iomanip>
- #include <cstring>
- #include <fstream>
- #include <cmath>
- #include "Arboles.h"
- using namespace std;
- void *memoriaExacta(void **arr,int cant){
- void **cadena = new void*[cant+1];
- for(int i = 0;i < cant ;i++){
- cadena[i] = arr[i];
- }
- cadena[cant] = NULL;
- return cadena;
- }
- void *leerPrimeraParte(ifstream& inFile){
- int codAlumno;
- double tarifa;
- char *nombreCompleto,buffNombre[500];
- if(!(inFile >> codAlumno)){
- inFile.clear();
- return NULL;
- }
- inFile >> buffNombre;
- inFile >> tarifa;
- double totalPagar = 0.0;
- double *ptrTotal = new double;
- *ptrTotal = totalPagar;
- nombreCompleto = new char[strlen(buffNombre) + 1];
- strcpy(nombreCompleto,buffNombre);
- int *ptrCod = new int;
- *ptrCod = codAlumno;
- double *ptrTarifa = new double;
- *ptrTarifa = tarifa;
- void **dato = new void*[4];
- dato[0] = ptrCod;
- dato[1] = nombreCompleto;
- dato[2] = ptrTarifa;
- dato[3] = ptrTotal;
- return dato;
- }
- void inicializar_ABB(void *&ABB){
- ABB = NULL;
- }
- int comparar(void *reg1,void *reg2){
- void **regD1 = (void **)reg1;
- void **regD2 = (void **)reg2;
- int *dat1 = (int *)regD1[0];
- int *dat2 = (int *)regD2[0];
- return *dat1 - *dat2;
- }
- void ABB_insertar(void *&ABB,void *dato){
- void **ptrRec = (void **)ABB;
- if(ptrRec == NULL){
- //cout << "Dato 1 "<<palabra <<endl;
- void **ptrNuevo = new void*[3];
- ptrNuevo[0] = dato;
- ptrNuevo[1] = NULL;
- ptrNuevo[2] = NULL;
- ABB = ptrNuevo;
- return ;
- }else{
- if(comparar(ptrRec[0],dato)<0){
- ABB_insertar(ptrRec[2],dato);
- }else{
- if(comparar(ptrRec[0],dato)>0){
- ABB_insertar(ptrRec[1],dato);
- }else{
- return ;
- }
- }
- }
- }
- void imprimir(void *ABB,ofstream& outFile){
- if(ABB!=NULL){
- void **nodo = (void **)ABB;
- void **reg = (void **)nodo[0];
- int *cod = (int *)reg[0];
- char *nom = (char *)reg[1];
- double *tar = (double *)reg[2];
- double *pre = (double *)reg[3];
- imprimir(nodo[1],outFile);
- outFile << setw(12) << left << *cod << setw(60) << left << nom
- << setw(12)<< left <<fixed << setprecision(2) << *tar << fixed << setprecision(2) << *pre <<endl;
- imprimir(nodo[2],outFile);
- }
- }
- void leerArbol(void *&ABB,void *(*ptrLeer)(ifstream& inFile),void (*ABB_insertar)(void *&ABB,void *dato),ifstream&inFile){
- void *dato;
- while(1){
- dato = ptrLeer(inFile);
- if(dato == NULL) break;
- ABB_insertar(ABB,dato);
- }
- }
- void imprimirLibros(void *cursos){
- void **arrCursos = (void **)cursos;
- for(int i = 0;arrCursos[i];i++){
- void**regCurso = (void **)arrCursos[i];
- char *codCur = (char *)regCurso[0];
- double *ptrPu = (double *)regCurso[1];
- cout << setw(12) << left << codCur << fixed <<
- setprecision(2) << *ptrPu << endl;
- }
- }
- int cmpCodLib(const void *dato1,const void *dato2){
- void ***regDato1 = (void ***)dato1;
- void ***regDato2 = (void ***)dato2;
- void **reg1 = (void **)regDato1[0];
- void **reg2 = (void **)regDato2[0];
- char *cad1 = (char *)reg1[0];
- char *cad2 = (char *)reg2[0];
- return strcmp(cad1,cad2);
- }
- void leerLibros(void *&cursos,ifstream& inFile){
- char buffCodLib[25],*codLib;
- double pu;
- void *buffCursos[500];
- int cantLib = 0;
- while(1){
- inFile >> buffCodLib;
- if(strcmp(buffCodLib,"FIN")==0) break;
- //cout << buffCodLib << endl;
- inFile >> pu;
- codLib = new char[strlen(buffCodLib) + 1];
- strcpy(codLib,buffCodLib);
- void **libros = new void*[2];
- double* ptrPu = new double;
- *ptrPu = pu;
- libros[0] = codLib;
- libros[1] = ptrPu;
- buffCursos[cantLib] = libros;
- cantLib++;
- }
- cursos = memoriaExacta(buffCursos,cantLib);
- qsort(cursos,cantLib - 1,sizeof(void *),cmpCodLib);
- //imprimirLibros(cursos);
- }
- int compararDato(void *dato1,void *dato2){
- void **da1 = (void **)dato1;
- void **da2 = (void **)dato2;
- int* nom1 = (int *)da1[0];
- int* nom2 = (int *)da2[0];
- return *nom1 - *nom2;
- }
- void* buscarArbol(void *ABB,void* dato){
- void **ptrRec = (void **)ABB;
- if(ptrRec == NULL){
- return NULL;
- }else{
- if(compararDato(ptrRec[0],dato)<0){
- buscarArbol(ptrRec[2],dato);
- }else{
- if(compararDato(ptrRec[0],dato)>0){
- buscarArbol(ptrRec[1],dato);
- }else{
- return ABB;
- }
- }
- }
- }
- double buscarPrecio(char *cod,void *Cursos){
- void **arrCur = (void **)Cursos;
- for(int i = 0;arrCur[i];i++){
- void **regCur = (void **)arrCur[i];
- char *codCur = (char *)regCur[0];
- double *ptrMonto = (double *)regCur[1];
- if(strcmp(codCur,cod)==0) return *ptrMonto;
- }
- return -1.0;
- }
- void agregarCosto(void *ABB,void *Cursos,ifstream& inFile){
- char *cod,buffCod[12];
- int codAl, cant;
- while((inFile >> buffCod)){
- inFile >> codAl >> cant;
- cod = new char[strlen(buffCod) + 1];
- strcpy(cod,buffCod);
- double pu = buscarPrecio(cod,Cursos);
- if(pu!=-1.0){
- void **dato = new void*[1];
- int *ptrCodAl = new int;
- *ptrCodAl = codAl;
- dato[0] = ptrCodAl;
- void *regAlm = buscarArbol(ABB,dato);
- if(regAlm!=NULL){
- void **regAlumno = (void **)regAlm;
- void **nodo = (void **)regAlumno[0];
- double *ptrMonto = (double *)nodo[3];
- double *ptrTarifa = (double *)nodo[2];
- cout << "Pu = "<<pu << " Tarifa= "<<*ptrTarifa<<endl;
- *ptrMonto +=(pu*(*ptrTarifa/100));
- ptrMonto = (double *)nodo[3];
- }else cout << "MAL MAL\n";
- }else cout << "MAL MAL\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement