Sesión 8.pdf

Full Transcript

Fundamentos de programación: Estructuras de datos Hasta el momento se ha considerado algoritmos con Como puede notar se clasifican con base en las estructuras de control basada en el flujo, como lo es de flujo “dimensiones” con la que se trabaja la asignación de datos secuencial,...

Fundamentos de programación: Estructuras de datos Hasta el momento se ha considerado algoritmos con Como puede notar se clasifican con base en las estructuras de control basada en el flujo, como lo es de flujo “dimensiones” con la que se trabaja la asignación de datos secuencial, de decisión o ciclos. En todos los casos, al en la estructura. Es decir, si son estructuras realizar la captura o calcular el valor de una variable, los unidimensionales como los vectores o si son valores del caso o ciclo se pierden, debido a que el nuevo multidimensionales como lo son las matrices. valor asignado en la variable lo sustituye, pues se guardan en la memoria en una misma posición determinada. Por Estructuras unidimensionales consiguiente, si se desea guardar todos los valores Las estructuras unidimensionales se pueden catalogar, ingresados en cada caso de ejecución es necesario contar principalmente, en: listas, tuplas, strings y secuencias. con estructuras de datos. Este tipo de estructuras permite Estructuras multidimensionales guardar una serie de valores bajo el mismo nombre de Las estructuras multidimensionales se pueden catalogar en variable y al mismo tiempo y quizás, en algunos casos, de tablas y arreglos (Matrices numéricas). forma heterogénea, es decir de diferentes tipos; aunque esto depende del tipo de estructura de datos. Estructuras especiales Finalmente, existe el concepto de diccionario que no A las estructuras de datos se les denomina de varias concuerda con la catalogación de unidimensional o maneras según los métodos permitidos y el tipo de datos multidimensional ya que es una forma especial de permitidos, pero en general se puede hablar de tres asignación y llamado de datos basada en clave – valor. grandes categorías: vectoriales, matriciales y especiales. Esta catalogación se hace con base a la analogía con los conceptos de vectores y matrices en las matemáticas. Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Cualquiera sea el caso estas estructuras se caracterizan por: Sin embargo, podrían utilizarse más de tres, pero a medida 1) Almacenar sus elementos en una posición de memoria que aumenta el número de dimensiones, aumenta la continua. complejidad de las estructuras, y como consecuencia, cambia la forma de trabajar con ellos. En la mayoría de las ocasiones, 2) Tener un único identificador. para índices mayores a tres, es más tedioso entender y 3) Tener acceso directo o aleatorio a los elementos trabajar con estos tipos de arreglos que la ventaja que se individuales del arreglo. obtiene de ellos, no obstante, habrá ocasiones en los que resulte necesario el esfuerzo. En la mayoría de los lenguajes se 4) Permitir ingresar elementos homogéneos y en algunas suele indicar los índices seguido al nombre de la variable e de las estructuras elementos heterogéneos. insertando el índice entre corchetes, paréntesis o llaves según sea el caso del tipo de estructura. El Índice Finalmente, la posición del primer elemento puede ser física o Para lograr el guardado y la lectura de datos en estructuras lógica. Algunos lenguajes de programación, como Python, de datos de acceso directo, se usan los denominados hacen referencia a la primera posición como lógica, de tal índices, estos hacen referencia a la posición en que se forma que se establece el índice cero a la posición del primer guarda el dato dentro de la estructura. Por lo general se elemento, como consecuencia los índices inician desde cero. utilizan uno índice para formar estructuras Algunos otros lenguajes de programación utilizan la posición unidimensionales. Dos índices para formar estructuras física, que es la correspondencia directa con el número de bidimensionales y en ocasiones tres índices para formar elementos dentro de la estructura de datos, por tal razón el estructuras tridimensionales. primer elemento está ubicado en la posición uno, ya que es el elemento uno, por tanto, la posición cero no existe. Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Arreglos unidimensionales Partiendo del planteamiento del problema, si en lugar de Suponga que tiene las edades de cuatro alumnos; si no tener sólo cuatro edades se tuvieran todas las edades de cuenta con una estructura de datos tipo vector o arreglo los alumnos de una escuela o, aún más complejo, se unidimensional, al trabajar con estos valores al mismo tratara de las edades de los habitantes de una ciudad, o tiempo, tendría que definir cuatro variables para almacenar alguna situación semejante, utilizar variables simples cada una de las edades en la memoria de la máquina, sin resultaría, si no imposible, sí lo bastante complejo para embargo, con arreglos unidimensionales es posible guardar manipular las N variables para guardar los datos estas edades en una misma estructura y tener acceso a ella correspondientes; no obstante, con un vector se pueden en cualquier momento. En la figura se representará almacenar estos datos en una misma variable, en la que mediante un esquema cómo estarían integrados estos sólo se hace referencia a la posición que ocupa dentro del elementos dentro del arreglo. arreglo. La forma de representar la captura e impresión en un diagrama de flujo y el respectivo pseudocódigo de un vector de N elementos se muestra en la figura. Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos En Python un contenedor de este tipo lista se ingresa simplemente escribiendo: Listas Es decir, la creación de una lista se hace usando los corchetes Las listas son el primer tipo de estructura de datos que se [ ] y separando cada objeto por una coma ( , ). Si se le va a introducir por ser la más versátil. Una lista es una interroga por el tipo de contenedor que es A usando el estructura unidimensional dinámica y heterogénea. Es decir, puede ser modificada en tiempo de ejecución y comando: permite ingresar elementos de diferentes tipos. En la siguiente imagen se muestra la forma general de una lista, con su respectiva asignación en un contenedor identificado Se vera que es de tipo “List” para indicar que contenedor como A y su respectivo índice. A es de tipo: arreglo unidimensional, dinámico y heterogéneo, que es precisamente la definición de lista. Además, es posible generar una lista vacía simplemente al escribir: Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Para mostrar una lista completa se usa el comando: se tendrá como salida 1.2. Por otra parte, si se desea tomar una porción de la lista y asignarla a una nueva lista, es decir sacar una sublista de la lista principal se puede Lo cual mostrara todo el contenido de la lista: [1, escribir: 'Ana', 1.2, 'B'] En este caso, B será una lista que es un subconjunto de la Para mostrar un elemento de la lista se escribe primera. Si se pregunta por los elementos de la sublista identificador de la lisa seguido de corchetes y el índice del B: elemente que se quiere mostrar. Es decir: se mostrará: [1, 'Ana']. Con lo cual queda claro que la Lo que mostrara: Ana. Además, si se desea extraer un forma de trabajo de los índices en Python es hasta el elemento y asignarlo a un contenedor separado se puede índice anterior al final. Es decir, [𝐼𝑛𝑖𝑐𝑖𝑜, 𝐹𝑖𝑛). Cabe escribir: aclarar que si se prescinde de ambos índices Python sobre entiende que se desea tomar desde el inicio hasta el final. Con lo que en B estará contenido el valor 1.2 que es el Es decir, si se desea tomar la lista completa se puede dato guardado en el índice 2. Como se ve a continuación. escribir: Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Por ejemplo, si se quiere agregar el elemento “Sofia” a la lista A, se escribe: lo cual mostrará: [1, 'Ana', 1.2, 'B']. Si se prescinde del primer índice, entonces se entiende que es desde el inicio: Ahora si se pide que se muestre la lista se mostrara: [1, 'Ana', 1.2, 'B', 'Sofia']. Ahora bien, si por se mostrará: [1, 'Ana', 1.2]. De igual forma si se prescinde error se ha ingresado mal un elemento al final de la lista, del índice final se sobrentiende que se toma hasta el final: este puede ser eliminado usando el método: list.pop(): se mostrará: ['Ana', 1.2, 'B']. De igual forma se trabaja para por ejemplo, si se desea eliminar el elemento Sofia se tomar sublistas. Por otra parte, para agregar un elemento escribe: al final de una lista se usa el siguiente método: list.append(elemento nuevo) Puede ser usual que se desee que el elemento nuevo sea agregado en una posición determinada y no necesariamente En este caso, y en los siguientes ejemplos, para fines de al final, para hacer esto se usa el método: ilustrar los métodos se ha escrito “list” para referirse al identificador o nombre de una lista cualquiera. list.insert(posición , elemento nuevo): Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Por ejemplo, suponga que se desea agregar “Sofia” justo Si lo que desea es eliminar un elemento en particular después de Ana, entonces se escribe: puede usar el método pop()con el índice del elemento que desea eliminar, por ejemplo: Si se pide que se muestre la nueva lista se obtendrá: [1, De este modo la lista quedara: [1, 1.2, 'B']. Si se 'Ana', 'Sofia', 1.2, 'B']. Es usual que se desea saber cuántas veces un elemento aparece en una desee eliminar elementos de una lista, para ello se usa el lista, se puede usar el método: método: list.count(x): list.remove(elemento a eliminar): Por ejemplo, si se amplía la lista A = [1, "Ana", 1.2,"B", "Ana"] y se pide que cuente cuantas veces aparece el Por ejemplo, si se desea eliminar el elemento Ana de la elemento Ana y lo muestre en consola mediante el print: lista se escribe: De este modo la lista quedara: [1, 1.2, 'B']. Cabe Entonces se mostrará: 2. En ocasiones lo que se desea es señalar que si la lista tiene varios elementos iguales solo agregar una lista al final de otra lista, esto se puede hacer removerá el primero que coincida recorriendo la lista de usando el método: izquierda a derecha. list.extend(elemento nuevo iterable): Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Por ejemplo, suponga que se tiene la lista B que contiene: Para limpiar una lista de todos los objetos y dejarla vacía, se puede usar el método: y se desea agregar esta lista al final de la lista A. Entonces se list.clear( ) escribe: Por ejemplo, si se escribe: Con lo cual, si se pide que se muestre ahora la lista A, se La lista quedará vacía como se muestra al ejecutar el mostrará: [1, 'Ana', 1.2, 'B', 'Rojo', comando print(A) se mostrará: [ ]. Si se desea conocer 'verde', 'Azul']. Para copiar una lista se usa el la posición de un elemento dentro de una lista se puede método: ejecutar el método: list.copy(): list.index(elemento a buscar): por ejemplo, si se quiere copiar la lista A = [1, "Ana", Por ejemplo, si se desea saber en qué posición se 1.2,"B"] en una nueva lista C, entonces se escribe: encuentra el elemento Ana dentro de la lista A, entonces se escribe: Si se pide que se muestre C se mostrara: [1, "Ana", 1.2,"B"]. Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Entonces se mostrará en consola: 1. El uso del print Y se pide que se muestre la lista se obtendrá: ['Camila', es para que se muestre en consola, ya que el método 'B', 'Ana', 'Ana'], es decir se ordenara de mayor a devuelve el índice el cual puede ser asignado o menor o en orden descendente. Si se tratara de usar el mostrado según se requiera. Si se desea ordenar una comando con una lista de objetos no ordinales como, por lista de mayor a menor o en orden alfabético se usa el ejemplo: [1, 'Ana', 1.2, 'B', 'Rojo', 'verde', método: 'Azul'] se obtendrá una excepción, es decir un error: list.sort(reverse=False): not supported between instances of 'float' and 'str' Este método se aplica cuando se puede establecer un orden. Por ejemplo, en la lista A = [ "Camila", Finalmente, si se desea saber el número de elementos de una "Ana", "B", "Ana"] se puede usar de la siguiente lista se usa la función integrada: manera: Len(list): Por ejemplo, considere la lista: De este modo si se pide que se muestre la lista se verá: ['Ana', 'Ana', 'B', 'Camila']. Si por ase A= [1, 'Ana', 1.2, 'B', 'Rojo', 'verde', escribe: 'Azul'] Si se escribe: Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos saldrá en consola: 7, que es el número de elementos de la list.sort(reverse=False): ordena la lista de menor a lista. mayor Len(list): Devuelve el número de elementos de la A continuación, se presenta un breve resumen de los lista métodos mencionados. list.copy(): Copia la lista completa list.append(x): agrega el elemento x al final de la lista list.extend(iterable): agrega todos los nuevos En los próximos 5 ejercicios se usarán ejemplos simples y sin elementos al final de la lista contexto para ilustrar el uso de los métodos sobre listas. Cabe señalar que es especialmente difícil expresar en list.insert(posición , x): Inserta el nuevo elemento diagramas de flujo o pseudocódigo los métodos específicos en la posición indicada de un lenguaje, por lo que de ahora en adelante los list.remove(x): remueve el elemento de la lista pseudocódigos y los diagramas de flujo serán omitidos para los siguientes 5 ejercicios. list.pop(): remueve el último elemento de la lista list.clear( ): remueve todos los elementos de la lista Ejemplo 1. Elabore un algoritmo, e impleméntelo en list.index(x): indica la posición del elemento dentro Python, que forme una lista con 5 números enteros de la lista ingresados por el usuario y la imprima. list.count(x): Cuenta el número de apariciones del Solución. El código en Python seria: elemento en la lista Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Ejemplo 3. Elabore un algoritmo, e impleméntelo en Python, que tome las listas A = [5, 8, 15, 2, 21, 16, 20] y B = [5, 1, 19, 2, 4] y forme una nueva lista C, la cual debe ser la combinación de las dos, pero sin repetir elementos e imprimir la lista resultante. Solución. El código en Python seria: Ejemplo 2. Elabore un algoritmo, e impleméntelo en Python, que forme una lista con 5 números reales ingresados por el usuario e imprima cada elemento de la lista haciendo un salto de línea por cada elemento. Solución. El código en Python seria: Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Ejemplo 4. Elabore un algoritmo, e impleméntelo en Python, que elimine los números negativos de la lista A = [5, 8, -15, 2, -21, 16, 20] e imprima la lista resultante. Solución. El código en Python seria: En los siguientes ejemplos se usarán los diferentes métodos vistos sobre listas para solucionar problemas de aplicación y mostrar de forma breve la posible forma de Ejemplo 5. Elabore un algoritmo, e impleméntelo en trabajo con pseudocódigo y diagramas de flujo para Python, que elimine los elementos de las posiciones representar los arreglos unidimensionales. El lector notara impares de la lista A = [8, 26, 35, 6, 10, 41, 14] e imprima la la dificultad que ese presenta al tratar de representar los lista resultante. métodos específicos propios de las estructuras de datos en Solución. El código en Python seria: dichas herramientas y que en algunas ocasiones resulta imposible de hacerlo sin dar pie a ambigüedades. Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Siendo esta la principal razón del abandono de los El pseudocódigo sería: programadores del uso de estas herramientas en trabajos específicos. 1. Inicio 2. Desde I = 1 hasta I = 10 Ejemplo 6. Se requiere obtener en un arreglo de 10 Leer VA [I] elementos que el usuario ingrese para luego calcular la suma Fin desde de las cantidades contenidas. Realice el algoritmo y 3. Hacer SU = 0 represéntelo mediante el diagrama de flujo, el pseudocódigo 4. Desde I = 1 hasta I = 10 e impleméntelo en Python. Hacer SU = SU + VA [I] Solución. Con base en lo que se desea determinar, se puede Fin desde establecer que las variables requeridas para la solución del 5. Escribir SU problema son las mostradas en la tabla. 6. Fin Nombre de la Descripción Tipo Si se desea conservar el principio de que todo sistema tiene variable una entrada, un proceso y una salida, entonces el siguiente I Contador y subíndice Integer diagrama de flujo muestra el algoritmo correspondiente VA Nombre de la lista de valores float para la solución de este problema separando de forma SU Suma de los valores float evidente cada parte de la estructura de control. Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Como se puede ver en el algoritmo, se indica la entrada, el proceso y la salida de manera especial, dado que cuando se diseña un algoritmo para un sistema complejo, seguir la regla de manejar por separado las entradas, los procesos y las salidas permitirá que sea más fácil su mantenimiento, corrección y garantizara la escalabilidad, pero esto no quiere decir que no se puedan mezclar esos elementos, eso dependerá de las necesidades que se tenga. Por ejemplo, este mismo código se podría escribir de forma alternativa mezclando dichas partes de la siguiente forma. El código en Python es: 1. Inicio 2. Hacer SU = 0 3. Desde I = 1 hasta I = 10 Leer VA [I] Hacer SU = SU + VA [I] Fin desde 4. Escribir SU 5. Fin El diagrama de flujo seria: Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Ejemplo 7. Se requiere un algoritmo para obtener una lisita (C) de N elementos que contenga la suma de los elementos correspondientes de otras dos listas (A y B). Represéntelo en pseudocódigo e Impleméntelo en Python. Solución. La tabla muestra las variables que se requieren para plantear el algoritmo que permita solucionar este problema. Nombre de la Descripción Tipo variable I Contador y subíndice Integer El código en Python es: A,B,C Nombre de las listas float N Número de elementos de Integer cada arreglo Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos El seudocódigo es: 1. Inicio 2. Leer N 3. Desde I = 1 hasta I = N escribir A [I] = Leer cantidad lista uno escribir B [I] = Leer cantidad lista dos Fin desde 4. Desde I = 1 hasta I = N Hacer C[I] = A [I] + B [I] Fin desde 5. Desde I = 1 hasta I = N Ejercicio 8. Se tienen los nombres de los N alumnos de una Escribir C [I] escuela, además de su promedio general. Realice un Fin desde algoritmo para capturar esta información, la cual se debe 6. Fin almacenar un vector para el nombre y otro para el promedio, después de capturar la información se debe ordenar con base El código en Python es: en su promedio, de menor a mayor, los nombres deben corresponder con los promedios. Realice el algoritmo y represéntelo en el pseudocódigo mediante el diagrama de flujo. Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos 1. Inicio Solución. La tabla muestra las variables requeridas para 2. Leer A representar el algoritmo de solución de este problema. 3. Desde I = 1 hasta I = A Nombre de la Descripción Tipo Leer N [I], P [I] variable Fin desde I,J Contadores y subíndices Integer 4. Desde I = 1 hasta I = A P Listas de promedios float Desde J = 1 hasta J = A N Lista de nombres string Si P [J] > P [I] A Número de elementos de Integer Entonces cada arreglo Hacer PA = P [I] PA Variable auxiliar para float Hacer NA = N [I] promedio Hacer P [I] = P [J] NA Variable auxiliar de string Hacer N [I] = N [J] nombre de alumnos Hacer P [J] = PA El pseudocódigo es el que se muestra a continuación: Hacer N [J] = NA Fin compara Fin desde Fin desde 5. Desde I = 1 hasta I = A Escribir N [I], P [I] Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos El código en Python es: Fin desde 6. Fin El diagrama de flujo es: Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos Material complementario 4. Elabore un algoritmo que encuentre el mayor valor entre https://www.youtube.com/watch?v=xdCJa2QXmJ8&ab_channel=Programaci%C3%B3nATS un conjunto de números naturales contenidos en una lista. El https://www.youtube.com/watch?v=aF1tiL5A-iU&ab_channel=Programaci%C3%B3nATS https://www.youtube.com/watch?v=eXJ_vJq2ghA&ab_channel=SergioA.Casta%C3%B1oGiraldo algoritmo debe funcionar si se adicionan nuevos números a https://www.youtube.com/watch?v=VsSMC1A7_F0&ab_channel=Dimas la lista. 5. Un curso de fundamentos de programación tiene N Ejercicios trabajo independiente estudiantes con sus nombres y apellidos. Diseñe un 1. Hacer un algoritmo que ordene los elementos de la lista A programa que lea los datos y los almacene en listas. = [8, 26, 35, 6, 10, 41, 14] en forma ascendente y Finalmente, encuentre cual es el nombre más común y la descendente e imprima ambas listas resultantes. cantidad de ocurrencias, y cuál es el apellido más común y la Impleméntelo en Python. cantidad de ocurrencias. 2. Realice un algoritmo que lea una lista de seis elementos e 6. En una maratón los corredores van llegando a la meta, y intercambie las posiciones de sus elementos, de tal forma se va marcando el tiempo en minutos. Diseñe un programa que el primer elemento pase a ser el último y el último el que lea y almacene los tiempos de los corredores hasta que primero, el segundo el penúltimo y así sucesivamente, se ingrese 0. Finalmente, se imprima el ganador, y quienes finalmente imprima la lista. Impleméntelo en Python. quedaron por encima del tiempo límite 330 minutos. 3. Hacer un programa que forme una lista con N elementos, cuyos valores son números enteros e ingresados por el usuario, posteriormente, obtenga e imprima la suma y el promedio de los elementos ubicados en las posiciones pares de la lista. Santiago Gómez Narváez Fundamentos de programación: Estructuras de datos 7. Cierta empresa requiere controlar la existencia de diez productos, los cuales se almacenan en una lista A, mientras que los pedidos de los clientes de estos productos se almacenan en una lista B. Se requiere generar una tercera lista C con base en los anteriores que represente lo que se requiere comprar para mantener el stock de inventario, para esto se considera lo siguiente: si los valores correspondientes de las listas A y B son iguales se almacena este mismo valor, si el valor de B es mayor que el de A se almacena el doble de la diferencia entre B y A, si se da el caso de que A es mayor que B, se almacena B, que indica lo que se requiere comprar para mantener el stock de inventario. Realice el algoritmo y represéntelo mediante el pseudocódigo e impleméntelo en Python. Santiago Gómez Narváez

Use Quizgecko on...
Browser
Browser