Programación estructurada
Temario
- ¿Qué es la Programación estructurada?
- ¿Cuáles son sus características?
- Buenas practicas de programación en este paradigma.
- ¿Qué Ventajas y Desventajas se tiene al usar este paradigma?
- Ejemplos
- 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?
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
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.
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.
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
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
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.
¿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
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.
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**
- 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 :)
- 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ú
- 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
- 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.
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
- Artículo
- Artículo-Progrmación-estructurada
- Artículo-Progrmación-estructurada
- Artículo-Progrmación-estructurada
- Artículo-Programación-estructurada
- HistoriaDeProgramacionEstructurada
- VideoProgramacionEstructura
- HistoriaDeLaprogramaciónEstructurada
- Video-De-Regesion-Lineal-Como-usarla
- Video-Que-es-la-regesion-lineal
- Buenas-Practicas-1
- Buenas-Practicas-2
- Video-Buenas-PracticasProgramación
- Ventajas-Desventajas-Programación-Estructurada
- cifrado-cesar