Sunteți pe pagina 1din 15

Elabore un algoritmo que permita escoger entre las siguientes opciones:

ü 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

Procedimiento registrar_estudiante (↓↑est:AEstudiante)


Declaración
Variables
cedula, resp: cadena
pos: entero
Inicio
cedula ß “”
pos ß posicion_vacia(est)
Repetir
respß “no”
Si (pos=0) entonces
Escribir “No se pueden registrar más estudiantes”
Sino
Escribir “Introduzca los datos del estudiante”
Escribir “Cédula”
Repetir
Leer cedula
Hasta (cedula<> “”)
Si (buscar_estudiante(est, cedula)=falso) entonces
llamar solicitar_datos(est, cedula, pos)
Sino
Escribir” Cédula duplicada”
Fin si
Fin si
posß posicion_vacia(est)
Si (pos<>0) entonces
Repetir
Escribir ”¿Desea registrar otro estudiante(si/no)?”
Leer resp
Si ((resp<> “no”) y (resp<> “si”)) entonces
Escribir “Error, respuesta inválida”
Fin si
Hasta (resp= “si”) o (resp= “no”)
Fin si
Hasta (resp= “no”)
Fin Procedimiento
Procedimiento mostrar_listado(↓est:AEstudiante)
Declaración
Variables
i, j, id: entero
Inicio
idß0
Para i=1 hasta N
Si (est[i].cedula<> “”) entonces
idßid+1
Escribir “Datos del estudiante ”, id, “: ”
Escribir “Cédula: ”, est[i].cedula
Escribir “Nombre: ”, est[i].nombre
Escribir “Apellido: ”, est[i].apellido
Escribir “Fecha de nacimiento:”
Escribir “Día: ”, est[i].fecha_nac.dia
Escribir “Mes: ”, est[i].fecha_nac.mes
Escribir “Año: ”, est[i].fecha_nac.anio
Escribir “Notas:”
Para j=1 hasta Nota hacer
Escribir “Nota ”, j, “: ”, est[i].notas[j]
Fin para
Fin si
Fin para
Si (id=0) entonces
Escribir “No se encuentran estudiantes registrados”
Fin si
Fin Procedimiento
Procedimiento mostrar_promedio_notas(↓est:AEstudiante)
Declaración
Variables
i, j, id: entero
promedio: real
Inicio
idß0
promedioß0
Para i=1 hasta N
Si (est[i].cedula<> “”) entonces
idßid+1
Escribir “Datos del estudiante ”, id, “: ”
Escribir “Cédula: ”, est[i].cedula
Escribir “Nombre: ”, est[i].nombre
Escribir “Apellido: ”, est[i].apellido
promedioß0
Para j=1 hasta Nota hacer
promedioß promedio + est[i].notas[j]
Fin para

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

Procedimiento modificar_estudiante (↓↑est:AEstudiante)


Declaración
Variables
cedula, resp: cadena
pos: entero
Inicio
cedula ß “”
Si (estudiantes_registrados(est)=Verdadero) entonces
Repetir
respß “no”
Escribir “Introduzca la cédula del estudiante a modificar”
Escribir “Cédula”
Leer cedula
pos ß posicion_estudiante(est, cedula)
Si (pos<>0) entonces
Escribir “Introduzca los nuevos datos del estudiante:”
llamar solicitar_datos(est, cedula, pos)
Sino
Escribir” Cédula no encontrada”
Fin si
Repetir
Escribir ”¿Desea modificar otro estudiante(si/no)?”
Leer resp
Si ((resp<> “no”) y (resp<> “si”)) entonces
Escribir “Error, respuesta inválida”
Fin si
Hasta (resp= “si”) o (resp= “no”)
Hasta (resp= “no”)
Sino
Escribir “No se encuentran estudiantes registrados”
Fin si
Fin Procedimiento

Procedimiento eliminar_estudiante (↓↑est:AEstudiante)


Declaración
Variables
cedula, resp: cadena
pos: entero
Inicio
cedula ß “”
Si (estudiantes_registrados(est)=Verdadero) entonces
Repetir
respß “no”
Escribir “Introduzca la cédula del estudiante a eliminar”
Escribir “Cédula”
Leer cedula
pos ß posicion_estudiante(est, cedula)
Si (pos<>0) entonces
llamar eliminar_datos(est, pos)
Escribir “Datos del estudiante eliminados de manera exitosa”
Sino
Escribir” Cédula no encontrada”
Fin si
Si (estudiantes_registrados(est)=Verdadero) entonces
Repetir
Escribir ”¿Desea modificar otro estudiante(si/no)?”
Leer resp
Si ((resp<> “no”) y (resp<> “si”)) entonces
Escribir “Error, respuesta inválida”
Fin si
Hasta (resp= “si”) o (resp= “no”)
Sino
respß “no”
Escribir “Todos los estudiantes han sido eliminados”
Fin si
Hasta (resp= “no”)
Sino
Escribir “No se encuentran estudiantes registrados”
Fin si
Fin Procedimiento

Procedimiento solicitar_datos(↓↑est:AEstudiante, ↓ced:cadena, ↓p:entero)


Declaración
Variables
i: entero
Inicio
est[p].cedulaßced
Escribir “Nombre”
Leer est[p].nombre
Escribir “Apellido”
Leer est[p].apellido
Escribir “Fecha de nacimiento:”
Escribir “Día:”
Leer est[p].fecha_nac.dia
Escribir “Mes:”
Leer est[p].fecha_nac.mes
Escribir “Año:”
Leer est[p].fecha_nac.anio
Escribir “Notas:”
Para i=1 hasta Nota
Escribir “Nota ”, i, “:”
Repetir
Leer est[p].notas[i]
Hasta (est[p].notas[i]>=0) y (est[p].notas[i]<=10)
Fin para
Fin Procedimiento

Procedimiento eliminar_datos(↓↑est:AEstudiante, ↓p:entero)


Declaración
Variables
i: entero
Inicio
est[p].cedulaß“”
est[p].nombreß””
est[p].apellido ß””
est[p].fecha_nac.diaß0
est[p].fecha_nac.mesß0
est[p].fecha_nac.anioß0
Para i=1 hasta Nota
est[p].notas[i]ß0
Fin para
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 posicion_estudiante(↓est:AEstudiante, ↓ced:cadena):entero


Declaración
Variables
I, pos: entero
Inicio
posß0
iß1
Mientras ((pos=0) y (i<=N)) hacer
Si (est[i].cedula= ced) entonces
posßi
Fin si
ißi+1
Fin mientras
posicion_estudianteßpos
Fin función

Función buscar_estudiante(↓est:AEstudiante, ↓ced:cadena):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= ced) entonces
resultßVerdadero
Fin si
ißi+1
Fin mientras
buscar_estudianteßresult
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 buscar_estudiante(est:AEstudiante; ced:string):boolean;


var
i: integer;
result: boolean;
begin
result:=false;
i:=1;
while((result=false) and (i<=N)) do
begin
if(est[i].cedula= ced) then
result:=true;
i:=i+1;
end;
buscar_estudiante:=result;
end;

function posicion_estudiante(est:AEstudiante; ced: string):integer;


var
i, pos: integer;
begin
pos:=0;
i:=1;
while((pos=0) and (i<=N)) do
begin
if(est[i].cedula= ced) then
pos:=i;
i:=i+1;
end;
posicion_estudiante:=pos;
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 eliminar_datos(var est:AEstudiante; p:integer);


var
i: integer;
begin
est[p].cedula:='';
est[p].nombre:='';
est[p].apellido:='';
est[p].fecha_nac.dia:=0;
est[p].fecha_nac.mes:=0;
est[p].fecha_nac.anio:=0;
for i:=1 to Nota do
est[p].notas[i]:=0;
end;

procedure solicitar_datos(var est:AEstudiante; ced:string; p:integer);


var
i: integer;
begin
est[p].cedula:=ced;
writeln('Nombre');
readln(est[p].nombre);
writeln('Apellido');
readln(est[p].apellido);
writeln('Fecha de nacimiento:');
writeln('Díía:');
readln(est[p].fecha_nac.dia);
writeln('Mes:');
readln(est[p].fecha_nac.mes);
writeln('Anñ o:');
readln(est[p].fecha_nac.anio);
writeln('Notas:');
for i:=1 to Nota do
begin
writeln('Nota ', i, ':');
repeat
readln(est[p].notas[i]);
until((est[p].notas[i]>=0) and (est[p].notas[i]<=10));
end;
end;

procedure eliminar_estudiante (var est:AEstudiante);


var
cedula, resp: string;
pos: integer;
begin
cedula:='';
if (estudiantes_registrados(est)) then
begin
repeat
resp:='no';
writeln('Introduzca la ceí dula del estudiante a eliminar');
writeln('Ceí dula');
readln(cedula);
pos:=posicion_estudiante(est, cedula);
if (pos<>0) then
begin
eliminar_datos(est, pos);
writeln('Datos del estudiante eliminados
de manera exitosa');
end
else
begin
writeln('Ceí dula no encontrada');
end;
if (estudiantes_registrados(est)) then
begin
repeat
writeln('¿Desea
eliminar otro estudiante(si/no)?');
readln(resp);
if ((resp<> 'no') and
(resp<> 'si')) then

writeln('Error, respuesta invaí lida');


until((resp='si') or (resp= 'no'));
end
else
begin
resp:='no';
writeln('Todos los estudiantes han sido
eliminados');
end;
until(resp='no');
end
else
begin
writeln('No se encuentran estudiantes registrados');
end;
end;
procedure modificar_estudiante (var est:AEstudiante);
var
cedula, resp: string;
pos: integer;
begin
cedula:='';
if (estudiantes_registrados(est)) then
begin
repeat
resp:='no';
writeln('Introduzca la ceí dula del estudiante a modificar');
writeln('Ceí dula');
readln(cedula);
pos:=posicion_estudiante(est, cedula);
if (pos<>0) then
begin
writeln('Introduzca los nuevos datos del
estudiante:');
solicitar_datos(est, cedula, pos);
end
else
begin
writeln('Ceí dula no encontrada');
end;
repeat
writeln('¿Desea modificar otro estudiante(si/no)?');
readln(resp);
if ((resp<> 'no') and (resp<> 'si')) then
writeln('Error, respuesta invaí lida');
until((resp='si') or (resp= 'no'));
until(resp='no');
end
else
begin
writeln('No se encuentran estudiantes registrados');
end;
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;

procedure registrar_estudiante (var est:AEstudiante);


var
cedula, resp: string;
pos: integer;
begin
cedula:='';
pos:=posicion_vacia(est);
repeat
resp:='no';
if (pos=0) then
begin
writeln('No se pueden registrar maí s estudiantes');
end
else
begin
writeln('Introduzca los datos del estudiante');
writeln('Ceí dula');
repeat
readln(cedula);
until(cedula<>'');
if (not(buscar_estudiante(est, cedula))) then
begin
solicitar_datos(est, cedula, pos);
end
else
begin
writeln('Ceí dula duplicada');
end;
end;
pos:=posicion_vacia(est);
if (pos<>0) then
begin
repeat
writeln('¿Desea registrar otro estudiante(si/no)?');
readln(resp);
if ((resp<> 'no') and (resp<> 'si')) then
writeln('Error, respuesta invaí lida');
until((resp= 'si') or (resp= 'no'));
end;
until(resp='no');
end;

procedure inicializar_estudiantes(var est: AEstudiante);


var
i, j: integer;
begin
for i:=1 to N do
begin
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;
for j:=1 to Nota do
est[i].notas[j]:=0;
end;
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.

S-ar putea să vă placă și