[ Foro de Pascal ]
Buenas tardes
Necesito yuda con este programa ya que no como hacer algunas partes, es necesario hacerlo con procedimientos y matrices. va asi:
Es crear un programa para calcular calificaciones para 5 estudiantes.
-Debe desplegar un menú. del 1 al 5
-La opcion 1 el sistema debe solicitar 4 datos de 5 estudiantes y guardarlos en una matriz.(hay que agregar 2 mas despues)
-La opcion 2 el sistema debe solicitar primero el numero de carne y las 5 notas de cada estudiante. al solicitar cada nota este debe sacar un porcentaje (eje, nota de 50 * 0.20 = "10%") y guardarlas en otra matriz, por ultimo al sacar la promediofinal sumando el valor porcentual de cada nota de cada uno de los 5 estudiantes y si if Promediofinal>70
resultado:='Aprobado' de lo contrario resultado:='Reprobado. Esta notafinal, deberá ser almacenada en la última columna de la matriz que contiene los datosgenerales de , "Carne /Nombre /Cuatrimestre/ Curso /promediofinal/ Resultado"(aqui se agregan los 2 datos mas que son el promedio final y el resultado).
-La opcion 3 el sistema debe solicitar el numero de carne del estudiante y mediante este buscar el alumno y mostrar su informacion de esta manera por ejemplo:
Carné del Estudiante: 1
Nombre del Estudiante: Adrian
Cuatrimestre: II-14
Nombre del Curso: Pascal
Nota: 100
Resultado: Aprobado
Detalle de Notas:
Nota I Parcial: 100
Nota II Parcial: 100
Nota Examen Final: 100
Nota Tareas: 100
Nota Proyectos: 100
Valor Porcentual
% I Parcial : 20
% II Parcial: 20
% Examen Final: 30
% Tareas: 10
%Proyectos: 20
-La opcion 4 hará algo parecido y es mostrar todos los 5 datos de los 5 estudiantes "Carne /Nombre /Cuatrimestre/ Curso /promediofinal/ Resultado" de una manera ordenada.
-La opcion 5 cerrará el programa
Estoy atascado en la parte de sumar el proediofinal de los 5 estudiantes para guardarlo en una casilla en especifico y no se como mostrar por pantala la informacion del estudiante buscandolo solo por el numero de carne.
esto es lo que llevo para que se den una idea:
-------------------------------------------------------------------------------------------------------------------------------
program Tarea_progra(input, output);
uses crt;
var Alumnos:array[1..5,1..5] of string;
Nota:array[1..5,1..6] of real;
promedio:array[1..5,1..7] of real;
PromedioFinal:real;
resultado:string;
opcion:byte;
Label Return;
procedure Infoestudiante;
var i:integer; Alumnos:array[1..5,1..5] of string; {Hay 1 hueco (Alumnos:[1,5]) para resultado(aprobado-reprobado), OJO NO hay de nota ya que es un dato tipo real y el resto de los componentes del arreglo son string}
begin
for i:=1 to 5 do
begin
Writeln('1.Ingrese numero de Carne del estudiante: ',i);
readln(Alumnos[i][1]);
Writeln('2.Ingrese nombre del estudiante: ');
readln(Alumnos[i][2]);
Writeln('3.cuatrimiestre del estudiante : ');
readln(Alumnos[i][3]);
Writeln('4.Nombre del curso del estudiante: ');
readln(Alumnos[i][4]);
writeln();
end;
end;
procedure Notasestudiante;
var j:integer; Nota:array[1..5,1..6] of real;
promedio:array[1..5,1..7] of real;
begin
for j:=1 to 5 do
begin
Writeln('1.Ingrese numero de Carne del estudiante: ',j);
readln(Nota[j][1]);
Writeln('2.Ingrese la Nota del I Parcial: ');
readln(Nota[j][2]);
Writeln('3.Ingrese la Nota del II Parcial: ');
readln(Nota[j][3]);
Writeln('4.Ingrese la Nota del del Ex. Final: ');
readln(Nota[j][4]);
Writeln('5.Ingrese la Nota de las Tareas: ');
readln(Nota[j][5]);
Writeln('6.Ingrese la Nota del I Proyecto: ');
readln(Nota[j][6]);
writeln();
end;
for j:=1 to 5 do
begin
Promedio[1,1]:=Nota[1,2]*0.20; {nota1,1 esta reservada para el numero de carne}
Promedio[2,2]:=Nota[1,3]*0.20;
Promedio[3,3]:=Nota[1,4]*0.30;
Promedio[4,4]:=Nota[1,5]*0.10;
Promedio[5,5]:=Nota[1,6]*0.20;
end;
end;
procedure Promedioestudiante;
var i,fila,columna:integer;
promedio:array[1..5,1..7] of real;
PromedioFinal:real;
resultado:string;
PromedioFinal:=0;
for fila:=1 to 5 do
begin
for columna:=1 to 5 do
PromedioFinal:=PromedioFinal+Promedio[1,7];
end;
for i:=1 to 5 do
begin
if Promedio[1,6]>70 then
resultado:='Aprobado' else
resultado:='Reprobado';
resultado:=Alumnos:[1,5];
end;
end;
procedure Informacionfinalestudiante;
var i,info:integer;
begin
writeln('Ingrese el numero de carne del estudiante: ');
readln(info);
if info=Nota[1,1] then
begin
writeln('******************************************');
writeln('Carne del Estudiante:' );
writeln('Nombre del Estudiante:');
writeln('Cuatrimestre:');
writeln('Nombre del Curso:');
writeln('Nota:');
writeln('Resultado');
writeln('******************************************');
writeln('Detalle de Notas:');
writeln('******************************************');
writeln('Nota I Parcial:');
writeln('Nota II Parcial:');
writeln('Nota Examen Final:');
writeln('Nota Tareas:');
writeln('Nota Proyectos:');
writeln('******************************************');
writeln('Valor Porcentual');
writeln('******************************************');
writeln('% I Parcial :');
writeln('% II Parcial:');
writeln('% Examen Final:');
writeln('% Tareas:');
writeln('%Proyectos:');
writeln('******************************************')
end
else
writeln('El carne solicitado no existe, verifique el numero. Gracias');
end;
begin
Return: Clrscr;
writeln('************************* Bienvenido usuario **********************');
writeln(' Este es un programa de calculo de promedios ');
writeln;
writeln(' *Seleccione una de las siguientes opciones para continuar* ');
writeln;
writeln('_____Opcion 1.Ingresar datos generales del curso___________________');
writeln('_____Opcion 2.Ingresar calificaciones de los estudiantes___________');
writeln('_____Opcion 3.Ver resultado final por estudiante.__________________');
writeln('_____Opcion 4.Imprimir listado general de calificaciones___________');
writeln('_____Opcion 5.Salir________________________________________________');
readln(opcion);
case opcion of
1: begin
ClrScr;
Infoestudiante;
writeln;
goto Return;
end;
2: begin
ClrScr;
Notasestudiante;
Promedioestudiante;
readkey;
writeln;
goto Return;
end;
3: begin
ClrScr;
Informacionfinalestudiante;
writeln;
goto Return;
end;
4: begin
ClrScr;
writeln;
goto Return;
end;
5: begin
halt;
end;
else
readkey;
goto Return;
end;
end.
------------------------------------------------------------------------------------------------------------------
Muchisimas gracias de antemano por cualquier ayuda brindada
saludos.
por empezar, en mi opinion el numero de carnet no lo deberia ingresar el usuario sino deberias otorgarselo vos al cargar los datos..(ej : nrocarnet_1erest=100; de ahi a cada est nuevo le sumas de uno en uno) pidiendole al usuario que ingrese el numero de carnet corres el riesgo que le asigne el mismo numero a dos estudiantes diferentes..
en este caso son 5 estudiantes entonces para mostrar los datos tenes que case un case porque como vos el asignas los numeros sabes que son consecutivos y que en cada fila del vector tenes los datos de un estudiante...
si es cierto lo que dices pero como es una practica debo seguir el enunciado que se medio en orden, y dice que se debe ingresar el carne del estudiante para luego buscarlo u_u
en ese caso tenes que comparar el codigo que te ingresa en la busqueda con los que ya te cargaron... por ejemplo
if (codigoe_estudiante1=codigo_a_buscar)then
begin
/mostras los datos
end;
if (codigoe_estudiante2=codigo_a_buscar)then
begin
/mostras los datos
end;
if (codigoe_estudiante3=codigo_a_buscar)then
begin
/mostras los datos
end;
if (codigoe_estudiante4=codigo_a_buscar)then
begin
/mostras los datos
end;
if (codigoe_estudiante5=codigo_a_buscar)then
begin
/mostras los datos
end;
ya que solo son 5 estudiantes...
Yo se que el problema que me manejo es de mencionar como la variable global y local del arreglo, no estoy seguro si es por la sintaxis.
creo creo que el programa "en teoria" xD estaria completo, si no fuera por eso :/
nota: se ve mucho texto en el procedimiento "Informacionfinalestudiante" ya que debo buscar al alumno y mostrar la info por medio de su numero de carne, no puedo usar "record" por lo que utilice un case "x".
no se si es mucha molestia me darias una mano
gracias
program Tarea_progra(input, output);
uses crt;
var opcion:byte;
resultado:string;
Alumnos:array[1..5,1..5] of string;
Nota:array[1..5,1..12] of real;
Label Return;
procedure Infoestudiante;
var i:integer; Alumnos:array of string; {Hay 1 hueco (Alumnos:[1,5]) para resultado(aprobado-reprobado), OJO NO hay de notafinal
ya que es un dato tipo real y el resto de los componentes del arreglo son string por lo que no es compatible}
begin
for i:=1 to 5 do
begin
Writeln('1.Ingrese numero de Carne del estudiante: ',i);
readln(Alumnos[i][1]);
Writeln('2.Ingrese nombre del estudiante: ');
readln(Alumnos[i][2]);
Writeln('3.cuatrimiestre del estudiante : ');
readln(Alumnos[i][3]);
Writeln('4.Nombre del curso del estudiante: ');
readln(Alumnos[i][4]);
writeln();
end;
end;
procedure Notasestudiante;
var j:integer; Nota:array of real;
PromedioFinal:real;
resultado:string;
begin
for j:=1 to 5 do
begin
Writeln('1.Numero de Carne del estudiante: ',j,Alumnos[j][1]);
Writeln('2.Ingrese la Nota del I Parcial: ');
readln(Nota[j][2]);
Nota[j,3]:=Nota[j][2]*0.20;
Writeln('3.Ingrese la Nota del II Parcial: ');
readln(Nota[j][4]);
Nota[j,5]:=Nota[j][4]*0.20;
Writeln('4.Ingrese la Nota del del Ex. Final: ');
readln(Nota[j][6]);
Nota[j,7]:=Nota[j][6]*0.30;
Writeln('5.Ingrese la Nota de las Tareas: ');
readln(Nota[j][8]);
Nota[j,9]:=Nota[j][8]*0.10;
Writeln('6.Ingrese la Nota del Proyecto: ');
readln(Nota[j][10]);
Nota[j,11]:=Nota[j][10]*0.20;
Nota[j,12]:= Nota[j,3]+ Nota[j,5]+ Nota[j,7]+ Nota[j,9]+Nota[j,11];
writeln();
end;
for i:=1 to 5 do
begin
if Nota[1,12]>70 then
resultado:='Aprobado' else
resultado:='Reprobado';
resultado:=Alumnos:[i,5];
end;
end;
procedure Informacionfinalestudiante;
var info:integer;
begin
writeln('Ingrese el numero de carne del estudiante: ');
readln(info);
case info of
Alumnos[1][1]:begin
writeln('Carne del Estudiante:',Alumnos[1][1]);
writeln('Nombre del Estudiante:',Alumnos[1][2]);
writeln('Cuatrimestre:',Alumnos[1][3]);
writeln('Nombre del Curso:',Alumnos[1][4]);
writeln('Nota: ' ,Nota[1,12]:0:2);
writeln('Resultado: ', Alumnos:[1,5]);
writeln('******************************************');
writeln('Detalle de Notas:');
writeln('******************************************');
writeln('Nota I Parcial:',Nota[1][2]);
writeln('Nota II Parcial:',Nota[1][4]);
writeln('Nota Examen Final:',Nota[1][6]);
writeln('Nota Tareas:',Nota[1][8]);
writeln('Nota Proyectos:',Nota[1][10]);
writeln('******************************************');
writeln('Valor Porcentual');
writeln('******************************************');
writeln('% I Parcial :',Nota[1][3]:0:2);
writeln('% II Parcial:',Nota[1][5]:0:2);
writeln('% Examen Final:',Nota[1][7]:0:2);
writeln('% Tareas:',Nota[1][9]:0:2);
writeln('%Proyectos:',Nota[1][11]:0:2);
end;
Alumnos[2][1]:begin
writeln('Carne del Estudiante:',Alumnos[2][1]);
writeln('Nombre del Estudiante:',Alumnos[2][2]);
writeln('Cuatrimestre:',Alumnos[2][3]);
writeln('Nombre del Curso:',Alumnos[2][4]);
writeln('Nota: ' ,Nota[2,12]:0:2);
writeln('Resultado: ', Alumnos:[2,5]);
writeln('******************************************');
writeln('Detalle de Notas:');
writeln('******************************************');
writeln('Nota I Parcial:',Nota[2][2]);
writeln('Nota II Parcial:',Nota[2][4]);
writeln('Nota Examen Final:',Nota[2][6]);
writeln('Nota Tareas:',Nota[2][8]);
writeln('Nota Proyectos:',Nota[2][10]);
writeln('******************************************');
writeln('Valor Porcentual');
writeln('******************************************');
writeln('% I Parcial :',Nota[2][3]:0:2);
writeln('% II Parcial:',Nota[2][5]:0:2);
writeln('% Examen Final:',Nota[2][7]:0:2);
writeln('% Tareas:',Nota[2][9]:0:2);
writeln('%Proyectos:',Nota[2][11]:0:2);
end;
Alumnos[3][1]:begin
writeln('Carne del Estudiante:',Alumnos[3][1]);
writeln('Nombre del Estudiante:',Alumnos[3][2]);
writeln('Cuatrimestre:',Alumnos[3][3]);
writeln('Nombre del Curso:',Alumnos[3][4]);
writeln('Nota: ' ,Nota[3,12]:0:2);
writeln('Resultado: ', Alumnos:[3,5]);
writeln('******************************************');
writeln('Detalle de Notas:');
writeln('******************************************');
writeln('Nota I Parcial:',Nota[3][2]);
writeln('Nota II Parcial:',Nota[3][4]);
writeln('Nota Examen Final:',Nota[3][6]);
writeln('Nota Tareas:',Nota[3][8]);
writeln('Nota Proyectos:',Nota[3][10]);
writeln('******************************************');
writeln('Valor Porcentual');
writeln('******************************************');
writeln('% I Parcial :',Nota[3][3]:0:2);
writeln('% II Parcial:',Nota[3][5]:0:2);
writeln('% Examen Final:',Nota[3][7]:0:2);
writeln('% Tareas:',Nota[3][9]:0:2);
writeln('%Proyectos:',Nota[3][11]:0:2);
end;
Alumnos[4][1]:begin
writeln('Carne del Estudiante:',Alumnos[4][1]);
writeln('Nombre del Estudiante:',Alumnos[4][2]);
writeln('Cuatrimestre:',Alumnos[4][3]);
writeln('Nombre del Curso:',Alumnos[4][4]);
writeln('Nota: ' ,Nota[4,12]:0:2);
writeln('Resultado: ', Alumnos:[4,5]);
writeln('******************************************');
writeln('Detalle de Notas:');
writeln('******************************************');
writeln('Nota I Parcial:',Nota[4][2]);
writeln('Nota II Parcial:',Nota[4][4]);
writeln('Nota Examen Final:',Nota[4][6]);
writeln('Nota Tareas:',Nota[4][8]);
writeln('Nota Proyectos:',Nota[4][10]);
writeln('******************************************');
writeln('Valor Porcentual');
writeln('******************************************');
writeln('% I Parcial :',Nota[4][3]:0:2);
writeln('% II Parcial:',Nota[4][5]:0:2);
writeln('% Examen Final:',Nota[4][7]:0:2);
writeln('% Tareas:',Nota[4][9]:0:2);
writeln('%Proyectos:',Nota[4][11]:0:2);
end;
Alumnos[5][1]:begin
writeln('Carne del Estudiante:',Alumnos[5][1]);
writeln('Nombre del Estudiante:',Alumnos[5][2]);
writeln('Cuatrimestre:',Alumnos[5][3]);
writeln('Nombre del Curso:',Alumnos[5][4]);
writeln('Nota: ' ,Nota[5,12]:0:2);
writeln('Resultado: ', Alumnos:[5,5]);
writeln('******************************************');
writeln('Detalle de Notas:');
writeln('******************************************');
writeln('Nota I Parcial:',Nota[5][2]);
writeln('Nota II Parcial:',Nota[5][4]);
writeln('Nota Examen Final:',Nota[5][6]);
writeln('Nota Tareas:',Nota[5][8]);
writeln('Nota Proyectos:',Nota[5][10]);
writeln('******************************************');
writeln('Valor Porcentual');
writeln('******************************************');
writeln('% I Parcial :',Nota[5][3]:0:2);
writeln('% II Parcial:',Nota[5][5]:0:2);
writeln('% Examen Final:',Nota[5][7]:0:2);
writeln('% Tareas:',Nota[5][9]:0:2);
writeln('%Proyectos:',Nota[5][11]:0:2);
end;
else
writeln('El carne solicitado no existe, verifique el numero. Gracias');
end;
end;
procedure Datosgenerales;
begin
writeln('* ----------------------------------------------------------------------------------------------- *');
writeln('* *');
writeln('* Curso: Matemáticas I');
writeln('* Profesor: Adrian Arguello ');
writeln('* *');
writeln('* ----------------------------------------------------------------------------------------------- *');
writeln('| Carne | Nombre | Cuatrimestre | Curso | Nota | Resultado |');
writeln('|',Alumnos[1][1],'|',Alumnos[1][2],'|',Alumnos[1][3] ,'|',Alumnos[1][4],'|',Nota[1][12],'|',Alumnos[1][5] '|');
writeln('|',Alumnos[2][1],'|',Alumnos[2][2],'|',Alumnos[2][3] ,'|',Alumnos[2][4],'|',Nota[2][12],'|',Alumnos[2][5] '|');
writeln('|',Alumnos[3][1],'|',Alumnos[3][2],'|',Alumnos[3][3] ,'|',Alumnos[3][4],'|',Nota[3][12],'|',Alumnos[3][5] '|');
writeln('|',Alumnos[4][1],'|',Alumnos[4][2],'|',Alumnos[4][3] ,'|',Alumnos[4][4],'|',Nota[4][12],'|',Alumnos[4][5] '|');
writeln('|',Alumnos[5][1],'|',Alumnos[5][2],'|',Alumnos[5][3] ,'|',Alumnos[5][4],'|',Nota[5][12],'|',Alumnos[5][5] '|');
end;
begin
Return: Clrscr;
writeln('************************* Bienvenido usuario **********************');
writeln(' Este es un programa de calculo de promedios ');
writeln;
writeln(' *Seleccione una de las siguientes opciones para continuar* ');
writeln;
writeln('_____Opcion 1.Ingresar datos generales del curso___________________');
writeln('_____Opcion 2.Ingresar calificaciones de los estudiantes___________');
writeln('_____Opcion 3.Ver resultado final por estudiante.__________________');
writeln('_____Opcion 4.Imprimir listado general de calificaciones___________');
writeln('_____Opcion 5.Salir________________________________________________');
readln(opcion);
case opcion of
1: begin
ClrScr;
Infoestudiante;
writeln;
goto Return;
end;
2: begin
ClrScr;
Notasestudiante;
readkey;
writeln;
goto Return;
end;
3: begin
ClrScr;
Informacionfinalestudiante;
writeln;
goto Return;
end;
4: begin
ClrScr;
Datosgenerales;
writeln;
goto Return;
end;
5: begin
halt;
end;
else
readkey;
goto Return;
end;
end.
Buffff... me da mucho miedo...
(Cambio el título al hilo para que se sepa de qué trata realmente)
"DatosGenerales" es repetitivo, se podría compactar mucho con dos "for", pero al menos es soportable.
"InformacionFinalEstudiante" es terrible. Muy repetitivo. No necesitas ningún case. Basta con obtener los datos uno a uno con otro "for". Verás en casos como "Alumnos[5][1]" basta cambiar todos los "5" por "i". No estás entendiendo el manejo repetitivo de arrays. Lo grave es que "NotasEstudiante" está mejor hecho. Prueba a ver si leer esto te ayuda a asimilar algo que puedas haber pasado por alto:
http://www.nachocabanes.com/pascal/cupas5/cupas04.php
Y eso de que el programa principal no tenga un "repeat..until" (a pesar de que se debe repetir hasta que se cumpla una condición) sino un "goto"... es un suspenso inmediato en casi cualquier centro de estudios. Lee también esto:
http://www.nachocabanes.com/pascal/cupas5/cupas03.php
pero no te enojes y no me regañes D: estamos comenzando ese tema y es la primera practica :S
ya arregle eso del for" creo xD asi:
procedure Informacionfinalestudiante;
var i,j:integer;
begin
writeln('Ingrese el numero de carne del estudiante: ');
readln(j);
for i:=1 to 5 do begin
if Alumnos[i][1]:=j then
writeln('Carne del Estudiante:',Alumnos[i,1]);
writeln('Nombre del Estudiante:',Alumnos[i,2]);
writeln('Cuatrimestre:',Alumnos[i,3]);
writeln('Nombre del Curso:',Alumnos[i,4]);
writeln('Nota: ' ,Nota[i,12]:0:2);
writeln('Resultado: ', Alumnos:[i,5]);
writeln('******************************************');
writeln('Detalle de Notas:');
writeln('******************************************');
writeln('Nota I Parcial:',Nota[i,2]);
writeln('Nota II Parcial:',Nota[i,4]);
writeln('Nota Examen Final:',Nota[i,6]);
writeln('Nota Tareas:',Nota[i,8]);
writeln('Nota Proyectos:',Nota[i,10]);
writeln('******************************************');
writeln('Valor Porcentual');
writeln('******************************************');
writeln('% I Parcial :',Nota[i,3]:0:2);
writeln('% II Parcial:',Nota[i,5]:0:2);
writeln('% Examen Final:',Nota[i,7]:0:2);
writeln('% Tareas:',Nota[i,9]:0:2);
writeln('%Proyectos:',Nota[i,11]:0:2)
else
writeln('El carne solicitado no existe, verifique el numero. Gracias');
end;
end;
para reducir texto.
No me enojo, pero sí te regaño, que los malos vicios hay que quitarlos cuanto antes, y el "goto" es un vicio terrible en pleno siglo XXI.
Esa función ahora está mucho mejor, más natural.
Precisamente por eso te he sugerido mi tutorial, porque tiene ejercicios más progresivos, no se debe empezar con un ejercicio tan fuerte porque si no se asientan los fundamentos, pueden quedar lagunas (es sólo mi punto de vista, claro).
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)