Skip to content
Snippets Groups Projects
Commit 9ddce697 authored by Luis Leon's avatar Luis Leon
Browse files

segundo ejercicio

parent dcc26a45
No related branches found
No related tags found
No related merge requests found
source diff could not be displayed: it is too large. Options to address this: view the blob.
%% Cell type:markdown id: tags:
# Triángulo de Pascal
%% Cell type:markdown id: tags:
## Parte 1
Escriba una rutina en Python que reciba como entrada un número entero, n, e imprima los números en la n-ésima fila del triángulo de Pascal.
El programa debe verificar si el númerones entero, o arrojar un mensaje informando que ha habido un error del usuario en casocontrario.
%% Cell type:code id: tags:
``` python
print('¿Que fila del triángulo de Pascal desea conocer?')
```
%% Output
¿Que fila del triángulo de Pascal desea conocer?
%% Cell type:code id: tags:
``` python
n = input()
```
%% Output
5
%% Cell type:markdown id: tags:
La construcción del triángulo está relacionada con los coeficientes binomiales según la fórmula [combinatoria](https://es.wikipedia.org/wiki/Combinatoria). Esta fórmula explica que los coeficientes (nodos del "árbol") de una fila dada del triángulo, se pueden calcular con la fórmula combinatoria de combinaciones de $n$ elementos de $k$ en $k$; expresado matemáticamente: $\tbinom n k$, dónde $n$ es la ''fila - 1'' y $k$ la posición en la fila.
%% Cell type:markdown id: tags:
#### Función que genera los valores de las combinatorias
%% Cell type:code id: tags:
``` python
def binomial(n,k):
"""
Calcula la combinatoria de n en k
"""
if k > n-k: k = n-k # Simetría de la combinatoria
accum = 1
for i in range(1,k+1):
accum *= (n - (k - i))
accum /= i
accum = int(accum) # Lo vuelve integer
return accum
```
%% Cell type:markdown id: tags:
#### Función que entrega la fila desea
%% Cell type:code id: tags:
``` python
def ej2(num):
"""
Entrega la enésima fila
del triángulo de Pascal
"""
num = int(num) #la entrada debe ser entero, en caso de ser decimal usa la parte entera
fila = [] # Lista vacía
for i in range(num):
fila.append(binomial(num-1,i)) # se va añadiendo cada término de combinatoria de la enesima fila
return print(fila)
```
%% Cell type:code id: tags:
``` python
print("La fila deseada es:")
ej2(n)
```
%% Output
La fila deseada es:
[1, 4, 6, 4, 1]
%% Cell type:markdown id: tags:
## Parte 2
Modifique la rutina anterior para que reciba un número variable de argumentos: n1, n2, n3,...y retorne una lista cuyo primer elemento es una lista conteniendo los números en la fila n1 del triángulo de Pascal, el segundo elemento una lista con los números en la fila n2, y asísucesivamente.
%% Cell type:code id: tags:
``` python
def ej2pt2(*args):
"""
Entrega la enésima fila
del triángulo de Pascal
de los números introducidos
"""
for x in args: #loop por cada elemento introducido
x = int(x) #entrada enteras, en caso de ser decima solo considera parte entera
fila = []
for i in range(x):
fila.append(binomial(x-1,i))# fila vacía, se añaden los términos de combinatoria que corresponden
print(fila)
```
%% Cell type:markdown id: tags:
En el caso de querer conocer, por ejemplo, las filas 3, 6 y 9:
%% Cell type:code id: tags:
``` python
print("Las filas deseadas son:")
ej2pt2(3,6,9)
```
%% Output
Las filas deseadas son:
[1, 2, 1]
[1, 5, 10, 10, 5, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 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