Selección de datos específicos
En esta página, desarrollarás el código para un botón "Buscar contacto" para ubicar contactos en la lista.
DAT-2.D.3
A medida que agregues más contactos a su lista, será cada vez menos realista encontrar el que deseas al leer toda la lista. Por lo tanto, la creación de una función de búsqueda se volverá esencial para encontrar la información deseada de manera eficiente. Las listas, la adición y eliminación de elementos de las listas y la búsqueda de listas son características comunes en muchos programas.
:
Modularidad
AAP-3.B.2, AAP-3.B.3
Modularidad (modularity) es el proceso de dividir un proyecto de programación en subproblemas separados. Por ejemplo, en la página 2 de este laboratorio, creaste un código para agregar un contacto a tu aplicación y, en esta página, creaste un código para encontrar contactos.
-
Desarrolla un botón "Eliminar contacto".
- Mueve el botón "Eliminar contacto" al escenario.
- Haz que el guion pida al usuario que "Ingrese el nombre de los contactos que desea eliminar".
- Luego, usa tu bloque
buscar contactos
para encontrar todos los contactos que coincidan.
- Proporciona al usuario la lista de contactos que coincidan y pídele confirmación para eliminarlo (para que el usuario no elimine por accidente a un contacto).
- Si el usuario confirma que desea eliminar estos contactos, reemplaza la lista de contactos con una lista de todos los contactos cuyo nombre no coincida con el nombre ingresado.
-
Modifica tu guion "Eliminar contacto" para que permita al usuario elegir qué contacto desea eliminar cuando
encontrar
reporta más de uno.
- Escribe un bloque auxiliar
eliminar contacto
que tome un contacto como entrada y lo elimine de la lista de contactos.
- Modifica "Eliminar contacto" para que, si más de un contacto coincide con la entrada de nombre del usuario, muestre una lista de los nombres coincidentes y pida al usuario que seleccione uno por número. (Los números de artículo se muestran automáticamente en la lista de nombres, por lo que no tienes que preocuparte por esa parte). Proporciona al usuario una forma de cancelar la solicitud en lugar de elegir un nombre.
- Si un contacto coincide exactamente, en lugar de mostrar la lista de nombres de un elemento, simplemente pide al usuario que confirme o cancele la eliminación. (Opcional.)
Este conjunto de ejercicios requiere haber completado los ejercicios de Llevándolo más allá de la página 2. Abre tu proyecto U3L2-TIF.
- Escribe una función de predicado que tome dos contactos como entradas. Debería devolver Verdadero si el primer contacto pertenece antes que el segundo en una lista de contactos ordenados. Es decir, tendrás que extraer los nombres (ordenados) de los dos contactos y luego usar
<
para compararlos. Respeta las abstracciones de datos.
-
Haz un bloque para ordenar la lista de contactos. Para realizar la clasificación en sí, puedes cargar la biblioteca "Lista de utilidades". Esta lista tiene un bloque
. Utiliza la lista de contactos como la primera entrada. La segunda entrada debe ser la función de predicado que acabas de escribir. (Deja sus dos espacios de entrada vacíos). El bloque ordenar
reportará una nueva lista de contactos ordenada.
- Prueba lo que has hecho hasta ahora.
-
Hemos sido descuidados hasta ahora al hablar de formatos de nombres. La mayoría de las personas en los Estados Unidos dicen primero su nombre de pila (el que sus padres eligieron para ellos) y luego su apellido. Pero en China, por ejemplo, el apellido es lo primero. Así que "Sun Yat-sen" es miembro de la familia Sun.
- ¿Cómo se debe mostrar al usuario el nombre "Sun Yat-sen"?
- ¿Cómo debe verse "Sun Yat-sen" para ordenar los contactos por apellido?
- ¿Qué pasa con alguien con un segundo nombre, como Martin Luther King? ¿El segundo nombre es un apellido o un nombre de pila?
-
Esta es la parte complicada: para que todo funcione correctamente, un nombre (según lo define el tipo de dato abstracto de nombre
) debe saber si es un nombre de pila, como Jasmine Anderson, o un apellido, como como Sun Yat-Sen. Redefine tu tipo de dato abstracto de nombre para convertirlo en una lista de tres elementos. El primero será el texto 'nombre de pila primero' o 'apellido primero'. Este primer elemento se denomina etiqueta de tipo . El segundo elemento será el nombre (o nombres) de pila y el tercero será el apellido (o apellidos).
Has estado usando etiquetas de tipo todo el tiempo sin saberlo. Muchos lenguajes de programación, incluido Snap!, adjuntan etiquetas de tipo a cada valor, diciendo "Soy una lista" o "Soy un número", etc. El usuario (es decir, tú) no ve las etiquetas de tipo, a menos que proporciones una entrada incorrecta a un bloque primitivo y veas un mensaje como "Esperando lista pero recibiendo texto".
-
Leer un nombre: Encuentra dónde pides al usuario el nombre y el apellido, y cambia el código para pedirle el(los) nombre(s) de pila y el apellido. También preguntale cuál va primero. Es posible que necesites tener dos constructores de nombres,
y
.
-
Escribir un nombre: Modifica tu bloque
y
para que comprueben la etiqueta de tipo del nombre (el primer elemento) cuando sea necesario. Ten cuidado acerca de cuándo agregar una coma.
-
Asegúrate de que tu bloque buscar contactos
y tu clasificación de la lista de contactos también funcionen con una lista de contactos que contenga ambos tipos de nombres.