Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Post Expresiones algebraicas

Saludos. Me gustaría saber como poder obtener la solución de una expresión algebraica de primer y/o segundo grado. Os refresco la memoria porque parece que el único que sigue en el instituto soy yo xD.

1er grado:

x - (3x + 90)/5 = x/3

Creo que x = 1350

2do grado.

y + x = 22 - 3y
2y = 12 - x

Aquí x=2 & y=5

Pues me gustaría saber como se pueden calcular con delphi, a mi no se me ocurre ninguna manera :S.
Responder Con Cita
  #2  
Antiguo 20-02-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Cita:
Empezado por rauros
Os refresco la memoria porque parece que el único que sigue en el instituto soy yo xD.

1er grado:

x - (3x + 90)/5 = x/3

Creo que x = 1350
Creo que al que hay que refrescar la memoria es a ti .

Lo primero que debes hacer antes de programarlo es saber hacerlo en papel.

Para empezar se me ocurre que deberías analizar la expresión, introducida como un string, identificando cada uno de los operandos de la ecuación separados por + o -. En el ejemplo anterior sería x, -(3x + 90)/5 y x/3 sabiendo en cada momento a que lado del igual se encuentra cada operando.

Expresiones como -(3x + 90)/5 tendrás que descomponerlas hasta llegar a expresiones simples -3x/5, -18. En caso de que haya expresiones complejas dentro de otras expresiones complejas deberías utilizar recusividad.

El siguiente paso sería obtener todos los divisores (aqui tenemos 3 y 5) para hallar em mínimo común múltiplo y eliminarlos. En este caso tendriamos como mínimo común múltiplo el 15.

Una vez calculado el mínimo común multiplo eliminaríamos los divisores, obteniendo una expresión más simple. 15x - 9x - 270 = 5x.

Ahora sólo faltaría calcular el factor que múltiplica la incognita y despejar.

Par el caso en que se tenga dos variables con dos ecuaciones el caso sería paracido a lo comentado anteriormente para despejar una de las variables y luego reemplazar en la otra ecuación para terminar haciendo exactamente los mismos pasos que en el caso anterior.

Ten en cuenta que esto es sólo una idea de como abordar el problema que se me ocurrio sobre la marcha, seguro que analizando se puede llegar a un método mucho mejor, pero para darte un enfoque de como resolver le problema creo que puede valer.

