Pascal/Turbo Pascal - Error en matriz de array

 
Vista:

Error en matriz de array

Publicado por Esther (7 intervenciones) el 07/02/2012 19:24:49
Saludos a todos, abajo os dejo el programa que he creado pero que me falla en algunas cosa, en el programa me piden lo siguiente:

- Programa que permita reservar asiento en una sala de cine (solo tiene esta sala) con nombre apellidos y dni, poder anular la reserva por dni y poder consultar la reserva.

El primer problema que me encuentro es que algo estoy haciendo mal porque no me salen libres y ocupadas las que voy reservando, me sale algo raro....

Sabéis donde está el error, que estoy haciendo mal? A ver si me podéis orientar. Muchas gracias!

Esther


----------------------------------------------------------------------------------
PROGRAM Cine1 (input,output);
USES
crt;
CONST
MINFILA = 1;
MAXFILA = 10;
PRIMERASIENTO= 'a';
ULTIMOASIENTO= 'h';
TYPE
{Tplaza = string [2];}
TEstado = (L, O);
Tasientos=array [MINFILA..MAXFILA,PRIMERASIENTO..ULTIMOASIENTO]
of TEstado;
VAR
seat: Tasientos;
PROCEDURE ResetearAsientos (VAR Pasaje: Tasientos);

VAR
i: integer;
j: char;
BEGIN
FOR i:=MINFILA TO MAXFILA DO
FOR j:= PRIMERASIENTO TO ULTIMOASIENTO DO
Pasaje[i,j]:=L;
END;
PROCEDURE EscribirFila (VAR asientos : Tasientos ; letra: char);
{asientos es el array, letra es la columna}
VAR
i: integer;
BEGIN {EscribirFila}
write (letra,' ');
FOR i:=MINFILA TO MAXFILA DO BEGIN
IF asientos[i,letra]=L THEN
write('L', ' ');
IF asientos[i,letra]=O THEN
write('O', ' ');
END;
writeln;
END; {EscribirFila}

PROCEDURE MostrarSala(VAR pasaje:Tasientos);
VAR
i: integer;
BEGIN {Mostrar Sala}
writeln ('CINE_IMPERIAL');
writeln ('Estado de las reservas');
EscribirFila(pasaje, 'A');
EscribirFila(pasaje, 'B');
EscribirFila(pasaje, 'C');
EscribirFila(pasaje, 'D');
EscribirFila(pasaje, 'E');
EscribirFila(pasaje, 'F');
EscribirFila(pasaje, 'G');
EscribirFila(pasaje, 'H');
writeln;
writeln ('L - Libre');
writeln ('O - Ocupado');
END;
PROCEDURE sinasientos(VAR opcion:char;cantidad:integer);

BEGIN
REPEAT
write('No se han conseguido colocar ');
writeln(cantidad,' de asientos juntos');
writeln('Quiere reservar los asientos separados? s/n');
readln(opcion);
UNTIL (opcion='s') OR (opcion='S') OR (opcion='n') OR (opcion='N');
END;
PROCEDURE bucle (VAR situacion:Tasientos;number,p:integer;
VAR counter:integer;VAR k:char; VAR suma:integer);

BEGIN
counter:=0;
k:=PRIMERASIENTO;
suma:=0;
REPEAT
IF (situacion[p,k]=L) THEN BEGIN
k:=succ(k);
counter:=counter+1;
suma:=suma+1;
END
ELSE BEGIN
counter:=0;
k:=succ(k);
END;
UNTIL (k=ULTIMOASIENTO) OR (counter=number);
END;
PROCEDURE busqueda(VAR butaca:TAsientos; tipo, linea,cantidad:integer);
FORWARD;
PROCEDURE aux (VAR asiento:Tasientos; VAR fil:integer;
maximo,cuantity,short:integer);

