Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Practica 59
- Almacenar los promedios finales de un grupo de alumnos utilizando un
- arbol binario y desplegar las calificaciones con un recorrido en orden
- */
- tipos
- Alumno: registro {
- matricula: numerico
- nombre: cadena
- promedio: numerico
- izquierdo: numerico
- derecho: numerico
- }
- var
- arbol: vector [100] Alumno
- raiz, libre, temp, actual, padre: numerico
- opcion, matricula, promedio, i: numerico
- nombre: cadena
- encontrado: logico
- inicio
- cls()
- raiz = 0
- libre = 1
- // Inicializar la lista para el manejo de nodos libres
- desde i=1 hasta 99 {
- arbol[i].izquierdo = i + 1
- }
- arbol[100].izquierdo = 0
- repetir
- imprimir("\nMenú:")
- imprimir("\n1. Insertar Alumno")
- imprimir("\n2. Mostrar Alumnos en orden")
- imprimir("\n3. Salir")
- imprimir("\nElija una opción: ")
- leer(opcion)
- eval {
- caso (opcion ==1)
- // Insertar Alumno
- si (libre == 0) {
- imprimir("\nEl árbol está lleno.")
- sino
- temp = libre
- libre = arbol[libre].izquierdo
- imprimir("\nIntroduce la matrícula del alumno: ")
- leer(matricula)
- imprimir("\nIntroduce el nombre del alumno: ")
- leer(nombre)
- imprimir("\nIntroduce el promedio del alumno: ")
- leer(promedio)
- arbol[temp].matricula = matricula
- arbol[temp].nombre = nombre
- arbol[temp].promedio = promedio
- arbol[temp].izquierdo = 0
- arbol[temp].derecho = 0
- si (raiz == 0) {
- raiz = temp
- sino
- actual = raiz
- encontrado = FALSE // Variable booleana para controlar el bucle
- repetir
- padre = actual
- si (matricula < arbol[actual].matricula) {
- actual = arbol[actual].izquierdo
- si (actual == 0) {
- arbol[padre].izquierdo = temp
- encontrado = TRUE // Se ha encontrado el lugar de inserción
- }
- sino
- actual = arbol[actual].derecho
- si (actual == 0) {
- arbol[padre].derecho = temp
- encontrado = TRUE // Se ha encontrado el lugar de inserción
- }
- }
- hasta (encontrado) // El bucle se repetirá hasta que se encuentre un lugar de inserción
- }
- }
- // No necesitamos la instrucción romper, ya que el bucle se controla con la variable 'encontrado'
- //romper
- caso (opcion ==2)
- // Mostrar Alumnos en orden
- imprimir("\nAlumnos en orden de matrícula:")
- mostrar_en_orden(raiz)
- //romper
- caso (opcion ==3)
- imprimir("\nSaliendo del programa.")
- //romper
- sino
- imprimir("\nOpción no válida. Por favor, elija una opción válida.")
- //romper
- }
- hasta (opcion == 3)
- fin
- subrutina mostrar_en_orden(nodo: numerico)
- inicio
- si (nodo <> 0) {
- mostrar_en_orden(arbol[nodo].izquierdo)
- imprimir("\nMatrícula: ", arbol[nodo].matricula, ", Nombre: ", arbol[nodo].nombre, ", Promedio: ", arbol[nodo].promedio)
- mostrar_en_orden(arbol[nodo].derecho)
- }
- Fin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement