[JS] ¿Programa para sumar los números pares de un intervalo dado?

Iniciado por Linton, 20 Junio 2013, 21:50 PM

0 Miembros y 1 Visitante están viendo este tema.

Linton

Recuerdo haber visto un enlace en Google pero ahora no lo encuentro, ¿alguien lo conoce? Gracias, un saludo.

Kase

te prometo seras el alma de la fiesta..


2,4,6,12,20,30

se puede expresar como  n+n²


tu algoritmo queda como

a =  pedir primer numero
b = pedir segundo numero
(compruba que estos son pares si quieres?)
respuesta =  (a+a²) - (b+b²)


lo mejor es que al no tener ciclos la computadora no tarda ni una milesima en calcularlo ;)


ahora si, programa tu el JS :3


teoria: funciones generadoras; toda serie puede expresarse con una funcion

Linton

Me temo que no lo entiendo... ¿el intervalo (307,520) por ejemplo se puede expresar como n + n2?  :huh:

Gracias por tu ayuda, un saludo.

Kase

el 307 no es par..

pero se puede expressar ese calculo como:

308/2 = 154 # esta es la posicion del 308 en la serie del (2,4,6,12,20,30....)
520/2 = 260


formula: (154+154²) - (260+260²)  

esto es igual a sumar los numeros pares entre el 307 y el 520

Linton

Cita de: Kase en 21 Junio 2013, 03:38 AM

el 307 no es par..


Yo no digo que lo sea, simplemente estipulo un intervalo. Igual que cuando se plantea "encuentra los múltiplos de 7 entre 10 y 20" no estamos diciendo que ni 10 ni 20 sean múltiplos de 7  :)


Cita de: Kase en 21 Junio 2013, 03:38 AM

formula: (154+154²) - (260+260²)  
esto es igual a sumar los numeros pares entre el 307 y el 520


Imposible, puesto que la primera cantidad es menor que la segunda, de modo que obtendremos un número entero negativo.
Imagino que será en todo caso (260 +2602) - (154+1542)

Aparte, ¿esa fórmula debo pasarla al programa? ¿No habría que basarse en el módulo, buscando los números divisibles por 2 para almacenarlos y sumarlos?

Gracias por tu ayuda, un saludo.

engel lex

Kase: si calculo bien

Citara =  pedir primer numero
b = pedir segundo numero
(compruba que estos son pares si quieres?)
respuesta =  (a+a²) - (b+b²)

no se de donde sacaste la teoria loca... pero tienes +1 por pensar el camino del calculo antes del for...

pero veamos:
pares entre 2 y 20
(2+4)-(20+400)= 6-420 = 414 (asumo que siempre será positivo)

pero el resultado es incorrecto... debe ser 110

una mas simple... suma de pares entre 100 y 104

(100+10000)-(104+10816)=10100-10920=820
pero 100+102=202, 202+104=306

la respuesta quedó fue lejos!

luego cambiaste tu teoria por no ser los numeros sino sus "posiciones"

Citarpero se puede expressar ese calculo como:

308/2 = 154 # esta es la posicion del 308 en la serie del (2,4,6,12,20,30....)
520/2 = 260

los mismos 2 intervalos
2,20 -> 1 y 10 -> (1 + 1²)-(10 + 10²)-> 2 - 110 -> 108 uff! cerca... pero no
(me da lala calcular el segundo, demostré mi punto)

la formula debería ser =
(p + u) * c /2

donde
p = primero
u = ultimo
c = cantidad de pares

y c puedes calcularlo como

c = ((u - p)/2)+1

quedando al final

(p + u) * (((u - p)/2)+1) /2


y probando con los 2 mismos intervalos

2,20
(2 + 20) * (((20-2)/2)+1) /2
(22) * (10) /2
220/2
110

y el otro
100,104
(100 + 104) * (((104-100)/2)+1) /2
(204) * (3) /2
612/2
306


CitarAparte, ¿esa fórmula debo pasarla al programa? ¿No habría que basarse en el módulo, buscando los números divisibles por 2 para almacenarlos y sumarlos?

supongo que es una tarea de la uni y tu profesor no estará muy agradecido que si está explicando ciclos llegues con formulas XD

