› Foros › Off-Topic › Miscelánea
Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
kbks escribió:Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
En los lenguajes de programación depende de la gramática definida en el analizador sintáctico del compilador. Y precisamente estoy haciendo yo uno en este mismo momento.
Imagino que en las calculadoras en las que puedes introducir la fórmula completa también utilizarán algún tipo de analizador léxico y sintáctico, por lo que supongo que será por lo mismo.
exitfor escribió:Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
¿Qué modelo de calculadora científica te ha dado 2 escribiendo esa operación de forma lineal?
Eruanion escribió:exitfor escribió:Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
¿Qué modelo de calculadora científica te ha dado 2 escribiendo esa operación de forma lineal?
Han puesto fotos en el hilo. 2 calculadoras que dan 2 y otras 2 que dan 288. Incluso un usuario ha comentado que tiene una Casio antigua que le da 288 y una nueva que le da 2.
Y la explicación es que las calculadoras interpretan la expresión de forma distinta, no? Vamos, que quien haya dicho 2 o 288 tampoco es ningún analfabeto, simplemente ha interpretado la expresión de una forma o de otra, no?
Yo es que he visto directamente el modo fracción del primer mensaje, entonces me daba 2 sí o sí y cuando he empezado a leer que era 288 me he quedado loco.
Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
jorcoval escribió:Sumado a:
recuerdo que en compiladores realicé un compilador que para analizar las estructuras matemáticas utilizaba una pila. Una pila es LIFO (last in, first out) con lo que lee las expresiones de izquierda a derecha.
Si para analizar las estructuras utilizas una cola (FIFO, first in, first out) entonces las analizas de derecha a izquierda.
Estwald escribió:Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
El problema está en la implicitud: cuando era pequeñito y pregunté a mi me explicaron que ahí debía ver un punto de multiplicar que era infinitamente pequeño y que por eso no lo podía ver, pero que el punto estaba allí.
Desde un punto de vista de un intérprete los signos se usan cómo separadores, al mismo tiempo que señalan la operación. Por tanto, no es muy difícil imaginar que al no encontrar ninguno, se asimile cómo un bloque, asignando una multiplicación por defecto y eso cause la prioridad.
Es decir 48/2(9+3) quedaría como A/B donde A=48 y B=2*D y D=9+3
kbks escribió:No. Una operación matemática nunca es interpretable. Otra cosa es que haya calculadoras que están mal diseñadas y personas que no conozcan las reglas para resolver operaciones escritas de manera lineal. Y desde mi punto de vista no conocer esas reglas no es ni mucho menos de analfabetos, pero decir que una operación matemática es interpretable y seguir defendiendo que "puede que sea 2" cuando ya se ha dicho una y otra vez que es 288 y se ha explicado porque (bienvenidos a la ciencia) si que es de analfabeto.
Estwald escribió:Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
El problema está en la implicitud: cuando era pequeñito y pregunté a mi me explicaron que ahí debía ver un punto de multiplicar que era infinitamente pequeño y que por eso no lo podía ver, pero que el punto estaba allí.
Desde un punto de vista de un intérprete los signos se usan cómo separadores, al mismo tiempo que señalan la operación. Por tanto, no es muy difícil imaginar que al no encontrar ninguno, se asimile cómo un bloque, asignando una multiplicación por defecto y eso cause la prioridad.
Es decir 48/2(9+3) quedaría como A/B donde A=48 y B=2*D y D=9+3jorcoval escribió:Sumado a:
recuerdo que en compiladores realicé un compilador que para analizar las estructuras matemáticas utilizaba una pila. Una pila es LIFO (last in, first out) con lo que lee las expresiones de izquierda a derecha.
Si para analizar las estructuras utilizas una cola (FIFO, first in, first out) entonces las analizas de derecha a izquierda.
Me da que te has liado con las pilas, ¿No?. Si yo voy leyendo argumentos de izquierda a derecha y los meto en la pila y luego tengo que operar de izquierda a derecha, el primer elemento que entro en la pila, es el primero que debería sacar (y por tato FIFO representaría de izquierda a derecha y no al revés)
banderas20 escribió:Joder, sí que da de sí el hilo.
Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
Todas las opciones [288, 2 y error de sintaxis] se pueden obtener según donde se ejecute la operacion 48/2(9+3).
Éste es un problema clásico de ambigüedad en una gramática de cualquier asignatura de compiladores.
Todos tenemos claro que el criterio por defecto tanto en cualquier lenguaje de programación como en matemáticas es:
- Los paréntesis se evalúan primero.
- Las operaciones multiplicar (*) y dividir (/) tienen prioridad sobre sumar (+) y restar (-).
- Se opera de izquierda a derecha.
48/2*(9+3) = 48/2*12 = 24*12 = 288 Cuando la multiplicación es explícita lo hacen así todas las calculadoras y lenguajes.
Pero 48/2*(9+3) y 48/2(9+3) pueden o no ser lo mismo. Algunas calculadoras y algunos lenguajes para 48/2(9+3) dan 2 porque asumen una que la multiplicación implícita (cuando no hay símbolo *) tiene preferencia sobre la multiplicación explícita, así
48/2(9+3) = 48/(2*(9+3)) = 48 /(2*12) = 48 / 24 = 2
De la misma manera que se permite programar:
- Multiplicación implícita: Y=1/2X y se entiende Y=1/(2*X)
- Multiplicación explícita: Y=1/2*X y se entiende Y=(1/2)*X
La mayoría de los lenguajes tienen desactivada por defecto la multiplicación implicita para evitar liar la programación innecesariamente y darán un error de sintaxis salvo que se active a propósito la opción de multiplicación implícita y si se activa habrá que ver cómo está definida la operación en ese lenguaje (unos lenguajes darán 288 y otros 2).
Como anécdota, algunos desastres clásicos muy instructivos atribuibles a una mala programación informática son el Arianne y los fallos de los misiles Patriot frente a los Scud.
http://www.ima.umn.edu/~arnold/disasters/ariane.html
http://www.ima.umn.edu/~arnold/disasters/patriot.html
RMB escribió:Veamos, estais mareando la perdiz.
Si en una calculadora se introduce:
48:2(9+3) da 2
Si se introduce:
48/2(9+3) da 288
Ya que son operaciones diferentes, no le deis mas vueltas.
RMB escribió:Veamos, estais mareando la perdiz.
Si en una calculadora se introduce:
48:2(9+3) da 2
Si se introduce:
48/2(9+3) da 288
Ya que son operaciones diferentes, no le deis mas vueltas.
Mr.FLayMan escribió:Eruanion escribió:Yo lo que quiero es que alguien me explique, con algo de lógica, porque poniendo la misma expresión en calculadoras distintas, unas dan 2 y otras 288.
No quiero ser borde, pero oye, 3 páginas atrás ya estaba resuelto (y seguro que más atrás, mensajes anteriores al mío, también). Al menos leer las 5 últimas no estaría mal para dejar esto ya...Todas las opciones [288, 2 y error de sintaxis] se pueden obtener según donde se ejecute la operacion 48/2(9+3).
Éste es un problema clásico de ambigüedad en una gramática de cualquier asignatura de compiladores.
Todos tenemos claro que el criterio por defecto tanto en cualquier lenguaje de programación como en matemáticas es:
- Los paréntesis se evalúan primero.
- Las operaciones multiplicar (*) y dividir (/) tienen prioridad sobre sumar (+) y restar (-).
- Se opera de izquierda a derecha.
48/2*(9+3) = 48/2*12 = 24*12 = 288 Cuando la multiplicación es explícita lo hacen así todas las calculadoras y lenguajes.
Pero 48/2*(9+3) y 48/2(9+3) pueden o no ser lo mismo. Algunas calculadoras y algunos lenguajes para 48/2(9+3) dan 2 porque asumen una que la multiplicación implícita (cuando no hay símbolo *) tiene preferencia sobre la multiplicación explícita, así
48/2(9+3) = 48/(2*(9+3)) = 48 /(2*12) = 48 / 24 = 2
De la misma manera que se permite programar:
- Multiplicación implícita: Y=1/2X y se entiende Y=1/(2*X)
- Multiplicación explícita: Y=1/2*X y se entiende Y=(1/2)*X
La mayoría de los lenguajes tienen desactivada por defecto la multiplicación implicita para evitar liar la programación innecesariamente y darán un error de sintaxis salvo que se active a propósito la opción de multiplicación implícita y si se activa habrá que ver cómo está definida la operación en ese lenguaje (unos lenguajes darán 288 y otros 2).
Como anécdota, algunos desastres clásicos muy instructivos atribuibles a una mala programación informática son el Arianne y los fallos de los misiles Patriot frente a los Scud.
http://www.ima.umn.edu/~arnold/disasters/ariane.html
http://www.ima.umn.edu/~arnold/disasters/patriot.html
vtr1993 escribió:joder si que ha dado de si el hilo jajajaj
raul_sanchez1 escribió:La operación entre paréntesis tiene prioridad, luego entre división y multiplicación, la prioridad es la misma, por lo que se procede a realizar en orden lógico, de izquierda a derecha, sólo se haría primero la suma del paréntesis.
El resultado debería de ser 288.
Saludos
Master01 escribió:raul_sanchez1 escribió:La operación entre paréntesis tiene prioridad, luego entre división y multiplicación, la prioridad es la misma, por lo que se procede a realizar en orden lógico, de izquierda a derecha, sólo se haría primero la suma del paréntesis.
El resultado debería de ser 288.
Saludos
En teoría se hace una división, no una multiplicación de un número fraccionario con un número entero, por lo que debe salir 2.
Edy escribió:Pues me hace gracia, porque hace poco me encontraba con un problema tambien peculiar.
Podeis crear un hilo si quereis, pero la historia es la siguiente:
Imaginemos que dos personas tienen intencion de comprar un objeto y pagarlo completamente a medias. Ese mismo objeto pretenden venderlo y de lo que saquen de beneficio lo reparten entre ambas partes. Todo ok hasta aqui? Es decir, imaginemos que se compra algo que vale 50 Euros, ambos ponen 25 Euros, ... y que lo venden por 100 Euros, por lo tanto se reparten los beneficios y todos tan contentos.
Ahora mirad de hacer una hoja de excel, en la que aparezca la misma forma de repartir los beneficios a partes iguales, pero que inicialmente solo uno de los dos individuos haga el pago del objeto. Es decir, si cuesta 50 Euros, que inicialmente uno de ellos pague 50 euros por ello ... que luego lo venda por 100 euros y tenga que repartirlo a partes exactamente iguales con otra persona, pero debe asumir la parte proporcional del coste inicial asumido por el primero. Pues venga, tengo a varios compañeros que son expertos en la materia que estan dandose de hostias porque no coinciden con lo que se debe llegar cada uno.
litos001 escribió:xEntonces cual es el resultado.
vtr1993 escribió:litos001 escribió:xEntonces cual es el resultado.
288... yo al principio cuando cree el hilo, no se porque tuve como la idea de que era
48
----
9(2+3)
aunque sabia que si escrito linealmente no tenia parentesis la manera de operar era como mlo hacen los PC's, intente justificarme peor que no, el reusltado del titulo es 288 y punto xd
Piriguallo escribió:vtr1993 escribió:litos001 escribió:xEntonces cual es el resultado.
288... yo al principio cuando cree el hilo, no se porque tuve como la idea de que era
48
----
9(2+3)
aunque sabia que si escrito linealmente no tenia parentesis la manera de operar era como mlo hacen los PC's, intente justificarme peor que no, el reusltado del titulo es 288 y punto xd
Yo creo que si ya tienes claro el resultado, deberías quitar el interrogante del título y sustituirlo por el resultado, y zanjar de una vez todo este embrollo.
Dolce escribió:Edy escribió:Pues me hace gracia, porque hace poco me encontraba con un problema tambien peculiar.
Podeis crear un hilo si quereis, pero la historia es la siguiente:
Imaginemos que dos personas tienen intencion de comprar un objeto y pagarlo completamente a medias. Ese mismo objeto pretenden venderlo y de lo que saquen de beneficio lo reparten entre ambas partes. Todo ok hasta aqui? Es decir, imaginemos que se compra algo que vale 50 Euros, ambos ponen 25 Euros, ... y que lo venden por 100 Euros, por lo tanto se reparten los beneficios y todos tan contentos.
Ahora mirad de hacer una hoja de excel, en la que aparezca la misma forma de repartir los beneficios a partes iguales, pero que inicialmente solo uno de los dos individuos haga el pago del objeto. Es decir, si cuesta 50 Euros, que inicialmente uno de ellos pague 50 euros por ello ... que luego lo venda por 100 euros y tenga que repartirlo a partes exactamente iguales con otra persona, pero debe asumir la parte proporcional del coste inicial asumido por el primero. Pues venga, tengo a varios compañeros que son expertos en la materia que estan dandose de hostias porque no coinciden con lo que se debe llegar cada uno.
sera broma no?
lo veo bastante facil, el que pago 50 se queda 75 (50 por la mitad de la venta mas 25 por lo que le debe el otro) y el que no pago nada se queda 25 (50 de la venta menos 25 que le debe al otro)
ahora fallare por vacilon
vtr1993 escribió:litos001 escribió:xEntonces cual es el resultado.
288... yo al principio cuando cree el hilo, no se porque tuve como la idea de que era
48
----
9(2+3)
aunque sabia que si escrito linealmente no tenia parentesis la manera de operar era como mlo hacen los PC's, intente justificarme peor que no, el reusltado del titulo es 288 y punto xd
Eruanion escribió:Dolce escribió:Edy escribió:Pues me hace gracia, porque hace poco me encontraba con un problema tambien peculiar.
Podeis crear un hilo si quereis, pero la historia es la siguiente:
Imaginemos que dos personas tienen intencion de comprar un objeto y pagarlo completamente a medias. Ese mismo objeto pretenden venderlo y de lo que saquen de beneficio lo reparten entre ambas partes. Todo ok hasta aqui? Es decir, imaginemos que se compra algo que vale 50 Euros, ambos ponen 25 Euros, ... y que lo venden por 100 Euros, por lo tanto se reparten los beneficios y todos tan contentos.
Ahora mirad de hacer una hoja de excel, en la que aparezca la misma forma de repartir los beneficios a partes iguales, pero que inicialmente solo uno de los dos individuos haga el pago del objeto. Es decir, si cuesta 50 Euros, que inicialmente uno de ellos pague 50 euros por ello ... que luego lo venda por 100 euros y tenga que repartirlo a partes exactamente iguales con otra persona, pero debe asumir la parte proporcional del coste inicial asumido por el primero. Pues venga, tengo a varios compañeros que son expertos en la materia que estan dandose de hostias porque no coinciden con lo que se debe llegar cada uno.
sera broma no?
lo veo bastante facil, el que pago 50 se queda 75 (50 por la mitad de la venta mas 25 por lo que le debe el otro) y el que no pago nada se queda 25 (50 de la venta menos 25 que le debe al otro)
ahora fallare por vacilon
Yo he pensado lo mismo que tu, pero he preferido callar y parecer tonto que decir algo y despejar todas las dudas . Es una forma de hablar eh, no te estoy diciendo que seas tonto, de hecho pienso lo mismo que tu.
Dolce escribió:Edy escribió:Pues me hace gracia, porque hace poco me encontraba con un problema tambien peculiar.
Podeis crear un hilo si quereis, pero la historia es la siguiente:
Imaginemos que dos personas tienen intencion de comprar un objeto y pagarlo completamente a medias. Ese mismo objeto pretenden venderlo y de lo que saquen de beneficio lo reparten entre ambas partes. Todo ok hasta aqui? Es decir, imaginemos que se compra algo que vale 50 Euros, ambos ponen 25 Euros, ... y que lo venden por 100 Euros, por lo tanto se reparten los beneficios y todos tan contentos.
Ahora mirad de hacer una hoja de excel, en la que aparezca la misma forma de repartir los beneficios a partes iguales, pero que inicialmente solo uno de los dos individuos haga el pago del objeto. Es decir, si cuesta 50 Euros, que inicialmente uno de ellos pague 50 euros por ello ... que luego lo venda por 100 euros y tenga que repartirlo a partes exactamente iguales con otra persona, pero debe asumir la parte proporcional del coste inicial asumido por el primero. Pues venga, tengo a varios compañeros que son expertos en la materia que estan dandose de hostias porque no coinciden con lo que se debe llegar cada uno.
sera broma no?
lo veo bastante facil, el que pago 50 se queda 75 (50 por la mitad de la venta mas 25 por lo que le debe el otro) y el que no pago nada se queda 25 (50 de la venta menos 25 que le debe al otro)
ahora fallare por vacilon
josemurcia escribió:Yo creo que no termino de entender el problema.
¿Se refiere a que hagamos un modelo en el que dos individuos A y B pongan cada uno una parte para comprar una cosa y que al venderlo cada uno se lleve el porcentaje equivalente a lo que han puesto?
Es que o no lo termino de pillar o es demasiado fácil.
A pone X, B pone Y para algo que cuesta X+Y. Luego lo venden por Z y A se lleva X/(X+Y)*Z y B se lleva Y/(X+Y)*Z.
Si A pone 25 y B pone 25, y luego lo venden por 100, A se lleva 50 y B se lleva 50.
Si A pone 50 y B pone 0, y luego lo venden por 100, A se lleva 100 y B se lleva 0.
Si A pone 10 y B pone 40, y luego lo venden por 100, A se lleva 20 y B se lleva 80.
De verdad que no veo el misterio.
josemurcia escribió:A pone X y B pone Y para algo que cuesta X+Y, lo venden por Z.
A se lleva Z/2+X-(X+Y)/2
B se lleva Z/2+Y-(X+Y/2
A pone 50 para algo que cuesta 50, se vende por 100, se lleva 50+50-50/2=75.
B pone 0 para algo que cuesta 50, se vende por 100, se lleva 50+0-50/2= 25.
A pone 25 para algo que cuesta 50, se vende por 100, se lleva 50+25-50/2=50.
B pone 25 para algo que cuesta 50, se vende por 100, se lleva 50+25-50/2=50.
A pone 10 para algo que cuesta 50, se vende por 100, se lleva 50+10-50/2 = 35.
B pone 40 para algo que cuesta 50, se vende por 100, se lleva 50+40-50/2 = 65.
Este es el problema que me has descrito, cada uno se lleva la mitad de lo que han sacado más una cantidad proporcional a lo que habían puesto inicialmente, que si han puesto menos de la mitad es negativa.
Si sus amigos no saben hacer eso en excel mejor que se dediquen al parchís xD.
klim8 escribió:Osea que decis que si
A pone 25
B pone 25
luego se llevan los dos 50 con lo que ganan 25 cada uno.
Luego si
A pone 50
B pone 0
se llevan A 75 y B 25
con lo que vuelven a ganar 25 cada uno.
Entonces B gana lo mismo ponga dinero o no.
No lo veo claro
klim8 escribió:Osea que decis que si
A pone 25
B pone 25
luego se llevan los dos 50 con lo que ganan 25 cada uno.
Luego si
A pone 50
B pone 0
se llevan A 75 y B 25
con lo que vuelven a ganar 25 cada uno.
Entonces B gana lo mismo ponga dinero o no.
No lo veo claro
LLioncurt escribió:Coño, pon que tu colega y tú jugáis toda la semana a la lotería a medias y un día no llevas dinero y le dices que ponga tu parte que ya se lo pagas. Luego tocan 100 euros y tu compañero te da tu parte menos lo que tendrías que haber pagado. Fin de la historia.