Un saúdo y espero que te sirva de ayuda.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #3  
Antiguo 20-02-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Tranquilo, yo desde la hoja ya se hacerlo, de todas las formas. Lo que pasa es que nunca he usado string. Tengo un libro de delphi 7 pero tiene 1052 paginas, de las cuales solo me he leído 3 jaj. Supongo que habrá que decirle a string separar cada signo de +-/* y excepción al primer número. El problema es que no sé como hacer eso. Yo de mientras iré pensando algo para hacer con cada numero y signo.
Responder Con Cita
  #4  
Antiguo 20-02-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Puedes empezar mirando bucles, recursividad y las funciones Copy, Length, StrToInt, IntToStr, FloatToStr, StrToFloat y StringReplace entre otras. Según vayas avanzando con el proyecto y tengas dudas puedes postearlas y te ayudaremos con gusto.

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #5  
Antiguo 20-02-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

También es bueno que te documentes sobre la Notación Polaca Inversa la cual se usa para resolver este tipo de problemas...



Saludos...
Responder Con Cita
  #6  
Antiguo 20-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por rauros Ver Mensaje
2do grado.

y + x = 22 - 3y
2y = 12 - x

Aquí x=2 & y=5
Temo informarte de que eso no son ecuaciones de segundo grado. De segundo grado son cuando la única incógnita está elevada al cuadrado. Eso que has puesto es un sistema de dos ecuaciones con dos incógnitas.


Salu2.
Responder Con Cita
  #7  
Antiguo 20-02-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Lol? Pos estoy equivocado, con lo de segundo grado me quería referir a que tiene más de una incógnita. Perdón.
Responder Con Cita
  #8  
Antiguo 20-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por rauros Ver Mensaje
Lol? Pos estoy equivocado, con lo de segundo grado me quería referir a que tiene más de una incógnita. Perdón.
jeje , no pasa nada, ¡pero que no te oiga el profesor!
Responder Con Cita
  #9  
Antiguo 20-02-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Jaj muy buena. Ahora estoy leyendo y intentando entender los comandos. Si lo que yo he entendido de cada uno es (mirad si estoy equivocado):

·Copy De este más bien poco. (¿copiar y pegar?)

·Lenght(s) El tamaño de s en número.

·StrToInt Intenta introducir un valor string a otro integer.

·IntTostr Intenta introducir un valor integer a otro string.

·floatToStr Intenta introducir un valor float (con decimales??) a otro string.

·StringReplace De esté no entendí nada.

Toda la ayuda la intente sacar de la ayuda rápida (f1). Gracias a todos por ayudarme en mis proyectos. Ahora, he leído sobre la notación polaca inversa, pero no sé que se le puede atribuir a lo que quiero hacer :S.

EDITADO: Manejo a la perfección for y if then else por si sirve de algo.

Última edición por rauros fecha: 20-02-2008 a las 18:41:29. Razón: Añadir más datos.
Responder Con Cita
  #10  
Antiguo 20-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola Rauros,
La explicación viene así:

1. Copy: copia de un string a otro. El primer parámetro es el texto a copiar (puede ser una variable string), el segundo desde que posición empieza a contar, y el tercero la cantidad de caracteres a copiar.

UnString := Copy('Hola mi nick es Delphius',1,4');

En este caso el resultado es 4.

2. Los formatos xxxToyyy no es que intentan introducir, sino que convierten del tipo xxx al tipo yyy. Por ejemplo: StrToInt lo que hace es convertir un string a un integer.

Si acercaste a medias al decir intenta. Pues si el string que se suministra como parámetros es inválido (no reconocido como un número) se producirá un error (mejor dicho excepción).

StringReplace: Reemplaza un string por otro. Recibe en orden, el texto a analizar, el string a reemplazar, el string por cual reemplazar. Y el último parámetro es un tanto "especial" Dependiendo de lo introduzcas puedes hacer que reemplaze todas las ocurrencias, que solamente sea la primera, y/o que sea case sensitive.

EDITO:
El manejo de la notación polaca inversa permite escribir las escuaciones de manera más fácil para hacer las operaciones. Al escribir (a(b + c))/3 + 2
Se te hace más dificil programar el algoritmo de resolución. Pues debes tener en cuenta la posición de los paréntesis e ir resolviendolos en dicho orden:
1) (b + c), digamos que tenemos una variable aux que guarda el valor. Y nos queda: aux = b + c
2) (a*aux), lo que nos lleva a aux = aux * a
3) aux/3, que nos da un aux = aux/3
4) aux + 2, que nos da un aux = aux + 2
5) aux. Queda en aux el valor conseguido.

Con el método de notación polaca inversa, se ingresa los operandos y las operaciones en el orden en que se resuelven, y por tanto te olvidas de los paréntesis y otras operaciones complejas. Si no falla el dedo viene así:
bc+a*3/2+

Que se lee así:
1. bc+: sumar b a c y guardar valor en c, c = c + b
2. ca*: multiplicar c por a y guardar valor en a, a = a * c
3. a3/: dividir el valor de a en 3, guardar en a, a = a/3
4. a2+: sumar 2 a a, guardar valor en a, a = a + 2.

¿Ves la diferencia? La lectura de las operaciones se hace en forma directa. Mientras que con el primero debes ir de "adentro" hacia "afuera"

Espero que esto pueda aclararte una idea, además de este método piensa en un bucle y en sentencias CASE. Creo que con estas pistas, ya te podrías imaginar algún algoritmo.

Por cierto, quisiera preguntarte hasta que tamaño de sistemas de ecuaciones deseas resolver. Porque el algebra tiene una herramienta poderosa para resolver sistemas de ecuaciones. Un método se conoce bajo el nombre de su "inventor": Gauss-Jordan.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 20-02-2008 a las 19:21:19.
Responder Con Cita
  #11  
Antiguo 20-02-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por rauros Ver Mensaje
Toda la ayuda la intente sacar de la ayuda rápida (f1). Gracias a todos por ayudarme en mis proyectos. Ahora, he leído sobre la notación polaca inversa, pero no sé que se le puede atribuir a lo que quiero hacer :S.

EDITADO: Manejo a la perfección for y if then else por si sirve de algo.
Para resolver operaciones matemáticas desde un programa, pasándole a este un string del tipo (5 + 8) * 9 (notación Infija), es necesario convertir esa operación a notación postfija (o polaca inversa): 9 * 5 8 +

Para resolver esto necesitas una estructura tipo LIFO (Last In First Out), la más usada es una pila.

En la web puedes encontrar varios algoritmos para convertir de infijo a postfijo.


Saludos...

P.D. Veo que Delphius ya dio una explicación sobre esto...
Responder Con Cita
  #12  
Antiguo 20-02-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Lo primero, muchísimas gracias, que se os ve con muchísimo ánimo para ayudar, y yo no puedo hacer nada por vosotros, así que me siento súper agradecido. Empezando, sigo sin entender una cosa. Las operaciones de álgebra tienen un igual en medio, y operaciones a derecha e izquierda. Ejemplo
Código:
  | izquierda
  |     |Derecha
  |     |
a + 4 = 2a  //Aquí  a = 4


Pues me gustaría que me enseñaran como llegar a transformar eso en la notación polaca inversa.

Yo pienso que esto sería a4+ = a*2 (pero esto no llegaría a ninguna parte en delphi)

NOTA: he leído sobre la eliminación gaussiana pero se ve que tengo la mente aun poco madura para entender esas cosas.

Última edición por rauros fecha: 20-02-2008 a las 19:43:58. Razón: Agradecimientos
Responder Con Cita
  #13  
Antiguo 20-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Rauros, veo que vas entendiendo. La notación hungara te servirá para ir resolviendo las ecuaciones miembro a miembro. Lo que tu deberías resolver es el pasaje de un miembro a otro, al igual que con la notación normal, hasta conseguir que en miembro quede el resultado y en el otro la variable.

Con tu ejemplo sería asi:
a4+ = 2a*
Resto a ambos miembros:
4 = 2a*a-

Y para comprobar que es correcto, sustituímos el valor en dicha ecuación:

4 = 24*4- // Se mutiplica 2 y 4
4 = 84- // se resta 4 a 8
4= 4 // Se cumple la operación

Esto es relativamente simple cuando se trata de una sola ecuación.

Pero cuando se trata de sistemas de m ecuaciones con m incognitas es un poco más lioso. En estos momentos tengo la cabeza en otra parte... y creo estoy mezclando cosas... si logro mantener la mente en calma y recuerdo algo te ayudo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 20-02-2008 a las 20:58:22.
Responder Con Cita
  #14  
Antiguo 20-02-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Si pero a mi el gauss-jordan me parece más difícil que hacer una bomba nuclear con un Mc menú infantil y un litro de horchata...
Responder Con Cita
  #15  
Antiguo 20-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
rauros, disculpa estuve mezclando temas... gauss-jordan no es útil en este caso...

Nos estamos liando... Supuestamente estamos resolviendo igualación de ecuaciones ¿No es cierto?

Gauss-Jordan es para resolver sistemas de ecuaciones. Es otra cosa.

edite mi mensaje anterior.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #16  
Antiguo 20-02-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Y yo pensando que esto sería algo sencillo... De todos modos no pienso parar de buscar información hasta que no lo termine. Si encuentro algo relacionado lo aviso aquí.
Responder Con Cita
  #17  
Antiguo 20-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por rauros Ver Mensaje
Y yo pensando que esto sería algo sencillo... De todos modos no pienso parar de buscar información hasta que no lo termine. Si encuentro algo relacionado lo aviso aquí.
Bueno, por fin te diste cuenta de que en ocasiones lo sencillo es realmente más complicado de lo que es.
Lamento haberte mantenido así, pero sabiendo que te estás iniciando preferí buscar el modo en que tu te sientes a buscar a informarte sobre el tema en vez de irte tal vez por una solución barata.

En ocasiones la cura es peor que la enfermedad. Y sabiendo que estás iniciandote, peor aún.

¿Te digo un secreto? Existen componentes Delphi que hacen estos tipos cosas. No los he probado, ni conozco sus nombres. Pero de que los hay es muy seguro.

Si yo te decía que existen estos componentes, muy seguramente no hubiera despertado el interés de comprender la complejidad del tema y haberte formado el sentido lógico. Espero que no lo tomes a mal.
El problema al que puedes ver sometido con estos componentes es:
1. Como instalarlos.
2. Como usarlos.

En torry.net vas a tener más chances de encontrarlos.

Si es para una "tarea", habría que buscar la manera de simplificar el problema ¿No te parece?
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #18  
Antiguo 20-02-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
No me lo tomo a mal, no quiero una solución barata, yo siempre quiero entender lo que estoy programando, y si en ocasiones no puedo entenderlo, no lo uso. Así que buscaré uno para ver como funciona, y lo pondré por aquí para comentarlo entre todos, ya que yo me voy a marear en las lineas de comentario.
Responder Con Cita
  #19  
Antiguo 21-02-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
He visto que si que hay una, pero que es de pago :S. Yo no puedo permitirme pagar por tales cosas, así que deberé abandonar por falta de métodos. Es que por mucho que le de vueltas a la cabeza no se si el problema es más matemático o más funciones delphi...
Responder Con Cita
  #20  
Antiguo 22-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por rauros Ver Mensaje
He visto que si que hay una, pero que es de pago :S. Yo no puedo permitirme pagar por tales cosas, así que deberé abandonar por falta de métodos. Es que por mucho que le de vueltas a la cabeza no se si el problema es más matemático o más funciones delphi...
Rauros, no nos supiste decir de si se trata de una tarea. Si lo estabas haciendo con el fin de practicar no hay problema, pero si se trata de una tarea hazla, al menos presenta lo que hayas entendido.

Independientemente de si se trata de una cuestión de aprender para práctica y/o si es un trabajo, no te rindas. De poder se puede, y en la informática tenemos la regla de que todo se puede.

Si te cuesta tanto, lo que debes hacer es acotar los límites del sistema, achicarlo un poco y trabajar sobre ello, una vez que consigas eso y si ves que te resulta viable continuar ampliarlo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Expresiones en QuickReport (Delphi 7) Carlos A Ortega Impresión 5 12-06-2007 11:55:09
expresiones regulares en sql jonmendi SQL 1 24-12-2004 15:28:39
Expresiones en QReport StartKill Impresión 4 31-05-2004 23:20:29
Expresiones matemáticas Pandre Varios 0 04-09-2003 01:43:49
Expresiones regulares roman Varios 1 18-08-2003 17:08:37


La franja horaria es GMT +2. Ahora son las 16:22:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi