Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

Programa de prueba : ordenar acciones

El programa consiste en crear aleatoriamente un conjunto de acciones (financieras) con las siguientes caracteristicas : código , cantidad y precio.

Los datos deberán ser mostrados ordenadamente según dos criterios : cantidad y precio.


Salida del programa



Creación de la estructura

typedef struct 
{
    int cantidad;
    int precio;
    int codigo;
} ACCION;

Declaración de tipos y archivos cabecera

typedef ACCION TipoC;
typedef ACCION TipoA;

#include "tadCola.h"
#include "tadArbin.h"

#include "funcArbin.h"

Generación de acciones

Primero que nada, se implementa que pueda generar aleatoriamente una estructura de tipo ACCION . Para ello , se optó a pasar como parámetro un puntero a una variable ACCION y un parámetro que asignara el código, dando posibilidad que éste campo sea fuera asignado en forma externa, asegurando la no repetición.

void crearAccion(ACCION *a , int codigo)
{
    a->codigo = codigo;
    a->cantidad = rand() % 101;
    a->precio = (5 + rand() % 16) * 1000;
}

Para generar el conjunto de acciones, se optó por ir almacenando los datos en una cola.

Cola generarAcciones(Cola c , int num_acciones )
{
    if (c == NULL) c = inicCola();
    
    ACCION aux;

    for(int i = 1; i <= 5; i++)
    {
        crearAccion(&aux,i*10);    
        adicCola(c,aux);
    }

    return c;
}

Criterios de comparación

Tenemos que insertar los datos ordenadamente en el árbol, según la cantidad y el precio.
Como la función insertarArbin recibe como parámetro la función de comparación , debemos implementar a continuación, los criterios :

int comp_cantidad(ACCION a , ACCION b)
{
    return a.cantidad > b.cantidad;
}

int comp_precio(ACCION a , ACCION b)
{
    return a.precio > b.precio;
}

Traspaso de datos de la cola al árbol

Ya que en algún momento los datos se encuentran almacenados en la cola, y debemos pasar los datos al árbol, se debe implementar una función que reciba como parámetro la cola y el árbol, además de un puntero a función que indique cual va a ser el criterio de inserción de datos.

La siguiente función va recorriendo la cola , insertando en el árbol y eliminando los elementos de la cola en forma iterativa.

Arbin Cola_Arbol(Cola c , Arbin a , int (*f_comp)(TipoA,TipoA))
{
    TipoC aux;
    while(!vaciaCola(c))
    {
        aux = infoCola(c);
        elimCola(c);

        a = insertarArbin(a,aux,f_comp);
    }
    
    return a;
}

Imprimir los datos después del recorrido

Se implementa una función que recorre la cola en forma iterativa, dejándola al final vacía.

void imprimir_cola(Cola c)
{
    printf("\n\tcodigo\t\tcantidad\tprecio");
    printf("\n\t------\t\t--------\t------");
    
    ACCION a;
    while(!vaciaCola(c))
    {
        a = infoCola(c);
        elimCola(c);

        printf("\n\t%d\t\t%d\t\t%d",a.codigo,a.cantidad,a.precio);
    }
}

Programa principal

  • Generar acciones --> datos en la cola
  • Pasar los datos al árbol con el criterio catidad
  • Hacer recorrido inorden --> datos en la cola y el árbol
  • Imprimir la cola --> datos en el árbol y la cola se vacía al imprimir

  • Realizar pasos previos para reconstruir el árbol --> volver a llenar la cola haciendo un recorrido inorden --> Liberar memoria del árbol --> crear árbol vacío en cuestión.

  • Pasar los datos al árbol con el criterio precio
  • Hacer recorrido inorden --> datos en la cola y el árbol
  • Imprimir la cola --> datos en el árbol y la cola se vacía al imprimir
  • Destruir el árbol

    int main()
    {
    
        printf("\n\tOrdenado por cantidad\n");
        printf("\t---------------------\n");
        
        Arbin arbol = arbinVacio();
        Cola col = inicCola();
        col = generarAcciones(col,5);
    
        arbol = Cola_Arbol(col , arbol , comp_cantidad);
    
        inordenArbin(arbol,col);
        imprimir_cola(col);
        
        inordenArbin(arbol,col);
        
        destruirArbin(arbol);
        arbol = arbinVacio();
    
        arbol = Cola_Arbol(col,arbol,comp_precio);
        inordenArbin(arbol,col);
    
        printf("\n\n\n\tOrdenado por precio\n");
        printf("\t-------------------\n");
        imprimir_cola(col);
    
        destruirArbin(arbol);
        printf("\n\n");
        return 0;
    }
    
    
    Bajar archivos