View on GitHub

estrucuturado

Programación estructurada

Temario

  1. ¿Qué es la Programación estructurada?
  2. ¿Cuáles son sus características?
  3. Buenas practicas de programación en este paradigma.
  4. ¿Qué Ventajas y Desventajas se tiene al usar este paradigma?
  5. Ejemplos
  6. Ejercicios

¿Qué es la prgramación estructurada?

Este paradigma de programación es de los más antiguos que existen, pero en si ¿Qué es la progrmación estructurada? definiciónProgramacion

Ahora con esta definición tal vez nuesta primera inquietud sea a que nos referimos con que nuestro código este en un orden jerárquico ordenJerarquico

Como podemos observar en esta imagen al momento de realizar nuestras funciones tienen que estar en un orden que se le de arriba hacia abajo.

Ahora veamos como se haría este código en python

#Ejemplo calculadora
#Primero creamos las funciones

def suma(a,b):
    """
    Funcion que recibe 2 enteros y los suma
    devuelve un entero
    """
    return a+b

def resta(a,b):
    """
    Funcion que recibe 2 enteros y los resta
    Devuelve un entero
    """
    return a-b

def multiplicacion(a,b):
    """
    Funcion que recibe 2 enteros y los multiplica
    devuelve un entero
    """
    return a*b

def divicion(a,b):
    """
    Funcion que recibe 2 numeros flotantes y lo divide
    devuelve un flotante
    """
    return a/b

if __name__ == "__main__":    
    """
    Funcion donde declaramos todos y se
    muestra lo que vamos a ejecutar
    """
    print ("1 suma")
    print ("2 resta")
    print ("3 Multiplica")
    print ("4 Divide")

    x= input("escribe un  numero")
    x= int(x)

    if (x==1):    
        a=input("Escibe el primer numero")
        a=int(a)
        b=input("Escibe el segundo numero")
        b=int(b)
        print (suma(a,b))

    elif (x==2):
        a=input("Escibe el primer numero")
        a=int(a)
        b=input("Escibe el segundo numero")
        b=int(b)
        print (resta(a,b))

    elif (x==3):
        a=input("Escibe el primer numero")
        a=int(a)
        b=input("Escibe el segundo numero")
        b=int(b)
        print (multiplicacion(a,b))

    elif (x==4):
        a=input("Escibe el primer numero")
        a=float(a)
        b=input("Escibe el segundo numero")
        b=float(b)
        print (divicion(a,b))


Ahora estudiemos el código y veamos la estructura que tiene en general que tiene un programa en este paradigma.

MuestraCalculadora1

En esta parte mostramos las funciones que se crearón para poder ejecutar el programa, junto con los comentarios los comentarios a un que la computadora no los necesita es muy importante para que los demás programadores entendamos lo que se quiere realizar.

MuestraCalculadora2

En la segunda parte mostramos como se ve la parte que se va a ejecutar en la consola, junto con algunas reeglas que se deben seguir al usar este paradigmas, a continuación veremos las características de este paradigma.

Caracteristicas

CaracteristicasDelPrograma

Pero en python ¿cómo cumplimos con estas caracteristicas?

Fácil recordemos las sentencias que tenemos en python e intentemos asignarlas a su respectivo bloques4

EstructuraPython

Pero, en la calculadora no utilizamos ciclos for por lo que uno podría pensar que este programa, de una calculadora no esta utilizando el paradigma estruturado.

Lo cierto es que si estamos usando el paradigma estructurado, pero no lo estamos usando completo por lo cual tenemos limitaciones.

De hecho un buen ejercicio para empezar a programar es hacer esta misma calculadora solo con la diferencia de que el menú se muestre varias veces hasta que se oprima un boton y pare como por ejemplo oprimir el número 5 y parar el programa.

Hint utiliza un while.

Ahora siguiendo estos pasos veamos un ejemplo practico, creando un programa que nos ayude a calcular el valor aproximado de una recta, utilizando un método estadistico conocido como Regesión Lineal

##Regesion Lineal (Solo funciona con enteros)
##Programa Ejemplo

##creación de las funciones


