[ Foro de Pascal ]

Problemas con While

03-Oct-2011 21:55
Leandro Lopez
1 Respuestas

hola gente acá les paso el programa que hice, seguro tiene muchos errores, y el actual es con un while.
En donde puse las caritas ":-)" es donde tengo el problema

program cines;
uses crt;
type
proy = record
peli: integer;
sala: integer;
ce: integer;
   end;
sala = record
sala: integer;
zona: integer;
      end;
mostrar = record
ante: integer;
suma:integer;
end;

var
tproy: array[1..1000] of proy;
cont,ant,sum,cont1,pelicula,sala2,cante:integer;
tsala: array [1..16] of sala;
tmostrar:array[1..1000] of mostrar;

procedure ordeno (n: integer; var registro:integer; divi:integer);
var
v,i,j:integer;
begin
for i:= 1 to (n-1) do
   for J:= 1 to n do
      :-) while registro([i]).divi < registro([j]).divi do:-)
       begin
       v:=registro[j];
       registro[j]:=registro[i];
       registro[i]:=v;
       end;
       end;
   end;
end;

procedure suma (lectura:integer; valor:integer );
type
suma=record
ant:integer;
sum:integer;
end;
var
tsuma:array[1..1000] of suma;
ant,sum,cont:integer;

begin
cont:=0
readln (lectura);
while !eof do
ant:=lectura;
sum:=0;
      while lectura=ant ^ !eof do
            sum:= sum+valor;
            ant:=lectura;
            readln (lectura);
      end;
cont:=cont+1;
tsuma[cont].ant:=ant;
tsuma[cont].sum:=sum;
tmostrar[cont].ante:=  tsuma[cont].ant  ;
tmostrar[cont].suma:=tsuma[cont].sum     ;
cont1:=cont;
end;

Begin

for i:= 1 to 16 do
   writeln ('ingrese Nº de Sala');
   readln (tsala[i].sala);
          repeat
          writeln ('ingrese Nº de zona de 1 a 8');
          readln (tsala[i].zona);
          until 1<tsala[i].zona<=8;
end;

writeln ('por cada proyección ingrese : película, sala y cantidad de espectadores');
readln (pelicula);
readln (sala2);
readln (cante);
cont:=0;
while sala2<> 0 do
     cont:= cont+1;
     tproy[cont].peli:=pelicula;
     tproy[cont].sala:=sala2;
     tproy[cont].ce:=cante;
     writeln ('ingrese : película, sala y cantidad de espectadores');
     readln (pelicula);
     readln (sala2);
     readln (cante);
end;

ordeno (cont:integer;tproy:integer;peli:integer);
suma (tproy.peli:integer;tproy.ce:integer);
ordeno (cont1:integer;tmostrar:integer;suma:integer);
for i:=1 to 20 do
   writeln ('Película: 'tmostrar[i].ante ' cantidad de espectadores: ' tmostrar[i].suma);
end;

ordeno (8; tsala:integer;sala:integer);
suma (tsala.zona:integer;1);
for i:= 1 to 8 do
   writeln ('zona: 'tmostrar[i].ante ' cantidad de salas: 'tmostrar[i].suma);
end;

ordeno (cont:integer;tproy:integer;sala:integer);
suma ( tproy.sala:integer;tproy.ce:integer);
ordeno (cont1:integer;tmostrar:integer;suma:integer);
for i:= 1 to 16 do
   witeln ('sala: 'tmostrar[i].ante' cantidad de espectadores: 'tmostrar[i].suma);
end;
end.  


10-Oct-2011 20:25
Nacho Cabanes (+84)

Veamos... sería necesario tener comentarios para saber bien lo que pretendes en cada parte del programa, pero si el error lo tienes en este "while" de la rutina de ordenación, imagino que será porque lo habitual es que NO sea un "while", sino un "if", que intercambia cada par de elementos que no están correctamente colocados:

procedure ordeno (n: integer; var registro:integer; divi:integer);
var
v,i,j:integer;
begin
for i:= 1 to (n-1) do
   for J:= 1 to n do
     :-) while registro([i]).divi < registro([j]).divi do:-)
       begin
       v:=registro[j];
       registro[j]:=registro[i];
       registro[i]:=v;
       end;
       end;
   end;
end;

pero es que además hay más problemas de fondo: si usas la sintaxis "registro[i].divi" (te sobra el paréntesis), es porque "registro" es un array, no un integer.

Creo que hay más de una cosa que estás haciendo sin entenderlas realmente, y si no sabes dónde quieres llegar, es muy difícil que lo consigas.






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