2.1 Tipos de datos numéricos

Referencia: Van Rossum 3.2 p9, Rodriguez 5.6.1 p58, Downey 2.1

ESCALARES

Las variables numéricas simples, o de un solo elemento utilizadas en un algoritmo se clasificarán en enteras y reales.

Variables tipo entero

Es el tipo de variable usada para contar el número de estudiantes presentes en un aula de clases, pasajeros en un bus, barco o avión. Indican la cantidad de elementos: una manzana, cuatro manzanas en un canasto, etc.

La única forma de variable posible a utilizar en estos casos es la tipo entera.

Tipo de datos enteros: int()

>>> a = int(input('escriba un entero: '))
>>> b = 5
>>> c = a*b
>>> type(a)
<class 'int'>

Variables tipo real

Este tipo de variable se usa para escribir por ejemplo el precio de un producto que incluye los centavos, el peso se producto en Kg, el número π.

En estos casos, al escribir con decimales, se los considera como variable tipo real. Ejemplos: $9.99, $89.32, 1.268Kg, 3.1416

Tipo de datos reales: float()

>>> g = float(input('escriba un real')
>>> valor = 3.1415927
>>> type(valor)
<class 'float'>

Tipo de datos complejos: complex(,)

>>> w=complex(1,.5)
>>> w
(1+0.5j)
>>> type(w)
<class 'complex'>
>>> w.real
1.0
>>> w.imag
0.5
>>> w.conjugate()
(1-0.5j)

Variables tipo Booleana

Se usan en lógica matemática como valor verdadero 1 y falso 0.

Tienen aplicaciones como en asistencia a clases:
presente=0, presente=1,
y pueden sustituir símbolos como √ para asistencia y X para una ausencia.

>>> tarea = True
>>> leccion = False
>>> aprender = tarea and leccion
>>> aprender
False
>>> asiste = tarea or leccion
>>> asiste
True
>>> esperanza = not(leccion)
>>> esperanza
True
>>> examen = 1
>>> leccion = 1
>>> tarea = 0
>>> aprendizaje = leccion and tarea
>>> aprendizaje
0
>>> estudia = leccion or tarea
>>> estudia
1
>>> aprueba = examen and leccion and tarea
>>> aprueba
0

Para el desarrollo de algoritmos se describirán solo estos tipos numéricos como grupos principales. Para el caso de lenguajes de programación se definirán otros subtipos: entero, entero largo, real, real doble, etc.


VECTORIALES Y MATRICIALES

Usados por ejemplo para tabular la cantidad e manazanas en los arboles de un huerto como control de producción por árbol.

La fila de un huerto es el vector, cada árbol es el índice del vector, la cantidad de manzanas producidas es el valor de cada casilla del vector.

huerto
árbol 1 2 3
manzanas 15 18 17

tamano del vector=3

ARREGLOS

Arreglos de una dimensión o vectores, requieren importar numpy. Las librerias numpy incoporan muchas operaciones de vectores y matrices usadas en otros cursos como algebra lineal (http://blog.espol.edu.ec/matg1003/)

Vectores – Arreglos de una dimensión

Por ejemplo: las notas de 1ra, 2da y 3ra evaluación se pueden escribir en un vector.

vector = \begin{pmatrix}7.2 \\ 8.4 \\ 9.23\end{pmatrix}
>>> import numpy as np
>>> vector = np.array([7.2, 8.4, 9.23])
>>> type(vector)
<class 'numpy.ndarray'>

los vectores pueden contener escalares de tipo entero, real o complejo, como se usan en matemáticas.

Matrices – Arreglos de dos dimensiones

matriz = \begin{pmatrix}1.2 && 2.45 && 5.3 \\ 0.3 && 1.75 && 4.89\end{pmatrix}

matrices requieren importar numpy

>>> matriz=numpy.array([[1.2, 2.45, 5.3],
                        [0.3, 1.75, 4.89]])
>>> type(matriz)
<class 'numpy.ndarray'>
>>> matriz
array([[ 1.2 , 2.45, 5.3 ],
       [ 0.3 , 1.75, 4.89]])

las matrices de igual manera pueden contener valores de de tipo entero, real o complejo, etc. acorde al problema a realizar.


LISTAS

Otra forma de escribir vectores y matrices es usar listas.
Para uso de matemáticas, cálculo numérico o algebra se recomienda usar arreglos, pues las librerías (numpy) están optimizadas para el uso de arreglos.

Ejemplo de un vector como lista:

>>> vector = [1,4,2,1]
>>> type(vector)
<class 'list'>

Ejemplo de una matriz como lista:

>>> matriz = [[1,2,3,4],
              [5,6,7,8]]
>>> type(matriz)
<class 'list'>
>>> matriz[0][2]
3
>>>

En el caso de vectores y matrices numéricos es preferible usar arreglos por la disponibilidad de operaciones numéricas, algebraicas disponibles en la libreria Numpy.

2.5 Manejo de texto, cadenas de caracteres

Referencia: Van Rossum 3.1.2 p11, Rodriguez 5.6.1 p59, Downey 2.9

El manejo de texto en computadoras, se conoce con el nombre técnico de «cadenas de caracteres».

Una letra del alfabeto, un número, un signo de puntuación, en general: todos los símbolos que están disponibles en el teclado del computador son un dibujo a ser presentado o usado en una pantalla, impresora, etc.

Cada dibujo se numera para su identificación y cada dibujo se lo conoce como «caracter» o en idioma inglés «character».

La tabla «caracteres y su número de identificación estandarizado se concoce como Tabla de códigos ASCII (American Standard Code for Information Interchange).

Par visualizar el concepto, por ejemplo se obtiene el código ASCII de un caracter:

>>ord('a')
97

El proceso contrario para obtener el caracter de un código ASCII es:

>>chr(97)
'a'

Los símbolos o caracteres se agrupan para formar palabras, frases, párrafos, por lo que internamente se convierten en vectores numéricos de los dibujos o símbolos. A esta agrupación se la conoce como «cadenas» o «strings».

La agrupación de caracteres se conoce como «concatenar». En Python se usa el símbolo «+» para denotar concatenación.

Ejemplo:

>>> a = 'Hola'
>>> b = '¿que tal?'
>>> c =  a+b
>>> c
'Hola¿que tal?'

La operación c = a+b debe leerse como: c almacena a concatenado con b. Diferenciando la acción de las operaciones matemáticas de igualdad y suma.

2.4 Algoritmo – Secuencia de Fibonacci

Referencia: Van Rossum 3.2 p16, Rodriguez 6.10.1 p176, Downey 18.4

El misterio de las matemáticas. Video NOVA

Observar desde el minuto 3:50 hasta 6:40

  1. Describa la secuencia de Fibonacci en un párrafo.
  2. ¿Puede programar la secuencia de Fibonacci? usando operaciones básicas
  3. Describa las operaciones en Python y compruebe sus resultados.

2.3 Contadores y Acumuladores

Referencia: Rodriguez 3.3.1 p24, Van Rossum 9.3.3 p73,  Downey 22.9

Asignación de valores

En algoritmos se usan las expresiones de asignación para denotar la intención de resolver operaciones y cuyo resultado se almacena en una variable simple, por lo que se expresan de la forma:

c ← a + b
d ← x2 + y2

Debe observar que las asignaciones no son expresiones de igualdad, como las usadas en matemáticas, por lo que su símbolo corresponde a una flecha que apunta el sentido donde se almacena el resultado.


Contadores

Al visitar el departamento de servicio al cliente en una empresa, los clientes deben tomar un ticket para obtener un turno. Existe un letrero electrónico que indica el número del cliente que se está atendiendo, cuando éste número cambia incrementándose en 1 para anunciar el siguiente turno a ser atendido.

Con el ejemplo, se observan notar ciertas características de contadores:

  • Siempre tienen un valor inicial
  • Su valor nuevo es el resultado del valor anterior más una constante.

Al inicio del día, el contador debe ser inicializado, de preferencia con 0, cuando un puesto de atención está listo para atención, el contador se incrementa en uno, suena una alerta, y se procede a atender al primer turno.

Las características descritas para forma algorítmica se escriben como:

contador ← 0
contador ← contador + 1

La expresión del literal b se puede leer como: «valor nuevo” de acumulador se le asigna el «valor anterior» de acumulador sumado al valor de 1″

Desde luego que los contadores puede sumarse un valor diferente a 1, pero siempre será un valor constante; también pueden tener cambios de forma ascendente, o disminuir desde un valor inicial.

Un contador decreciente se encuentra en un cronometro, por ejemplo del microondas, en el que el valor inicial son los segundos que permanecerá encendido. El contador de tiempo disminuye en uno cada segundo y al llegar a 0 se apaga el microondas.

Ejemplo en Python:

>>> contador = 0
>>> contador = contador + 1
>>> contador
1

Acumuladores

Una versión ampliada de contadores es la llamada acumuladores, tienen las mismas características que un contador excepto el valor de incremento que es un valor variable.

Una cuenta de ahorros puede representarse en un algoritmo mediante un acumulador, pues el ahorrista no siempre podrá ahorrar una cantidad fija en la cuenta, un día deposita 10, otro día deposita 30, otro deposita 5.

Con el ejemplo de ahorro, se puede determinar que en el acumulador no siempre se añade un valor positivo, pues cuando se hace un retiro, se puede interpretar como que el valor añadido es negativo.

Las características descritas para forma algorítmica se escriben como:

acumulador ← 0
acumulador ← acumulador + X

La expresión del literal b se para una cuenta puede leer como: «saldo nuevo” de acumulador es el «saldo anterior» de acumulador considerando el deposito (+x) o retiro (-x).

Recordar que:

El concepto de asignar se usado en algoritmos “=” carece de sentido matemático.

Si tomamos como ejemplo el acumulador, si se expresa como una igualdad, se interpretaría como:

acumulador = acumulador + X
acumulador - acumulador = X
0 = X

Cuando en el algoritmo se quiere expresar en realidad es una asignación, por lo que se utiliza el símbolo “←”

acumulador ← acumulador + X

Esta aclaración permite formalizar la diferencia de comparación de igualdad “=” usada dentro de los condicionales.

Ejemplo en Python:

>>> acumulador = 0
>>> acumulador = acumulador + 4.5
>>> acumulador
4.5
>>> acumulador = acumulador - 1.3
>>> acumulador
3.2

2.2 Operaciones básicas

Referencia: Rodriguez 5.6.3 p59, Van Rossum 10.6 p85,  Downey 2.6

Algunas operaciones numéricas básicas para usar en los primeros ejercicios.

Cociente ó división entera

>>> a = 5
>>> b = 2
>>> c = a//b    
>>> c
2

Cinco manzanas para dos envases de desayunos

Residuo

>>> a = 5
>>> b = 2
>>> c = a%b
>>> c
1

Exponente a^b

>>> c = a**b
>>> c    
25

Raiz cuadrada \sqrt{a^2 + b^2}

>>> import math
>>> c = math.sqrt((a**2) + (b**2))
>>> c
5.385164807134504

Operaciones Lógicas

Operación Python
y p and q
o p or q

Suponga que p es verdadero y q es falso

>>> p = 1
>>> q = 0
>>> p and q
0
>>> p or q
1

Aleatorio entero

>>> import random as rnd
>>> dado = int(rnd.random()*6) +1
>>> dado
4