5.1 Funciones - Reusar algoritmos



1. Funciones en Programación

Cuando un algoritmo se usa de forma frecuente, en lugar de repetir las instrucciones cada vez que se necesitan, se pueden resumir y extraer en un bloque o sección dedicada independiente del resto denominada función.

funciones en programación estructura

Si cada algoritmo sigue la "estructura básica", la función es un bloque de procedimiento que se podrá reutilizar en cualquier otro problema y trabaja de forma "modular".

El bloque o función() se identifica con un nombre, que será el nombre de la función
y usa las variables de entrada (a) y variable de salida (z).

En programación estructurada, al cambiarse los bloques de entrada (input) y los bloques de salida (print), las instrucciones de entrada y salida se las mantiene dentro del programa principal que hace la llamada a las funciones.

La definición de una función en Python se escribe como:

def funcion(entrada):
    # intrucciones
    # detalladas de la funcion
    return(respuesta)

Definida la función se puede usar una o varias veces en un programa principal usando el nombre de la función junto a la variable de entrada.

funciones en programación dentro de algoritmo

El resultado de la función se asigna a una variable que es usada dentro del programa principal.

resultado = funcion(entrada)

Se pueden hacer tantas llamadas a la función como sean necesarias.

Las funciones se pueden realizar usando variables tipo escalar (enteras, reales), vectoriales o matriciales, tipo texto o cadena de caracteres, etc.

Las variables escalares se declaran como variables internas a la función, mientras que las variables vectoriales o matriciales tienen un alcance global.

Referencia: Rodríguez 6.1 p155, Van Rossum p19




2. Variables dentro de una función

Las variables dentro de una función se tratan como variables de un algoritmo aparte.Por lo que los nombres de las variables internas, no afectan a las variables del algoritmo principal.

Exceptuando el caso de Arreglos y listas que el paso es por "referencia" (o álias), pues se considera que si las matrices y vectores del problema son de gran tamaño, crear copias de cada una de ellas dentro de cada llamada a la función ocupa memoria que podría ser usada para otras tareas.



3. Estructura del Algoritmo con funciones creadas por usuario

Cuando el algoritmo tiene funciones básicas creadas por usted, y son relativamente "pequeñas", se incluyen dentro del bloque de inicio.

# INICIO
# Referencia del problema
import numpy as np
import random as np
# funciones creadas por usuario
def miprimerafuncion(variableentrada,otravariable):
    # algunas instrucciones
    return(respuesta)

# INGRESO
a = int(input(' un numero entero'))
b = float(input(' un numero real'))

# PROCEDIMIENTO
respuesta =  miprimerafuncion(a,b)

# SALIDA
print('alguna respuesta: ',respuesta)

Si las funciones son varias o siempre usa esas funciones las puede incluir en un archivo .py y llamarlas desde el archivo con el algoritmo principal. Detalles en el siguiente tema publicado.



4. Ejercicio - Buscar producto más económico

De compras en el mercado de víveres, se puede consultar en precio en varios puestos y decidir dónde comprar al final de un recorrido. Si el único factor a considerar es el precio, desde luego que compraremos en el local mas barato.

mercado víveres kioskos

Se obtiene la lista de precios por vendedor de 1 Kg de manzanas y se requiere determinar el local con el precio más barato y en qué posición se encuentra. Considere usar el índice local empezando en cero

local0123
precio2.253.002.102.50
precio = [2.25,3,2.10,2.50]

Al inicio y sin mas datos, se supone que el mejor precio lo ofrece el primer vendedor.  Siendo el tamaño del vector n=4

n = len(precio)
donde = 0

Sin embargo la decisión se debe tomar considerando los demás locales, por lo que se compara su precio con los demás. La comparación empieza con el siguiente en la lista.

local = donde + 1 
while local<n:
    if (precio[local]<precio[donde]):
        donde = local
    local = local + 1

¿Cuánto? es el precio menor, se obtiene al revisar el valor del vector en la posición de ¿donde?

cuanto = precio[donde]

Tarea: Algoritmo del mayor. ¿Qué pasaría si alguien nos pregunta dónde lo venden más caro? Analice los cambios en el algoritmo.



5. Algoritmo en Python

# algoritmo del menor

# INGRESO:
precio = [2.25,3,2.10,2.50]

# PROCEDIMIENTO
n = len(precio)
donde = 0
local = donde + 1 
while local<n:
    if (precio[local]<precio[donde]):
        donde = local
    local = local + 1

cuanto = precio[donde]

# SALIDA
print('El menor precio:')
print('donde:',donde)
print('cuanto:',cuanto)


6. Función en Python

El bloque de procedimiento  se convierte a una función denominada menor, con variable de entrada vector y variable de salida donde.

# algoritmo del menor
def menor_donde(vector):
    n = len(vector)
    donde = 0
    i = donde + 1 
    while i<n:
        if (vector[i]<vector[donde]):
            donde = i
        i = i + 1
    return(donde)

# INGRESO:
precio = [2.25,3,2.10,2.50]

# PROCEDIMIENTO
donde = menor_donde(precio)
cuanto = precio[donde]

# SALIDA
print('El menor precio:')
print('donde:',donde)
print('cuanto:',cuanto)


7. Ejercicios de mayor y menor

1Eva2003TI_T4 Lado mayor de un polígono

1Eva2008TII_T3 Tiempos de recorrido en metrovía

1Eva2007TI_T3 Elección de diputados provinciales

2Eva2003TI_T1 Funciones promedio, mayor y menor

3Eva2008TII_T3 Funciones más caro y más barato




Unidades FP