|
|||||||
|
|
|
|||||
|
|
|||||||
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
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