[ Foro de Pascal ]

Matrices - calificaciones para 45 estudiantes

10-Aug-2014 21:38
Invitado (Ungato)
7 Respuestas

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.


11-Aug-2014 02:00
Invitado (naty)

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...


11-Aug-2014 09:13
Invitado (Ungato)

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


11-Aug-2014 13:57
Invitado (NATY)

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...


12-Aug-2014 11:31
Invitado (Ungato)

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. 



12-Aug-2014 21:17
Nacho Cabanes (+84)

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


13-Aug-2014 07:38
Invitado (Ungato)

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.


14-Aug-2014 00:28
Nacho Cabanes (+84)

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.)