Skip to content
Snippets Groups Projects
Commit d9e8ec65 authored by Gerardo Semprum's avatar Gerardo Semprum
Browse files

Notebook ejercicio 2

parent c0311dfd
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
### Ejercicio 2. Triángulo de Pascal.
#### Gerardo Semprúm.
#### Usuario de Mattermost: @semprumg
#### Universidad Central de Venezuela.
%% Cell type:markdown id: tags:
**Escriba una rutina en python que reciba como entrada un numero entero, n, e imprima los numeros en la n-esima fila del triangulo de pascal. El programa debe verificar si el número n es entero, o arrojar un mensaje informando que ha habido un error del usuario.**
%% Cell type:markdown id: tags:
Anexamos una primera solución que utilizará ciclos for, condicionales if y uso de listas para la resolución del problema.
Comenzando con probar si un número es entero o nó, ya que, el programa descrito necesita un número "n" que sea entero.
%% Cell type:markdown id: tags:
Para lo antes descrito utilizamos un try/except, una herramienta de python que permite que el programa intente una secuencia de codigo y si falla obtenga otro camino o salida.
%% Cell type:code id: tags:
``` python
n = input("Por favor ingresa tu número entero: ") #Entrada de un numero entero
try:
n = int(n) #El programa tratará de probar si el numero es entero
except:
print("Error de usuario: entrada no valida/número decimal")
#Si la condición no se cumple, se imprimirá el mensaje de arriba
```
%% Output
Por favor ingresa tu número entero: 4
%% Cell type:markdown id: tags:
Creamos una lista vacia llamada "pascal", en donde mediante el ciclo for podremos ir agregando los diferentes elementos en el rango de el "n" que introducimos en el paso anterior.
%% Cell type:code id: tags:
``` python
pascal = [] #Nuestra lista vacia de pascal
for i in range(n): #abrimos un ciclo que cuente sobre el rango de "n"
pascal.append([]) #Agregamos un elemento vacio a la lista de pascal
pascal[i].append(1) #Por cada elemneto "i" se agregará un "1" a la lista
#Creamos un segundo ciclo for, de donde, se tomaran elementos j desde "1" hasta "i"
for j in range (1,i):
pascal[i].append(pascal[i-1][j-1]+pascal[i-1][j])
#Para cada elemento i en pascal se agregará otro elemento el cual resulta entre
#diferentes operaciones entre "j" e "i"
if (n!=0): #Si n es diferente a 0 agregaremos un 1 a la lista pascal
pascal[i].append(1)
print(pascal[-1])
#Pedimos imprimir el ultimo termino de la lista con pascal[-1]
```
%% Output
[1, 3, 3, 1]
%% Cell type:markdown id: tags:
**Forma alternativa de resolver el ejercicio**
El triangulo de pascal es el resultado de hacer multiples combinatorias, por lo tanto:
%% Cell type:markdown id: tags:
Importamos la libreria math, de donde pedimos por un elemento m y j para realizar combinaciones de la forma:
$$C_(m,j) = \frac{m!}{j!(m-j)!}$$
%% Cell type:code id: tags:
``` python
import math #Llamamos a la libreria math
def comb(m,j): #Definimos nuestra funcion combinatoria
val = int((math.factorial(m))/(math.factorial(m-j)*math.factorial(j)))
#val sera la ecuación que contiene todas las operaciones factoriales
return val
#Pedimos que el programa retorne val para cerrar el ciclo de la función
```
%% Cell type:code id: tags:
``` python
m = input("Por favor ingresa tu número entero: ") #Entrada de un numero entero
try:
m = int(m) #El programa tratará de probar si el numero es entero
except:
print("Error de usuario: entrada no valida/número decimal")
#Si la condición no se cumple, se imprimirá el mensaje de arriba
pascal = []
for i in range(0,m+1):
pascal.append(comb(m,i))
print(pascal)
```
%% Output
Por favor ingresa tu número entero: 3
[1, 3, 3, 1]
%% Cell type:markdown id: tags:
**Nota importante:**
El primer codigo esta desfasado del segundo codigo en una unidad.
%% Cell type:markdown id: tags:
**Modificar la rutina anterior para que rebiba un número variable de argumentos:n1,n2,n3 y retorne
una lista cuyo primer elemento es una lista conteniendo los numeros en la final n1 del triangulo
de Pascal, el segundo elemento una lista con los numeros en la fila n2 y así sucesivamente.**
%% Cell type:markdown id: tags:
Para hacer un codigo más simple, usaremos nuestra función combinatoria, la re-definimos con respecto a "p" para que no haya problemas con la función combinatoria definida antes en el apartado anterior.
La función combinatoria fue explicada en el apartado anterior
%% Cell type:code id: tags:
``` python
import math
def comb1(p,j):
val = int((math.factorial(p))/(math.factorial(p-j)*math.factorial(j)))
return val
```
%% Cell type:markdown id: tags:
Definimos ahora una nueva función que sea una fila de pascal que pueda ser llamada con varios valores que, en este caso, llamamos p. No sabemos cuantos argumentos de entrada usaremos asi que usamos (*args) para darle a entender a la función que son argumentos separados por una coma.
Dentro de la nueva función de pascal, llamamos a nuestra función combinatoria y obtenemos el resultado deseado
%% Cell type:code id: tags:
``` python
def pascal_vars(*args): #Definimos nuestra función pascal_vars (pascal-variables)
for p in args: #Ciclo for que incluya todos los valores p contenidos en (*args)
try:
p = int(p) #El programa tratará de probar si el numero es entero
except:
print("Error de usuario: entrada no valida/número decimal")
#Si la condición no se cumple, se imprimirá el mensaje de arriba
pascal = [] #Creamos nuestra lista vacia pascal
for i in range(0,p+1): #Para cada elemento que vaya de 0 a p+1
pascal.append(comb1(p,i)) #agregamos dichos elementos a nuestra lista pascal con nuestra
#función combinatoria
print("La fila de pascal correspondiente a",p,"es:",pascal)
#Imprimimos un mensaje para el usuario que denota que numero se está usando y que fila del
#triangulo se obtiene.
```
%% Cell type:markdown id: tags:
Finalmente, llamamos a nuestra función con los argumentos deseados
%% Cell type:code id: tags:
``` python
pascal_vars(4,5,8,9)
```
%% Output
La fila de pascal correspondiente a 4 es: [1, 4, 6, 4, 1]
La fila de pascal correspondiente a 5 es: [1, 5, 10, 10, 5, 1]
La fila de pascal correspondiente a 8 es: [1, 8, 28, 56, 70, 56, 28, 8, 1]
La fila de pascal correspondiente a 9 es: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment