Algoritmos Universidad Externado






Algoritmos

Carlos Isaac Zainea Maya

Universidad Externado de Colombia


Un algoritmo es un conjunto de instrucciones ordenadas que permiten solucionar un problema, procesar datos, realizar cálculos, evaluar una hipótesis, entre otros. Aparecen constantemente en nuestra vida cotidiana y sin darnos cuenta muchos de los problemas de nuestro día a día se solucionan con un algoritmo.

En términos de programación, un algoritmo es una secuencia de pasos lógicos que permiten solucionar un problema de computación.

Por ejemplo, queremos que la máquina calcule nuestra nota final a partir de las notas de los diferentes cortes. Tendriamos que indicarle a la máquina que haga lo siguiente:

  1. Reciba la nota del corte 1, asociele la variable $N1$.
  2. Reciba la nota del corte 2, asociele la variable $N2$.
  3. Reciba la nota del corte 3, asociele la variable $N3$.
  4. Reciba la nota del Proyecto final, asociele la variable $PF$.
  5. Calcule $NF=0.25*N1+0.25*N2+0.25*N3+0.25*PF$
  6. Muestre la nota final $NF$
    1. Si la nota $NF$ es mayor o igual que 3.0 el estudiante pasa.
    2. Si la nota $NF$ es menor que 3.0 el estudiante pierde.

Claro, aquí asumimos que todos los cortes valen un 25%.

Para ingresar esta rutina en la maquina hacemos lo siguiente:

In [ ]:
N1=input("Nota corte 1: ") #Paso 1
N2=input("Nota corte 2: ") #Paso 2
N3=input("Nota corte 3: ") #Paso 3
PF=input("Nota Proyecto: ") #Paso 4

N1,N2,N3,PF=float(N1),float(N2),float(N3),float(PF)

NF=0.25*N1+0.25*N2+0.25*N3+0.25*PF #Paso 5

print("Su nota es",NF) # Paso 6

if NF>=3:
    print("¡Has pasado!") # Paso 6A
else:
    print("¡Has perdido!") # Paso 6B

Nota: Si al hacer el cálculo usted no ingresa los valores adecuadamente la máquina esperará valores que no se pueden ingresar, reinicie el Kernel en este caso.

Ejercicio

De acuerdo al algoritmo descrito y la implementación en la entrada anterior explique que hacen las funciones:

input()

float()

No dude en consultar en un buscador.

Origami

El origami o papiroflexia es un arte que consiste en el plegado de papel sin usar tijeras ni pegamento para obtener figuras de formas variadas. La particularidad de esta técnica es la transformación del papel en formas de distintos tamaños partiendo de una base inicial cuadrada o rectangular que pueden ir desde sencillos modelos hasta plegados de gran complejidad. Los escultores expertos en origami generan algoritmos para transforma una sencilla hoja en dichas figuras. Veremos que tan complicado resulta para nosotros expresar ese conocimiento, al terminar explicaremos diferentes aspectos fundamentales de los algoritmos.

Actividad

  1. Organicence en grupos de 3 personas.
  2. Con sus compañeros escojan una figura de origami a realizar.
  3. En una hoja de papel escriba los pasos necesarios para realizar dicha figura (10 minutos).
  4. Lea, únicamente lea, a sus compañeros las instrucciones escritas para crear dicha figura.

Responda

1.¿Lograron sus compañeros hacer la figura requerida?

2.¿Reconoce las dificultades que llevaron a sus compañeros a tener o no tener éxito en la creación de la figura en Origami?

  1. Defina la noción de algoritmo a partir de su experiencia.
  1. Vea el siguiente video y explique la diferencia de las experiencias:

RANA

Conclusión

Los algoritmos deben ser precisos en su lenguaje y mantener un orden lógico de realización, debe ser libre de ambigüedades y garantizar siempre el mismo resultado, no puede tener un número inalcanzable de pasos y llegar a la solción del problema cuando se termine.

Para generar un algoritmo es necesario que:

  • Expresemos el problema en un lenguaje adecuado para la ejecución de pasos, es decir, reconocer el problema en un contexto coherente con las herramientas que vamos a usar para su solución.

  • Establecer un objetivo que permita medir la solución del problema.

  • Realizar pruebas al algoritmo para verificar los resultados.

Pythonmezzo (Un intermezzo de Python)

Python cuenta con una cantidad innumerable de aportes de toda la comunidad dispuestos en archivos (modulos) guardados en algunas carpetas (paquetes). Un elemento importante de estos aportes son las funciones y las clases, de hecho, en una cantidad significativa de ejemplos los desarrolladores buscan una función o clases para apoyar sus creaciones.

En este cuaderno estudiaremos ese componente fundamental de varios bloques de código, las funciones y conversaremos acerca de la instalación, inspección y carga de paquetes.

Funciones

Las funciones son bloques de código en la cuál la máquina espera uno o varios argumentos de entrada. De acuerdo con lo que recibe, se ejecutan unos pasos y finalmente se produce un argumento de salida.

La estructura para definirlas es la siguiente:

def nombre_de_la_funcion(ENTRADA):
Pasos a realizar
return SALIDA

Hay una lista de funciones construidas en Python. En este link, se encuentra un manual de todas las funciones básicas de Python.

Veamos algunas de ellas:

Ejemplo 1 Funciones predefinidas en Python.

abs()

In [ ]:
print(abs(10))
abs(10)==abs(-10)

eval()

In [ ]:
x = 1
eval('x**2')

map()

In [ ]:
x=map(len, ['apple', 'blueberry', 'cherry']) 
list(x)

reversed

In [ ]:
x=[1,2,3]
y=reversed(x)
list(y)
In [ ]:
x="CursoPython"
y=reversed(x)
z=list(y)
print(z)
In [ ]:
y="".join(z)
x=reversed(y)
z=list(x)
z="".join(z)
print(z)
In [ ]:
"Cuaderno Python".count("n")
In [ ]:
"Cuaderno Python".index("a")
In [ ]:
Z="Cuaderno de Python hecho en jupyter".split()
Z
In [ ]:
"20%".join(Z)
In [ ]:
"Carta".replace("a","o")
In [ ]:
"Canción".replace("ó","o")

print() y format

In [ ]:
"Hola {0}, tu saldo es {1:.3f}".format("Juan",321.43212)
In [ ]:
N=input("Tu nombre ")
S=input("Tu saldo ")
S=float(S)
if S>200000:
    print("Hola {name}, tu saldo es {saldo:.2f}, afortunadamente {name} viviras otra semana y se te dará un premio.".format(name=N,saldo=S))
else:
    print("Hola {name}, tu saldo es {saldo:.2f}, recuerda {name} que hay que ahorrar.".format(name=N,saldo=S))
In [ ]:
print("Hola {0}, tu saldo es {1:9.3f}".format("Pedro",320000.2))
In [ ]:
# integer arguments
print("El número es:{:d}".format(123))

# float arguments
print("El número con dos decimales:{:.2f}".format(123.4567898))

# octal, binary and hexadecimal format
print("bin: {0:b}, oct: {0:o}, hex: {0:x}".format(12))

#exp notation, % notation
print("Exp Notation: {0:.2e},% Notation: {0:.1%}".format(0.12))
In [ ]:
txt = "The universe is {:,} years old."
print(txt.format(13800000000))
In [ ]:
Nombres=["Juan","Pedro","Carlos"]
Saldos=[100,200,300]

N=input("Nombre")
ind=Nombres.index(N)

print("Hola {name}, tu saldo es {saldo:.2f}.".format(name=Nombres[ind],saldo=Saldos[ind]))

min(), max(), sum()

In [ ]:
print(min(range(10)))
print(max(range(10)))
print(sum(range(10)))

Ejemplo 2 También podemos crear funciones, el siguiente código define una función que recibe un texto y en su parte final pone lo que mide:

In [ ]:
def cuantomide(texto):
    n=len(texto)
    print(texto, "tiene",n,"caracteres")
    return n
In [ ]:
cuantomide("Universidad Externado")+10

Veamos que dice acerca de la frase "Curso de Python Básico":

In [ ]:
cuantomide("Curso de Python Básico")

Observe que la salida de la función corresponde a la cantidad de caracteres, la frase hace parte de lo que ejecuta la función (en este caso print) sin embargo no aporta al resultado.

Algunas funciones útiles:

In [ ]:
 edades = [5, 12, 17, 18, 24, 32]

def soyadulto(x):
  if x < 18:
    return False
  else:
    return True

adultos = filter(soyadulto, edades)

for x in adultos:
  print(x) 
In [ ]:
def sumar5ydividirpor10(x):
    y=(x+5)/10
    return y
In [ ]:
sumar5ydividirpor10(14)

Conversión de unidades

Usaremos la noción de algoritmo para hacer unos primeros programas enfocados en la conversión de unidades, un proceso que consiste en la transformación de unidades de medida de valores numéricos que expresan una magnitud física.

Por ejemplo, sabemos que 1 metro corresponde a 100 cms, así cada vez que tengamos una medida $m$ en metros, sabemos que es igual a la $100\times m$ centímentros. Así:

Conversiones
8 metros son 800 centímetros
3.5 metros son 350 centímetros
1.1 metros son 110 centímetros
0.76 metros son 76 centímetros

Usando print() e input() hagamos un conversor de metros a centímetros:

In [ ]:
M=input("Ingrese la medida en metros ")#recibe a medida en metros
M=float(M) #Convierte el texto en número, así podemos hacer cálculos con M
CM=100*M #Convierte los metros en centímetros usando el factor de conversión.
print(M,"metros equivalen a ",CM,"centímetros")

Este apenas es un ejemplo de conversión en medidas de longitud, si consideramos todas las unidades de medida de longitud tenemos:

Unidad Abreviatura Valor
kilómetro km 1000 m
hectómetro hm 100 m
decámetro dam 10 m
metro m 1 m
decímetro dm 0.1 m
centímetro cm 0.01 m
milímetro mm 0.001 m
micrómetro µm 0,000 001 metros
nanómetro nm 0,000 000 001 metros

En el sistema inglés tenemos más medidas:

Unidad Abreviatura Valor
1 milla mill 1600 metros
1 pulgada in 0.0254 metros
1 pie ft 0.3048 metros
1 yarda yd 0.914 centímetros

Hagamos una rutina para pasar medidas conociendo esta tabla, observe que resulta un poco más complicada que la anterior, pues para lo que sigue debemos escribir una frase que muestre la equivalencia entre unidades de medida. Por ejemplo, si queremos escribir '1 metro equivale a 100 centímetros'.

Empecemos con ese algoritmo:

Problema Tenemos que ingresar los nombres de las unidades comparadas y los valores que componen una frase de la forma:

[valor 1] [unidad 1] equivale a [valor 2] [unidad  2]

Solución

Paso 1: Indicamos que queremos escribir

[valor 1] [unidad 1] equivale a [valor 2] [unidad 2]

Paso 2: solicitamos el nombre de la primera unidad
Paso 3: solicitamos el nombre del valor 1 y lo convertimos en número
Paso 4: solicitamos el nombre de la segunda unidad
Paso 5: solicitamos el nombre del valor 2 y lo convertimos en número
Paso 6: confirmamos que la frase está bien escrita

In [ ]:
#### Indicamos lo que queremos escribir 
print("Escribiremos un frase para establecer la relación entre dos unidades de medida")
print("Será de la forma:")
print("[valor 1] [unidad 1] equivale a [valor 2] [unidad 2]" )

#####
N1=input("Nombre de la primera unidad de medida ")# Ingresemos el nombre de la primera unidad de medida
V1=input("Ingrese el valor 1:")# Ingresamos el valor 1
V1=float(V1)# Lo convertimos en número
N2=input("Nombre de la segunda unidad de medida ")# Ingresemos el nombre de la segunda unidad de medida
V2=input("Ingrese el valor 2:")# Ingresamos el valor 2
V2=float(V2)# Lo convertimos en número

###Confirmación
print(V1,N1,"equivale a ",V2,N2)
C=input("¿La frase es correcta? Sí(s) No(n)")
if C=='s':
    print("Podemos continuar")
else:
    print("Se ha cometido un error")

