Los asombrosos calculos matematicos en velneo


([N4] info) #1

Ya HACE TIEMPO he comentado esto y lo he referido a soporte, pero todo sigue igual

(TOTALGUIA2) + ( (PRECIO * NUMGUIAS)*(#PORCENTAJE)) / (100)
(32.5)+((26 * 1)*(125))/(100) = 32.825
Esta formula NO FUNCIONA DA EL RESULTADO QUE SE LE PONE EN LOS H.....

(TOTALGUIA2) + ( ( (PRECIO * NUMGUIAS) * (#PORCENTAJE) ) / (100) )
(32.5)+(((26 * 1)*(125))/(100)) = 65
Gracias al OLIMPO esta SI

La verdad es que o estoy fuera de orbita y estoy haciendo algo mal que no veo
o ..........
me siento incapaz de calificar esta AUTENTICA ATROCIDAD
me parece que en v7.0-1 vale pero en ¿v7.7?
¿he de revisar todos los calculos de las aplicaciones?
Un saludo
Miguel
CIBERIDEAS


([N1] Giuseppe::Komenco) #2

Así, a ojo, y con un sólo café en el cuerpo.... diría que te has hecho un lío con los paréntesis......no debería ser...?

TOTALGUIA2 + ((PRECIO * NUMGUIAS)*((#PORCENTAJE) / (100)))

??


([N1] VictorMC) #3

Tal como lo dice el buen Giuseppe... pero yo sí ya con 2 tazas de café veracruzano! en el cuerpo... :)

Incluso ya comprobado!
.
Funciona así:

32.5+(((26 * 1)*125)/100) = 65

.
Es decir, supongo que con variables y campos quedaría así:

TOTALGUIA2+(((PRECIO * NUMGUIAS)*#PORCENTAJE)/100) = 65

.
Como dije, la formula está comprobada!.

Saludos ahora desde Puebla México.
Víctor Martínez Cortés
www.livesoftmx.com


([N4] info) #4

Hola y gracias ante todo Giuseppe y Victor
Perdónenme
PERO EXCEL ADMITE ESTA FORMULA DANDO EL RESULTADO CORRECTO
COMO NO PODIA SER DE OTRA MANERA
Giusseppe tu formula no es lo que quiero.
el parentesis de (#PORCENTAJE) como dice Victor no seria necesario, pero tampoco hace daño
Ahora si tengo metido entre parentesis el producto de
( (PRECIO * NUMGUIAS) * (#PORCENTAJE) )
y esto lo divido por 100
¿Que error hay en la formula?
(Repito: igual estoy encabezonado en una cosa que no es así)
a ver separándolo un poquito:

1. Resolver paréntesis, u otros símbolos. ( ) [ ] { }
2. Resolver exponentes o raíces.
3. Multiplicación y división de izquierda a derecha.
4. Suma y resta de izquierda a derecha.

(TOTALGUIA2) + ( (PRECIO * NUMGUIAS) * (#PORCENTAJE) ) / (100)
32.5 + ( (26 * 1 ) * (125 ) ) / (100)
32.5 + ( (26 ) * (125 ) ) / (100)
32.5 + ( 3250 ) / (100)
parentesis resueltos
32.5 + 3250 / 100
y ahora supongo que lo primero que se ejecuta es la división por lo menos eso dicen los canones
32.5 + 32.5
65

No se igual se me olvido todo
un saludo
Miguel


([N4] eic) #5

Hola.

El problema es que, creo, Velneo no realiza primero las multiplicaciones/divisiones, y luego las sumas, sino que va de izquierda a derecha. Por eso tienes que indicar los paréntesis.

Si en el editor de fórmulas escribes:

2 + 2 / 2

y evalúas la fórmula, te dirá que el resultado es 2... en vez del resultado que esperarías, que es 3.

Saludos,

Fran Varona


([N4] eic) #6

Lo tienes en el último párrafo aquí:

http://velneo.es/info_v7_77_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/asistente_de_formulas

Saludos,

Fran Varona


([N4] info) #7

Gracias
No me parece logico
alguien me puede decir en que lenguaje se utiliza así por curiosidad
v6 no desde luego, C,Vbasic,Java creo que tampoco,
Un saludo
Miguel


([N4] eic) #8

Sí, estás utilizando paréntesis, pero no adecuadamente.

En la fórmula que te indicaba:

2 + 2 / 2

si quieres que la división se haga antes, debes escribir

2 + ( 2 / 2 )

que es lo que haces en la segunda fórmula, y por eso te funciona. No basta con hacer

(2) + (2) / (2)

que es lo que haces en la primera. Los paréntesis aquí se deben usar para cambiar el comportamiento predeterminado de Velneo, que es evaluar primero la suma y luego la división (o sea, de izquierda a derecha).

Saludos,

Fran Varona


([N1] Pepeto) #9

En la linea 2 de tu primer mensaje , escribes la formula:
(TOTALGUIA2) + ( (PRECIO * NUMGUIAS)*(#PORCENTAJE)) / (100)

y la formula correcta para que los parentesis hagan su labor es:
TOTALGUIA2 + ( ( (PRECIO * NUMGUIAS)* #PORCENTAJE) / 100)

claro que esta tambien te funcionaria:
(TOTALGUIA2) + ( ( (PRECIO * NUMGUIAS)* (#PORCENTAJE)) / (100))

pero, poner (TOTALGUIA2) es igual a poner TOTALGUIA2, el 100 con o sin parentesis no cambia el resultado y el (#ORCENTAJE) igual
Los parentesis deben agrupar los componentes de la expresion para saber el orden de ejecución de los calculos
No por usar mas parentesis va a funcionar mejor

un saludo
José Luis
http://www.ascsl.com


([N4] info) #10

Gracias
y si Pepeto por usar mas parentesis de la cuenta no debe funcionar mejor estoy de acuerdo
Pero NO me parece logico
alguien me puede decir en que lenguaje se utiliza así por curiosidad
v6 no desde luego, C,Vbasic,Java creo que tampoco,
Un saludo
Miguel


([N1] Giuseppe::Komenco) #11

En Smalltak la prioridad la establcen los paréntesis, no la operacón (puesto +, * sn mensajes que reciben los objetos, no "operadores") y Erlang me quiere sonar que igual.

Además, en el pasado, también me pasó una vez una cosa muy rara bajo Delphi, por eso, desde hace tiempo, no me fíó de la prioridad, y encapsulo yo las operaciones por paréntesis. Manías....


([N2] bannu) #12

No conozco Delphi pero me suena raro, en la programación con lenguajes de "última generación" la prioridad la da la operación, y sin ningún tipo de duda c, c++ lo hace así, de hecho yo tengo realizado un parseador de expresiones en c++ y ya le puedes meter la operación que quieras sin paréntesis que te la va a calcular correctamente, 2 + 2 / 2 = 3, así que si en Velneo se utiliza el lenguaje c++ veo un poco absurdo que se tenga que emplear otro sistema diferente al estándar en el propio lenguaje de programación que se utiliza para desarrollar Velneo.

Por cierto podéis probar a introducir en la línea de búsqueda de Google 2 + 2 / 2 para ver qué resultado se obtiene…


([N1] Emanuel) #13

Eso de la prioridad de los operadores matemáticos es relativo, no creo que pase por ser lógico o no, hay lenguajes que mantienen la norma de matemática y otros que no. SmallTalk ya lo hacía y es un lenguaje más avanzado que todos los citados como de "última generación". En fin... quizás lo hicieron por razones de simplicidad. De todas formas en Visual Basic estuve obligado más de una vez a usar paréntesis por falta de confianza en los cálculos que realizada el lenguaje.
Alguna explicación lógica debe de tener éste asunto.

Saludos.


([N1] Giuseppe::Komenco) #14

No conozco Delphi pero me suena raro, en la programación con lenguajes de "última generación" la prioridad la da la operación

No, Delphi teóricamente lo hace "bien", pero en algún caso me hizo alguna cosa rara, y por eso cogí el hábito.

Como dice emanuel, es relativo. En smalltalk, todo son objetos, y en la operación "2+2/2", para smalltalk, 2 es un Objeto del tipo SmallInteger al cual, le pasamos un mensaje, "+" que el objeto SmallInteger sabe interpretar.
"+" (y que nosotros podríamos modificar para alterar su comportamiento) no es un operador de suma, es un mensaje que pasamos a un objeto con un parámetro (el otro 2). puesto la resolución se hace de izquierda a derecha, el resultado de 2+2/2 no es 3, si no, 2+2=4/2=2 Por eso, debemos establecer los paréntesis para prioridades. Smalltalk no es el único lenguaje con este comportamiento, y ni mucho menos opino que sea erróneo (y para mi está a años luz en "última generación"). Lo que conocemos hoy día como programación orientada a objetos, interfaz gráfica, ratón (no, no lo inventó Bill Gates ni Steve Jobs) etc..., es gracias al trabajo en Xerox de Alan Kay y su equipo)

Incluso se podría decir, que ambos resultados son correctos, partiendo si los vemos desde lenguaje C (que lo interpreta como una operación matemática) o desde el punto Smalltalk (que lo interpreta como una "concatenación" de mensajes a objetos)

"Yo inventé el término "orientado a objetos", y te puedo asegurar que C++ no era en lo que estaba pensando."
Alan Kay

P.D.: Si es que, me pongo a hablar de Smalltalk y me puedo tirar horas :D

EDITADO::
Y por cierto, al hilo de la conversación, eso no quita, que Velneo tenga que usar la prioridad de paréntesis, pero me lié me lié....

[attachment=19607,1571]


([N1] Emanuel) #15

Veo que hemos sacado al SmallTalk!!! Y la historia de los piratas del Silicon Valley!!!
Se ve que Giuseppe la tiene clara cuando se habla de SmallTalk. Ya no quedan muchos smalltalkers!!! así se decía?

Hace años que no uso éste lenguaje...aunque tengo un conocido que lo usa mucho para cosas de simulación y demás. Incluso se de implementaciones "modernas" como Dolphin, Squeak, etc.

En finnnn.....

Sería bueno saber el tema de por qué no existe prioridad del tipo matemática en el V7. Para no tener que hacernos tantos líos con las parántesis.

Saludos.


([N4] Jorge) #16

Son enriquecedores todos los puntos de vista pero no olvidemos que el tema de prioridad entre operadores es exclusivamente determinado por el lenguaje. Cada uno lo hace a su manera y no hay consenso.

Por mi parte como provengo de varios lenguajes (estoy haciendo memoria y creo que voy por más de una docena) siempre utilizo paréntesis en exceso y así nunca fallo. Es menos legible pero nunca lleva a error.

Atentamente,
Jorge Hontoria
http://tipesoft.com


([N2] huntergps) #17

Desde mi experiencia al trabajar con varios lenguajes, lo mejor es poner los cálculos matemáticos entre paréntesis y asi evitar sorpresitas :)


([N1] aztecmexico) #18

Pues si, hay que dominar los paréntesis para evitar sorpresas.


([N1] VictorMC) #19

@Todos
.
¿En conclusión?

.

Espero que este tema no solo haya servido para "pavonearnos" (presumir) sobre nuestros amplios y extensos conocimientos en otros lenguajes o plataformas...
.

De favor perdonenme si estoy mal, pero este foro de Velneo no es para eso...
.
Creo que el punto es: En velneo se hace así! y a continuar con lo que sigue (sí es que hay en que seguir)

.
El por qué de esto? pues sale sobrando, al igual creo que si hubiera la posibilidad de hacer cambiar de parecer al equipo de desarrollo... creo que este no sería el medio.
.
Como ya lo dijeron: en fin...
.
Saludos
Víctor Martínez Cortés
www.livesoftmx.com
Skype: livesoftware






([N4] info) #20

Hola de nuevo:
Pues sabiendo como es a otra cosa efectivamente Victor
pero si lo arreglan, mejor,, porque esto en alguna ocasion te puede llevar a algun error
y las cosas básicas (y mas de esta categoria) son como son y si se inventa es para aumentar las opciones no para caparlas
a mi me parece un atraso, pero bueno tiene una solución.

un saludo
Miguel