Advertisement
idsystems

SLE_Practica59_Promedios

Jun 24th, 2024
643
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.92 KB | None | 0 0
  1.  
  2. /* Practica 59
  3.    Almacenar los promedios finales de un grupo de alumnos utilizando un
  4.    arbol binario y desplegar las calificaciones con un recorrido en orden
  5.  
  6. */
  7.  
  8. tipos
  9.    Alumno: registro {
  10.     matricula: numerico
  11.     nombre: cadena
  12.     promedio: numerico
  13.     izquierdo: numerico
  14.     derecho: numerico
  15.    }
  16.  
  17. var
  18.     arbol: vector [100] Alumno
  19.     raiz, libre, temp, actual, padre: numerico
  20.     opcion, matricula, promedio, i: numerico
  21.     nombre: cadena
  22.     encontrado: logico
  23.  
  24. inicio
  25.     cls()
  26.     raiz = 0
  27.     libre = 1
  28.  
  29.     // Inicializar la lista para el manejo de nodos libres
  30.     desde i=1 hasta 99 {
  31.         arbol[i].izquierdo = i + 1
  32.     }
  33.     arbol[100].izquierdo = 0
  34.  
  35.     repetir
  36.         imprimir("\nMenú:")
  37.         imprimir("\n1. Insertar Alumno")
  38.         imprimir("\n2. Mostrar Alumnos en orden")
  39.         imprimir("\n3. Salir")
  40.         imprimir("\nElija una opción: ")
  41.         leer(opcion)
  42.  
  43.         eval {
  44.             caso (opcion ==1)
  45.                 // Insertar Alumno
  46.                 si (libre == 0) {
  47.                     imprimir("\nEl árbol está lleno.")
  48.                 sino
  49.                     temp = libre
  50.                     libre = arbol[libre].izquierdo
  51.  
  52.                     imprimir("\nIntroduce la matrícula del alumno: ")
  53.                     leer(matricula)
  54.                     imprimir("\nIntroduce el nombre del alumno: ")
  55.                     leer(nombre)
  56.                     imprimir("\nIntroduce el promedio del alumno: ")
  57.                     leer(promedio)
  58.  
  59.                     arbol[temp].matricula = matricula
  60.                     arbol[temp].nombre = nombre
  61.                     arbol[temp].promedio = promedio
  62.                     arbol[temp].izquierdo = 0
  63.                     arbol[temp].derecho = 0
  64.  
  65.                     si (raiz == 0) {
  66.                         raiz = temp
  67.                     sino
  68.                         actual = raiz
  69.                         encontrado = FALSE  // Variable booleana para controlar el bucle
  70.                         repetir
  71.                             padre = actual
  72.                             si (matricula < arbol[actual].matricula) {
  73.                                 actual = arbol[actual].izquierdo
  74.                                 si (actual == 0) {
  75.                                     arbol[padre].izquierdo = temp
  76.                                     encontrado = TRUE  // Se ha encontrado el lugar de inserción
  77.                                 }
  78.                             sino
  79.                                 actual = arbol[actual].derecho
  80.                                 si (actual == 0) {
  81.                                     arbol[padre].derecho = temp
  82.                                     encontrado = TRUE  // Se ha encontrado el lugar de inserción
  83.                                 }
  84.                             }
  85.                         hasta (encontrado)  // El bucle se repetirá hasta que se encuentre un lugar de inserción
  86.                     }
  87.                 }
  88.                 // No necesitamos la instrucción romper, ya que el bucle se controla con la variable 'encontrado'
  89.                 //romper
  90.  
  91.             caso (opcion ==2)
  92.                 // Mostrar Alumnos en orden
  93.                 imprimir("\nAlumnos en orden de matrícula:")
  94.                 mostrar_en_orden(raiz)
  95.                 //romper
  96.  
  97.             caso (opcion ==3)
  98.                 imprimir("\nSaliendo del programa.")
  99.                 //romper
  100.  
  101.             sino
  102.                 imprimir("\nOpción no válida. Por favor, elija una opción válida.")
  103.                 //romper
  104.         }
  105.     hasta (opcion == 3)
  106. fin
  107.  
  108.  
  109. subrutina mostrar_en_orden(nodo: numerico)
  110.    inicio
  111.       si (nodo <> 0) {
  112.          mostrar_en_orden(arbol[nodo].izquierdo)
  113.          imprimir("\nMatrícula: ", arbol[nodo].matricula, ", Nombre: ", arbol[nodo].nombre, ", Promedio: ", arbol[nodo].promedio)
  114.             mostrar_en_orden(arbol[nodo].derecho)
  115.       }
  116.    Fin
  117.  
  118.  
Tags: Arboles
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement