Skip to content

Commit 64b86ff

Browse files
#7 - Delphi
1 parent 8581288 commit 64b86ff

File tree

1 file changed

+213
-0
lines changed

1 file changed

+213
-0
lines changed
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
(* Para mi papá, la razón de ser quien soy.
2+
*
3+
* EJERCICIO:
4+
* Implementa los mecanismos de introducción y recuperación de elementos propios de las
5+
* pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array
6+
* o lista (dependiendo de las posibilidades de tu lenguaje).
7+
*
8+
* DIFICULTAD EXTRA (opcional):
9+
* - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
10+
* de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
11+
* que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
12+
* Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
13+
* el nombre de una nueva web.
14+
* - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
15+
* impresora compartida que recibe documentos y los imprime cuando así se le indica.
16+
* La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
17+
* interpretan como nombres de documentos.
18+
*)
19+
program fduron;
20+
21+
{$APPTYPE CONSOLE}
22+
23+
{$R *.res}
24+
25+
uses
26+
System.SysUtils,
27+
System.Generics.Collections;
28+
29+
function MenuDeOpciones: Char;
30+
begin
31+
WriteLn;
32+
WriteLn('**********************************');
33+
WriteLn('* DIFICULTAD EXTRA *');
34+
WriteLn('**********************************');
35+
WriteLn('1. Simular el mecanismo Adelante/Atras de un navegador web');
36+
WriteLn('2. Simular el mecanismo de una impresora compartida');
37+
WriteLn('X. Salir');
38+
39+
Repeat
40+
Write('Selecciona una opción: ');
41+
ReadLn(Result);
42+
case Result of
43+
'1', '2', 'X', 'x': Exit;
44+
else
45+
WriteLn('Opción incorrecta');
46+
end;
47+
Until UpperCase(Result) = 'X';
48+
end;
49+
50+
procedure SimulacionDeNavegador;
51+
var
52+
PilaAtras, PilaAdelante: TStack<String>;
53+
Comando: String;
54+
begin
55+
WriteLn;
56+
WriteLn('SIMULACIÓN DE NAVEGADOR WEB');
57+
WriteLn(' Instrucciones:');
58+
WriteLn(' Escribe una direccion URL para agregarla a la pila');
59+
WriteLn(' Escribe la palabra "adelante" para avanzar en el historial');
60+
WriteLn(' Escribe la palabra "atras" para regresar en el historial');
61+
WriteLn(' Escribe la palabra "quit" para salir de la simulación');
62+
WriteLn;
63+
PilaAtras := TStack<String>.Create;
64+
PilaAdelante := TStack<String>.Create;
65+
try
66+
PilaAtras.Push('home');
67+
68+
while true do
69+
begin
70+
Write('Estas en "', PilaAtras.Peek, '" URL o comando: ');
71+
ReadLn(Comando);
72+
73+
if Comando = 'atras' then
74+
begin
75+
if PilaAtras.Count = 1 then
76+
WriteLn('* Err - Has llegado al primer elemento del historial.')
77+
else
78+
begin
79+
PilaAdelante.Push(PilaAtras.Peek);
80+
PilaAtras.Pop;
81+
end;
82+
end
83+
else
84+
if Comando = 'adelante' then
85+
begin
86+
if PilaAdelante.Count = 0 then
87+
WriteLn('* Err - Has llegado al ultimo elemento del historial.')
88+
else
89+
begin
90+
PilaAtras.Push(PilaAdelante.Peek);
91+
PilaAdelante.Pop;
92+
end;
93+
end
94+
else
95+
if Comando <> 'quit' then
96+
begin
97+
PilaAtras.Push(Comando);
98+
PilaAdelante.Clear;
99+
end
100+
else
101+
Break;
102+
103+
end;
104+
finally
105+
PilaAtras.Free;
106+
PilaAdelante.Free;
107+
end;
108+
end;
109+
110+
procedure SimuladorDeImpresora;
111+
var
112+
ColaDocumentos: TQueue<string>;
113+
Comando: String;
114+
begin
115+
WriteLn;
116+
WriteLn('SIMULACIÓN DE COLA DE IMPRESIÓN');
117+
WriteLn(' Instrucciones:');
118+
WriteLn(' Escribe nombres de documentos PEj. documento1.doc para agregarlo a la lista');
119+
WriteLn(' Escribe la palabra "imprimir" para imprimir el elemento y eliminarlo de la lista');
120+
WriteLn(' Escribe la palabra "quit" para salir de la simulación');
121+
WriteLn;
122+
ColaDocumentos := TQueue<String>.Create;
123+
try
124+
while True do
125+
begin
126+
Write('Nombre del documento o "imprimir":');
127+
ReadLn(Comando);
128+
129+
if Comando = 'imprimir' then
130+
begin
131+
if ColaDocumentos.Count = 0 then
132+
WriteLn('* Err - No hay documetos en la cola.')
133+
else
134+
begin
135+
WriteLn(' -Imprimiendo documento ', ColaDocumentos.Dequeue, '...');
136+
WriteLn(' -Impresión terminada.');
137+
end;
138+
end
139+
else
140+
if Comando <> 'quit' then
141+
begin
142+
ColaDocumentos.Enqueue(Comando);
143+
WriteLn('Documento agregado a la cola');
144+
end
145+
else
146+
Break;
147+
end;
148+
finally
149+
ColaDocumentos.Free;
150+
end;
151+
end;
152+
153+
procedure DificultadExtra;
154+
var
155+
Opcion: Char;
156+
begin
157+
while True do
158+
begin
159+
Opcion := MenuDeOpciones;
160+
case Opcion of
161+
'1' : SimulacionDeNavegador;
162+
'2' : SimuladorDeImpresora;
163+
else
164+
break;
165+
end;
166+
end;
167+
end;
168+
169+
var
170+
S: TStack<String>;
171+
Q: TQueue<String>;
172+
begin
173+
S := TStack<String>.Create;
174+
Q := TQueue<String>.Create;
175+
try
176+
// Introducción de datos en una pila
177+
S.Push('Valor Uno');
178+
S.Push('Valor Dos');
179+
S.Push('Valor Tres');
180+
S.Push('Valor Cuatro');
181+
S.Push('Valor Cinco');
182+
S.Push('Valor Seis');
183+
WriteLn('Se introdujeron ', S.Count, ' elementos en la pila');
184+
WriteLn;
185+
186+
// Introducción de datos en una pila
187+
Q.Enqueue('Valor Uno');
188+
Q.Enqueue('Valor Dos');
189+
Q.Enqueue('Valor Tres');
190+
Q.Enqueue('Valor Cuatro');
191+
Q.Enqueue('Valor Cinco');
192+
Q.Enqueue('Valor Seis');
193+
WriteLn('Se introdujeron ', S.Count, ' elementos en la cola');
194+
WriteLn;
195+
196+
WriteLn('Recuperación de datos de una pila (LIFO):');
197+
while S.Count > 0 do
198+
WriteLn(S.Pop);
199+
200+
WriteLn;
201+
202+
WriteLn('Recuperación de datos de una cola (FIFO):');
203+
while Q.Count > 0 do
204+
WriteLn(Q.Dequeue);
205+
206+
finally
207+
S.Free;
208+
Q.Free;
209+
end;
210+
211+
DificultadExtra;
212+
213+
end.

0 commit comments

Comments
 (0)