def asignacionPuntos(cantidad_puntos):
    """
    Funcion que nos permite crear una lista con numeros
    Recibe un numero n donde n va ha ser la longitud de la lista que
    queremos devolver
    Devuelve una lista con numeros
    """
    listaPuntos=[]
    x=0
    contador=0
    while (contador < cantidad_puntos):
            x=input("Escriba el valor de n (solo enteros)")
            x= int (x)
            listaPuntos.append(x)
            contador+=1
    return listaPuntos

def sumaLista(lista):
    """
    Funcion que me permitira sumar todos los elementos
    de una lista    
    """
    contador=0
    for i in lista:
        contador+=i
    return contador

def productoCuadrado(lista):
    """
    Metodo que eleva todos los elemtos de la lista al cuadrado
    """
    vectorFinal=[]
    contador=0
    while contador < len(lista):
        i=lista[contador]*lista[contador]
        vectorFinal.append(i)
        contador+=1
    return vectorFinal

def productoVector(vector1,vector2):
    """
    Funcion que permite multiplicar entrada a
    entrada 2 listas de numeros
    """
    contador=0
    vectorFinal=[]
    while contador < len(vector1):
        vectorFinal.append( vector1[contador]*vector2[contador])
        contador+=1
    return vectorFinal

def pedienteX(x,y):
    """
    Metodo auxiliar que nos permite tener la "a" de la ecuacion de la recta
    en la cual pedimos x & y donde x & y son lista de puntos.  
    """
    n=len(x)
    productoxy=productoVector(x,y)
    sumaProdxy=sumaLista(productoxy)
    sumax=sumaLista(x)
    sumay=sumaLista(y)
    productoSxSy=sumax*sumay
    xCuadrado=productoCuadrado(x)
    sumaXCuadrado=sumaLista(xCuadrado)
    numeradorA=(n*sumaProdxy)-(sumax * sumay)
    denominadorA=(n*sumaXCuadrado)-sumax**2
    return numeradorA/denominadorA

def intercepcion(x,y):
    sumay=sumaLista(y)
    a=pedienteX(x,y)
    sumax=sumaLista(x)
    n=len(x)
    b=sumay-(a*sumax)
    return b/len(x)  

def regrecionLineal(x,y):
    lf=[]
    a=pedienteX(x,y)
    b=intercepcion(x,y)
    lf.append(a)
    lf.append(b)
    print("La mejor aproximacion es a los valores dados son")
    print("y = " + str(a) + "x + " + str(b))
    return lf

if __name__ == "__main__":    

    print("Cuantos puntos va a tener la tabla")
    cantidad=input()
    cantidad=int(cantidad)
    print ("Asigne los valor de x")
    fx=asignacionPuntos(cantidad)
    print("Ahora asigne los valores de y")
    fy=asignacionPuntos(cantidad)
    print("Los valores de que  se registraron son")
    print ("Valores de X " + str (fx))
    print ("Valores de Y " + str (fy))
    print("")
    print("")
    regrecionLineal(fx,fy)

Por lo que vimos hemos creado un programa que nos evita hacer los tediosos cálculos que se requieren hacer para el método de regresión lineal (Si no conoce este método se sugiere ver el video 9) y 10 ) que viene en las fuentes), sin embargo este código puede tener sus detalles.

Aunque respete las reglas de la programación que se dictan en el paradigma estructurado, tendremos que tener encuentra otros convenios que, nos ayuden a mejorar nuestra forma de programar, utilizando Buenas practicas de programación.

Para Finalizar un buen ejercicio para que sigan practicando es sacar la Correlación Lineal ya que se pueden vasar en estas funciones para crearla, el proceso para crear esta función se encuentra en el número 10 de las fuentes.

Buenas practicas de programación

Primero antes de nada ¿Qué son las buenas practicas de progrmación?, son reglas opcionales que nos permiten hacer nuestra vida como programadores más faciles.

Buenas-Practicas

¿Pero a qué nos refermios con incluir el main?

Se ignifica utilizar la siguiente palabra reservada

if __name__ == “__main__“

¿Porqué debemos usar esta palabra reservada?, cuando trabajamos en python con el paradigma estructurado, esa palabra reservada nos esta diciendo que a partir de esa línea de código vamos a dejar de crear funciones y vamos a empezar a utilizar las funciones previamente definidas para crear nuestro programa.

