Pascal/Turbo Pascal - Ayuda con programacion en pascal

   
Vista:

Ayuda con programacion en pascal

Publicado por ciro ciro.ordinas@hotmail.com (1 intervención) el 20/06/2014 21:59:56
Buenas tardes, soy nuevo en este tema de la programación y tengo una serie de consultas el enunciado del ejercicio es este:
Una cadena de cines quiere controlar la evolución de sus 32 salas repartidas en Capital, y para ello lee la siguiente información:

Sala (1 a 32)
Zona (1 a 7)

Luego se lee la información de cada proyección realizada el último mes de sus 45 películas

Código de Película (3 dígitos no correlativos)
Sala
Cantidad de espectadores

La información finaliza cuando se lee Código de Película =0

Identificar los Datos suministrados y la estructura de datos a utilizar, los resultados, las relaciones entre datos y resultados, explicitar una estrategia.
Se solicita realizar la codificación en lenguaje Pascal que:
1. Informe por película cuál fue la cantidad total de espectadores que superen al promedio obtenido del total de proyecciones realizadas
2. Informe la zona con mayor cantidad de espectadores (puede haber más de una).
3. Emita un listado con las Salas y la cantidad total de películas proyectadas ordenadas de mayor a menor.
LA CODIFICACION EN PASCAL QUE HICE FUE ESTA
Program grupo9;
uses crt;
var
Z: array [1..7] of byte;
S: array [1..32] of byte;
CP: array [1..45] of byte;
CESP: array [1..45] of byte;
CEPZ: array [1..7] of byte;
ContP: array [1..45] of byte;
ZP: array [1..7] of byte;
ESZ: array [1..7] of byte;
I: byte;
J: byte;
tot: byte;
pel: byte;
sala: byte;
suma: byte;
prom: real;
max: real;
senal: real;
aux: real;
aux1: real;
esp: real;
pel: real;

Begin
For I:= 1 to 32 do
begin
Z[I]:=0;
S[I]:=0;
end;
For I:= 1 TO 32 do;
begin
Readln('Ingrese zona y sala');
ReadLn(z[I] , S[I]);
end;
tot:=0;
contp[I]:= 0 ;
Readln('pel, sala, esp');
While pel <> 0 do
BEGIN
I:=1;
while pel <> CP[I] and I < tot do
begin
I:= I+1;
end;
IF I > tot
then
begin
CP[I]:= pel;
tot:= tot + 1;
end;
CESP[I]:= CESP[I] + ESP;
FOR I:= 1 TO 32 DO
begin
IF sala = s[I]
then
begin
J:= z[i];
ESZ[J]:= ESZ[J] + ESP;
ZP[J]:= ZP[J] + 1;
CONTP[I]:= CONTP[I] + 1;
end;
Writeln ('pel, sala, esp')
end;
END;
SUMA:=0;
PROM:=0;
FOR I:= 1 TO 45 DO
begin
SUMA:= SUMA + CESP[I];
end;
PROM:= SUMA/TOT;
FOR I:= 1 TO 45 DO
Begin
IF CESP[I] > PROM
THEN
writeln ('CP[I], ESP[I]');
End;
MAX:= -1;
For I:= 1 to 7 Do
IF ESZ[J]< MAX
THEN
MAX:= ESZ[J];
writeln ('max');
Repeat
BEGIN
senal:=0;
FOR I:= 1 TO 31 DO
begin
aux:=contp[I];
contp[I]:= contp[I+1];
contp[I+1]:= aux;
aux1:= s[I];
S[I]:=S[I+1];
S[I+1]:= aux1;
senal:=9
end;
END;
until senal= '0';
writeln ('S[I], CONTP[I]');
repeat until keypressed;
end.
Me tira una serie de errores, si alguien me puede ayudar, desde ya muchas gracias.
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

Ayuda con programacion en pascal

Publicado por ramon (2072 intervenciones) el 26/06/2014 00:42:14
Como bien dices salen varios errores pero si miras con detenimiento veras que no se puede mezcla variables
integer con reales puesto que te darán error de forma CESP[I]:= CESP[I] + ESP; te data error mira esto si
te ayuda algo.

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
program controlcines;
  uses
     crt;
   type
      salas = record
       zona : string[40];
       codigopeli : string[3];
       numespecta : integer;
      end;
  var
    sala : array[1..20] of salas;
    cont : integer;
    tecla : char;
 
  procedure Entrada_datos(n : integer);
  var
    i : integer;
    esta : boolean;
  begin
    clrscr;
    writeln('***** Entradas Datos Salas *****');
    writeln;
    esta := false;
    with sala[n] do
    begin
     write('   Entre Zona Ejp. [Luccieni]       : ');
     readln(zona);
     write('   Entre Codigo Pelicula Ejp. [1f8] : ');
     readln(codigopeli);
     write('   Entre Num. Espectadores          : ');
     readln(numespecta);
     end;
    end;
 
  function promedio : real;
  var
     sal, esp, i : integer;
     pro : real;
  begin
      sal := 0;
      esp := 0;
      pro := 0;
      promedio := 0;
      for i := 1 to cont - 1 do
      begin
      if sala[i].numespecta > 0 then
      begin
         esp := esp + sala[i].numespecta;
         sal := sal + 1;
      end;
    end;
        pro := esp / sal;
        promedio := pro;
  end;
 
  procedure peliculas_menores_del_promedio;
  var
    pa : integer;
    medi : real;
    especta : array[1..20] of integer;
 
  begin
     medi := promedio;
     for pa := 1 to cont do
     begin
         if sala[pa].codigopeli > ' ' then
         especta[pa] := sala[pa].numespecta;
     end;
      for pa := 1 to cont do
      if especta[pa] < medi then
      writeln(sala[pa].codigopeli,'      ',sala[pa].numespecta);
  end;
 
  procedure zona_de_menores_espectadores;
  var
    pa : integer;
    medi : real;
    especta : array[1..20] of integer;
  begin
     medi := promedio;
     for pa := 1 to cont do
     begin
         if sala[pa].codigopeli > ' ' then
           if sala[pa].numespecta < medi then
             especta[pa] := sala[pa].numespecta;
      end;
      for pa := 1 to cont do
      writeln(sala[pa].zona,'      ',sala[pa].numespecta);
  end;
 
  procedure salas_peliculas_totales;
  var
    pp, sa : integer;
  begin
      pp := 0;
      for sa := 1 to cont do
      begin
         if sala[sa].codigopeli > ' ' then
         begin
         pp := pp + 1;
         writeln(sala[sa].zona);
         end;
      end;
        writeln;
        writeln('  Total Peliculas Emitidas = ',pp);
  end;
 
 
 
 
 
  begin
     cont := 1;
     textcolor(15);
 
 
  end.

no esta terminado.
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