A veces llega algún usuario, al que resulta extremadamente difícil de ayudar, por varias razones...
En mi caso suele ocurrir cuando pido algo difícil de entender y/o resolver. Otros factores influyen pero creo que ese es bastante clave.
- La primera es porque tiene conocimientos excesivamente sesgados (de algunas cosas parece tener cierto conocimiento y de otras cosas simples, lagunas completas).
¿No es normal?
- Quieren que las cosas se ajusten a su modo de hacer, cuando lo inevitable que es que para algo existente sea 'el nuevo' el que deba adaptarse a lo que hay.
Esto es amplio, no sé a cuántas cosas te refieres. Creo que todos los involucrados deben tener cierta flexibilidad.
- Insisten en lo que creen entender, sin meditar las respuestas que se les dan... pasan por encima (si es que las leen), como aquel que pisa una alfombra que está ahí para ser pisada.
Ya fue explicado. Es que a uno algunos métodos resultan difíciles, entonces intenta 1ero lo que le parece más fácil.
El caso es que tú encajas en este tipo de usuarios
No sé el 2ndo punto pero los demás sí, supongo.
donde la dificultad, no radica en lo que se pide (que es relativamente fácil) si no en hacer entender lo que se dice...
Veamos...
"C1 or C2 and C3 or C4
No entiendo cómo se interpreta eso"
Sí, eso es fácil de resolver, gracias a uds lo aprendí.Pero parece que lo plantee mal o algo porque El Benjo y alguien en otro foro me analizaron mis interpretaciones de eso, las cuales sí sabía cómo resolver, pero eso que pedí no lo analizaron xD
Lo planteo de otro modo:
¿Cómo se interpreta esto
C1 or C2 and C3 or C4?
¿como si fuese así
(C1 o C2) y (C3 o C4)?
¿o así C1 o (C2 y C3) o C4?
¿o así C1 o (C2 y (C3 o C4))?Ya sé que la respuesta es C1 o (C2 y C3) o C4. Lo que estamos hablando es si decirme cómo se interpreta una o cada una de esas cosas resuelve mi duda o no. La respuesta es no.
Es como si dijera que no sé cómo se interpreta la palabra amigo. Por ejemplo:
A- De un ser, ser interesado en favorecerlo.
B- De un ser, ser que suele acompañarlo y ayudarlo.
C- De un ser A, ser dispuesto a sacrificar todo por el beneficio de A.
Y la gente me responda qué significa A, B y C. Yo no pregunté eso. ¿Se entiende?
Tampoco entiendo cuántas formas de interpretar hay, cómo verlas todas.Esto también ya lo resolví. Aunque la duda de fondo sería dónde tiene sentido meter paréntesis, lo cual he planteado en un nuevo tema.Ahora que pienso capaz que no me estoy explicando bien de nuevo... A ver. Una expresión puede cambiar su resultado si se meten paréntesis en ciertos lugares. ¿Cuales son las posibles alteraciones de los resultados y cómo se logran?
¿cómo puedo hacer que dada una expresión, un programa genere (como si hiciera una lista) todas las alteraciones posibles sin repetir?
Ejemplo:
Tenemos la expresión C1 or C2 && C3 or C4
Posibles paréntesis (en rojo puse los casos que no causan cambios, los casos que quiero que el programa evite generar):
1- (C1 or C2) && C3 or C4
2- (C1 or C2 && C3) or C4
3- C1 or (C2 && C3) or C4
4- C1 or (C2 && C3 or C4)
5- C1 or C2 && (C3 or C4)
6- ((C1 or C2) && C3) or C4Y se puede seguir. Pero la verdad me entrevero bastante en cuales son los posibles lugares. Y la interpretación también me lleva un poco de tiempo. Por eso mismo, este proceso de:
1- Generar todas las alteraciones posibles por paréntesis.
2- Descartar las que no cambien el resultado.
lo quiero automatizar.
Cuando hice el tema pensaba: "Ya que esto es tan difícil, voy a ver si puedo evitar tener que usar paréntesis, capaz que puedo generar los cambios sin tener que usarlos."Es como si quisiera generar textos al azar pero no supiera indicar a la computadora en qué casos "esta" lleva tilde. Tengo 2 opciones: Reviso las frases y los pongo manualmente, o intentar buscar una forma de poder generar frases que digan lo mismo pero sin usar esa palabra.
Bueno, me aburrí de analizar tanto mi texto,
algunas cosas que pedí eran fáciles para uds, otras las expliqué mal parece, y más no me acuerdo ni analizaré.
Ah: El Benjo al final me dijo:
"Sigue las reglas del orden de evaluación de los operadores"pero claro,
yo no sabía de qué me estaba hablando, ni idea.
Sí, tienes razón en eso. Pero era deducible que yo no lo sabía ¿no?Es como dar las respuestas correctas a alguien que luego tomará tu texto, lo traducirá al chino, luego al hebreo, luego al latín luego al ruso, luego al inglés, luego al estonio, luego al portugués y al final de nuevo al español, para luego intentar digerirlo... se perderá todo el sentido tras tanta traducción, siempre sucede de un idioma a otro, luego cuantas más atraviese, más distancia existirá entre el original y la traducción final, de hecho puede que al final, no tenga nada que ver con el original y hasta haya dificultades para saber qué tema trataba.
Lo veo medio exagerado, pero cada uno tiene su forma de interpretar las cosas, sí.
Intentaré por última vez, arrojar un poco de luz en tu oscuridad y me conformaré solo con que intentes entenderlo, sin más pretensiones, que luego avances a partir de ahí o sigas en tu luna es cosa tuya...
Por lo que he leído vas a decirme cosas que ya había entendido. Parece en vano. Preferiría que me hubieras respondido mis nuevas dudas.
1 - Los paréntesis también son operadores (no los ignores).
Nunca los ignoré, pero hay casos en que sobran. A que son operadores no había prestado atención.
Si me preguntabas cual era la estructura de una expresión condicional te decía:
Valor1 Comparador Valor2
Ej: A < B
Y de una más compleja:
Valor1 Comparador1 Valor2 Operador Valor3 Comparador2 Valor4
Ej: A < B && C <= D
Con el nuevo dato que me das tengo que usar un nombre más específico que "Operador" ¿cual me recomiendas?
Perdona si te cae mal lo que digo, pero esa info que me das y esta:
Igual que '+' es para una operación aritmética y 'and' para una operación lógica, un paréntesis aplica una operación de 'prioridad' (orden de ejecución).
Es una lástima que en prácticamente ningún lenguaje se describa así... como un operador de prioridad. Quizás porque todo parte de un cuerpo matemático, en el que se da por sentado que todo el mundo que pretende aprender algo de programación tiene al menos una base matemática mínima... o dicho de otro modo, que no se considera necesario explicarlo porque se da por sobreentendido.
No me cambia (salvo en mi forma de llamar a las cosas, como dije arriba) ¿qué se supone que debo hacer con eso que me dices?
Que los paréntesis cambian el orden conque se aplican las cosas lo sabía desde niño, como casi cualquier otra persona. Si los paréntesis son "operadores" o no, no me sirve de mucho saberlo, me parece. Tú mismo dices que casi ningún lenguaje enseña eso. E intentas que yo, que no tengo estudios técnicos, sepa semejante cosa que deduzco la mayoría no sabe. Gracias pero no debiste molestarte en eso.
A mí los tecnicismos no me llaman mucho saberlos.
2 - Es bueno aprender (en realidad si uno estudió, recordar, porque es algo que puede olvidarse), el significado de las propiedades (conceptos mtemáticos): distributivas (que reparten), conmutativas, asociativas (que conecta, que lo une...).
No soy de forzarme a memorizar cosas, si las veo muchas veces me quedan y sino no.
Nunca lo aprendí, resolvía las ecuaciones como podía sin saber cómo se llamaban los métodos que usaba.
Más allá de los nombres parecen métodos para simplificar expresiones, pero el único que no es obvio es la distributiva.
https://es.wikipedia.org/wiki/L%C3%B3gica_binaria#AxiomasLuego hay números negativos y otras cosas que tendría que ver qué son, pero en este momento no le veo mucho sentido a ponerme a leer eso raro.
No sé si me estás diciendo algo más que eso, perdona pero no te entiendo.
Una sencilla forma de entenderlo, es que en programación los operadores lógicos cumplen dichas funciones, y particularmente resultan mucho más fácil de entender
Si con funciones te refieres a propiedades, lo entiendo. Lo demás no sé, hablas de que los matemáticos usan términos difíciles, que concuerdo, y luego
en programación hay cierta licencia, gracias a que hay muchos programadores que son autodidactas.
Tampoco se puede caer en 'describo todo con mi propio lenguaje', porque entonces no nos entenderíamos. Habría tantas formas de llamar a algo como personas y eso tampoco puede ser... ambos extremos incurren en ineficacia.
Con lo cual también concuerdo. Pero nunca lo he negado ni nada así.
Si es tan simple como dices, entonces bárbaro, pero yo no sabía y antes de hacer la prueba menos.
De hecho había planteado este tema a un programador que conozco y me dijo que la interpretación dependía del lenguaje, que no había una respuesta única. Tú mismo también me preguntaste por mi lenguaje como si fuese relevante.
Para ayudarte a entender mejor los paréntesis
Nunca tuve problemas en interpretar paréntesis, sino el orden de prioridad de los or y and cuando no había paréntesis que me lo indicaran.Lo que me confunde de los paréntesis es, como expliqué arriba, dada una expresión sin ellos, dónde es que meterlos causa alteración y dónde no. Pero lo puedo saber si lo pienso.
Lo que no sé es la regla general, una que pueda poner en un programa para que me diga "aquí, acá o allá". Ya lo expliqué...
https://foro.elhacker.net/programacion_general/automatizar_complicamiento_de_duda_y_de_programa_que_intenta_resolverla-t485721.0.htmlTe lo explico de otro modo.
Suponte que tengo la ecuación:
1+2*3+4*5 = 27
Y te digo: Quiero que el resultado sea 30 ¿cuántas formas hay de variarla para que el resultado sea ese? Muchos ¿no? Ejemplos:
A: 4+2*3+4*5 = 30
B: 1+3*3+4*5 = 30
etc
Bueno, lo que quiero con los paréntesis es algo similar. El programa produce una expresión sin ellos y yo quiero que produzca otras con paréntesis de modo que cambien el resultado de la 1era, es decir, que sea una expresión diferente.
Aunque a diferencia de la analogía, yo quiero que cada resultado pueda ser diferente, no quiero alteraciones que siempre terminen dando lo mismo que otras.
Así se producen todas las combinaciones de texto posibles, o casi:
A
B
C
...
Z
AA
Así se producen todas las expresiones condicionales posibles que no modifican variables:
V1 < V2
V1 <= V2
V1 == V2
V1 != V2
V2 < V1
V2 <= V1
(sep, los símbolos > y => no los uso).
V1 < V2 && V1 < V3
etc, etc
¡Pero llega un punto en que tiene sentido poner paréntesis porque así las expresiones generadas son distintas!
¿Pero exactamente dónde tiene sentido meterlos? Eso es lo que no entiendo. Alguna regla habrá. Dije
"Cuando implican algún "or" no implicado por otros, y hay "&&" fuera."
pero creo que no es correcto.y espero que entonces (al menos), acabes de otorgarle la importancia que merece... y por lo tanto aplicarlo, en vez de querer matarlo (obviarlo).
Me parece que no has entendido.
Nunca dije que los paréntesis fuesen algo "malo", sólo que se me complicaba hacer un programa que generara expresiones con paréntesis que tuvieran razón de ser y entonces quería expresarlas de modo diferente. Es como si quisiera hacer una máquina de hacer anillos usando basura pero como no sé producir diamantes con ella preguntara si hay algo similar (podría ser una laparita). No estoy diciendo que el diamante sea malo, sólo que no sé producirlo bien con las herramientas o materiales que tengo.
Además ya he dicho que los usaré porque sino las expresiones me quedan muy largas. Una posible alternativa sería ifs anidados pero estoy más bien decidido a usar paréntesis. La duda sigue siendo cómo el programa los puede poner. Más o menos ya expliqué esa duda.
¿Eres capaz en esta lista de determinar quienes son los hijos de quién?.[/b] Imposible...
De acuerdo.
Bueno, esta lista de nombres equivale a 'tus' expresiones, y la lista jeráquica a una expresión expresada con paréntesis
Afff, creo que te entendí, pero me estás explicando una cosa que ya sabía.
Me estás diciendo que esto:
V1 < V2 && (V1 < V3 or V2 == V4)
no se puede interpretar igual que esto
V1 < V2 && V1 < V3 or V2 == V4
que sería imposible saber que eso habría que interpretarlo como si la or fuese a aplicarse 1ero.
Si es eso, no te preocupes, lo sabía desde antes (aunque al no saber la forma correcta de interpretar lo último, sí creía que "se podía" como posibilidad, pero no que podía deducirse a ciencia cierta que se había querido decir eso. Es como que alguien escriba "VELA", quite la V, y me pregunte qué escribió, evidentemente puedo adivinar pero sería casualidad).
Lo que no sabía era cómo se interpretaba eso último, así sin paréntesis. Ya me dijeron que las && se aplican antes que las or, lo probé en mi lenguaje y es así, asunto resuelto.Si me estás hablando de otra cosa no estoy de acuerdo con lo que dices (si es lo que pienso). Si te digo que una expresión es así
V1 < V2 && V1 < V3 or V2 == V4
sin paréntesis, es porque no los tiene, ni los requiere. Si los requiriera los pondría, no te preocupes.
No los quitaría por una cuestión estética o algo así,
si los quito es sólo en casos en que sobran.en cambio tus expresiones son solo listas...
Vamos a demostrarlo...
z= A + 3 * 5 - B + W / 5 AND T - 2 + X OR P OR H
Podemos obviar los operadores (nos quedamos con los identificadores y las constantes numéricas)y pongámoslos en columna:
Z
A
3
5
B
W
5
T
2
X
P
H
Como se ve es una lista plana, todos al mismo nivel, todos 'hijos' de un supuesto padre... como tus expresiones.
Yo jamás hice una cosa así ni plantee hacerla Espero que ahora veas claramente adonde lleva no usar paréntesis. Su uso cordina, da sentido específico...
Nunca lo puse en duda.
del mismo modo colocar un paréntesis en sitio equivocado cambia el sentido (y el resultado) de la expresión...
Puede suceder, sí, es parte de lo que quiero que haga mi programa a la hora de ponerlos en las expresiones que genere.
Por las dudas: No es que quiera que mi programa interprete mal las cosas o de forma random, es que quiero que invente expresiones que luego yo usaría en otro sitio. ¿Viste los videojuegos que generan mapas al azar? Bueno, esto sería similar, sólo que en vez de hacer mapas serían expresiones.
es adecuado que ciertos operandos estén entre paréntesis... si deben ejecutarse antes.
Siempre lo tuve claro.
Aunque
en un caso como A<B or (A<C && C==D)
no los usaría. ¿Es un problema? Se supone que el resultado es el mismo. Lo demás va en la forma de entender de cada uno, si le queda fácil o no. A mí los goto me resultan más fáciles que los do while en algunos casos.
Te decía en otro mensaje más arriba, que otra forma es separar una expresión en las subexpresiones que las componen, de modo que sean simples... pero eso da bastante trabajo y tampoco limita la posibilidad de error por confusión...
No me di cuenta. Voy a pensar algunas cosas y si no me funcionan y me acuerdo reviso eso.
Es decir desmontando cada expresión con su propios términos, no requiere paréntesis, pero puedes ver como crece la cantidad de expresiones.
Por eso decidí que el programa sí genere expresiones con paréntesis. Lo entendí por el tema de la propiedad distributiva.
La otra forma como ya he expresado varias veces es la notación polaca (no 'el polaco', ni 'en polaco', no es un idioma notación quiere decir "forma, sistema que se usa para expresar conceptos más o menos abstractos", el tipo que lo ideó era polaco, eso sí...).
xD
Vale.
Resumiendo, no puedes vivir sin paréntesis
Se podría pero sería extenso, como has dicho.
si te cuesta entender los paréntesis
Me cuesta entender cual es la regla que determina donde alteran las interpretaciones. Y si me la has dicho no la he entendido. Una regla es algo así:
"Cuando implican algún "or" no implicado por otros, y hay "&&" fuera."
pero creo que no es correcto.por lo que alcanzo a entender de como te explicas es que tienes alguna función que 'genera' operandos y operadores (ignoro si al azar o si basado en algo específico)... entonces dado lo poco que he leído respcto de lo que intentas hacer, intuyo que tu programa también debe generar los paréntesis, porque como ya te señalé en el punto 1, y como me he extendido en explicaciones a lo largo de la respuesta, son operadores de prioridad, o si quieres jerárquicos (si se entiende como un árbol), cada paréntesis de apertura aumenta (profundiza) la jerarquía y cada cierre la reduce...
Tendré que traer un pseudocódigo para que se entienda
Pero sí, es como dices. El tema es evitar que los ponga en lugares donde no cambiarán los resultados.
en C por ejemplo, un comedero de cabeza para los principantes es olvidarse de terminas las expresiones convenientemente con ';'
Jajaja, en AS es igual.
Lo que me reventaba era Clipper... ni me acuerdo pero creo que ni siquiera te decía en qué línea estaba el problema. Una locura.
Espero que con los ejemplos explícitos que te he expuesto más arriba, puedas finalmente entender la utilidad de la prioridad
Eso lo entiendo, ciertos operadores cambian la prioridad... Que los paréntesis lo hacen lo tuve siempre claro, desde niño digo.