Muy buenas gente:
Intentando calcular el ejercicio de abajo lo he hecho a mi manera y se que no tiene nada que ver y tampoco funciona. Hay que hacerlo con While.
(http://www.subeimagenes.com/img/sin-titulo-1-4472.jpg)
n = float(raw_input('Añade n: ')
m = float(raw_input('Añade m: ')
f = (n / ((n - m) * m))
print f
CitarIntroduce un valor n: 15
Introduce un valor m: 10
0.3
¿Cómo voy hacer esto con while?
Lo que pasa es que los simbolos de exclamación no están porque si nomás, significan factorial :xD
n! significa que por ejemplo.
n = 5
n! = 5! = 5 x 4 x 3 x 2 x 1 = 120
n = 8
n! = 8! = 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 40320
Saludos
y guarda que no se aplica regla de distribucion primero si o si se resta se saca su factorial y se multiplica por el m
el factorial ya lo expliacron http://foro.elhacker.net/scripting/entender_lo_que_hay_que_hacer_en_este_ejercicio-t307763.0.html (http://foro.elhacker.net/scripting/entender_lo_que_hay_que_hacer_en_este_ejercicio-t307763.0.html)
Buscando por Internet se puede hacer así también, pero no lo pide el ejercicio.
from math import factorial
print factorial(8)
Citar40320
Tambien puedes hacerlo por recursividad en una funcion.
n = float(raw_input('Introduce un valor n: '))
m = float(raw_input('Introduce un valor m: '))
sumatorio = 1
i = 0
while i < n:
i += 1
sumatorio *= i
(n / ((n - m) * m))
print sumatorio
CitarIntroduce un valor n: 15
Introduce un valor m: 10
1307674368000
Pensé que es como hice arriba y no. ;)
Ya con la explicación que me dieron arriba lo voy hacer. Voy a intentarlo.
Podría ser así,
#
# @Function: factorial of a number
#
def _factorial(sNumber):
sSum = 1
sCont = 0
while sCont < sNumber:
sCont += 1
sSum *= sCont
return sSum
print _factorial(4)
WTF! No entiendo esta linea,
n = float(raw_input('Introduce un valor n: '))
m = float(raw_input('Introduce un valor m: '))
sumatorio = 1
i = 0
while i < n:
i += 1
sumatorio *= i
(n / ((n - m) * m))
print sumatorio
Lo he intentado hacer así y nada.
n = float(raw_input('Introduce un valor n: '))
m = float(raw_input('Introduce un valor m: '))
sumatorio = 1
i = 0
while i < n:
i += 1
sumatorio *= i
#print sumatorio
sumatorio2 = 1
e = 0
while e < m:
e += 1
sumatorio2 *= e
#print sumatorio2
var = (sumatorio / ((n - m) * sumatorio2))
print var
Citar
Introduce un valor n: 15
Introduce un valor m: 10
72072.0
La línea que dices es la que muestra arriba en el primer post pero en una sóla línea.
Supuestamente como resultado debe dar 3003 si incluye n = 15 y m = 10 al introducir datos.
Pues la única manera que se me ocurre es usando una función.
def fact(iNum):
i = 1
f = 1
while (i < iNum):
i += 1
f *= i
return f
n = input('n: ')
m = input('m: ')
c = fact(n)/(fact(n - m)*fact(m))
print c
En tu código Meta lo que falta organizar y obtener es (n - m)! para que te dé el resultado correcto.
Bueno yo recuerdo que ese valor también se puede calcular de la siguiente manera:
(http://s2.subirimagenes.com/otros/previo/thump_5359053combina.jpg)
Usando un while sale:
n=15
m=10
i=1
d=1
D=n
while(i<m):
D*=n-i
d*=i+1
i=i+1
C=D/d
print(C)
Edit: Se asignaron valores para m y n
Cita de: bigfish781 en 14 Octubre 2010, 22:58 PM
Bueno yo recuerdo que ese valor también se puede calcular de la siguiente manera:
(http://s2.subirimagenes.com/otros/previo/thump_5359053combina.jpg)
Usando un while sale:
i=1
d=1
D=n
while(i<m):
D*=n-i
d*=i+1
i=i+1
C=D/d
print(C)
En tu código me dice:
CitarTraceback (most recent call last):
File "/home/acaymo/NetBeansProjects/tema5e1a5/src/tema5e1a5.py", line 55, in <module>
D = n
NameError: name 'n' is not defined
Lo que estoy haciendo por ahora es este código, algo le falta que no me sale.
n = float(raw_input('Introduce un valor n: '))
m = float(raw_input('Introduce un valor m: '))
sumatorio = 1
i = 0
while i < n:
i += 1
sumatorio *= i
#print sumatorio
sumatorio2 = 1
e = 0
while e < m:
e += 1
sumatorio2 *= e
#print sumatorio2
sumatorio3 = 1
u = 0
while u <= (n - m):
u += 1
sumatorio3 *= u
#print sumatorio3
nm = (n / (n - m) * m)
print nm
Debe dar como resultado 3003 y me da 30.0.
CitarIntroduce un valor n: 15
Introduce un valor m: 10
30.0
Citar
En tu código me dice:
Citar
Traceback (most recent call last):
File "/home/acaymo/NetBeansProjects/tema5e1a5/src/tema5e1a5.py", line 55, in <module>
D = n
NameError: name 'n' is not defined
Es que habia que completar el código.. ;D
Mas arriba se tenia que dar valores a
n y a
m:
n=15
m=10
# lo demás va aqui
PD: Edite el código de mi anterior post para que no salga ese error
Ahora si que funciona y me estaba complicando la vida con un código muy largo. A pesar de ello, quiero hacerlo a mi manera chapuza, así aprendo, a base de palos. ;)
Muchas gracias por tu código. DEja ver si me sale a mi manera.
Cita de: Meta en 15 Octubre 2010, 01:10 AM
Ahora si que funciona y me estaba complicando la vida con un código muy largo. A pesar de ello, quiero hacerlo a mi manera chapuza, así aprendo, a base de palos. ;)
Muchas gracias por tu código. DEja ver si me sale a mi manera.
Claro!, recuerda que esa es la manera más interesante de aprender...A fin de cuentas, se aprende poco a poco y con el paso del tiempo se adquiere la experiencia necesaria.
Buenas:
(http://www.subeimagenes.com/img/sin-titulo-1-4472.jpg)
Fijándome bien en la parte (n - m)!. Debo restar primero (15 - 10)! cuyo resultado es 5. A partir de ahí su función es esta.
(n - m)! = 5 = 5 x 4 x 3 x 2 x 1 = 120.
Hasta aquí todo bien cuando da supuestamente 120 como si si fuera 120!. Aunque lo sustituya en la ecuación completa no me funciona.
Saludo.
Cómo?
El resultado supuestamente debo sacarlo de while.
sumatorio3 = 1
u = 0
while u <= (n - m):
u += 1
sumatorio3 *= u
#print sumatorio3
Debo lograr aque su resultado final de programa sea 3003 si introduces n = 15 y m = a 10. Estoy haciendo pruebas pero aún no logro hacerlo.
Cita de: Meta en 15 Octubre 2010, 01:10 AM
Ahora si que funciona y me estaba complicando la vida con un código muy largo. A pesar de ello, quiero hacerlo a mi manera chapuza, así aprendo, a base de palos. ;)
Muchas gracias por tu código. DEja ver si me sale a mi manera.
Me parece excelente la idea de buscar resolver los problemas por uno mismo, asi se gana experiencia programando
Ahora bien, me tomaré la libertad de recomendarte una técnica que le enseñan a uno en los cursos de programación y algoritmica:
Primero resuelve el problema en papel dandote varios ejemplos. Por ejemplo, en este caso tendrias que calcular "a mano" el valor de
C (número de combinaciones) para distintos pares de valores de
m y
n:
a) para n=15, m=10; C=3003
b) para n=5, m=1; C=5
c) para n=8, m=2; C=28
d) etc...
Luego de resolver varios de estos ejemplos fijate en el método que seguiste para resolverlos (el algoritmo).
Una vez que tienes el algoritmo es fácil codificarlo en el lenguaje que estes usando para programar.
Saludos ;)
PD: Si ya se, casi todos o todos aqui saben eso :¬¬ pero no está demás recordarlo de vez en cuando
Te entiendo. No logro sacar el 3003 ni a la de 3. Como me cuesta. Y estoy aprendiendo gracias al tutorial (http://marmota.act.uji.es/mtp/pdf/python.pdf) y en especial a ustedes.
Edito:
Pensé que es así:
nm = (sumatorio / (sumatorio3 * sumatorio2))
print nm
Resultado 500.
Sigo intentando.
Si usaras menos cantidades de variables podrias hacer el codigo de una forma mas rapida... al parecer no eres muy bueno programando, te recomiendo que hagas todo primero en un diagrama de flujo y lo lleves mentalmente y cuando veas que funcione lo pasas a codigo.
Aqui te dejo el codigo para que veas que tal:
n = input('Valor de N: ')
m = input('Valor de M: ')
b = n-m
a = n-1
if n>m:
while(a>1):
n*=a
a-=1
a=m-1
while(a>1):
m*=a
a-=1
a=b-1
while(a>1):
b*=a
a-=1
print 'Cantidad de combinaciones: ',n/(b*m)
Cita de: hybr1d en 15 Octubre 2010, 04:16 AM
Si usaras menos cantidades de variables podrias hacer el codigo de una forma mas rapida... al parecer no eres muy bueno programando, te recomiendo que hagas todo primero en un diagrama de flujo y lo lleves mentalmente y cuando veas que funcione lo pasas a codigo.
Aqui te dejo el codigo para que veas que tal:
n = input('Valor de N: ')
m = input('Valor de M: ')
b = n-m
a = n-1
if n>m:
while(a>1):
n*=a
a-=1
a=m-1
while(a>1):
m*=a
a-=1
a=b-1
while(a>1):
b*=a
a-=1
print 'Cantidad de combinaciones: ',n/(b*m)
Gracias. No es que no sea bueno programando, es que no se programar que es peor, sobre todo por mi cuenta. Claro que estoy guardando los .py que estoy arpendiendo de lo que hago. Si tuviera un profesor o haciendo un curso me callo. ;)