Documente Academic
Documente Profesional
Documente Cultură
ü Ingresar los datos de un estudiante, de los cuales interesa: cédula, nombre, apellido,
fecha de nacimiento (día, mes y año), notas obtenidas a lo largo del semestre (4 notas en
total). Tome en consideración que hay un límite de N=50 estudiantes. No se puede repetir un
estudiante (la cédula debe ser distinta para cada uno).
ü Mostrar listado de estudiantes.
ü Mostrar promedio de notas de los estudiantes. Mostrar por cada uno: cédula, nombre,
apellido con su respectivo promedio.
ü Modificar los datos de un estudiante. (La cédula no puede ser modificada).
ü Eliminar los datos de un estudiante.
Pseudocódigo.
Algoritmo Menu_estudiantes
Declaración
Constantes
N = 50
Nota = 4
Tipos
RFecha = Registro de
dia, mes, anio: entero
Fin Registro
ANota = arreglo[Nota] de real
REstudiante = Registro de
cedula, nombre, apellido: cadena
fecha_nac: RFecha
notas: Anota
Fin Registro
AEstudiante = arreglo[N] de REstudiante
Variables
estudiante: AEstudiante
opc: entero
Inicio
opc ß0
llamar inicializar_estudiantes(estudiante)
Repetir
Repetir
Escribir “Introduzca la opción a realizar”
Escribir “1.-Registrar estudiante”
Escribir “2.-Mostrar listado de estudiantes”
Escribir “3.-Mostrar promedio de notas de los estudiantes”
Escribir “4.-Modificar los datos de un estudiante”
Escribir “5.-Eliminar los datos de un estudiante”
Escribir “6. Salir”
Leer opc
Si((opc<1) o (opc>6)) entonces
Escribir “Error, opción fuera de rango”
Fin si
Hasta((opc>=1) y (opc<=6))
Caso(opc)
1: llamar registrar_estudiante(estudiante)
2: llamar mostrar_listado(estudiante)
3: llamar mostrar_promedio_notas(estudiante)
4: llamar modificar_estudiante(estudiante)
5: llamar eliminar_estudiante(estudiante)
Fin caso
Hasta (opc=6)
Escribir “Hasta luego”
Fin.
Procedimiento inicializar_estudiantes(↓↑est:AEstudiante)
Declaración
Variables
i, j: entero
Inicio
Para i=1 hasta N
est[i].cedulaß“”
est[i].nombreß””
est[i].apellido ß””
est[i].fecha_nac.diaß0
est[i].fecha_nac.mesß0
est[i].fecha_nac.anioß0
Para j=1 hasta Nota
est[i].notas[j]ß0
Fin para
Fin para
Fin Procedimiento
promedioßpromedio/Nota
Escribir “Promedio de notas: ”, promedio
Fin si
Fin para
Si (id=0) entonces
Escribir “No se encuentran estudiantes registrados”
Fin si
Fin Procedimiento
Función posicion_vacia(↓est:AEstudiante):entero
Declaración
Variables
i, pos: entero
Inicio
posß0
iß1
Mientras ((pos=0) y (i<=N)) hacer
Si (est[i].cedula= “”) entonces
posßi
Fin si
ißi+1
Fin mientras
posicion_vaciaßpos
Fin función
Función estudiantes_registrados(↓est:AEstudiante):lógico
Declaración
Variables
i: entero
result: lógico
Inicio
resultßFalso
iß1
Mientras ((result=Falso) y (i<=N)) hacer
Si (est[i].cedula<> “”) entonces
resultßVerdadero
Fin si
ißi+1
Fin mientras
Estudiantes_registradosßresult
Fin función
Pascal (el código lo pueden ver mejor pasándolo a un editor de texto o IDE, preferiblemente
Geany)
program Menu_estudiantes;
uses crt;
const
N = 50;
Nota = 4;
type
RFecha = record
dia, mes, anio: integer;
end;
ANota = array[1..Nota] of real;
REstudiante = record
cedula, nombre,
apellido: string;
fecha_nac: RFecha;
notas: Anota;
end;
AEstudiante = array[1..N] of REstudiante;
var
estudiante: AEstudiante;
opc: integer;
function estudiantes_registrados(est:AEstudiante):boolean;
var
i: integer;
result: boolean;
begin
result:=false;
i:=1;
while((result=false) and (i<=N)) do
begin
if(est[i].cedula<>'') then
result:=true;
i:=i+1;
end;
estudiantes_registrados:=result;
end;
function posicion_vacia(est:AEstudiante):integer;
var
i, pos: integer;
begin
pos:=0;
i:=1;
while((pos=0) and (i<=N)) do
begin
if(est[i].cedula= '') then
pos:=i;
i:=i+1;
end;
posicion_vacia:=pos;
end;
procedure mostrar_promedio_notas(est:AEstudiante);
var
i, j, id: integer;
promedio: real;
begin
id:=0;
promedio:=0;
for i:=1 to N do
begin
if (est[i].cedula<> '') then
begin
id:=id+1;
writeln('Datos del estudiante ', id, ': ');
writeln('Ceí dula: ', est[i].cedula);
writeln('Nombre: ', est[i].nombre);
writeln('Apellido: ', est[i].apellido);
promedio:=0;
for j:=1 to Nota do
promedio:=promedio + est[i].notas[j];
promedio:=promedio/Nota;
writeln('Promedio de notas: ', promedio:0:2);
end;
end;
if (id=0) then
writeln('No se encuentran estudiantes registrados');
end;
procedure mostrar_listado(est:AEstudiante);
var
i, j, id: integer;
begin
id:=0;
for i:=1 to N do
begin
if (est[i].cedula<> '') then
begin
id:=id+1;
writeln('Datos del estudiante ', id, ': ');
writeln('Ceí dula: ', est[i].cedula);
writeln('Nombre: ', est[i].nombre);
writeln('Apellido: ', est[i].apellido);
writeln('Fecha de nacimiento:');
writeln('Díía: ', est[i].fecha_nac.dia);
writeln('Mes: ', est[i].fecha_nac.mes);
writeln('Anñ o: ', est[i].fecha_nac.anio);
writeln('Notas:');
for j:=1 to Nota do
writeln('Nota ', j, ': ', est[i].notas[j]:0:2);
end;
end;
if (id=0) then
writeln('No se encuentran estudiantes registrados');
end;
begin
clrscr;
opc:=0;
inicializar_estudiantes(estudiante);
repeat
repeat
writeln('Introduzca la opcioí n a realizar');
writeln('1.-Registrar estudiante');
writeln('2.-Mostrar listado de estudiantes');
writeln('3.-Mostrar promedio de notas de los estudiantes');
writeln('4.-Modificar los datos de un estudiante');
writeln('5.-Eliminar los datos de un estudiante');
writeln('6. Salir');
readln(opc);
if((opc<1) or (opc>6)) then
writeln('Error, opcioí n fuera de rango');
until((opc>=1) and (opc<=6));
case(opc) of
1: registrar_estudiante(estudiante);
2: mostrar_listado(estudiante);
3: mostrar_promedio_notas(estudiante);
4: modificar_estudiante(estudiante);
5: eliminar_estudiante(estudiante);
end;
until(opc=6);
writeln('Hasta luego');
end.