VAR
i,contador,contaux, total:integer;
j,option:char;
BEGIN
contador:=0;
contaux:=0;
j:=PRIMERASIENTO;
IF fil=-1 THEN BEGIN
i:=0;
REPEAT
i:=i+1;
bucle(asiento,cuantity,i,contador,j,total);
UNTIL (i=maximo) OR (cuantity=contador);
contaux:=contaux+1;
END
ELSE BEGIN
bucle(asiento,cuantity,i,contador,j,total);
contaux:=contaux+1;
END;
IF (cuantity<>contador) AND (fil<>-1)THEN BEGIN
busqueda(asiento,short,-1,cuantity);
contaux:=contaux+1;
END;
IF total=0 THEN
writeln('Completo')
ELSE BEGIN
IF (contador<>cuantity) AND (contaux=1) THEN BEGIN
sinasientos(option,cuantity);
IF (option='s') OR (option='S') THEN BEGIN
busqueda(asiento,short,fil,cuantity-1);
busqueda(asiento,short,fil,1);
END
ELSE BEGIN
REPEAT
REPEAT
asiento[i,j]:=O;
j:=pred(j);
contador:=contador-1;
UNTIL (contador=0) OR (j<PRIMERASIENTO);
j:=ULTIMOASIENTO;
i:=i-1;
UNTIL (i=0) OR (contador=0);
write('Los asientos se han ');
writeln('reservado correctamente');
END;
END;
END;
END;
PROCEDURE busqueda (VAR butaca:TAsientos; tipo, linea,cantidad:integer);
VAR
i,contador,contaux:integer;
j,option:char;
BEGIN
{contador:=0;
contaux:=0;
j:=PRIMERASIENTO;}
CASE tipo OF
1:aux(butaca,linea,MAXFILA,cantidad,tipo)
END;
END;

PROCEDURE HacerReserva (VAR sillon: TAsientos);
VAR
numero, fila, i,lugar,categoria:integer;
asiento,eleccion:char;
BEGIN
asiento:=PRIMERASIENTO;

writeln('Elija el numero de la fila del 1 al 10');
readln(eleccion);

writeln('Introduzca el numero de asiento del a al h');
readln(asiento);
end;

PROCEDURE AnularReserva (VAR sillon: TAsientos);
VAR
{plazaAnu: Tplaza;}
num,fila: integer;
letra, columna,letraAux: char;

BEGIN {AnularReserva}
REPEAT
REPEAT {Comprobar asiento valido}
writeln ('Introduzca la fila del asiento: 1-10');
readln (fila);
UNTIL (fila>=1) AND (fila<=10);
REPEAT
writeln('Introduzca la columna del asiento: a-h');
readln(columna)
UNTIL (columna>='a') AND (columna<='h');
IF (sillon[fila,columna]=L) THEN
writeln('El asiento estaba vacio')
ELSE BEGIN
sillon[fila,columna]:=O;
writeln ('El asiento ya NO ocupado')
END;
writeln ('Cancelar otra reserva? S/N');
readln (letra);
UNTIL (letra <> 'N') AND (letra<>'n');
END; {AnularReserva}
PROCEDURE menu (VAR avion:Tasientos);
VAR
m:integer;
BEGIN {menu}
REPEAT
REPEAT
writeln('++++++++++++++++++++++++++++++');
writeln('1.- Mostrar estado de la reserva');
writeln('2.- Hacer una reserva');
writeln('3.- Cancelar reserva');
writeln('4.- Salir');
writeln('++++++++++++++++++++++++++++++');
writeln('SELECCIONE FUNCION');
readln(m);
UNTIL (m>0) AND (m<4);
CASE m OF
1: MostrarSala(avion);
2: HacerReserva(avion);
3: AnularReserva(avion);
END; {case of}
UNTIL m=4
END; {menu}


BEGIN {Prog. Principal}
ResetearAsientos(seat);
menu(seat);
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

Error en matriz de array

Publicado por Esther (7 intervenciones) el 07/02/2012 23:12:20
Porfavor si alguien me puede ayudar, no se como acabar el programita y es un ejercicio obligatorio. GRACIAS
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

Error en matriz de array

Publicado por ramon (2158 intervenciones) el 08/02/2012 17:29:27
{Veras en el procedimiento te falta como veras asignar las entradas al array}

PROCEDURE HacerReserva (VAR sillon: TAsientos);
VAR
asiento, numero, fila, i,lugar,categoria:integer;
eleccion:char;
BEGIN
eleccion:=PRIMERASIENTO;

writeln('Escriba su nombre');
readln(nombre);

writeln('Apellidos');
readln(apellidos);

writeln('DNI');
readln(dni);

writeln('Elija el numero de la fila del 1 al 10');
readln(asiento);


writeln('Introduzca el numero de asiento del a al h');
readln(eleccion);
sillon[asiento,eleccion] := O;
end;

{Por lo cual no puedes ver los resultados siempre y cuando no entres mas reservas
pues sino perderás el nombre apellido y dni pues no entran en el array}
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

Error en matriz de array

Publicado por Esther (7 intervenciones) el 08/02/2012 22:36:51
Gracias por tu ayuda, pero lo he probado y el el sillón de ocupado me lo pone donde quiere y me pone otros asientos en blanco....
Como puedo solucionarlo? Gracias!
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