A continuación mostraremos 2 cogidos que harán los mismo uno seguirá las buenas practicas de programación y otro que no lo respete y veremos si hay diferencia en seguir las reglas o no.

##Codigo sin usar las buenas practicas de programación

def algo(noSe):
    if noSe<2:
        return False

    elif noSe==2:
        return True
    else:
        for secreto in range(2,noSe):
            if noSe%secreto== 0:
                return False
        return True

XD= int(input("Escribe algo "))
lolol=algo(XD)
print(lolol)
##Codigo que sigue las buenas practicas de Programación

def esPrimo(numero):
    """
    Funcion que nos dice si un numero es primo o no
    recibe un numero entero
    devulve True en caso de que si sea o false en otro caso
    """
    if (numero<2):
        return False
    elif(numero==2):
        return True
    else:
        for i in range(2,numero):
            if numero%i==0:
                return False
        return True

if __name__== "__main__":
    posiblePrimo=int(input("Escribe un numero entero "))
    print(esPrimo(posiblePrimo))    

Por lo que podemos ver ambos Programas están diseñados para poder buscar número enteros, sin embargo vemos que el código 2 es más legible que el código uno.

Cabe aclarar que en programas pequeños tal vez se pueda seguir el primer código que escribimos, pero tenemos que tomar encuentra que aveces nuestro programas pueden tener un mayor número de lineas de los ejemplos aquí hemos mostrado.

A continuación mostraremos las ventajas y desventajas de usar un paradigma como este.

Ventajas Y Desventajas del paradigma estructurado

VentajaYDesventaja

Estas son las principales ventajas y desventajas que posee este paradigma, en la siguiente sección veremos unos ejemplos de programas sencillos para que vean como se utiliza este paradigma en python creando código duro y tendido además de que en la ultima sección se dejaran ejercicios para que puedas poner en practica los conceptos teóricos aquí mostrados.

Antes de finalizar esta sección mostraremos algunos Lenguajes de programación que usan este paradigma por si les gusta mucho este paradigma puedan practicar sus habilidades en un lenjuge orientado a este paradigma.

LenguajeParadigma

Ejemplos

Empecemos con un programa sencillo, crearemos un programa que contenga formulas geometricas :)

##Codigo que nos permite sacar

def perimetroCuadrado(lado):
    """
    Funcion que nos permite obtener, el perimetro de un
    cuadrado
    recive un numero
    regresa un numero
    """
    return lado*4

def areaCuadrado(lado):
    """
    Funcion nos permite obtener el area de un cuadrado
    parametero un numero
    regresa un numero
    """
    return lado**2

def perimetroTriangulo(lado):
    """
    Funcion que nos permite obtener el perimetro de un triangulo
    parametro un numero
    regresa un numero
    """
    return lado+lado+lado

def areaTriangulo(base,altura):
    """
    Funcion que nos permite obtener el area de un triangulo
    parametro base un numero, altura numero
    regresa un numero
    """
    return (base*altura)/2

def perimetroRectangulo(altura,base):
    """
    Funcion que permite obtener el perimetro de un rectangulo
    parametro altura un numero, base un numero
    regresa un numero
    """
    a=altura*2
    b=base*2
    return a+b

def areaRectangulo(base,altura):
    """
    Funcion que permite obtener area de un rectangulo
    parametro altura un numero, base un numero
    regresa un numero
    """
    return base*altura



if __name__ == "__main__":

    print("calcula")
    print (perimetroCuadrado(3))

Ejemplo 2 Maquina que entrega cambio

Ahora haremos un programa que nos permita entregar cambio, esto podría servir para una maquiná de estacionamiento, es dada un cantidad de dinero, nuestro programa tendrá que devolver cambio en monedas de 1,2,5,10 pesos.

def maquinaCambio(precio,billete):
    """
    funcion que te recibe 2 enteros,positivos
    y devuelve una lista de números con el cambio
    de monedas que se tiene  
    """
    diferenicia=precio-billete
    listaFinal=[]
    while(diferenicia!=0):

        if diferenicia%10 == 0:
            diferenicia-=10
            listaFinal.append(10)

        elif(diferenicia%5==0):
            diferenicia-=5
            listaFinal.append(5)

        elif(diferenicia%2==0):
            diferenicia-=2
            listaFinal.append(2)

        elif(diferenicia%1==0):
            diferenicia-=1
            listaFinal.append(1)

    return listaFinal


