Pascal/Turbo Pascal - compila pero se cierra

 
Vista:

compila pero se cierra

Publicado por Marcos (1 intervención) el 16/04/2013 17:08:20
Hola, ando con un problema, el programa compila pero al ingresar primero el nombre y el puntaje del participante se cierra sin notificar ni preguntar por el próximo participante, les dejo la consigna del programa y el código, espero su ayuda gracias!!

Consigna:

"En la ciudad de La Plata se llevó a cabo un importante concurso de Informática, en el cual se presentaron participantes europeos, asiáticos y americanos. Una vez finalizado el concurso, se evaluaron los exámenes. De cada examen se conoce el nombre de la persona que lo realizó, su continente de origen y puntaje (de 0 a 100). Defina la estructura de datos más adecuada para almacenar la información descripta.
Obtener e informar:
a) Participante que obtuvo la mejor calificación.
b) Continente origen de los participantes que promocionaron (se promociona con puntaje mayor que 90).
c) Cantidad de americanos que aprobaron (se aprueba con puntaje mayor que 70) y no promocionaron.
d) Puntaje promedio de los europeos.

Nota: La información de los participantes de un continente se lee en forma consecutiva. Se procesarán exámenes hasta que llegue el examen con nombre de la persona igual a ‘zzz’."

Codigo:

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
program concurso;
 
type
 
participantes = record
                   nombre: string [20];
                   origen: string [7];
                   puntaje: integer;
              end;
 
 
{lee el participante}
procedure leerparticipante (var participantes: participantes ; var conti: string [7] );
 
begin
     participantes.origen:= conti;
     writeln ('ingresar nombre del prticipante de ' , conti );
     with (participantes) do begin
          readln (nombre);
          writeln ('ingresar puntaje');
          readln (puntaje);
          end;
     end;
 
{determina el participante con la maxima calificacion}
procedure maxpunt (var participantes: participantes ; var maxpart: participantes );
begin
     if (participantes.puntaje > maxpart.puntaje) then begin
        maxpart.puntaje:= participantes.puntaje;
        maxpart.nombre:= participantes.nombre;
        maxpart.origen:= participantes.origen;
     end;
end;
 
{cuenta los participantes americanos que aprobaron}
procedure contamer (var participantes: participantes ; var conta: integer);
 
begin
     if ((participantes.puntaje > 70) and (participantes.puntaje < 91)) then
           conta:= conta + 1;
end;
 
{devuelve el promedio de los europeos}
procedure promeuro (var participantes: participantes ; var conte: integer ; var prom: integer ; var punt: integer ; var o : integer);
          begin
               if (o = 3) then begin
                  conte:= conte + 1;
                  punt:= punt + participantes.puntaje;
               end
               else
                   prom:= punt div conte;
               end;
 
{informa}
procedure informar (var prom: integer ; var conta: integer ; var maxpart: participantes);
          begin
               writeln;
               writeln;
               writeln ('La cantidad de aprticipantes americanos que aprobaron sin promocionar es ', conta );
               writeln;
               writeln;
               with (maxpart) do begin
                    writeln ('El participante con mejor calificacion es ' , nombre , ' con un puntaje de ', puntaje );
                    writeln;
                    writeln;
               end;
               writeln ('El promedio de europa es ' , prom );
               writeln;
               writeln;
          end;
 
{determina continente}
procedure modcont (var i: integer; var conti: string [7]);
          begin
               if (i = 1) then begin
                  conti:= 'america';
                  end
                  else
                      if (i = 2) then begin
                         conti:= 'asia';
                         end
                         else
                             conti:= 'europa';
           end;
 
 
{variables}
var
   maxpart: participantes;
   participante: participantes;
   conta: integer;
   conte: integer;
   conti: string [7];
   prom: integer;
   i: integer;
   punt: integer;
 
