¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Algoritmia
  3. Tablas y estructuras
Extrait - Algoritmia Técnicas fundamentales de programación – Ejemplos en Python (numerosos ejercicios corregidos) (Nueva edición)
Extractos del libro
Algoritmia Técnicas fundamentales de programación – Ejemplos en Python (numerosos ejercicios corregidos) (Nueva edición) Volver a la página de compra del libro

Tablas y estructuras

Introducción

Hasta ahora nos hemos ocupado de variables que no tienen ningún vínculo lógico entre sí. En este capítulo, vamos a ver cómo almacenar y manipular varios valores que están relacionados entre sí, para que podamos llevar aún más lejos nuestro pensamiento y, lo que es más importante, nuestros algoritmos y programas.

Las tablas

Imagine una lista de la compra sencilla: tiene que comprar doce huevos, mantequilla, una ensalada, dos tarrinas de fresas y tres tabletas de chocolate. Cada elemento de la lista es un producto que hay que comprar.

Con lo que hemos aprendido, su primer instinto sería crear una variable para cada producto:

PROGRAMA Lista_compra_var  
VAR  
   producto1 : CADENA  
   producto2 : CADENA  
   producto3 : CADENA  
   producto4 : CADENA  
   producto5 : CADENA  
   i : ENTERO  
INICIO  
      ESCRIBIR("Escribir un producto a comprar)  
      producto1 <- LEER()  
      ESCRIBIR("Escribir un producto a comprar)  
      producto2 <- LEER()  
   ...  
FIN 

Si necesita añadir un producto para comprar, tendrá que volver a escribir este algoritmo añadiendo una variable producto6 y el valor final del contador en la estructura iterativa PARA. De hecho, tendrá que reescribir este algoritmo cada vez que quiera añadir o quitar un producto.

Esta lógica es contraria a la lógica algorítmica: el algoritmo debe tener en cuenta el mayor número de casos posible para ser lo más genérico posible.

Para superar este problema, existe una estructura de datos especial que puede almacenar varios valores del mismo tipo: las tablas (también llamadas tablas o arrays). Con esta nueva estructura, también simplificará la introducción y manipulación de estos valores, al mismo tiempo que escribe un algoritmo más fácil de entender y mantener.

1. Tablas unidimensionales

Una tabla puede contener varios valores, con el único requisito de que sean del mismo tipo algorítmico. Las tablas se declaran al mismo tiempo que el resto de variables. Una tabla unidimensional representa una lista de valores. Una tabla bidimensional se puede ver como una hoja de cálculo...

Manipulación sencilla de tablas

1. Tablas unidimensionales

a. Recorrido

Para recorrer una tabla, necesitamos ir desde la primera celda de la fila hasta la última. Esto significa que tenemos que declarar un contador, y un contador significa estructuras iterativas PARA.

PROGRAMA Recorrer_tabla_una_dimension  
VAR  
   dias <- {"lunes", "martes", "miércoles", "jueves", "viernes", 
"sábado", "domingo"} : TABLA[1...7] : CADENA  
   i: ENTERO  
INICIO  
   PARA i DESDE 1 HASTA 7 CON INCREMENTO DE 1  
   HACER  
      ESCRIBIR("El día ",i," es ", dias[i])  
   FINPARA  
FIN 

Una tabla o array se recorre siempre con un bucle PARA donde el contador nos permite recuperar todos los valores de la tabla, porque también es igual al índice actual de la celda.

b. Buscar

Buscar un valor es una operación habitual en informática. Se realiza recorriendo una tabla. En cada celda de la tabla, comprobamos si el valor del elemento actual es igual al valor que buscamos.

PROGRAMA Buscar_tabla_una_dimension  
VAR  
   dias <- {"lunes", "martes", "miércoles", "jueves", "viernes",  
"sábado", "domingo"} : TABLA[1...7] : CADENA  
   dias_a_buscar : CADENA  
   i: ENTERO  
   encontrado <- FALSO : BULEANO  
INICIO  
   ESCRIBIR("Escribir el nombre del día a buscar")  
   dia_a_buscar <- LEER()  
   i DESDE 1 HASTA 7 CON INCREMENTO DE 1  
   HACER  
         SI dias[i] = dia_a_buscar  
      ENTONCES  
         encontrado <- VERDADERO  
      FINSI  
   FINPARA  ...

Estructuras y registros

1. Estructuras

Cuando modelamos nuestra lista de la compra con el algoritmo Lista_compra_tabla_dos_dimensiones, vemos que hay un problema con el tipo de datos. La cantidad está representada por una cadena y no por un entero, lo que no tiene sentido porque no podemos hacer ningún cálculo con esta cantidad, como decrementarla en 1, por ejemplo.

La ESTRUCTURA algorítmica nos permite corregir este problema: dentro de un tipo como éste, podemos relacionar diferentes variables de tipos distintos o no. La ESTRUCTURA sirve para enlazar variables en una misma variable. Estas variables se denominan campos de la estructura.

ESTRUCTURA nombre_estructura  
INICIO  
   campo1 : tipo1  
   campo2 : tipo2  
   ...  
FINESTRUCTURA 

La definición de la estructura se declara justo antes del PROGRAMA. Una variable de TIPO ESTRUCTURA se declara de la misma manera que las variables de otros tipos. A estas variables las llamamos registros.

VA  
   mi_registro : nombre_estructura 

Por lo tanto, podemos modelar nuestra lista de la compra con la siguiente ESTRUCTURA

 
ESTRUCTURA producto  
INICIO  
   nombre : CADENA  
   cantidad : ENTERO  
FINESTRUCTURA 

A diferencia de otros tipos de variables, las variables de tipo ESTRUCTURA no tienen que inicializar un único valor, sino todos los valores de todos sus campos....

Pongámoslo en práctica con Python

1. Tabla = lista

Las tablas en algoritmia se llaman listas en Python.

Una lista es una variable que contiene varias expresiones (o valores) que no son necesariamente del mismo tipo, a diferencia de en algoritmia. Por lo tanto, este principio respeta la tipificación dinámica del lenguaje.

Una lista es un tipo de dato mutable: puede cambiar de valor y de tamaño.

Una lista también tiene otra ventaja sobre un array: su tamaño es dinámico, por lo que no es necesario declararlo. Los índices también se gestionan automáticamente. 

En todos los lenguajes de programación, aparte de las implementaciones de SQL como TransactSQL, empezamos a contar desde 0. Por lo tanto, el primer elemento de una lista es el índice 0 (en la posición 0 de la lista) en Python.

Los índices en Python pueden ser positivos o negativos:

  • Positivos para pasar del primer elemento de una lista a los demás.

  • Negativos para empezar por el último elemento de la lista.

Así, si queremos acceder al último elemento de una lista, solicitaremos el elemento número "tamaño de la lista -1" para índices positivos, o simplemente el elemento con índice -1 para índices negativos.

Una lista se declara utilizando el operador de indexación [ ]. Si la lista está vacía, no ponemos nada entre los corchetes, en caso contrario añadimos la lista de expresiones separadas por comas. Se accede a los elementos de una lista de la misma forma que en algoritmia, utilizando el operador de indexación.

mi_lista_vacia = []  
mi_lista_tamanio_1 = ["soy el primer elemento de índice 0"]  
mi_lista_tamanio_n = [1, "dos", True, 3.14]  
print("Segundo elemento de la lista de tamaño n :",  
mi_lista_tamanio_n[1])#muestra Segundo elemento de la lista  
de tamaño n : dos 

Al igual que con los algoritmos, Python también permite crear tablas de n dimensiones, con una pareja de corchetes por dimensión.

board = []  
# Initializacion  
for line in range(3) :  
   board.append([])  
   for col in range(3) :  
      board[line].append(0)  
# Visualización  ...

Ejercicios

1. Ejercicio 1

Escriba un algoritmo que busque en una tabla de enteros los valores más grande y más pequeño de la misma. Codifique el script Python correspondiente.

2. Ejercicio 2

Escriba un algoritmo que busque en una tabla de enteros los índices de los valores mayor y menor de la tabla. Codifique el script Python correspondiente.

3. Ejercicio 3

Escriba un algoritmo que calcule la media de los valores de una tabla de enteros. Codifique el script Python correspondiente.

4. Ejercicio 4

Escriba un algoritmo que calcule el número de apariciones de un valor introducido por el usuario en una tabla de enteros (el número de veces que el valor aparece en la tabla). Codifique el script Python correspondiente.

5. Ejercicio 5

Escriba un algoritmo que invierta los elementos de un array sin utilizar un array intermedio. Codifique el script Python correspondiente.

6. Ejercicio 6

Escriba un algoritmo para representar un nivel en un juego. Cada nivel se compone de un tablero de juego (una tabla de diez por diez caracteres), una serie de objetos y un comodón. Un comodín tiene un nombre y puntos de salud como información.

7. Ejercicio 7

La bandera holandesa: la tabla de este algoritmo solo contiene los valores enteros 1, 2 y 3. Tiene que reordenar los valores de esta tabla de forma que los valores 1 vayan en primer lugar, seguido de los 2 y finalmente los 3. Por ejemplo, la siguiente tabla {3,2,1,2,3,1,1,3}...