así que mi solucion es la siguiente...

captura 2 variables, las llamaré P y U
y 2 variables internas
Resultado = 0
Conteo = 0

si P%2 != 0 entonces P++
si U%2 != 0 entonces U--
y P siempre debe ser menor que U

para (I = P, I<=U, I=I+2)
resultado = resultado + I


esas lineas deberían mas que hacer todo el trabajo XD

lo que está haciendo es que usa las variables del ciclo de una vez para sumar... por eso el ciclo salta de 2 en 2...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Kase

CitarImposible, puesto que la primera cantidad es menor que la segunda, de modo que obtendremos un número entero negativo.
Imagino que será en todo caso (260 +2602) - (154+1542)

Aparte, ¿esa fórmula debo pasarla al programa?
Gracias por tu ayuda, un saludo.

perdon.. si es la funcion como tu dices.. XD  


un programa quedaria como

Código (javascript) [Seleccionar]
function sumar_intervalo(a,b){
    return  (b/2+math.pow(b/2,2) -(a/2+math.pow(a/2,2) )
}


el como le pases los parametros es tu problema :P


Citar¿No habría que basarse en el módulo, buscando los números divisibles por 2 para almacenarlos y sumarlos?
claro. puedes hacerlo comose te de la gana...
pero como yo te digo  le causaras un  braindexplode a tu profesor ;)



mi forma de solucionarlo esta sustentado bajo la teoria de funciones generadoras
http://es.wikipedia.org/wiki/Funci%C3%B3n_generadora





prueba en python
Código (python) [Seleccionar]

def intervalo(a,b):
 return (b/2+((b/2)**2)) - (a/2+((a/2)**2))
>>> intervalo(0,6)
12
>>> intervalo(0,2)
2
>>> intervalo(0,4)
6
>>> intervalo(0,10)
30
>>> intervalo(0,30)
240
>>> intervalo(0,4596)
5283102
>>> intervalo(0,459640)
52817462220


nota, en python 0/2 es 0... no se si en otros lenguajes la maquina explote...


por que le das tantas vueltas? funciona? usalo :D

Linton

Cita de: engelx en 21 Junio 2013, 10:05 AM

supongo que es una tarea de la uni y tu profesor no estará muy agradecido que si está explicando ciclos llegues con formulas XD


Ni estoy en la uni, ni (por desgracia) tengo profesor, ni sé qué son ciclos. Simplemente trato de estudiar javascript por mi cuenta  :P

Intentaré descifrar lo que me explicas (estoy pegado en Matemáticas), muchas gracias  :)

engel lex

#8
y kase solo ignoró mi comentario y listo? XD

ahora has tu calculo con números iniciales diferentes de 0 y mira como falla


solo intenta entre 2 y 4 XD te dará 4

Citarpero como yo te digo  le causaras un  braindexplode a tu profesor

en mi uni, solo te dirian,
1- explique y desmuestre su calculo como verdadero
2- explique como está relacionado eso con el tema de ciclos

y en ese caso simplemente tu cerebro no explotaria sino que diria "nothing to do here" XD
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Linton

Cita de: Kase en 21 Junio 2013, 10:08 AM
Código (javascript) [Seleccionar]
function sumar_intervalo(a,b){
    return  (b/2+math.pow(b/2,2) -(a/2+math.pow(a/2,2) )
}



¡Muchas gracias! Pero ni idea de qué es math.pow  :P Qué lío tengo con la carretilla de manuales que me he descargado.


Cita de: Kase en 21 Junio 2013, 10:08 AM

pero como yo te digo  le causaras un  braindexplode a tu profesor ;)


Es que no tengo ningún profesor. Sólo quiero (porque lo necesito) aprender javascript, y sólo javascript.


Cita de: Kase en 21 Junio 2013, 10:08 AM

prueba en python


Uf ni idea, bastante lío tengo con javascript  :P


Cita de: Kase en 21 Junio 2013, 10:08 AM

por que le das tantas vueltas? funciona? usalo :D


:huh: No le doy vueltas, simplemente no sé hacer programas.

Muchas gracias, un saludo.