ELO 320    1er. Sem. 2001
3º Tarea de Programación:  Posición Porcentual Dentro de un Grupo


Contexto: Para cada información de notas entregadas a los alumnos a través del InterAyuda se desea incorporar infromación de la posición porcentual de esa nota dentro del grupo. En otras palabara , se desea entregar la información del porcentaje de notas inferiores o iguales a cada nota. Por ejemplo, si en un grupo de 5 los resultados fueron: 20, 40, 65 ,70 ,  y 92; la posición porcentual según este criterio es:
20    20 %
40    40 %
65    60%
70    80%
92    100%

La idea es que, además de la nota, en el InterAyuda yo les pueda dar información de en qué posición están respecto del grupo. El que saca la mejor nota estará el el 100% respecto a su grupo y el que obtiene la mínima estará en la posición 100/n (donde n es el número de notas).

Tarea: Desarrollar un programa que, dada  un listado de notas entregado en un archivo (una nota por línea), entregue un archivo de salida que contenga la nota y luego la posición porcentual de esa nota.

El nombre del archivo de entrada es ingresado como un argumento en la línea de comando.
El nombre del archivo de salida es como el de entrada agregando a su nombre la extensión ".out".
Es decir si su porgrama es llamado :

bash> tarea3  elo320.c1

los resultados quegan en el archivo elo320.c1.out
 

Aún cuando la tarea en el contexto de un curso de ~30 alumnos se puede desarrollar de cualquier forma y su tiempo de ejecución será reducido, debemos ponernos en el caso que su programa pueda ser usado para grupos muy grandes de datos. Por ello se pide que el algoritmo use:

1.- Un árbol de busqueda binaria aumentado con un campo "tamaño"  en cada nodo.  Éste lamacena el número de nodos totales del subárbol formado al tener ese nodo como raíz.
2.- Ustede deberá implementar, al menos, las operaciones de inserción,  búsqueda,  y obtención de la posición de orden.

El algortimo puede ser como:
a.- leer archivo de entrada e insertar el el árbol cada dato leido. N=número de notas;
b.- Volver a abrir el archivo de entrada y abrir el archivo de salida
c.- Para (cada nota del archivo de entrada)
d.-        Escribir la nota en el archivo de salida;
e.-        x = Buscar el nodo del árbol con esa nota;
f.-         Escribir en archivo de salida Posición de orden(x) / N ;
g.-        Escribir nueva línea;
h.- Cerrar los archivos de entrada y salida.