Skip to content

Commit 439bb7e

Browse files
authored
Merge pull request mouredev#6501 from Jeyker-Dev/feature/Testructuras-datos
#3 - PHP
2 parents 0ee00ea + bb1d529 commit 439bb7e

File tree

1 file changed

+371
-0
lines changed

1 file changed

+371
-0
lines changed
Lines changed: 371 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,371 @@
1+
/*
2+
* EJERCICIO:
3+
* - Muestra ejemplos de creación de todas las estructuras soportadas por defecto en tu lenguaje.
4+
* - Utiliza operaciones de inserción, borrado, actualización y ordenación.
5+
*
6+
* DIFICULTAD EXTRA (opcional):
7+
* Crea una agenda de contactos por terminal.
8+
* - Debes implementar funcionalidades de búsqueda, inserción, actualización y eliminación de contactos.
9+
* - Cada contacto debe tener un nombre y un número de teléfono.
10+
* - El programa solicita en primer lugar cuál es la operación que se quiere realizar, y a continuación
11+
* los datos necesarios para llevarla a cabo.
12+
* - El programa no puede dejar introducir números de teléfono no númericos y con más de 11 dígitos.
13+
* (o el número de dígitos que quieras)
14+
* - También se debe proponer una operación de finalización del programa.
15+
*/
16+
17+
<?php
18+
/* Primetra Estructura de Datos Listas Enlazadas Clase SplDoublyLinkedList
19+
-- La clase SplDoublyLinkedList proporciona las principales funcionalidades de una lista doblemente enlazada. */
20+
21+
$spldll = new SplDoublyLinkedList;
22+
23+
/* Add A New Value */
24+
$spldll->add(0, "0");
25+
$spldll->add(1, "1");
26+
$spldll->add(2, "3");
27+
$spldll->add(3, "10");
28+
29+
/* Update A Value */
30+
$spldll->offsetSet(2, "2");
31+
32+
print_r($spldll);
33+
34+
/* Delete A Value */
35+
$spldll->offsetUnset(3);
36+
print_r($spldll);
37+
38+
/* Segunda Estructura de Datos Listas Enlazadas Clase SplQueue
39+
-- La clase SplStack proporciona la funcionalidad principal de una pila implementada mediante una lista doblemente enlazada estableciendo el modo iterador a SplDoublyLinkedList::IT_MODE_LIFO. */
40+
41+
$splstack = new SplStack;
42+
43+
/* Add A New Value */
44+
$splstack->add(0, "0");
45+
$splstack->add(1,"10");
46+
$splstack->add(2, "20");
47+
48+
print_r($splstack);
49+
50+
/* Update A Value */
51+
$splstack->offsetSet(0, "1");
52+
53+
print_r($splstack);
54+
55+
/* Delete A Value */
56+
$splstack->offsetUnset(2);
57+
58+
print_r($splstack);
59+
60+
/* Tercera Estructura de Datos Listas Enlazadas Clase SplStack
61+
-- La clase SplQueue proporciona las principales funcionalidades de una cola implementada usando una lista doblemente enlazada al estableciendo el modo del iterador a SplDoublyLinkedList::IT_MODE_FIFO. */
62+
63+
$splqueue = new SplQueue;
64+
65+
/* Add A New Value */
66+
$splqueue->add(0, "0");
67+
$splqueue->add(1,"10");
68+
$splqueue->add(2, "20");
69+
70+
print_r($splqueue);
71+
72+
/* Update A Value */
73+
$splqueue->offsetSet(0, "1");
74+
75+
print_r($splqueue);
76+
77+
/* Delete A Value */
78+
$splqueue->offsetUnset(2);
79+
80+
print_r($splqueue);
81+
82+
/* Cuarta Estructura de Datos Listas Enlazadas Clase SplMaxHeap
83+
-- La clase SplMaxHeap proporciona la funcionalidad principal de un montículo, manteniendo el máximo en la parte superior. */
84+
85+
$splmaxheap = new SplMaxHeap;
86+
87+
/* Add A New Value */
88+
$splmaxheap->insert("1");
89+
$splmaxheap->insert("10");
90+
$splmaxheap->insert("20");
91+
92+
print_r($splmaxheap);
93+
94+
/* Delete A Value */
95+
$splmaxheap->next();
96+
97+
print_r($splmaxheap);
98+
99+
/* Quinta Estructura de Datos Listas Enlazadas Clase SplMinHeap
100+
-- La clase SplMinHeap proporciona la funcionalidad principal de un montículo, manteniendo el mínimo en la parte superior.. */
101+
102+
$splminheap = new SplMinHeap;
103+
104+
/* Add A New Value */
105+
$splminheap->insert("1");
106+
$splminheap->insert("10");
107+
$splminheap->insert("20");
108+
109+
print_r($splminheap);
110+
111+
/* Delete A Value */
112+
$splminheap->next();
113+
114+
print_r($splminheap);
115+
116+
/* Sexta Estructura de Datos Listas Enlazadas Clase SplFixedArray
117+
-- la clase SplFixedArray proporciona la funcionalidad principal de un array. La principal diferencia entre SplFixedArray y un array normal de PHP es que la clase SplFixedArray es de longitud fija y sólo permite enteros dentro del rango de índices. La ventaja es que usa menos memoría que un array estándar. */
118+
119+
$splfixedarray = new SplFixedArray(4);
120+
121+
/* Add a new Value */
122+
$splfixedarray[0] = 0;
123+
$splfixedarray[1] = 1;
124+
$splfixedarray[2] = 2;
125+
$splfixedarray[3] = 4;
126+
127+
print_r($splfixedarray);
128+
129+
/* Update a new Value */
130+
$splfixedarray->offsetSet(3,3);
131+
132+
print_r($splfixedarray);
133+
134+
/* Delete a new Value */
135+
$splfixedarray->offsetUnset(3);
136+
137+
print_r($splfixedarray);
138+
139+
/* Septima Estructura de Datos Listas Enlazadas Clase SplObjectStorage
140+
-- La clase SplObjectStorage proporciona una correspondencia de objetos de datos o, ignorando los datos, un conjunto de objetos. Este doble propósito puede ser útil en muchos casos relacionados con la necesidad de identificar objetos de forma única.*/
141+
142+
$splobjectstorage = new SplObjectStorage;
143+
144+
$object_1 = new stdClass;
145+
$object_2 = new stdClass;
146+
147+
/* Add a new Object */
148+
$splobjectstorage[$object_1] = array(0,1,2);
149+
$splobjectstorage->attach($object_2, "Hello");
150+
151+
print_r($splobjectstorage);
152+
153+
/* Update a Object */
154+
$splobjectstorage->offsetSet($object_2, "Hola");
155+
156+
print_r($splobjectstorage);
157+
158+
/* Delete a Object */
159+
$splobjectstorage->offsetUnset($object_2);
160+
161+
print_r($splobjectstorage);
162+
163+
/* Ejercicio de Agenda de Contactos */
164+
165+
echo "Bienvenido a la Agenda de Contactos.\n";
166+
echo "Las Opciones que se pueden realizar son las siguientes:\n";
167+
echo "Ver Lista de Contactos. Coloca 1.\n";
168+
echo "Buscar un Contacto en la Lista. Coloca 2.\n";
169+
echo "Guardar Contacto. Coloca 3.\n";
170+
echo "Actualizar Contacto. Coloca 4.\n";
171+
echo "Eliminar Contacto. Coloca 5.\n";
172+
echo "Salir de la Agenda. Coloca 6.\n";
173+
174+
Class Contacto
175+
{
176+
public $nombre;
177+
public $numero;
178+
public static $agenda;
179+
public function __construct($nombre, $numero)
180+
{
181+
$this->nombre = $nombre;
182+
$this->numero = $numero;
183+
} // Here End Constructor
184+
185+
// Instancia de SPlobjectStorage
186+
public static function iniciarAgenda()
187+
{
188+
self::$agenda = new SplObjectStorage;
189+
} // Here End Function
190+
191+
// Guarda los Contactos en la Agenda
192+
public static function guardar($nuevo_contacto)
193+
{
194+
self::$agenda->attach($nuevo_contacto);
195+
echo "Contacto Agregado Correctamente";
196+
} // Here End FUnction
197+
198+
// Actualiza los Contactos en la Agenda
199+
public function actualizar($nombre_actualizar, $numero_actualizar)
200+
{
201+
$this->nombre = $nombre_actualizar;
202+
$this->numero = $numero_actualizar;
203+
} // Here End Function
204+
205+
// Muestra los Conctactos de la Agenda
206+
public function getInfo()
207+
{
208+
return "Nombre: $this->nombre, Número: $this->numero";
209+
} // Here End Function
210+
211+
// Buscar un contacto
212+
public static function find($nombre_buscar)
213+
{
214+
self::$agenda->rewind();
215+
while (self::$agenda->valid()) {
216+
$contacto = self::$agenda->current();
217+
if ($contacto->nombre == $nombre_buscar)
218+
{
219+
return $contacto;
220+
} // Here End If
221+
self::$agenda->next();
222+
} // Here End While
223+
return false;
224+
} // Here End Function
225+
226+
// Mostrar todos los contactos en la agenda
227+
public static function show()
228+
{
229+
self::$agenda->rewind();
230+
231+
while(self::$agenda->valid())
232+
{
233+
$contactos = self::$agenda->current();
234+
echo $contactos->getInfo() . ".\n";
235+
self::$agenda->next();
236+
} // Here End While
237+
} // Here End Function
238+
239+
// Elimina los Contactos en la Agenda
240+
public function eliminar()
241+
{
242+
243+
} // Here End Function
244+
} // Here End Class
245+
246+
// Instancia de Estructura SPLOBJECTSTORAGE
247+
Contacto::iniciarAgenda();
248+
$agenda = Contacto::$agenda;
249+
250+
// Crear Objetos de Contactos
251+
$contacto_1 = new Contacto("Jeyker", "04245652392");
252+
$contacto_2 = new Contacto("Maria", "04263318767");
253+
$contacto_3 = new Contacto("Ramon", "04125618690");
254+
$contacto_4 = new Contacto("Alejandro", "04164126754");
255+
$contacto_5 = new Contacto("Fernando", "04148879135");
256+
257+
// Agregar Contactos a la agenda
258+
$agenda->attach(object: $contacto_1);
259+
$agenda->attach(object: $contacto_2);
260+
$agenda->attach(object: $contacto_3);
261+
$agenda->attach(object: $contacto_4);
262+
$agenda->attach(object: $contacto_5);
263+
264+
// Pedir al usuario ingresar un dato
265+
$numero = trim(fgets((STDIN)));
266+
267+
// Validacion para verificar que el dato ingresado sea numerico
268+
if(filter_var($numero, FILTER_VALIDATE_INT) === false)
269+
{
270+
echo "El Dato a Ingresar Debe Ser un Numero.\n";
271+
exit;
272+
} // Here End If
273+
274+
// Validacion para que el numero a ingresar sea entre las opciones dadas
275+
if($numero <= 0 || $numero > 6)
276+
{
277+
echo "El Dato a Ingresar Debe Ser Entre las Opciones Dadas.\n";
278+
exit;
279+
} // Here End If
280+
281+
// Menu de opciones
282+
switch($numero)
283+
{
284+
// Mostras la lista de contactos en la agenda
285+
case 1:
286+
echo "Lista de Contactos: \n";
287+
Contacto::show();
288+
break;
289+
290+
// Buscar un contacto en la agenda
291+
case 2:
292+
echo "Ingresa El Nombre del Contacto que Buscas:\n";
293+
$contacto_buscar = trim(fgets(STDIN));
294+
$contacto = Contacto::find($contacto_buscar);
295+
if ($contacto)
296+
{
297+
echo "Contacto encontrado: " . $contacto->getInfo() . "\n";
298+
} // Here End If
299+
else
300+
{
301+
echo "No se encontraron contactos.\n";
302+
} // Here End Else
303+
break;
304+
305+
// Guardar un Contacto
306+
case 3:
307+
echo "Escribe un Nombre para el Contacto: . \n";
308+
$nombre_contacto = trim(fgets(STDIN));
309+
310+
echo "Escribe un Numero para el Contacto: . \n";
311+
$numero_contacto = trim(fgets(STDIN));
312+
313+
$contacto_nuevo = new Contacto($nombre_contacto, $numero_contacto);
314+
315+
$agenda->attach($contacto_nuevo);
316+
317+
echo "Contacto Agregado Correctamente.\n";
318+
break;
319+
320+
case 4;
321+
echo "Lista de Contactos: \n";
322+
Contacto::show();
323+
324+
echo "Escribe el Nombre del Contacto a Editar: \n";
325+
$nombre_actualizar = trim(fgets(STDIN));
326+
327+
$contacto_encontrado = Contacto::find($nombre_actualizar);
328+
329+
if($contacto_encontrado === false)
330+
{
331+
echo "No se Encontraron Contactos con Este Nombre. \n";
332+
} // Here End If
333+
else
334+
{
335+
echo "Ingresa un Nuevo Nombre: ";
336+
$nuevo_nombre = trim(fgets(STDIN));
337+
338+
echo "Ingresa un Nuevo Numero: ";
339+
$nuevo_numero = trim(fgets(STDIN));
340+
341+
$contacto_encontrado->actualizar($nuevo_nombre, $nuevo_numero);
342+
echo "Contacto Actualizado. \n";
343+
Contacto::show();
344+
} // Here End Else
345+
346+
break;
347+
348+
case 5;
349+
Contacto::show();
350+
351+
echo "Escribe el Nombre del Contacto que Quieres Eliminar: ";
352+
$nombre_eliminar = trim(fgets(STDIN));
353+
354+
$contacto_eliminar = Contacto::find($nombre_eliminar);
355+
356+
$agenda->offsetUnset($contacto_eliminar);
357+
358+
Contacto::show();
359+
360+
echo "Contacto Eliminado Correctamente.\n";
361+
break;
362+
363+
case 6:
364+
echo "Saliendo de la Agenda.\n";
365+
break;
366+
367+
default:
368+
echo "Error Inesperado. Vuelva a Intentar";
369+
break;
370+
} // Here End Switch
371+
?>

0 commit comments

Comments
 (0)