Después de establecer la referencia haremos la conversión. Preguntamos si quiere hacer una conversión de la unidad 1 a la unidad 2 o viceversa.

Hagamos un análisis de como generar la conversión:

Si $V1$ [Unidad 1] equivale a $V2$ [Unidad 2] y queremos pasar de la primera unidad a la segunda unidad, el factor de conversión es:

$$FC_{U1\rightarrow U2}=\cfrac{V2}{V1}$$

En caso opuesto, el factor de conversión es:

$$FC_{U2\rightarrow U1}=\cfrac{V1}{V2}$$

El algoritmo a usar es el siguiente:

Problema Con la referencia:

[valor 1] [unidad 1] equivale a [valor 2] [unidad  2]

convertir unidades como quiera el usuario

Solución

Paso 1: Preguntamos como quiere la conversión si de Unidad 1 a Unidad 2, o Unidad 2 a Unidad 1.
Paso 2: Preguntamos cuantas unidades quiere convertir, lo llamamos $VP$.
Paso 3: si se escoge Unidad 1 a Unidad 2 hacer lo siguiente:
$$VR=VP\cdot\cfrac{V2}{V1}$$ Imprimimos $VP$ [Unidad 1] equivale a $VR$ [Unidad 2] Paso 4: si se escoge Unidad 2 a Unidad 1 hacer lo siguiente:
$$VR=VP\cdot\cfrac{V1}{V2}$$ Imprimimos $VP$ [Unidad 2] equivale a $VR$ [Unidad 1]

In [ ]:
caso=input("Si quiere pasar de "+N1+" a "+N2+ " digite 1, en caso contrario digite 2")
if caso=='1':
    VP=input("Cuantas unidades quiere convertir de "+N1+" a "+N2)
    VP=float(VP)
    VR=VP*V2/V1
    print(VP,N1, " equivale a ",VR, N2)
elif  caso=='2':
    VP=input("Cuantas unidades quiere convertir de "+N2+" a "+N1)
    VP=float(VP)
    VR=VP*V1/V2
    print(VP,N2, " equivale a ",VR, N1)

Esta última rutina la podemos definir como una función de programación, la sintaxis es

def nombrefunc(ENTRADA):
    rutina

    return SALIDA

Observe que se requiere indentar.

In [3]:
def cambiodemedida(N1,N2,V1,V2):
    caso=input("Si quiere pasar de "+N1+" a "+N2+ " digite 1, en caso contrario digite 2")
    if caso=='1':
        VP=input("Cuantas unidades quiere convertir de "+N1+" a "+N2)
        VP=float(VP)
        VR=VP*V2/V1
        print(VP,N1, " equivale a ",VR, N2)
    elif  caso=='2':
        VP=input("Cuantas unidades quiere convertir de "+N2+" a "+N1)
        VP=float(VP)
        VR=VP*V1/V2
        print(VP,N2, " equivale a ",VR, N1)
    return

Unimos la rutina en una sola celda:

In [4]:
#### Indicamos lo que queremos escribir 
print("Escribiremos un frase para establecer la relación entre dos unidades de medida")
print("Será de la forma:")
print("[valor 1] [unidad 1] equivale a [valor 2] [unidad 2]" )

#####
N1=input("Nombre de la primera unidad de medida ")# Ingresemos el nombre de la primera unidad de medida
V1=input("Ingrese el valor 1:")# Ingresamos el valor 1
V1=float(V1)# Lo convertimos en número
N2=input("Nombre de la segunda unidad de medida ")# Ingresemos el nombre de la segunda unidad de medida
V2=input("Ingrese el valor 2:")# Ingresamos el valor 2
V2=float(V2)# Lo convertimos en número

###Confirmación
print(V1,N1,"equivale a ",V2,N2)
C=input("¿La frase es correcta? Sí(s) No(n)")
if C=='s':
    print("Podemos continuar")
    cambiodemedida(N1,N2,V1,V2)
else:
    print("Se ha cometido un error")   
    
