PDA

Ver la Versión Completa : Reconociendo caracteres en un memo


alastor
07-02-2007, 18:05:09
Hola Amigos:
----------------
Mi problema es el siguiente: Estoy tratando de hacer un prog que me ayude a descomponer un trinomio en factores. Pero el problema es que quiero hacerlo utilizando un memo y no encuentro la manera de reconocer en todo lo que escriba en el cuales son el termino cuadrático, el termino lineal y el termino independiente. Si alguien pudiera ayudarme se lo agradeceria.
------------------
Saludos.

Albano
07-02-2007, 19:14:52
Las lineas de un combo son de tipo strnig, que se le puede definir como arreglo o conjunto de caracteres, entonces, el reconocimiento de caracteres lo puedes manejar de la siquiente manera:
Supongamos que tienes el texto "Memo1" en la primera línea del memo1, puedes buscar un número en esta cadena con el siguiente código:
for i := 1 to length(memo1.Lines[0]) do
begin
if memo1.Lines[0][i] in ['0'..'9'] then //el "0" nos indica la linea del memo, el primero siempre es 0, la letra i nos indica la posicion de la cadena
begin
label1.Caption := memo1.Lines[0][i];
label2.Caption := inttostr(i);
end;
end;
Este código identifica dónde esta el caracter numérico y luego lo muestra en una etiqueta llamada label1 y su posición la muestra en la etiqueta llamada label2.
Creo que esto es lo que necesitas en cuanto a programación se refiere.
Espero haber sido de ayuda.

Lepe
07-02-2007, 19:40:52
¿como pretendes escribir el trinomio?

Me explico: Si tienes en el memo:
3x^2 + 33x + 21
Hay que abordar el problema de una forma.

Si lo tienes como:

3
+33
+ 21
puede resultar más fácil

Saludos

alastor
07-02-2007, 20:05:03
El trinomio lo tengo de la primera manera lo que : X²+x+1 por ejemplo donde el x² sale por char(0178).

alastor
07-02-2007, 20:07:03
Albano, muchas gracias por la idea del "in", me ha servido de mucho a la hora de reconocer si es numero o letra.
-------------------
Saludos

Albano
07-02-2007, 20:57:37
Albano, muchas gracias por la idea del "in", me ha servido de mucho a la hora de reconocer si es numero o letra.
Por nada.
De esa manera puedes identificar cada caracter en la linea del memo que desees y descomponer el trinomio de acuerdo con las caracteristicas de cada término, por ejemplo, si quieres encontrar el cuadrado, solo tienes que buscar el "²" y retroceder en la cadena hasta que te encuentres un "+" o un "-" y ese sería el término cuadrático. Ya que encuentras el cuadrático, puedes buscar el lineal, de acuerdo con la letra que te encuentres dentro del cuadrático y el que te sobre sería el independiente... te voy a poner mi idea a grandes rasgos para encontrar el término cuadrático, debe de haber algunas exepciones en las que no funcionaría, sería cuestión de arreglarlo...
if memo1.Lines[0][i] = '²' then
begin
j := i; //a la variable "j" le asigno la posición del caracter "²" para empezar a formar mi cadena
aux := '';
while not(memo1.Lines[0][j] in ['+', '-']) do //repetirá este ciclo hasta que se tope con un "+" o un "-"
begin
aux := memo1.Lines[0][j] + aux; //se está almacenando el termino en una variable de tipo string llamada aux
dec(j); //decremento el valor de j en 1, para retroceder en la cadena
end;
end;
end;

alastor
07-02-2007, 22:13:41
Muchisimas gracias por sus ideas, espero no tener mas dirficultades.
-----------------
Saludos