hola, bueno este es un pequeño proyecto que me mandaron a hacer en la uni, ya lo hice (vamos, apenas empiezo a programar) pero el problema es que las impresiones o datos de salida finales me los da erroneos, ya que en el programa se exige que se imprima el nombre, cedula, edad y calificacion del alumno con mayor calificacion, y porcentaje de alumnos aprobados...el problema es que solo me da como datos de salida los ultimos datos introducidos independientemente si son los solicitados o no, pero el porcentaje si se calcula bien....el problema es que por mas que analizo, pruebo y fallo no puedo conseguir el bendito error!...por eso solicito su ayuda!
segun el enunciado del proyecto el numero de alumnos esta limitado de 1 a 3 (porque nunca falta el profesor que prueba tu programa con numeros negativos y te quita puntuacion por un error tan tonto
), la nota o calificacion esta comprendida entre 1 y 20 puntos, se busca saber el porcentaje de aprobados, nombre, cedula, edad y calificacion del alumno con mayor calificacion...el programa esta hecho en delphi 7.2, es una aplicacion de consola hecha modularmente...aqui les dejo el codigo:
(la variable "porcapro" significa "porcentaje de aprobados, disculpen el nombre tan rarito xD)
program alumno;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
alum=3;
var
edad: array [1..alum] of integer;
cedula: array [1..alum] of integer;
nombre: array [1..alum] of string;
notas: array [1..alum] of integer;
aprob: integer;
posi: integer;
i: integer;
total_alum: integer;
nota_mayor: integer;
porcapro: real;
procedure inicializar;
begin
for i:=1 to alum do
begin
cedula :=0;
edad :=0;
nombre :='';
notas :=0;
aprob:=0;
total_alum:=0;
nota_mayor:=0;
posi:=0;
end;
end;
procedure llenar_arreglo;
begin
writeln ('Cantidad de estudiantes a registrar');
readln (total_alum);
while (total_alum<1) or (total_alum>3) do
begin
writeln ('La cantidad de alumnos debe estar comprendida entre 1 y 3');
writeln ('Cantidad de estudiantes a registrar');
readln (total_alum);
end;
for i:=1 to total_alum do
begin
writeln ('Escriba el nombre del alumno');
readln (nombre);
writeln ('edad');
readln (edad);
writeln ('cedula');
readln (cedula);
writeln ('nota');
readln (notas);
while (notas<1) or (notas>20) do
begin
writeln ('El rango de notas tiene que estar comprendido entre 1 y 20 puntos');
writeln ('escriba la nota del alumno');
readln (notas);
end;
end;
end;
procedure sumar_aprobados;
begin
for i:=1 to total_alum do
begin
if (notas>=10) then
aprob:=aprob+1;
end;
end;
function porcentaje:real;
begin
porcapro:= aprob*100/total_alum;
end;
procedure nota_maxima;
begin
for i:=1 to total_alum do
begin
if notas>nota_mayor then
nota_mayor:=notas;
posi:=i;
end;
end;
procedure imprimir;
begin
writeln ('Porcentaje de alumnos aprobados : ',porcapro:3:2);
writeln (' ');
writeln ('***********************************************');
writeln (' ');
writeln ('Nombre del estudiante que obtuvo la mayor nota: ',nombre[posi]);
writeln ('Cédula: ',cedula[posi]);
writeln ('Edad: ',edad[posi]);
writeln ('Nota: ',notas[posi]);
writeln (' ');
writeln ('***********************************************');
end;
begin
inicializar;
llenar_arreglo;
sumar_aprobados;
porcentaje;
nota_maxima;
imprimir;
readln;
end.
espero que me puedan ayudar y muchas gracias de antemano, perdonen mis errores tontos :eolo:
segun el enunciado del proyecto el numero de alumnos esta limitado de 1 a 3 (porque nunca falta el profesor que prueba tu programa con numeros negativos y te quita puntuacion por un error tan tonto
![¬¬ :¬¬: :¬¬:](/foro/bakaritas/99.gif)
(la variable "porcapro" significa "porcentaje de aprobados, disculpen el nombre tan rarito xD)
program alumno;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
alum=3;
var
edad: array [1..alum] of integer;
cedula: array [1..alum] of integer;
nombre: array [1..alum] of string;
notas: array [1..alum] of integer;
aprob: integer;
posi: integer;
i: integer;
total_alum: integer;
nota_mayor: integer;
porcapro: real;
procedure inicializar;
begin
for i:=1 to alum do
begin
cedula :=0;
edad :=0;
nombre :='';
notas :=0;
aprob:=0;
total_alum:=0;
nota_mayor:=0;
posi:=0;
end;
end;
procedure llenar_arreglo;
begin
writeln ('Cantidad de estudiantes a registrar');
readln (total_alum);
while (total_alum<1) or (total_alum>3) do
begin
writeln ('La cantidad de alumnos debe estar comprendida entre 1 y 3');
writeln ('Cantidad de estudiantes a registrar');
readln (total_alum);
end;
for i:=1 to total_alum do
begin
writeln ('Escriba el nombre del alumno');
readln (nombre);
writeln ('edad');
readln (edad);
writeln ('cedula');
readln (cedula);
writeln ('nota');
readln (notas);
while (notas<1) or (notas>20) do
begin
writeln ('El rango de notas tiene que estar comprendido entre 1 y 20 puntos');
writeln ('escriba la nota del alumno');
readln (notas);
end;
end;
end;
procedure sumar_aprobados;
begin
for i:=1 to total_alum do
begin
if (notas>=10) then
aprob:=aprob+1;
end;
end;
function porcentaje:real;
begin
porcapro:= aprob*100/total_alum;
end;
procedure nota_maxima;
begin
for i:=1 to total_alum do
begin
if notas>nota_mayor then
nota_mayor:=notas;
posi:=i;
end;
end;
procedure imprimir;
begin
writeln ('Porcentaje de alumnos aprobados : ',porcapro:3:2);
writeln (' ');
writeln ('***********************************************');
writeln (' ');
writeln ('Nombre del estudiante que obtuvo la mayor nota: ',nombre[posi]);
writeln ('Cédula: ',cedula[posi]);
writeln ('Edad: ',edad[posi]);
writeln ('Nota: ',notas[posi]);
writeln (' ');
writeln ('***********************************************');
end;
begin
inicializar;
llenar_arreglo;
sumar_aprobados;
porcentaje;
nota_maxima;
imprimir;
readln;
end.
espero que me puedan ayudar y muchas gracias de antemano, perdonen mis errores tontos :eolo: