4.1.1 Vectores – Ejemplos

Ejemplo 1

Secuencia de Fibonacci

Ejercicio 12 de 3.3.3 Tarea-Lazos. http://blog.espol.edu.ec/ccpg1001/3-3-3-tarea-lazos/

El video de misterio de las matemáticas tiene una explicación interesante entre los tiempos 2:33 y 6:40 .

https://youtu.be/fyw11a4wDn8?t=233 .

La secuencia se desarrolla a partir de dos números: 1 y 1

El siguiente término se obtiene sumando los dos anteriores:

1 1 2 3 5 8 13 21 ...
a+b=c
  a+b=c
    a+b=c

El algoritmo primero se presenta en el diagrama de flujo para facilidad visual de los pasos.

Al requerir mostrar toda la secuencia, en lugar de un solo valor, aparece la necesidad de usar un vector.

Para éste caso usamos la librería numpy para obtener los siguientes resultados:

¿cuál término?: 8
término n-ésimo:  21
secuencia:  [ 1  1  2  3  5  8 13 21]
>>> 

Algoritmo en Python

Se modifican las intrucciones para añadir la secuencia en un vector:

# secuencia de fibonacci
# usando vectores
import numpy as np

# INGRESO
nesimo = int(input('¿cuál término?: '))

# PROCEDIMIENTO
a = 1
b = 1
terminos = 2
secuencia = np.zeros(nesimo,dtype = int)
secuencia[0] = 1
secuencia[1] = 1

while not(terminos>=nesimo):
    c = a+b
    secuencia[terminos] = c
    terminos = terminos+1
    a = b
    b = c
    
# SALIDA
print('término n-ésimo: ',c)
print('secuencia: ', secuencia)

Ejemplo 2

1Eva_IIT2015_T3 Vector de números primos

Primero desarrolle el algoritmo para un número cualquiera «n«.

Como hipótesis, inicie considerando que el número es primo, esprimo=1, luego pruebe con cada uno de los divisores en el intervalo entre 2 y (n-1).

La divisibilidad se revisa con el residuo entre el número n y los divisiores del intervalo [2,n-1].

Primero con divisor=2. El número 1 no cuenta pues todos los números son divisibles para 1.

Si el residuo calculado tuvo resultado cero, el número n no es primo, esprimo=0. Continua las pruebas con el siguiente divisor, divisor = divisor +1

Se revisa si se han probado con todos los números inferiores a n o que el resultado ya no es primo, esprimo=0.

Se muestran los resultados.

El esquema del ejemplo se muestra en el diagrama de flujo.

Algoritmo en Python

Convirtiendo las instrucciones de diagrama de flujo a instrucciones en Python:

# 1ra Evaluación II Término 2015. Tema 3
# numeros primos

# INGRESO
n = int(input('primo a revisar: '))

# PROCEDIMIENTO ES PRIMO
esprimo = 1

divisor = 2
while not(divisor>=(n-1) or esprimo==0):
    residuo = n%divisor
    if (residuo==0):
        esprimo=0
    divisor = divisor+1

# SALIDA
print('numero primo: ', esprimo)

Tarea

En una secuencia de números enteros, identifique cuales son números primos.

Reutilice el algoritmo anterior para almacenar cada resultado en un vector, indicando 1 si es primo y 0 si no lo es.

Luego de probar que el algoritmo funciona, realice un bloque de ingreso para la secuencia de prueba.

numeros prueba:  [ 2  3  4  5  6  7  8  9 10]
cumple esprimo:  [ 1  1  0  1  0  1  0  0  0]
>>> 
# 1ra Evaluación II Término 2015
# numeros primos
import numpy as np

# INGRESO
probar = np.array([2,3,4,5,6,7,8,9,10])

# PROCEDIMIENTO
tamano = len(probar)
cumple = np.ones(tamano, dtype=int)
posicion =  0
while not(posicion==tamano):
    n = probar[posicion]
    
    # PROCEDIMIENTO ES PRIMO
    esprimo = 1
    i = 2
    while not(i>=(n-1) or esprimo==0):
        r = n%i
        if (r==0):
            esprimo=0
        i = i+1
    
    cumple[posicion] = esprimo
    posicion = posicion+1

# SALIDA
print('numeros prueba: ', probar)
print('cumple esprimo: ', cumple)

4.1 Vectores – Arreglos de una dimensión

Al disponer de varios de datos de igual tipo pero que están relacionados, se tiene la necesidad de manejar los datos como un conjunto. Ejemplo: una lista de calificaciones de una lección o las edades de los estudiantes.

estudiante edad[estudiante]
1 17
2 21
3 19

El conjunto de datos se maneja como un “arreglo” que tiene las siguientes características:

  • Todos los datos son de igual tipo (enteros, reales, lógicos, etc.)
  • Se conoce su “tamaño”, es decir la cantidad de elementos en el arreglo.
  • El arreglo se identifica por medio del nombre del conjunto ordenado de datos.
  • Cada elemento se identifica por una variable índice que da su posición.
edad = \begin{pmatrix} 17\\21\\19 \end{pmatrix}

En éste ejemplo se puede observar que:

  • todos los datos de las edades son tipo entero, int
  • el tamaño o cantidad de estudiantes es n=3 en el arreglo
  • los datos corresponden a la “edad”, nombre del arreglo
  • mediante su posición en la lista i, se identifica al estudiante. El estudiante 2, i=2, la edad es edad[2]=21.

Otro ejemplo , temperaturas por día. Los datos son tipo Real, float:

día 1 2 3 4
temperatura[día] 28.6 24.9 26.5 25.1

