Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Parciales
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Packages
Packages
Container Registry
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Algorítmica y Programación I
Parciales
Commits
5ac6c5ab
Commit
5ac6c5ab
authored
Nov 14, 2022
by
Juan Manuel Cortez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit inicial
parents
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
389 additions
and
0 deletions
+389
-0
2022/2do parciales/reservas
2022/2do parciales/reservas
+0
-0
2022/2do parciales/solucion1.pas
2022/2do parciales/solucion1.pas
+389
-0
No files found.
2022/2do parciales/reservas
0 → 100644
View file @
5ac6c5ab
File added
2022/2do parciales/solucion1.pas
0 → 100644
View file @
5ac6c5ab
Program
VuelosSemanaQueViene
;
Uses
typinfo
,
crt
;
Type
tPlaza
=
(
A
,
B
,
C
,
D
,
E
,
F
,
G
,
H
,
I
);
Const
filasPrimeraClase
=
10
;
filasEconomica
=
30
;
plazasPorFila
=
ord
(
high
(
tPlaza
))+
1
;
totalPlazas
=
(
filasEconomica
*
plazasPorFila
+
filasPrimeraClase
*
plazasPorFila
)
*
7
;
Type
tDestinos
=
(
Miami
,
Madrid
,
Roma
);
tVuelos
=
(
Lunes
,
Martes
,
Miercoles
,
Jueves
,
Viernes
,
Sabado
,
Domingo
);
tMenu
=
(
carne
,
pasta
);
tClase
=
(
Primera
,
Economica
);
tPasaje
=
Record
destino
:
tDestinos
;
vuelo
:
tVuelos
;
fila
:
1.
.(
filasPrimeraClase
+
filasEconomica
);
plaza
:
tPlaza
;
nombre
:
string
;
apellido
:
String
;
pasaporte
:
LongInt
;
menu
:
tMenu
;
End
;
tReservas
=
array
[
1.
.
totalPlazas
]
Of
tPasaje
;
Var
pasajes
:
tReservas
;
opcion
:
integer
;
totalReservas
:
integer
=
0
;
Function
plazasDisponibles
(
destino
:
tDestinos
;
vuelo
:
tVuelos
;
clase
:
tClase
):
integer
;
Var
i
:
integer
=
1
;
contadorPlazas
:
integer
=
0
;
Begin
While
(
pasajes
[
i
].
pasaporte
<>
0
)
And
(
i
<=
totalPlazas
)
Do
Begin
If
(
pasajes
[
i
].
destino
=
destino
)
And
(
pasajes
[
i
].
vuelo
=
vuelo
)
And
((
clase
=
Primera
)
And
(
pasajes
[
i
].
fila
<=
filasPrimeraClase
)
Or
(
clase
=
Economica
)
And
(
pasajes
[
i
].
fila
>
filasPrimeraClase
))
Then
contadorPlazas
:=
contadorPlazas
+
1
;
i
:=
i
+
1
;
End
;
If
clase
=
Primera
Then
plazasDisponibles
:=
filasPrimeraClase
*
plazasPorFila
-
contadorPlazas
Else
plazasDisponibles
:=
filasEconomica
*
plazasPorFila
-
contadorPlazas
;
End
;
Function
plazasOcupadasPorFila
(
destino
:
tDestinos
;
vuelo
:
tVuelos
;
fila
:
integer
):
integer
;
Var
i
:
integer
=
1
;
contadorPlazas
:
integer
=
0
;
Begin
While
(
pasajes
[
i
].
pasaporte
<>
0
)
And
(
i
<=
totalPlazas
)
Do
Begin
If
(
pasajes
[
i
].
destino
=
destino
)
And
(
pasajes
[
i
].
vuelo
=
vuelo
)
And
(
pasajes
[
i
].
fila
=
fila
)
Then
contadorPlazas
:=
contadorPlazas
+
1
;
i
:=
i
+
1
;
End
;
plazasOcupadasPorFila
:=
contadorPlazas
;
End
;
Procedure
confirmaReservaPasaje
(
reserva
:
tReservas
);
Begin
End
;
Procedure
confirmaReservaPasaje
(
elDestino
:
tDestinos
;
elVuelo
:
tVuelos
;
laClase
:
tClase
;
elMenu
:
tMenu
);
Var
i
:
integer
=
1
;
filaInicial
:
integer
;
plazasOcupadas
:
integer
;
Begin
While
(
pasajes
[
i
].
pasaporte
<>
0
)
And
(
i
<
totalPlazas
)
Do
i
:=
i
+
1
;
If
i
>
totalPlazas
Then
WriteLn
(
'No hay plazas disponibles en este momento.'
)
Else
Begin
With
pasajes
[
i
]
Do
Begin
ReadLn
();
WriteLn
(
'Ingrese nombre: '
);
ReadLn
(
nombre
);
WriteLn
(
'Ingrese apellido: '
);
ReadLn
(
apellido
);
WriteLn
(
'Ingrese pasaporte: '
);
ReadLn
(
pasaporte
);
destino
:=
elDestino
;
vuelo
:=
elVuelo
;
menu
:=
elMenu
;
If
laClase
=
Primera
Then
filaInicial
:=
1
Else
filaInicial
:=
filasPrimeraClase
+
1
;
plazasOcupadas
:=
plazasOcupadasPorFila
(
destino
,
vuelo
,
filaInicial
);
While
plazasOcupadas
=
plazasPorFila
Do
Begin
filaInicial
:=
filaInicial
+
1
;
plazasOcupadas
:=
plazasOcupadasPorFila
(
destino
,
vuelo
,
filaInicial
);
End
;
fila
:=
filaInicial
;
plaza
:=
tPlaza
(
plazasOcupadas
);
totalReservas
:=
totalReservas
+
1
;
End
;
End
;
End
;
Procedure
reservarPasaje
(
destino
:
tDestinos
;
vuelo
:
tVuelos
;
clase
:
tClase
);
Var
opcion
:
integer
;
Begin
WriteLn
(
'Seleccione el menu para el destino '
+
GetEnumName
(
TypeInfo
(
tDestinos
),
Ord
(
destino
))+
', vuelo del dia '
+
GetEnumName
(
TypeInfo
(
tVuelos
),
Ord
(
vuelo
)),
', en '
,
clase
,
': '
);
WriteLn
(
'1. Carne. '
,
sLineBreak
,
'2. Pasta.'
);
writeln
(
'9. Volver.'
);
read
(
opcion
);
If
opcion
<>
9
Then
confirmaReservaPasaje
(
destino
,
vuelo
,
clase
,
tMenu
(
opcion
-
1
));
End
;
Procedure
reservarPasaje
(
destino
:
tDestinos
;
vuelo
:
tVuelos
);
Var
opcion
:
integer
;
plazasPrimeraDisponibles
,
plazasEconomicaDisponibles
:
integer
;
Begin
plazasPrimeraDisponibles
:=
plazasDisponibles
(
destino
,
vuelo
,
Primera
);
plazasEconomicaDisponibles
:=
plazasDisponibles
(
destino
,
vuelo
,
Economica
);
WriteLn
(
'Seleccione la clase para el destino '
+
GetEnumName
(
TypeInfo
(
tDestinos
),
Ord
(
destino
))+
', vuelo del dia '
+
GetEnumName
(
TypeInfo
(
tVuelos
),
Ord
(
vuelo
))+
': '
);
WriteLn
(
'1. Primera clase: '
,
plazasPrimeraDisponibles
,
' plazas disponibles.'
,
sLineBreak
,
'2. Clase economica: '
,
plazasEconomicaDisponibles
,
' plazas disponibles.'
);
writeln
(
'9. Volver.'
);
read
(
opcion
);
If
(
tClase
(
opcion
-
1
)
=
Primera
)
And
(
plazasPrimeraDisponibles
=
0
)
Then
WriteLn
(
'No hay plazas disponibles en Primera.'
)
Else
If
(
tClase
(
opcion
-
1
)
=
Economica
)
And
(
plazasEconomicaDisponibles
=
0
)
Then
WriteLn
(
'No hay plazas disponibles en Ecnomica.'
)
Else
If
(
opcion
<>
9
)
Then
reservarPasaje
(
destino
,
vuelo
,
tClase
(
opcion
-
1
));
End
;
Procedure
reservarPasaje
(
destino
:
tDestinos
);
Var
opcion
:
integer
;
Begin
WriteLn
(
'Seleccione el vuelo para el destino '
+
GetEnumName
(
TypeInfo
(
tDestinos
)
,
Ord
(
destino
))+
': '
);
Case
destino
Of
Miami
:
WriteLn
(
'1. Lunes.'
+
sLineBreak
+
'2. Martes.'
);
Madrid
:
WriteLn
(
'2. Martes.'
+
sLineBreak
+
'4. Jueves.'
);
Roma
:
WriteLn
(
'3. Miercoles.'
+
sLineBreak
+
'4. Jueves.'
+
sLineBreak
+
'7. Domingo.'
);
End
;
writeln
(
'9. Volver.'
);
read
(
opcion
);
reservarPasaje
(
destino
,
tVuelos
(
opcion
-
1
));
End
;
Procedure
reservarPasaje
();
Var
opcion
:
integer
;
Begin
WriteLn
(
'Seleccione el destino: '
+
sLineBreak
+
'1. Miami.'
+
sLineBreak
+
'2. Madrid.'
+
sLineBreak
+
'3. Roma.'
+
sLineBreak
+
'9. Volver.'
);
read
(
opcion
);
reservarPasaje
(
tDestinos
(
opcion
-
1
));
End
;
Function
buscarReservasPorDestinoYVuelo
(
destino
:
tDestinos
;
vuelo
:
tVuelos
):
tReservas
;
Var
reservas
:
tReservas
;
i
:
integer
=
1
;
j
:
integer
=
1
;
Begin
While
(
pasajes
[
i
].
pasaporte
<>
0
)
And
(
i
<=
totalPlazas
)
Do
Begin
If
(
pasajes
[
i
].
destino
=
destino
)
And
(
pasajes
[
i
].
vuelo
=
vuelo
)
Then
Begin
reservas
[
j
]
:=
pasajes
[
i
];
j
:=
j
+
1
;
End
;
i
:=
i
+
1
;
End
;
buscarReservasPorDestinoYVuelo
:=
reservas
;
End
;
Procedure
mostrarReservas
(
reservas
:
tReservas
);
Var
i
,
j
:
integer
;
reservaAuxiliar
:
tPasaje
;
totalReservasFiltradas
:
integer
=
0
;
Begin
while
(
reservas
[
totalReservasFiltradas
+
1
].
pasaporte
<>
0
)
do
totalReservasFiltradas
:=
totalReservasFiltradas
+
1
;
for
i
:=
1
to
totalReservasFiltradas
Do
Begin
for
j
:=
1
to
totalReservasFiltradas
-
i
Do
Begin
If
reservas
[
j
].
pasaporte
>
reservas
[
j
+
1
].
pasaporte
Then
Begin
reservaAuxiliar
:=
reservas
[
j
];
reservas
[
j
]
:=
reservas
[
j
+
1
];
reservas
[
j
+
1
]
:=
reservaAuxiliar
;
End
;
End
;
End
;
for
i
:=
1
to
totalReservasFiltradas
Do
Begin
With
reservas
[
i
]
Do
Begin
WriteLn
(
'------------------'
);
WriteLn
(
'Nombre: '
,
nombre
);
WriteLn
(
'Apellido: '
,
apellido
);
WriteLn
(
'Pasaporte: '
,
pasaporte
);
WriteLn
(
'Destino: '
,
destino
);
WriteLn
(
'Vuelo: '
,
vuelo
);
;
WriteLn
(
'Fila: '
,
fila
);
WriteLn
(
'Plaza: '
,
plaza
);
WriteLn
(
'Menu: '
,
menu
);
End
;
End
;
readkey
();
End
;
Procedure
mostrarReservas
(
destino
:
tDestinos
;
vuelo
:
tVuelos
);
Var
opcion
:
integer
;
reservas
:
tReservas
;
Begin
reservas
:=
buscarReservasPorDestinoYVuelo
(
destino
,
vuelo
);
mostrarReservas
(
reservas
);
End
;
Procedure
mostrarReservas
(
destino
:
tDestinos
);
Var
opcion
:
integer
;
Begin
WriteLn
(
'Seleccione el vuelo para el destino '
+
GetEnumName
(
TypeInfo
(
tDestinos
)
,
Ord
(
destino
))+
': '
);
Case
destino
Of
Miami
:
WriteLn
(
'1. Lunes.'
+
sLineBreak
+
'2. Martes.'
);
Madrid
:
WriteLn
(
'2. Martes.'
+
sLineBreak
+
'4. Jueves.'
);
Roma
:
WriteLn
(
'3. Miercoles.'
+
sLineBreak
+
'4. Jueves.'
+
sLineBreak
+
'7. Domingo.'
);
End
;
writeln
(
'9. Volver.'
);
read
(
opcion
);
mostrarReservas
(
destino
,
tVuelos
(
opcion
-
1
));
End
;
Procedure
mostrarReservas
();
Var
opcion
:
integer
;
Begin
WriteLn
(
'Seleccione el destino: '
+
sLineBreak
+
'1. Miami.'
+
sLineBreak
+
'2. Madrid.'
+
sLineBreak
+
'3. Roma.'
+
sLineBreak
+
'9. Volver.'
);
read
(
opcion
);
mostrarReservas
(
tDestinos
(
opcion
-
1
));
End
;
Function
cargarReservas
():
tReservas
;
Var
archivo
:
file
Of
tReservas
;
i
:
integer
=
0
;
Begin
assign
(
archivo
,
'reservas'
);
{$I-}
reset
(
archivo
);
{$I+}
If
IoResult
=
0
Then
Begin
read
(
archivo
,
cargarReservas
);
while
cargarReservas
[
i
+
1
].
pasaporte
<>
0
do
i
:=
i
+
1
;
totalReservas
:=
i
;
close
(
archivo
);
End
;
End
;
Procedure
guardarReservas
(
reservas
:
tReservas
);
Var
archivo
:
file
Of
tReservas
;
Begin
assign
(
archivo
,
'reservas'
);
rewrite
(
archivo
);
write
(
archivo
,
reservas
);
close
(
archivo
);
End
;
Begin
pasajes
:=
cargarReservas
();
While
opcion
<>
9
Do
Begin
clrscr
;
WriteLn
(
'Para operar ingrese una opcion: '
+
sLineBreak
+
'1. Reservar pasaje.'
+
sLineBreak
+
'2. Mostrar reservas.'
+
sLineBreak
+
'9. Salir.'
);
read
(
opcion
);
Case
opcion
Of
1
:
reservarPasaje
();
2
:
mostrarReservas
();
End
;
End
;
guardarReservas
(
pasajes
);
End
.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment