Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIÓN III
TABLA DE CONTENIDO
Proyecto Árbol Avl ..........................................................................................................................1
Los árboles AVL son árboles BB donde todo nodo cumple la propiedad de equilibrado AVL:
Tras la inserción o borrado de un elemento, sólo los ascendientes del nodo pueden sufrir un
Se añade una etapa donde se recorren los ascendientes. Si alguno está desequilibrado (+2 o -2)
El problema que se desea resolver corresponde a la lectura de un archivo en formato *.csv que
contiene los registros NIT, FECHA y MONTO, estos registros deben alimentar un árbol
equilibrado (AVL).
DESCRIPCIÓN DE LA SOLUCIÓN:
Se realiza un desarrollo de un programa en C++ que leerá el archivo *.csv que se especifique,
leerá cada registro con la estructura NIT, FECHA, MONTO y se insertará el registro dentro de
un Árbol AVL equilibrado; también tendrá la funcionalidad de buscar un NIT y mostrará cada
uno de los registros existentes con esa referencia, así como la función de finalizar el programa.
2
AUTORES:
DETALLES TÉCNICOS:
Versión: 20.03
Trabajo en Equipo,
Corrección de Errores,
El Código es de Todos,
Código Simple
registro principal
Cadena: ID
Cadena: date
Cadena: monto
Estructura: Node
CODIGO FUENTE:
#include<iostream>
#include<cstdio>
#include<sstream>
#include<algorithm>
#include <queue>
#include <fstream>
#include <cstdlib>
#include <string>
#include <string.h>
#include <limits>
#include <stdlib.h>
#include <windows.h>
struct Node {
int Nit;
string id;
string date; // Estructura para la pila que se usara en la opcion 1 y 2 del menu
string monto;
Node *next;
ptrNode ptrNew;
if ( ptrNew != NULL ) {
ptrNew->Nit = i.Nit;
ptrNew->id = i.id;
ptrNew->date = i.date; //Metodo para Añadir los datos Nit,Fecha, Monto del archivo
ptrNew->monto = i.monto;
ptrNew->next = *ptrtop;
*ptrtop = ptrNew;
cout << "\tPersona con el Nit: [" << i.Nit <<"] encontrada."<<endl; //
return;
int n;
bool found=false;
cin>>n;
if(n==cursor->Nit){
cout<<"============================";
cout<<"\n\tNIT: "<<cursor->Nit<<"\n";
cout<<"\tMONTO: "<<cursor->monto<<"\n";
cout<<"============================\n";
found = true;
cursor = cursor->next;
if(found==false){
cout << "Nit no encontrado "<<endl; //Mensaje que alerta al usuario el cual indica que
struct avl_node
{ int data;
}*root;class avlTree
8
public:
void leerArchivo(string, string, string, int); // Metodo para la lectura del archivo CSV
avlTree()
root = NULL;
};
//node = nodo, avl_node = avl_nodo, left = izquierdo, rigth = derecho, avlTree = avlArbol
int main()
system("color 0F");
9
int segundos=5;
cout<<"\n";
cout<<"\t\t\t\t CARGANDO...\n";
cout<<"\n";
"Cargando"
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\n";
system("pause");
system("cls");
int choice, cont=0, NIT2; //Declaración de variables para el menú y para la opción número 1
string NIT, FECHA, MONTO; //Declaración de variables para leer los datos del archivo
avlTree avl;
while (1)
cout<<"-----------------------"<<endl;
cout<<"-----------------------"<<endl;
cout<<"3. Terminar"<<endl;
cout<<"-----------------------"<<endl;
cout<<"-----------------------\n"<<endl;
cin>>choice;
case 1:
//avl.printLevelOrder(root);
11
volver al menú
system("cls");
break;
case 2: //opción 2
cout << "Ingrese el nombre del archivo CSV: " << endl;
file.open(namefile.c_str());
if(!file.is_open()) {
cout << "Archivo "<< namefile <<" no encontrado." << endl; // Sentencia que indica si
exit(-1); // Salir
for (Node i;
&& getline(file, i.date, ',') //Obtener lineas Fecha y Monto del archivo CSV accediendo a la
cout<<"\nMonto: "<<i.monto;
case 4:
if (root == NULL)
continue;
cout<<"Árbol AVL Balanceado:"<<endl; //Muestra la figura del árbol AVl con los
números de NIT
13
avl.mostrarArbol(root, cont);
break;
case 3:
break;
default:
return 0;
int h = 0;
if (temp != NULL)
h = max_height + 1;
return h;
14
return b_factor;
avl_node *temp;
temp = parent->right;
parent->right = temp->left;
temp->left = parent;
return temp;
avl_node *temp;
temp = parent->left;
parent->left = temp->right;
temp->right = parent;
return temp;
avl_node *temp;
temp = parent->left;
avl_node *temp;
temp = parent->right;
if (bal_factor > 1)
else
else
return temp;
if (root == NULL)
root->data = value;
root->left = NULL;
root->right = NULL;
return root;
return root;
if (arbol ==NULL){
return;
else{
cout<<" ";
cout <<arbol->data<<endl;
cout << "\nIngrese el nombre del archivo CSV: \n" << endl;
file.open(namefile.c_str());
if(!file.is_open()) {
19
cout << "Archivo "<< namefile <<" no encontrado." << endl; //SI el nombre es incorrecto nos
exit(-1);
ifstream archivo(NOMBRE_ARCHIVO);
string linea;
avlTree avl;
NIT2 = atoi(NIT.c_str());
// Imprimir
archivo.close();
LIMITACIONES DE LA APLICACIÓN:
misma carpeta donde se encuentra el archivo a leer para evitar errores de lectura e indicando el
nombre.
Otra limitante conocida corresponde al método de lectura, ya que el archivo a leer debe
contener un formato específico *.csv y contener únicamente los 3 campos reconocidos NIT (sin
numéricos sin división de miles, es decir comas; y el punto decimal contendrá únicamente dos
decimales).