Pascal/Turbo Pascal - Necesito ayuda,por favor soy nuevo en esto

 
Vista:
sin imagen de perfil

Necesito ayuda,por favor soy nuevo en esto

Publicado por anonymous (1 intervención) el 01/06/2020 17:26:05
Soy un novato en programacion,y me mandaron a hacer un programa en turbo pascal que permita almacenar y mostrar en un Array de 15
posiciones edades y que determine: porcentaje de edades mayores a 50, porcentaje de
números menores o iguales a 50, Promedio general de edades. Cantidad de mayores de
edad, cantidad de menores de edad. Utilice While para el control general
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 112
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Necesito ayuda,por favor soy nuevo en esto

Publicado por juanba (40 intervenciones) el 02/06/2020 08:19:59
Voy a presentar un pequeño programa que hace más o menos lo que te han pedido, no con intención de que lo presentes como tuyo sino que lo puedas usar como referencia para construir otro que funcione de parecida manera.
Está bastante comentado y creo que bastante bien estructurado. Por su puesto en la vida real se haría algo mucho más compacto y eficiente, pero he preferido descomponer el asunto en varias rutinas para que el funcionamiento quede más claro.

Ahí va:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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}

Esta es la pantalla que aparece con una docena de edades aleatorias:


SoyNuevoEnEsto1

Bueno, no muy aleatorias.

Suerte y que tengas un buen día.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar