[ Foro de Pascal ]

Problema con arreglo

26-Jul-2014 23:51
Invitado (Ungato)
3 Respuestas

Muy buenas tardes
Tengo una tarea de la cual necesito utilizar arreglos, el programa trata de colocar una nota/calcular el promedio de la nota/dependiendo de el promedio mostrar si aprobo o reprobo.
El problema se me presenta a la hora de la suma de los 5 promedios, debo utilizar un "For" para eso cree un contador de 5 ciclos para que los sume tomando los promedios del arreglo, pero me da un error.
luego sigue una comparacion "if" tengo la duda si la sintaxis esta bien o mal.
Muchas gracias por la atencion y la ayuda de antemano.
saudos.


------------------------------------------------------------------------------------------------------------------------------------------------------------
program Tarea_programada;
uses crt;

type
vector1=array[1..4] of string;
vector2=array[1..5] of real;
vector3=array[1..5] of real;
var
solicitud1:vector1;
solicitud2:vector2;
Promedio:vector3;
PromedioFinal:real;
contador:integer;
resultado:string;
begin
ClrScr;
writeln('*****************************Bienvenido usuario*****************************');
writeln('Este es un programa de calculo de promedios para el curso de Matematicas I ');
writeln('Por favor ingrese la informacion que se le solicita a continuacion.');
writeln;
ClrScr;

writeln('Igrese el numero de carne del estudiante: ');
readln(solicitud1[1]);
writeln('Ingrese el nombre del estudiante: ');
readln(solicitud1[2]);
writeln('Ingrese el cuatrimestre(Primero, Segundo, tercero, etc.)');
readln(solicitud1[3]);
writeln('Ingrese el nombre del curso');
readln(solicitud1[4]);
writeln;
ClrScr;
writeln('Por favor ingrese la informacion de las notas del curso.');
writeln('Nota del I Parcial.');
readln(solicitud2[1]);
writeln('Nota del II Parcial.');
readln(solicitud2[2]);
writeln('Nota del Ex. Final.');
readln(solicitud2[3]);
writeln('Nota del Tareas.');
readln(solicitud2[4]);
writeln('Nota del Proyecto.');
readln(solicitud2[5]);
writeln;
ClrScr;

Promedio[1]:=solicitud2[1]*0.20;
Promedio[2]:=solicitud2[2]*0.20;
Promedio[3]:=solicitud2[3]*0.30;
Promedio[4]:=solicitud2[4]*0.10;
Promedio[5]:=solicitud2[5]*0.20;

Writeln('El promedio del I Parcial es: ', Promedio[1]);
Writeln('El promedio del II Parcial es: ', Promedio[2]);
Writeln('El promedio Ex. Final es: ', Promedio[3]);
Writeln('El promedio de las Tareas es: ', Promedio[4]);
Writeln('El promedio del Proyecto es: ', Promedio[5]);

PromedioFinal:=0;
for contador:=1 to 5 do //suma los 5 promedios
begin
PromedioFinal:=PromedioFinal+Promedio;
writeln('El promedio final del estudiante es: ', PromedioFinal);
end;

if PromedioFinal>70 then //condicion de la suma de los 5 promedios
resultado:=Aprobado else
resultado:=Reprobado
end

writeln;
ClrScr;
writeln('* --------------------------------------------------------------------------- *');
writeln('* *');
writeln('* Curso:', solicitud1[4] );
writeln('* Profesor: ');
writeln('* Estudiante: ', solicitud1[1] , solicitud1[2] );
writeln('* Promedio Final: ', PromedioFinal );
writeln('* Resultado: ', resultado );
writeln('* *');
writeln('* --------------------------------------------------------------------------- *');
readkey;



end.
------------------------------------------------------------------------------------------------------------------------------------------------------------


27-Jul-2014 01:50
Luis Torres (+12)

Deberías explicar mejor cómo se calcula en promedio final, cuál es la nota máxima que puede obtener el estudiante.
Por lo pronto te puedo decir que en el siguiente código, tienes un error:

 
for contador:=1 to 5 do //suma los 5 promedios 
begin 
PromedioFinal:=PromedioFinal+Promedio; 
writeln('El promedio final del estudiante es: ', PromedioFinal); 
end; 
 


No debería ser Promedio, sino Promedio[contador]

En:

 
if PromedioFinal>70 then //condicion de la suma de los 5 promedios 
resultado:=Aprobado else 
resultado:=Reprobado 
end 
 


El "end" está de más.

En turbo pascal los comentarios no se hacen con la doble barra inclinada, sino de las siguiente manera:
(* Aquí va el comentario *)
o
{ Esto es un comentario }

En:

 
writeln('* Estudiante: ', solicitud1[1] , solicitud1[2] ); 
writeln('* Promedio Final: ', PromedioFinal ); 
writeln('* Resultado: ', resultado ); 
writeln('* *'); 
 


Te recomiendo que escribas: PromedioFina:0:2    para que te muestre el resultado con dos decimales y la presentación sea más familiar al usuario que está recibiendo esa información. Entres solicitud[1] y solicitud[2] debe haber una separación, porque va a mostrar el número de carnet y el nombre del estudiante juntos. Debería ser algo como esto:
writeln('* Estudiante: ', solicitud1[1] ,' ', solicitud1[2] );

Saludos.


27-Jul-2014 02:12
Invitado (Ungato)

Muchisimas gracias Luis!
Bueno mira, la nota se saca asi:

Promedio[1]:=solicitud2[1]*0.20;
Promedio[2]:=solicitud2[2]*0.20;
Promedio[3]:=solicitud2[3]*0.30;
Promedio[4]:=solicitud2[4]*0.10;
Promedio[5]:=solicitud2[5]*0.20;

el 20+20+30+10+20=100%

por ejemplo
writeln('Nota del I Parcial.');
readln(solicitud2[1]);    
= se saco un 80 del primer parcial, el porcentaje de ese 80 es de 16%  por que 80*0.20. Y
asi se van sumando en este "for"

for contador:=1 to 5 do //suma los 5 promedios
begin
PromedioFinal:=PromedioFinal+Promedio;
writeln('El promedio final del estudiante es: ', PromedioFinal);
end;


pero no puedo colocar los [] , por que me refiero al arreglo en general de los 5, son 5 vueltas en las va a sumarse, si fueras tu, como harias ese "for"? es que recuerdo que lo practique en la clase y no se si es la logica o la sintaxis.


PD: Ya elimine el "end" y coloque ese espacio, gracias!


27-Jul-2014 02:23
Invitado (Ungato)

ya ya ya ahora si!, Luis Torres muchisimas gracias, ya me compilo como yo deseaba.
saludos.






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