0% encontró este documento útil (0 votos)
16 vistas17 páginas

Ejercicios 2do Parcial Python

El documento describe dos ejercicios: el primero consiste en llenar y mostrar una matriz de orden impar, mientras que el segundo involucra la gestión de datos de estudiantes y escuelas, incluyendo la creación de archivos binarios y un reporte de los mejores promedios. Se presentan pseudocódigos y códigos en Python para implementar ambos ejercicios, detallando los procesos de entrada, procesamiento y salida de datos. El segundo ejercicio también incluye la ordenación de estudiantes y la generación de un reporte con los mejores promedios por escuela.

Cargado por

ommran2006
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
16 vistas17 páginas

Ejercicios 2do Parcial Python

El documento describe dos ejercicios: el primero consiste en llenar y mostrar una matriz de orden impar, mientras que el segundo involucra la gestión de datos de estudiantes y escuelas, incluyendo la creación de archivos binarios y un reporte de los mejores promedios. Se presentan pseudocódigos y códigos en Python para implementar ambos ejercicios, detallando los procesos de entrada, procesamiento y salida de datos. El segundo ejercicio también incluye la ordenación de estudiantes y la generación de un reporte con los mejores promedios por escuela.

Cargado por

ommran2006
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

EJERCICIO 1

Analisis:
Entrada:
 Una matriz de orden impar N (tipo entero: N) (tam)
Proceso:
 Solicitar datos de entrada (tam)
 Inicializar la matriz de tamaño (tam)
 Se crea un RP para las filas, ya que es el ciclo externo y basándonos si está
iterando en la mitad superior o inferior de la matriz, se aplicará una lógica
distinta para el llenado de la misma.
 Se imprime la matriz (mat)
Salida:
 Mostrar la matriz (mat) resultante.

Pseudocodigo: (se usan los índices desde cero)


Variables:
orden, entero
cont, entero
mitad, entero
mat, arreglo de entero

Inicio
Escribir ("Ingrese el orden impar de la matriz")
Leer (orden)
mitad = orden // 2
cont = 1

RP i = 0, orden, +1:
RP j = 0, orden, +1:
Si i ≤ mitad:
Si j ≤ i o j > orden - i - 2:
mat[i,j] = cont
cont = cont + 1
Fin-Si
Sino:
Si j < orden - i o j ≥ i
mat[i,j] = cont
cont = cont + 1
Fin-Si
Fin-Si
Fin-RP
Fin-RP
Escribir (mat)
Fin

Codigo en Python:
import numpy as np
orden = int(input("Ingrese el orden de la matriz impar: "))
mat = [Link]([orden, orden])
cont = 1
mitad = orden//2

for i in range(0, orden, 1):


for j in range(0, orden, 1):
if i<=mitad:
if j<=i or j>orden-i-2:
mat[i,j] = cont
cont = cont + 1
else:
if j<orden-i or j>=i:
mat[i,j] = cont
cont = cont + 1

print(mat)

EJERCICIO 2
Analisis:
Entrada:
 Datos de cada estudiante: cédula (cedula), nombre y apellido (ID), unidades
de créditos aprobadas (UC), carrera (carrera), promedio de notas
(promedio)
 Datos de cada escuela: código de la escuela (código), nombre (nombre), y
fecha de creación (fecha)
Proceso:
 Solicitar datos de entrada
Parte A
 Generar un archivo binario ([Link]) en el que se registrarán los
datos de cada estudiante.
 Generar un archivo binario ([Link]) en el que se registrarán los
datos de las escuelas.
Parte B
 Ordenar los estudiantes en el archivo [Link] de mayor a menor
promedio usando selección directa.
 Se recorre el archivo [Link] y pasando escuela por escuela, se
recorre el archivo [Link] seleccionando los 5 mejores
estudiantes en promedio por carrera y tienen que estar cursando desde el
cuarto semestre, es decir: UC > 89.
Parte C
 Recorrer el archivo [Link] en búsqueda de los estudiantes con
el mejor promedio.
 Crear un archivo de texto ([Link]) con el TOP 5 mejores promedios
por escuela, junto a los que tengan el mejor promedio de la universidad.
 Mostrar salida
Salida:
 Archivo de texto con el reporte ([Link])

Pseudocodigo: (se usan los índices desde cero)


Variables:
Contador, código, cedula, UC, carrera,
cantidad, n, longitud: entero
Bandera: booleano
Escuela, Opción, Nombre, fecha, ID: cadena
Promedio: real
Cedulas_est, UC_est, carrera_est: arreglo de
enteros
ID_est: arreglo de cadena
Promedio_est: arreglo de reales

Inicio
//1. Creacion de escuelas:

Funcion existe_esc(codigo)
Abrir archivo ("[Link]", lb) como
escuelas
bandera = verdadero
Mientras bandera = verdadero
Escuela = registro de escuelas
Leer (escuela)
Si escuela = φ:
bandera = falso
Sino:
Extraer el primer campo
entero de datos → id_escuela
Si escuela = código:
Cerrar archivo escuelas

Devolver verdadero
Fin Si
Fin Si
Fin Mientras
Cerrar archivo escuelas
Fin Función

Funcion generar_esc()
Función generar_esc()
contador = 1
opcion = "si"
Mientras opcion = "si":
Escribir (“Escuela numero
{contador}”)
Escribir (“Introduzca el código de
la escuela (Por ej.: 001): ”)
Leer (código)
Mientras existe_esc(código) =
Verdadero:
Escribir ("El código ya
existe, introduzca otro.")
Escribir (“Introduzca el
código de la escuela (Por
ej.: 001): ”)
Leer (código)
Fin Mientras
Fin Mientras

Escribir ("Introduzca el nombre de la


escuela (Por ej.: Ingeniería
Informática): ")
Leer (nombre)
Escribir ("Introduzca fecha de
creación de la escuela (Por ej.:
21/10/2006): “)
Leer (fecha)

Datos_esc = [código, nombre, fecha]

Abrir archivo ("[Link]", ab)


como escuelas
Escribir (datos_esc) en escuelas
Cerrar archivo escuelas

Escribir ("¿Desea introducir datos de


otra escuela? (SI/no): ")
Leer (opción)
contador = contador + 1
Fin Función

//2. Registro y ordenanmiento de estudiantes


Funcion generar_est()
Contador = 1
Opción = “si”
Mientras opción = “si”:
Escribir (“Estudiante numero
{contador}”)
Escribir (“Introduzca la cedula del
estudiante: ”)
Leer (cedula)
Escribir (“Introduzca la nombre del
estudiante: ”)
Leer (ID)
Escribir (“Introduzca las UC aprobadas
del estudiante: ”)
Leer (UC)
Escribir (“Introduzca la carrera del
estudiante: ”)
Leer (carrera)
Escribir (“Introduzca el promedio del
estudiante: ”)
Leer (promedio)

Datos_est=[cedula,ID,UC,carrera,promed
io]

Abrir archivo ("[Link]", ab)


como estudiantes
Escribir (datos_est) en
estudiantes
Cerrar archivo estudiantes

Escribir ("¿Desea introducir datos de


otra estudiante? (SI/no): ")
Leer (opción)
contador = contador + 1
Fin Mientras
Fin Funcion
Funcion cantidad_est()
Abrir archivo ("[Link]", lb) como
estudiantes
Cantidad = 0
Bandera = verdadero
Mientras bandera = verdadero:
Datos = registro de estudiantes
Leer (datos)
Si datos = φ:
Bandera = falso
Sino
Cantidad = cantidad + 1
Fin Si
Fin Mientras
Cerrar archivo estudiantes
Devolver cantidad
Fin Funcion

Funcion
selección_directa(principal,arr1,arr2,arr3,arr4
)
n = len(principal)
RP i=0,n-1,+1:
Elemento_menor = i
RP j=i+1,n,+1:
Si principal[j] >
principal[elemento_menor]:
Elemento_menor = j
Fin Si
Principal[i],
principal[elemento_menor] =
principal[elemento_menor],
Principal[i]
Arr1[i], arr1[elemento_menor] =
arr1[elemento_menor], arr1[i]
Arr2[i], arr2[elemento_menor] =
arr2[elemento_menor], arr2[i]
Arr3[i], arr3[elemento_menor] =
arr3[elemento_menor], arr3[i]
Arr4[i], arr4[elemento_menor] =
arr4[elemento_menor], arr4[i]
Fin RP
Fin RP
Fin Funcion

Funcion ordenar_est()
Longitud = cantidad_est
Dimensionar cedulas_est como longitud
Dimensionar ID_est como longitud
Dimensionar UC_est como longitud
Dimensionar carrera_est como longitud
Dimensionar promedio_est como longitud
Abrir archivo ("[Link]", lb) como
estudiantes
Datos_est = Registro de estudiantes
Cedulas_est[i] = datos_est[0]
ID_est[i] = datos_est[1]
UC_est[i] = datos_est[2]
carrera_est[i] = datos_est[3]
promedio_est[i] = datos_est[4]
Cerrar archivo estudiantes

Selección_directa(promedio_est,cedulas_est
,ID_est,UC_est,carrera_est)
Fin Funcion

//3. Creacion del reporte y mejor promedio


Funcion generar_reporte()
Abrir archivo ("[Link]", e) como
reporte
Escribir en reporte: (“ + UCAB, " +
fecha_Actual)
Escribir en reporte: (“ + "TOP 5 POR
ESCUELA")

Abrir archivo ("[Link]", lb) como


escuelas
Esc = verdadero
Mientras esc = verdadero
Escuela = Registro de escuelas:
Leer (escuela)
Si escuela = φ:
Esc = falso
Fin Si
Código_escuela = escuela[0]
Nombre_escuela = escuela[1]
Escribir en reporte: (“{nombre_escuela}”)

Abrir archivo ("[Link]",lb) como


estudiantes
Est = verdadero
cont_est_car = 0
estudiantes_carrera = “”
Mientras est = verdadero:
Datos_est = registro de
estudiantes
Leer (datos_est)
Si datos_est = φ:
Est = falso
Sino
Cedula = datos_est[0]
Nombre = datos_est[1]

Si cont_est_car < 5 y
datos_est[3] = código_escuela
y datos_est[2] > 89:
Estudiantes_carrera =
estudiantes_carrera +
cedula + nombre +
promedio
Cont_est_car =
cont_est_car + 1
Sino
Est = falso
Fin Si
Fin Si

Fin Mientras
Cerrar archivo estudiantes

Escribir en reporte: ("CÉDULA


NOMBRE PROMEDIO")
Escribir en reporte: (estudiantes_carrera)
Cerrar archivo escuelas
Cerrar archivo reporte
Fin Funcion

Funcion mejor_estudiante():
Abrir archivo (‘[Link]’, a) como
reporte
Abrir archivo (‘[Link]’, lb) como
estudiantes
Datos_est = registro de estudiantes
Leer (datos_est)
Mejor_promedio = datos_est[4]

Bandera = verdadero
Estudiantes_top = “”
Mientras bandera = verdadero
Datos_est = registro de
estudiantes
Si datos_est = φ:
Bandera = falso
Sino
Cedula = datos_Est[0]
Nombre = datos_est[1]

Si datos_est[4] =
mejor_promedio
Estudiantes_top =
estudiantes_top + cedula
+ nombre + mejor_promedio
Sino
Bandera = falso
Fin Si
Fin Si
Fin Mientras
Cerrar archivo estudiantes
Escribir en reporte (“Los mejores
estudiantes de la UCAB son”)
Escribir en reporte (“CEDULA
NOMBRE PROMEDIO”)
Escribir en reporte (“{estudiantes_top}”)
Cerrar archivo reporte
Fin Funcion

//4. Programa Principal


Programa Principal
Generar_esc()
Generar_est()
Ordenar_est()
Generar_reporte()
Mejor_estudiante()
Fin Programa
Fin

Codigo en Python:
import struct
import numpy as np
from datetime import datetime
#Funcion para obtener la fecha actual.
def obtener_fecha():
fecha_actual = [Link]()
return fecha_actual.strftime("%d/%m/%Y")

#VALIDACION
#Funcion para verificar si un codigo se encuentra registrado en el
archivo de carreras.
def existe_esc(codigo):
try:
with open("[Link]",'rb') as escuelas:
bandera = True
while bandera:
escuela = [Link]([Link]('i50s10s'))
if not escuela:
bandera = False
else:
escuela = [Link]('i',escuela)[0]
if escuela == codigo:
return True
return False
except:
return False

#PARTE A.1
#Funcion para generar el archivo binario de carreras.
def generar_esc():
contador = 1
opcion = 'si'
while [Link]() == "si":
print(f"\nEscuela #{contador}")
codigo = int(input("Introduzca el codigo de la escuela (Por ej.:
001): "))
while existe_esc(codigo):
print('El codigo ya existe, introduzca otro.')
codigo = int(input("Introduzca el codigo de la escuela (Por
ej.: 001): "))

nombre = str(input("Introduzca el nombre de la escuela (Por ej.:


Ingenieria Informatica): "))
fecha = str(input("Introduzca fecha de creación de la escuela
(Por ej.: 21/10/2006): "))

nombre = [Link](50).encode('utf-8')
fecha = [Link](10).encode('utf-8')
datos_esc = [Link]('i50s10s',codigo,nombre,fecha)

with open("[Link]",'ab') as escuelas:


[Link](datos_esc)

opcion = str(input("¿Desea introducir datos de otra escuela?


(SI/no): "))
contador += 1

#PARTE A.2
#Funcion para generar el archivo binario de estudiantes.
def generar_est():
contador = 1
opcion = 'si'
while [Link]() == "si":
print(f"\nEstudiante #{contador}")
cedula = int(input("Introduzca la cédula del estudiante: "))
id = str(input("Introduzca el nombre del estudiante: "))
uc = int(input("Introduzca las UC aprobadas del estudiante: "))
carrera = int(input("Introduzca el código de la carrera a la que
pertenece: "))
promedio = float(input("Introduzca el promedio de notas del
estudiante: "))

id = [Link](30).encode('utf-8')
datos_est = [Link]('i30siif',cedula,id,uc,carrera,promedio)

with open('[Link]','ab') as estudiantes:


[Link](datos_est)

opcion = str(input("¿Desea introducir datos de otro estudiante?


(SI/no): "))
contador += 1

#VALIDACION
#Determinar la cantidad de registros que tiene el archivo estudiantes
def cantidad_est():
with open("[Link]",'rb') as estudiantes:
cantidad = 0
bandera = True
while bandera:
datos = [Link]([Link]('i30siif'))
if not datos:
bandera = False
else:
cantidad = cantidad + 1
return cantidad

#SELECCION DIRECTA
def seleccion_directa(principal,arr1,arr2,arr3,arr4):
n = len(principal)
for i in range(0, n - 1):
elemento_menor = i
for j in range(i + 1, n):
if principal[j] > principal[elemento_menor]:
elemento_menor = j
principal[i], principal[elemento_menor] =
principal[elemento_menor], principal[i]
arr1[i], arr1[elemento_menor] = arr1[elemento_menor], arr1[i]
arr2[i], arr2[elemento_menor] = arr2[elemento_menor], arr2[i]
arr3[i], arr3[elemento_menor] = arr3[elemento_menor], arr3[i]
arr4[i], arr4[elemento_menor] = arr4[elemento_menor], arr4[i]

# PARTE B.1
#Funcion para generar un archivo ordenado de estudiantes.
def ordenar_est():
longitud = cantidad_est()
cedulas_est = [Link]([longitud],dtype='int')
id_est = [Link]([longitud],dtype='<U30')
uc_est = [Link]([longitud],dtype='int')
carrera_est = [Link]([longitud],dtype='int')
promedio_est = [Link]([longitud],dtype='float')

with open("[Link]",'rb') as estudiantes:


for i in range (0,longitud):
datos_est = [Link]([Link]('i30siif'))
datos_est = [Link]('i30siif',datos_est)

cedulas_est[i] = datos_est[0]
print(datos_est[1].decode('utf-8'))
id_est[i] = datos_est[1].decode('utf-8')
uc_est[i] = datos_est[2]
carrera_est[i] = datos_est[3]
promedio_est[i] = datos_est[4]

seleccion_directa(promedio_est,cedulas_est,id_est,uc_est,carrera_est)

with open("[Link]",'wb') as estudiantes:


for i in range (0,longitud):
datos_est =
[Link]('i30siif',cedulas_est[i],id_est[i].encode('utf-
8'),uc_est[i],carrera_est[i],promedio_est[i])
[Link](datos_est)

#PARTE B.2
#Funcion para generar un reporte con el top 5 estudiantes por carrera.
def generar_reporte():
reporte = open('[Link]','w')
[Link](f"
UCAB, {obtener_fecha()}\n")
[Link](" TOP 5 POR ESCUELA\n")

with open('[Link]','rb') as escuelas:


esc = True
while esc:
escuela = [Link]([Link]('i50s10s'))
if not escuela:
esc = False
else:
escuela = [Link]('i50s10s',escuela)
codigo_escuela = escuela[0]
nombre_escuela = escuela[1].decode('utf-8').strip()
[Link](f"{nombre_escuela}\n")

with open('[Link]','rb') as estudiantes:


est = True
estudiantes_carrera = ""
cont_est_car = 0
while est:
datos_est =
[Link]([Link]('i30siif'))
if not datos_est:
est = False
else:
datos_est =
[Link]('i30siif',datos_est)
cedula = str(datos_est[0]).ljust(18)
nombre = datos_est[1].decode('utf-8')

if cont_est_car < 5 and datos_est[3] ==


codigo_escuela and datos_est[2] > 89:
estudiantes_carrera = estudiantes_carrera
+ cedula + nombre + "{:.2f}".format(datos_est[4]) + "\n"
cont_est_car += 1
elif cont_est_car == 5:
est = False

[Link]("CÉDULA NOMBRE
PROMEDIO\n")
[Link](estudiantes_carrera + "\n")

[Link]()

#PARTE C
#Funcion para añadir la lista de mejores estudiantes al reporte.
def mejor_estudiante():
reporte = open('[Link]','a')
with open('[Link]','rb') as estudiantes:
datos_est = [Link]([Link]('i30siif'))
datos_est = [Link]('i30siif',datos_est)
mejor_promedio = datos_est[4]

[Link](0)
bandera = True
estudiantes_top = ""
while bandera:
datos_est = [Link]([Link]('i30siif'))
if not datos_est:
bandera = False
else:
datos_est = [Link]('i30siif',datos_est)
cedula = str(datos_est[0]).ljust(18)
nombre = datos_est[1].decode('utf-8')

if datos_est[4] == mejor_promedio:
estudiantes_top = estudiantes_top + cedula + nombre +
"{:.2f}".format(datos_est[4]) + "\n"
else:
bandera = False

[Link]("Los mejores estudiantes de la UCAB\n")


[Link]("CÉDULA NOMBRE
PROMEDIO\n")
[Link](estudiantes_top + "\n")

[Link]()

#El programa principal.


def main():
generar_esc()
generar_est()
ordenar_est()
generar_reporte()
mejor_estudiante()

if __name__ == "__main__":
main()

También podría gustarte