Pascal/Turbo Pascal - AYUDA porfavor, error asiento libre/ocupado

 
Vista:

AYUDA porfavor, error asiento libre/ocupado

Publicado por Esther (7 intervenciones) el 08/02/2012 12:13:20
Saludos, estoy creando un programa que gestiona una sala de cine, donde poder reservar asiento por nombre y dni, consultar, y anular por dni.
El primer problema que me encuentro es que algo estoy haciendo mal al reservar porque luego al mostrar la matriz de asientos no me salen L (libre) o O (ocupado) como debiera, me sale algo raro, a veces todo L y a veces algunas líneas en blanco y no se como solucionarlo...
A ver si podríais echarme una mano porfavor para poder entregar el ejercicio...
GRACIAS DE VERDAD

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;
nombre: char;
apellidos: char;
dni: char;
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('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(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 su DNI');
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

AYUDA porfavor, error asiento libre/ocupado

Publicado por ramon (2158 intervenciones) el 08/02/2012 17:33:37
{Tienes la respuesta en la otra entrada pero observa este procedimiento tullo corregido}

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; {te faltaba asignar la O de ocupada}
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

AYUDA porfavor, error asiento libre/ocupado

Publicado por Esther (7 intervenciones) el 08/02/2012 22:35:15
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

AYUDA porfavor, error asiento libre/ocupado

Publicado por Esther (7 intervenciones) el 09/02/2012 17:56:37
Me piden:
- Gestión sala cine 10 filas 8 asientos por fila
- Reservar asientos por dni
- Anular asientos por dni
- Consultar reserva por dni
- Ver estado de la sala
- La información de la ocupación de la sala se guardará en un fichero binario

Errores: no me deja anular asientos, me dice que siempre están libres, el estado de la sala me lo pone mal ya que pone L o O donde quiere y algunos asientos en blanco, el de guardar en un fichero ya he desistido no se como hacerlo.

A ver si me podeis ayudar, abajo dejo el programa tal y como lo tengo ahora. GRACIAS

--------------------------------
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;
nombre: char;
apellidos: char;
dni: char;
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
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;

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

BEGIN {AnularReserva}
REPEAT
REPEAT {Comprobar asiento valido}
writeln ('Introduzca su DNI');
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 respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA porfavor, error asiento libre/ocupado

Publicado por ramon (2158 intervenciones) el 09/02/2012 19:55:18
{A qui lo tienes corregido pero tienes que mejorarlo mucho mas lo tienes enredado un poco}

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;
nombre: char;
apellidos: char;
dni: char;
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
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;

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]:=L;
writeln ('El asiento ya NO ocupado')
END;
writeln ('Cancelar otra reserva? S/N');
letra := readkey;
UNTIL (letra = 'N') or (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 < 5);
if m = 4 then
begin
end
else
begin
CASE m OF
1: MostrarSala(avion);
2: HacerReserva(avion);
3: AnularReserva(avion);
END; {case of}
m := 0;
end;
UNTIL m = 4
END; {menu}


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

AYUDA porfavor, error asiento libre/ocupado

Publicado por Esther (7 intervenciones) el 10/02/2012 12:51:19
Muchísimas gracias Ramón, ahora me deja cancelar la que había reservado. Pero sigo teniendo el mismo fallo que al principio, al mostrar la sala con el estado de las reservas (he cambiado en el programa al mostras las filas por las columnas que las tenia traspuestas) pero aun así la sala sin hacer ninguna reserva al principio ya me sale así. No se porque la matriz ya en un principio está mal construida? Luego al hacer una reserva el Ocupado (O) me lo pone donde quiere.....
Podrías ayudarme con este fallo? GRACIAS

------------------------------------
SELECCIONE FUNCION
1
CINE_IMPERIAL
Estado de las reservas
1 L L L L L L L L
2 L L L L L L L L
3 L L L L L L L
4 L L L L L L
5 L L L L L L L L
6 L L L L L L
7 L L L L L L
8 L L L L L L L L L
9 L L L L L L L L
0 L L L L L L L L

L - Libre
O - Ocupado


-------------------------------

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;
nombre: char;
apellidos: char;
dni: char;
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, '1');
EscribirFila(pasaje, '2');
EscribirFila(pasaje, '3');
EscribirFila(pasaje, '4');
EscribirFila(pasaje, '5');
EscribirFila(pasaje, '6');
EscribirFila(pasaje, '7');
EscribirFila(pasaje, '8');
EscribirFila(pasaje, '9');
EscribirFila(pasaje, '0');
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
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;

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]:=L;
writeln ('El asiento ya NO ocupado')
END;
writeln ('Cancelar otra reserva? S/N');
letra := readkey;
UNTIL (letra = 'N') or (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 < 5);
if m = 4 then
begin
end
else
begin
CASE m OF
1: MostrarSala(avion);
2: HacerReserva(avion);
3: AnularReserva(avion);
END; {case of}
m := 0;
end;
UNTIL m = 4
END; {menu}


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

AYUDA porfavor, error asiento libre/ocupado

Publicado por ramon (2158 intervenciones) el 10/02/2012 19:55:54
{Mira el cambio es el procedimiento como veres las letras y los números no se llevan
muy bien si se sustituyen en pascal}

PRIMERASIENTO= 'a';
ULTIMOASIENTO= 'j';

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');
EscribirFila(pasaje, 'i');
EscribirFila(pasaje, 'j');
writeln;
writeln ('L - Libre');
writeln ('O - Ocupado');
END;

{Con esto ya empezamos a andar suerte}
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