Escribiremos un frase para establecer la relación entre dos unidades de medida
Será de la forma:
[valor 1] [unidad 1] equivale a [valor 2] [unidad 2]
Nombre de la primera unidad de medida milla
Ingrese el valor 1:1
Nombre de la segunda unidad de medida metros
Ingrese el valor 2:1600
1.0 milla equivale a  1600.0 metros
¿La frase es correcta? Sí(s) No(n)s
Podemos continuar
Si quiere pasar de milla a metros digite 1, en caso contrario digite 21
Cuantas unidades quiere convertir de milla a metros2.53
2.53 milla  equivale a  4047.9999999999995 metros

Este inocente ejercicio nos permite cambiar cualquier tipo de unidades, por ejemplo el 26 de Julio de 2020 el valor del dólar en colombia era de 3,691.20 pesos. Usemos el ejercicio para saber a que equivale, en dólares, un millon de pesos.

In [5]:
#### Indicamos lo que queremos escribir 
print("Escribiremos un frase para establecer la relación entre dos unidades de medida")
print("Será de la forma:")
print("[valor 1] [unidad 1] equivale a [valor 2] [unidad 2]" )

#####
N1=input("Nombre de la primera unidad de medida ")# Ingresemos el nombre de la primera unidad de medida
V1=input("Ingrese el valor 1:")# Ingresamos el valor 1
V1=float(V1)# Lo convertimos en número
N2=input("Nombre de la segunda unidad de medida ")# Ingresemos el nombre de la segunda unidad de medida
V2=input("Ingrese el valor 2:")# Ingresamos el valor 2
V2=float(V2)# Lo convertimos en número

###Confirmación
print(V1,N1,"equivale a ",V2,N2)
C=input("¿La frase es correcta? Sí(s) No(n)")
if C=='s':
    print("Podemos continuar")
    cambiodemedida(N1,N2,V1,V2)
else:
    print("Se ha cometido un error")  
Escribiremos un frase para establecer la relación entre dos unidades de medida
Será de la forma:
[valor 1] [unidad 1] equivale a [valor 2] [unidad 2]
Nombre de la primera unidad de medida dólares
Ingrese el valor 1:1
Nombre de la segunda unidad de medida pesos
Ingrese el valor 2:3691.20
1.0 dólares equivale a  3691.2 pesos
¿La frase es correcta? Sí(s) No(n)s
Podemos continuar
Si quiere pasar de dólares a pesos digite 1, en caso contrario digite 22
Cuantas unidades quiere convertir de pesos a dólares1000000
1000000.0 pesos  equivale a  270.91460771564806 dólares

Hojas de cálculo

Quizás ya conocemos programas como Microsoft Word, Libre Officce Writer o Google Docs. De hecho, seguro alguno de estos programas fue un acompañante constante para entregar buenas y bonitas tareas a nuestros profesores en la secundaria. Sin embargo, al lado de estos programas identificábamos a los hermanitos rudos y complicados que constan de un montón de celdas y que nos dicen sirven para hacer cálculos. Estos programas se conocen como las hojas de cálculo de las suite ofimáticas. Las hojas de cálculo son programas que permiten introducir diversos datos para operarlos de manera estructurada.

Hoy en día es una herramienta fundamental en cualquier empresa, negocio o institución; lo que hace que en toda empresa se requiera personal con habilidades suficientes para manejar una hoja de este tipo. Veremos en esta sección algunos requisitos básicos para emplear este software.

Celdas

La celda de una hoja de cálculo corresponde al espacio o lugar en el cual se puede introducir un dato o una fórmula. Se identifican con un nombre según su ubicación, como por ejemplo D6; D es el nombre de la columna y 6 el de la fila en el que está ubicada la celda. Usualmente, las filas son horizontales y están identificadas por los números en secuencia ascendente. Las columnas, en cambio, están identificadas con las letras del alfabeto y van creciendo de forma vertical, al terminar el alfabeto se continua poniendo letras adicionales.

Para tener en cuenta - Variable vs Constante

En las hojas de cálculo podemos poner datos constantes sobre un celda, sin embargo, debido a que en la práctica es muy común hacer operaciones repetitivas es común considerar fórmulas para hacer algunos cálculos. En las fórmulas que se escriben en una celda podemos poner dos tipos de expresiones:

  • Valores constantes y
  • el nombre de la celda que nos interesa.

Claramente, al poner el nombre de una celda el resultado de cálculo cambiara cada vez que cambiemos la celda que se mencionó dentro de la fórmula.

Operar sobre las celdas

Sobre las hojas de cálculo podemos hacer cualquier operación aritmética elemental: suma, resta, multiplicación y división. Es muy importante reconocer la jerarquía de las operaciones y usar de manera muy cuidadosa los paréntesis. Cada operación que se define sobre una hoja de cálculo se efectúa con las reglas que vimos aquí, es muy importante ayudarse de los paréntesis para determinar el valor deseado.

Todas las subexpresiones entre paréntesis se evalúan primero. Las subexpresiones con paréntesis anidados se evalúan desde el centro hacia los extremos.

Dentro de una expresión, los operadores se evalúan de la siguiente manera:

  • Se analiza la expresión de izquierda a derecha respetando el Orden de Prioridad “natural” de operación.
  • Si en la expresión existen paréntesis, lo que se encuentra dentro de estos se evalúan de izquierda a derecha según orden de prioridad de los mismos.
  • Si en la expresión se encuentran más de un par de paréntesis, la evaluación se realiza comenzando con el paréntesis que se encuentra más a la izquierda en la expresión hasta llegar al par de paréntesis que se encuentra más a la derecha de la expresión.

Algunas funciones elementales de una hoja de cálculo

SUMA: Si tuviésemos que sumar 1000 datos tendríamos que emplear el símbolo ''+'' 999 veces. La función más básica de la hoja de cálculo es SUMA. Se aplica usando la expresión =SUMA(A1:A1000) y, en este caso, sumaría todas las celdas desde A1 hasta A1000. Si escribimos =SUMA(A1,A1000) solo sumaríamos A1 con A1000. Si en alguna de estas celdas no hay un número sino un texto por ejemplo, el programa identificará el error y no calculará nada.

Entre los paréntesis puedes incluir números, celdas individuales o intervalos de celda. Por ejemplo, =SUMA(5;C1:C5) sumaría todo de C1 a C5 y a su vez sumarle 5.

ALEATORIO y ALEATORIO.ENTRE La sintaxis de la función ALEATORIO no posee argumentos y genera un valor aleatorio entre 0 y 1. Sin embargo, si quisiéramos un valor aleatorio entre a y b utilizamos =ALEATORIO.ENTRE(inferior,superior).

CONTAR Esta función se utiliza para contar los números en el rango seleccionado, omitiendo las celdas vacías y las que contienen datos no numéricos. Escribimos =CONTAR(RANGO).

PROMEDIO La función promedio devuelve la media aritmética que se calcula sumando un grupo de números y dividiendo el resultado por la cantidad de dichos números. =PROMEDIO(A5:A100) calcula el promedio de los valores entre A5 y A100.

MAX y MIN La función =MAX(RANGO) devuelve el máximo valor del rango seleccionado así mismo, =MIN(RANGO) devuelve el valor mínimo.

Lógica básica y unas sencillas aplicaciones

Otras funciones elementales en la hoja de cálculo son las condicionales, dada una condición se hace un calculo según la prueba lógica. Es decir, si el criterio se satisface se da un valor, si no se da otro valor. La primera función d e ese tipo es SI, veamos:

SI La función SI en una hoja de cálculo evalúa una prueba lógica y devuelve un valor de acuerdo al resultado obtenido de dicha prueba. Para poder utilizar correctamente la función SI es necesario saber utilizar correctamente los operadores de comparación (>) ''mayor que'', (<) ''menor que'' ,(>=) ''mayor o igual que'' , (<=) ''menor o igual que'', (=) ''igual'' y (<>) "distinto''.La función SI tiene tres argumentos y solo el primero de ellos es obligatorio:

=SI(prueba_lógica, [valor_si_verdadero], [valor_si_falso])

prueba_lógica: La comparación a realizar.

valor_si_verdadero: Valor a regresar si la prueba lógica es verdadera.

valor_si_falso (opcional): Valor a regresar si la prueba lógica es falsa.