Program SoyNuevoEnEsto;
uses crt;
const MaxDatos = 15; {Parametrizar el numero de datos por si hay que}
{cambiarlo en el futuro}
type TListaEdades = array[1..MaxDatos] of Integer;
var QueHacer: Integer; {Variable de control del menu principal}
CuantosDatos: Integer; {Numero de datos que se introducen (<= MaxDatos)}
Edades: TListaEdades; {Array para contener la secuencia de edades}
Procedure IntroEdades(var Cuantos: Integer; var Ed: TListaEdades);
var Dato: Integer; {Variable para recibir el dato introducido}
n: Integer; {Variable de control de bucle de entrada}
begin
ClrScr;
GotoXY(20, 1);
Write('Programa de Clasificacion por Edades - Introduccion de Edades');
GotoXY(8, 3);
Write('Introduzca las edades hasta un maximo de ', MaxDatos, ' datos.');
GotoXY(8, 4);
Write('Para terminar antes de ', MaxDatos, ' edades, introduzca 0 (cero)');
for n := 1 to MaxDatos do Ed[n] := 0; {Esto no es estrictamente necesario. Cuestion de higiene}
{No conviene tener variables sin valor definido}
Cuantos := 0; {Resetear el contador de entradas}
Repeat
Cuantos := Cuantos + 1; {Poner cada entrada en una linea sucesiva}
GotoXY(8, 4 + Cuantos); {Tambien se podrian poner todas en la misma linea}
Write('Edad numero ', Cuantos, ' = ');
Readln(Dato);
if Dato > 0 then {No se admiten bebés que no han cumplido 1 año}
Ed[Cuantos] := Dato
else
Cuantos := Cuantos - 1; {Si Dato = 0 lo descartamos y descontamos del total}
Until (Cuantos >= MaxDatos) or (Dato = 0);
end; {IntroEdades}
Procedure CalcMayorMenor50(Cuantos: Integer; var Ed: TListaEdades;
var Mayor50Pc: Single; var Menor50Pc: Single); {Esta linea es parte de la declaracion}
var n: Integer;
begin
Mayor50Pc := 0; {Resetear las variables}
Menor50Pc := 0;
if Cuantos > 0 then
begin
for n := 1 to Cuantos do {Contar los casos > 50 y <= 50}
begin
if Ed[n] > 50 then
Mayor50Pc := Mayor50Pc + 1.0
else
Menor50Pc := Menor50Pc + 1.0;
end; {Dividir por el total y mult. * 100}
Mayor50Pc := Mayor50Pc * 100.0 / Cuantos;
Menor50Pc := Menor50Pc * 100.0 / Cuantos;
end;
end; {CalcMayorMenor50}
Procedure CalcPromedio(Cuantos: Integer; var Ed: TListaEdades;
var Promedio: Single); {Esta linea es parte de la declaracion}
var n: Integer;
begin {Esta rutina es muy sencilla. Ni la comento}
Promedio := 0;
if Cuantos > 0 then
begin
for n := 1 to Cuantos do
Promedio := Promedio + Ed[n];
end;
Promedio := Promedio / Cuantos;
end;
Procedure CalcMayorMenorEdad(Cuantos: Integer; var Ed: TListaEdades;
var MayorEdad: Integer; var MenorEdad: Integer); {Esta linea es parte de la declaracion}
var n: Integer;
begin {Esta rutina es muy sencilla. Ni la comento}
MayorEdad := 0;
MenorEdad := 0;
if Cuantos > 0 then
begin
for n := 1 to Cuantos do
if Ed[n] >= 18 then
MayorEdad := MayorEdad + 1
else
MenorEdad := MenorEdad + 1;
end;
end; {CalcPromedio}
Procedure PresentaResult(Cuantos: Integer; var Ed: TListaEdades);
var Mayor50Pc: Single; Menor50Pc: Single;
Promedio: Single;
MayorEdad: Integer; MenorEdad: Integer;
n: Integer;
begin
ClrScr;
GotoXY(20, 1);
Write('Programa de Clasificacion por Edades - Presentacion de Resultados');
GotoXY(8, 3);
if Cuantos <= 0 then
Write('No se han registrado edades.') {<--- ATENCION. SIN punto y coma; le sigue un ELSE}
else
begin
Write('Se han registrado ', Cuantos, ' Edades: ');
{Mostrar la lista de edades introducidas. No es necesario}
for n := 1 to Cuantos - 1 do
Write(Ed[n], ', ');
writeln(Ed[Cuantos]);
{Calcular los resultados en base a las edades del array}
CalcMayorMenor50(Cuantos, Ed, Mayor50Pc, Menor50Pc);
CalcPromedio(Cuantos, Ed, Promedio);
CalcMayorMenorEdad(Cuantos, Ed, MayorEdad, MenorEdad);
{Presentar los resultados}
GotoXY(8, 5);
Write('Porcentaje de Mayores de 50 = ', Mayor50Pc:4:2, '%');
GotoXY(8, 6);
Write('Porcentaje de Menores de 50 = ', Menor50Pc:4:2, '%');
GotoXY(8, 7);
Write('Edad Promedio = ', Promedio:6:2);
GotoXY(8, 8);
Write('Mayores de edad = ', MayorEdad);
GotoXY(8, 9);
Write('Menores de edad = ', MenorEdad);
end;
GotoXY(8,11);
write('Pulse Intro para volver al Menu ');
Readln;
end; {PresentaResult}
begin
QueHacer := 0;
while QueHacer <> 9 do
begin
ClrScr;
GotoXY(20, 1);
Write('Programa de Clasificacion por Edades version 0.99');
GotoXY(8, 3);
Write('Seleccione una opcion si es tan amable:');
GotoXY(8, 4);
Write('1 - Introduccion de Edades');
GotoXY(8, 5);
Write('2 - Presentacion de Resultados');
GotoXY(8, 7);
Write('9 - Fin de programa');
GotoXY(8, 9);
Write('Usted decide: ');
Quehacer := 9;
Readln(QueHacer); {O mas elegante: QueHacer := Ord(ReadKey) - Ord('0');}
case QueHacer of
1: IntroEdades(CuantosDatos, Edades);
2: PresentaResult(CuantosDatos, Edades);
end;
end;
gotoXY(8, 23);
Write('Adios. Que tenga un buen dia ');
Readln; {O mas elegante: Readkey;}
end. {Programa principal}