Tamaño n=2, temperatura[2]=24.9

Para éste caso, el arreglo contiene las mediciones de temperatura en varios días, para éste caso es de 4 días, por lo que el arreglo es de tamaño 4. Todos los datos son números reales, si se quiere conocer la temperatura de un día específico se usa la variable índice día, con lo que se obtiene el valor de 24.9.


Arreglos en algoritmos

 

Los arreglos en algoritmos se manejan como vectores y matrices en álgebra. Python dispone de la libreria Numpy para manejo de arreglos, por lo que en el bloque de inicio se requiere pedir la librería «numpy» con el álias «np».

import numpy as np

En el caso que se usen arreglos, los bloques de ingreso deben reflejar las acciones para llenar los datos.

Bloque de Ingreso

La primera pregunta para llenar una lista de temperaturas es conocer cuántos se encuentran registrados. Por lo que primero se preguntará el tamaño n del arreglo .

El ingreso de datos es de forma ordenada, por lo que se inicia el índice para solicitar el valor del primero de la lista.  Por ejemplo:
día=1,

Luego se solicita el ingreso de la temperatura de cada día: temperatura[día] .

Se continúa el siguiente índice , sumándole uno, para repetir la operación hasta completar el ingreso de todos los datos.

Se repite el procedimiento para cada elemento del arreglo «temperatura«.

Indices en arreglos

Los índices en arreglos se manejan de forma semejante a un vector en álgebra. Sin embargo, la numeración de casillas empieza en cero.

i 0 1 2 3
día 1 2 3 4
temperatura[día] 28.6 24.9 26.5 25.1

Por lo que el día 2, tiene índice 1. El índice está en el arreglo desplazado en una posición.

import numpy as np
temperatura = np.array([28.6, 24.9, 26.5, 25.1])

>>> temperatura[2]
26.5
>>> temperatura[1]
24.9
>>> 
>>> len(temperatura)
4
>>> 

Asunto para recordar cuando se realicen las operaciones en el arreglo.

Bloque de procedimiento

Al manejar el conjunto de datos ordenado se puede realizar los cálculos individualmente sobre cada elemento. O se puede manejar el conjunto con las reglas de vectores o matrices.

Por ejemplo, promediar la temperaturas, requiere sumar todas las temperaturas y dividirlas para la cantidad de datos (tamaño)

# PROCEDIMIENTO
promedio = np.sum(temperatura)/n

Bloque de Salida

Para la presentación de datos, cuando se dicta o se muestra uno por uno,  se procede de forma semejante al bloque de ingreso.

En algunos lenguajes estructurados, existen formas de presentar todo el conjunto mediante una sola instrucción.

# temperaturas promedio
import numpy as np

# INGRESO
n = int(input('cuántos días: '))

temperatura = np.zeros(n,dtype=float)
dia = 0
while not(dia>=n):
    temperatura[dia] = float(input('t: '))
    dia = dia + 1

# PROCEDIMIENTO
promedio = np.sum(temperatura)/n

# SALIDA
print('promedio t: ',promedio)
print(temperatura)

que al ejecutar el algoritmo obtenemos

cuántos días: 4
t: 28.6
t: 24.9
t: 26.5
t: 25.1
promedio t:  26.275
[28.6 24.9 26.5 25.1]
>>> 

4.4 Listas como conjuntos

Se recomienda revisar antes los ejercicios de Vectores y Matrices (Arreglos Numpy) antes de continuar con éste tema.


Para el manejo combinado de palabras y números, varias palabras, varias frases, se usa el concepto de Listas.

Las listas operan como un conjunto de datos de diferente tipo: cadenas junto a texto, conteniendo subconjunto de listas con diferentes dimensiones.

Una «lista» de datos como un vector es, por ejemplo, la lista del curso con los nombres de los participantes:

>>> lista = ['Juan','María','Pedro']
>>> lista
['Juan', 'María', 'Pedro']
>>> len(lista)
3
>>> 

Añadir elementos: Append()

Luego ‘Ana’ decide registrarse en el curso, y debe añadirse su nombre a la lista del curso. La instrucción para añadir elementos en la lista es append() que es semejante a la instrucción de concatenar elemantos a un vector o una cadena.

>>> registrar = 'Ana'
>>> listacurso.append(registrar)
>>> listacurso
['Juan', 'María', 'Pedro', 'Ana']
>>> 

Revisar Elemento en Conjunto

Siguiendo con el ejemplo anterior, para revisar si ‘Pedro’ y ‘Carlos’ se encuentra en la lista del curso. Si está en la lista, para identificar la posición o índice donde se encuentra, se usa la instruccion .index().

>>> 'Pedro' in listacurso
True
>>> 'Carlos' in listacurso
False
>>> donde = listacurso.index('Pedro')
>>> donde
2

Listas desde cadenas

Una frase se puede dividir en palabras, en referencia a un solo caracter:

>>> frase = 'El saber no ocupa lugar'
>>> palabras = frase.split()
>>> palabras
['El', 'saber', 'no', 'ocupa', 'lugar']
>>> 

Listas de Listas

Las listas pueden agrupar otras listas, las notas individuales de cada estudiante se escribirían:

>>> califica = [['Juan',9],['María',10],['Pedro',6],['Ana',8]]
>>> califica
[['Juan', 9], ['María', 10], ['Pedro', 6], ['Ana', 8]]
>>> califica[2]
['Pedro', 6]
>>> califica[2][0]
'Pedro'
>>> califica[2][1]
6
>>> 

Note que en listas cuando se usa más de un índice, se usan corchetes independientes para cada índice.