{cuerpo del programa}
begin
     maxpart.puntaje:= -1;
     conta:= 0;
     conte:= 0;
     prom:= 0;
     participante.nombre:= 'aaa';
     for i:= 1 to 3 do begin
         modcont (i, conti);
         leerparticipante  (participante , conti );
         while (participante.nombre <> 'zzz') do begin
               maxpunt (participante , maxpart );
               if ( i = 1) then
                  contamer (participante , conta  );
               promeuro (participante ,  conte , prom , punt , i );
               leerparticipante  (participante , conti );
         end;
     end;
     informar (prom , conta , maxpart);
     writeln ('para terminar presione enter');
     readln;
     readln;
end.
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

compila pero se cierra

Publicado por ramon (2158 intervenciones) el 17/04/2013 19:01:57
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
{A qui tienes tu programa revisado y funcional fíjate en los cambios para que veas los errores
 cometidos suerte}
 
program concurso;
uses
  crt;
type
string7 = string[7];
participantes = record
                   nombre: string [20];
                   origen: string7;
                   puntaje: integer;
              end;
 
 {variables}
var
   maxpart: participantes;
   participante: participantes;
   conta: integer;
   conte: integer;
   conti: string7;
   prom: integer;
   i: integer;
   punt: integer;
 
 
{lee el participante}
procedure leerparticipante (var participantes: participantes ;
                                        var conti: string7);
 
begin
     participantes.origen:= conti;
     writeln ('ingresar nombre del prticipante de ' , conti );
     with (participantes) do begin
          readln (nombre);
        if nombre <> 'zzz' then
        begin
          writeln ('ingresar puntaje');
          readln (puntaje);
        end;
      end;
     end;
 
{determina el participante con la maxima calificacion}
procedure maxpunt (var participantes: participantes ; var maxpart: participantes );
begin
     if (participantes.puntaje > maxpart.puntaje) then
     begin
        maxpart.puntaje:= participantes.puntaje;
        maxpart.nombre:= participantes.nombre;
        maxpart.origen:= participantes.origen;
     end;
end;
 
{cuenta los participantes americanos que aprobaron}
procedure contamer (var participantes: participantes ; var conta: integer);
 
begin
     if ((participantes.puntaje > 70) and (participantes.puntaje < 91)) then
           conta:= conta + 1;
end;
 
{devuelve el promedio de los europeos}
procedure promeuro (var participantes: participantes ; var conte: integer;
        var prom : integer ; var punt : integer ; var o : integer);
          begin
               if (o = 3) then
               begin
                  conte := conte + 1;
                  punt := punt + participantes.puntaje;
               end
               else
                   prom := punt div conte;
               end;
 
{informa}
procedure informar (var prom: integer ; var conta: integer ; var maxpart: participantes);
          begin
               writeln;
               writeln;
               writeln ('La cantidad de aprticipantes americanos que aprobaron sin promocionar es ', conta );
               writeln;
               writeln;
               with (maxpart) do begin
                    writeln ('El participante con mejor calificacion es ' , nombre , ' con un puntaje de ', puntaje );
                    writeln;
                    writeln;
               end;
               writeln ('El promedio de europa es ' , prom );
               writeln;
               writeln;
          end;
 
{determina continente}
procedure modcont (var i: integer; var conti: string7);
          begin
               if (i = 1) then begin
                  conti:= 'america';
                  end
                  else
                      if (i = 2) then begin
                         conti:= 'asia';
                         end
                         else
                             conti:= 'europa';
           end;
 
 
 
 
{cuerpo del programa}
begin
     clrscr;
     maxpart.puntaje := -1;
     conta:= 1;
     conte:= 1;
     prom:= 1;
     participante.nombre:= 'aaa';
     for i:= 1 to 3 do begin
         modcont(i, conti);
         leerparticipante(participante, conti );
         while (participante.nombre <> 'zzz') do
         begin
               maxpunt(participante , maxpart );
               if ( i = 1) then
                  contamer(participante , conta  );
               promeuro(participante,  conte, prom, punt, i );
               leerparticipante(participante, conti );
         end;
     end;
     informar (prom , conta , maxpart);
     writeln ('para terminar presione enter');
     readln;
end.
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