PYTHON - Calculos de ecuaciones con while.

Iniciado por Meta, 14 Octubre 2010, 16:34 PM

0 Miembros y 4 Visitantes están viendo este tema.

Meta

#10
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:



Usando un while sale:
Código (python) [Seleccionar]

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.

Código (python) [Seleccionar]
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
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

ace332

#11
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:

Código (python) [Seleccionar]

n=15
m=10
# lo demás va aqui

PD: Edite el código de mi anterior post para que no salga ese error

Meta

#12
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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

.:WindHack:.

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.

Follow me on Twitter: @windhack | Visit my website: www.daw-labs.com

"The only thing they can't take from us are our minds."

Meta

Buenas:



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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Meta

El resultado supuestamente debo sacarlo de while.

Código (python) [Seleccionar]
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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

ace332

#17
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

Meta

#18
Te entiendo. No logro sacar el 3003 ni a la de 3. Como me cuesta. Y estoy aprendiendo gracias al tutorial y en especial a ustedes.

Edito:

Pensé que es así:

nm =  (sumatorio / (sumatorio3 * sumatorio2))

print nm


Resultado 500.

Sigo intentando.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

hybr1d

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:
Código (python) [Seleccionar]
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)