if __name__=="__main__":
    precio=input("cuanto se va a cobrar")
    precio=int(precio)
    billete=input("Cuanto dinero nos dio")
    billete=int(billete)
    print ("Su Cambio se puede ver  como")
    print(maquinaCambio(precio,billete))

Ejemplo 3 Cifrado de cesar

El cifrado de cesar es un cifrado que utilizaba julio cesar, para comunicarse con sus generales lo que hacía era ponerse de acuerdo cuantas posiciones se iba a modificar el alfabeto (julio cesar lo hacía unicamente 3 posiciones), y las modificaba.

Por ejemplo la palabra, con un desplasamiento de 3 , su cifrado sería KROD por que H esta a 3 posiciones de la K,R trespocisones de la O y así sucesivamente.

Para entenderlo mejor se sugiere revisar el video 15 de las fuentes . Hagamos el programa

#cifrado de Cesar

def cesar(mensaje,k):
    """
    Funcion que me permite desplasarme k posiciones, por
    el abecedario para  poder cifrar mensajes
    @param mensaje String
    @param k int
    return String
    """
    abecedario="abcdefghijklmnñopqrstuvwxyz"
    cifrado=""

    for  i in mensaje:
        if i in abecedario:
            cifrado+=abecedario[abecedario.index(i)+k%(len(abecedario))]
        else:
            cifrado+=i
    return cifrado

if __name__ == '__main__':
    mensaje=input("Escribe aqui tu mensaje ")
    mensaje=mensaje.lower()
    k=input("Escribe la cantidad de posiciones que quieren que se mueva " )
    k=int(k)
    print(cesar(mensaje,k))

**Ejercicios**
  1. Codigo 1 (Figuras geometricas) , a) Crea las siguientes funciones, perimetro rombo, area del rombo , perimetro y area del circulo y finalmente perimetro y area del trapecio.

b) Crea un menú interactivo para que el usuario pueda interacturar.

c) Diviertete :)

  1. Codigo desde 0

Crea un programa que te permita hacer las siguientes acciones

a) Conversión de peso a dolar b) Conversión de dolar a peso c) Conversión de grados celcius a Farenhei d) Convertir de yardas a metros e) Convertir de pulgadas a centimetros f) Crea un menú

  1. Mejorando la maquina de cambio

a) Has algo para que si al cliente no le alcanza el dinero tu programa le diga que no le alcanza y le diga cuanto dinero le falta

b) Controla que el cliente no pueda pasarte números negativos es decir que no te pueda pagar con -10 pesos o algo parcido

c) Has que te de un mensaje al empezar el programa

  1. Haciendo Cifrados

a) Has un programa que descifre el cifrado de cesar b)Has un programa que cifre y descifre el cifrado de rieles

Cifrado de rieles

Este cifrado , tambien es conocido por como un cifrado de transposición.

En este tipo de cifrado se acomodan los caracteres del texto original en rieles, ignorando los blancos, caracteres especiales y digitos como se muestra en la siguiente imagen.

cifrado Rieles

Se escribe el texto a cifrar que se encuentra en la primera línea y se distribuye en cada uno de los rieles, eliminando espacios en blanco y caracteres especiales.

Al final se pegan los rieles y eso corresponde al texto cifrado. Los caracteres alfabéticos se van acomodando en rieles, en este caso tres: el primer caracter en el primer riel, el segundo en el segundo, el tercero en el tercero, el cuarto en el primer riel y así sucesivamente, como se muestra en la segunda línea de la imagen ## Fuentes

  1. Artículo
  2. Artículo-Progrmación-estructurada
  3. Artículo-Progrmación-estructurada
  4. Artículo-Progrmación-estructurada
  5. Artículo-Programación-estructurada
  6. HistoriaDeProgramacionEstructurada
  7. VideoProgramacionEstructura
  8. HistoriaDeLaprogramaciónEstructurada
  9. Video-De-Regesion-Lineal-Como-usarla
  10. Video-Que-es-la-regesion-lineal
  11. Buenas-Practicas-1
  12. Buenas-Practicas-2
  13. Video-Buenas-PracticasProgramación
  14. Ventajas-Desventajas-Programación-Estructurada
  15. cifrado-cesar