Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con tMemo (https://www.clubdelphi.com/foros/showthread.php?t=70759)

chino150 09-11-2010 17:43:19

Ayuda con tMemo
 
hola a todos
mi consulta es la siguiente tengo este projecto en la universidad
colocar un memo y un boton, cuando pulse el boton debe demostrar un mensaje informado la cantidad de letras, vocales y consonantes.

nunca e usado el componente TMemo porfavor ayuden me en esto...


gracias de antemano por su ayuda

roman 09-11-2010 17:47:31

La propiedad Text del TMemo contiene todo el texto en un string. Sólo tienes que recorrer la cadena y examinar cada caracter para saber si es vocal o consonante.

// Saludos

chino150 09-11-2010 17:53:11

Cita:

Empezado por roman (Mensaje 381817)
La propiedad Text del TMemo contiene todo el texto en un string. Sólo tienes que recorrer la cadena y examinar cada caracter para saber si es vocal o consonante.

// Saludos

disculpe pero no entiendo me puede demostrar un codigo

ContraVeneno 09-11-2010 17:59:07

A lo que Roman se refiere, es que tienes que hacer un ciclo for:
Cita:

Desde 1 hasta la última línea del memo
Desde la primer letra hasta la última de la línea
si es vocal entonces
vocales mas uno
si no
consonantes mas uno

Muestras total que es igual a las consonantes mas las vocales
Muestras vocales y muestras consonantes
Algo así.. mas o menos... me quedaría la duda de como manejar los caracteres especiales en caso de que existiera alguno, pero si como mencionas, es tarea de tu escuela, pues no creo que haya que preocuparse por eso.

La propiedad Lines del Memo y su propiedad Count te pueden servir de mucho.

Saludos.

Edito... como que me distraje... Roman propone algo más sencillo... yo me quedé pensando en ir línea por línea, pero ciertamente es más sencillo recorrer el texto como menciona Roman...

rrf 09-11-2010 18:36:56

Hola.

Si el memo se llama Memo1, obtienes con la propiedad Text todo el contenido del memo de esta forma Memo1.Text

Lo que haría sería utilizar un bucle "For". Busca en las ayudas y verás como hacerlo. En la práctica, escribe For y luego pulsa Ctrl+J, cuando te aparezcan varias opciones, pulsa directamente Enter y te escribirá casi todo el código.
  • Tienes que declarar 3 variables integer y 1 string.
  • Asigna el contenido de Memo1.text a la variable string.
  • Recorre cada uno de los caracteres de la variable string con el bucle "For". Si la variable es "a" para conocer cual es el tercer caracter usarías "a[3]". Puedes sustituir el valor 3 por el valor de la variable del "For".
  • Ojea en las ayudas Length, pues te será necesario.
  • Comprueba si cada caracter está incluido entre las vocales, consonantes y lo que te hayan pedido. Para ello, por ejemplo, pondría el caracter en minúscula, y vería si está incluido en una cadena con todas las vocales ('aeiou') en minúscula. Para hacer esto, busca en las ayudas las funciones Lowercase y pos.
  • Si está contenido, utiliza if...then (ojea las ayudas) para incrementar el contador de vocales (una de la variables integer).
  • Lo mismo harías con las consonantes.
  • Finalmente presenta el resultado con un mensaje. Ojea en las ayudas Showmessage y InttoStr.

Creo que con toda esta información y un par de ratos que le dediques, lo tienes resuelto.

Espero que te sirva.

Recibe un saludo.

chino150 09-11-2010 20:29:51

Cita:

Empezado por rrf (Mensaje 381827)
Hola.

Si el memo se llama Memo1, obtienes con la propiedad Text todo el contenido del memo de esta forma Memo1.Text

Lo que haría sería utilizar un bucle "For". Busca en las ayudas y verás como hacerlo. En la práctica, escribe For y luego pulsa Ctrl+J, cuando te aparezcan varias opciones, pulsa directamente Enter y te escribirá casi todo el código.
  • Tienes que declarar 3 variables integer y 1 string.
  • Asigna el contenido de Memo1.text a la variable string.
  • Recorre cada uno de los caracteres de la variable string con el bucle "For". Si la variable es "a" para conocer cual es el tercer caracter usarías "a[3]". Puedes sustituir el valor 3 por el valor de la variable del "For".
  • Ojea en las ayudas Length, pues te será necesario.
  • Comprueba si cada caracter está incluido entre las vocales, consonantes y lo que te hayan pedido. Para ello, por ejemplo, pondría el caracter en minúscula, y vería si está incluido en una cadena con todas las vocales ('aeiou') en minúscula. Para hacer esto, busca en las ayudas las funciones Lowercase y pos.
  • Si está contenido, utiliza if...then (ojea las ayudas) para incrementar el contador de vocales (una de la variables integer).
  • Lo mismo harías con las consonantes.
  • Finalmente presenta el resultado con un mensaje. Ojea en las ayudas Showmessage y InttoStr.
Creo que con toda esta información y un par de ratos que le dediques, lo tienes resuelto.

Espero que te sirva.

Recibe un saludo.

esto es lo que yo e logrado esta hora

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
 i,cont:Integer;
begin
Cont := Length( Memo1.Text);
 ShowMessage('La cantidad de letras escritas son: '+(IntToStr(Cont)));
  end;

end.

no e podido lo de las vocales y consonantes

ContraVeneno 09-11-2010 20:39:36

hasta ahí vas bien... ahora sigue hacer un ciclo For para recorrer el texto.

Desde i = 0 hasta cont -1

chino150 09-11-2010 20:50:01

Cita:

Empezado por ContraVeneno (Mensaje 381846)
hasta ahí vas bien... ahora sigue hacer un ciclo For para recorrer el texto.

Desde i = 0 hasta cont -1

disculpe la molestia me pudes ayudar con el codigo estoy bloquiado y debo entregar este projecto hoy

gracia mil

Al González 09-11-2010 20:52:38

Hola. ¿Qué carrera estudias y en que grado vas?

Algo de seudocódigo:

Código:

Vocales = 0
Consonantes = 0

Ciclo para recorrer la variable I desde 1 hasta la longitud de Memo1.Text
  Si el carácter de la posición I de Memo1.Text es vocal entonces:
    Incrementar en uno la variable Vocales
  Else
    Si el carácter de la posición I de Memo1.Text es consonante entonces:
      Incrementar en uno la variable Consonantes


ecfisa 09-11-2010 20:54:09

Hola Chino150.

Te doy una ayudita como evaluar las vocales dentro del for... ;)

Código Delphi [-]
 if Upcase(Memo1.Text[i]) in ['A','E','I','O','U','Á','É','Í','Ó','Ú'] then
     Inc(NumVoc);  // NumVoc: variable de tipo Integer que acumula número de vocales

Saludos. :)

chino150 09-11-2010 20:56:16

Cita:

Empezado por Al González (Mensaje 381850)
Hola. ¿Qué carrera estudias y en que grado vas?

Algo de seudocódigo:

Código:

Vocales = 0
Consonantes = 0
 
Ciclo para recorrer la variable I desde 1 hasta la longitud de Memo1.Text
  Si el carácter de la posición I de Memo1.Text es vocal entonces:
    Incrementar en uno la variable Vocales
  Else
    Si el carácter de la posición I de Memo1.Text es consonante entonces:
      Incrementar en uno la variable Consonantes


estudio ingeneria informatica y estoy en secundo semestre

rgstuamigo 09-11-2010 21:09:20

Yo te voy a dar otra ayudita para saber si un caracter es vocal o consonante.;)
Lo mejor que veo es declarase algunas constantes de esta forma:
Código Delphi [-]
const
Alfabeto=['A'..'Z'];
Vocales=['A','E','I','O','U','Á','É','Í','Ó','Ú'];
Consonantes=Alfabeto-Vocales;:p
De esa forma el código propuesto por ecfisa queda de la siguiente manera:
Código Delphi [-]
if Upcase(Memo1.Text[i]) in Vocales then //<-Vocales ya está definido arriba
     Inc(NumVoc);  // NumVoc: variable de tipo Integer que acumula número de vocales
Para el caso de las consonantes la condicion sería así:
Código Delphi [-]
if Upcase(Memo1.Text[i]) in Consonantes then //<-Consonantes ya está definido arriba
     Inc(NumConso);  // NumConso: variable de tipo Integer que acumula número de consonantes
Creo que ya te lo hemos hecho todo...amigo chino150;).:D
Saludos...:)

chino150 09-11-2010 21:49:49

Esto es lo que e logrado gracias a su ayuda

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
 i,cont,numVoc, numConso :Integer;
 const
 Alfabeto=['A'..'Z'];
 Vocales=['A','E','I','O','U','Á','É','Í','Ó','Ú'];
 Consonantes=Alfabeto-Vocales;
begin
NumVoc := 0;
NumConso := 0;
for i:= 0 to Length(Memo1.Text) - 1 do begin
 if UpCase(Memo1.Text[i]) in Vocales then
 Inc(NumVoc);
 if UpCase(Memo1.Text[i]) in Consonantes then
  Inc(NumConso);
Cont := Length( Memo1.Text);
 ShowMessage(' letras: '+(IntToStr(Cont)) + ' Vocales: '  + (IntToStr(NumVoc))  +'Consonantes:  '+ (IntToStr(NumConso))); ;
  end;
    end;
end.
pero debo de darle varios click al boton del mensaje para llegar al resultado final.

rgstuamigo 09-11-2010 22:21:52

Cita:

Empezado por chino150 (Mensaje 381858)
Esto es lo que e logrado gracias a su ayuda
...
...
...
pero debo de darle varios click al boton del mensaje para llegar al resultado final.

El problema que veo es que el ShowMessage lo has puesto dentro del ciclo for;); la idea principal es que primero se ejecute el ciclo(se haga todo el calculo necesario para saber la cantidad de vocales,consonantes,etc) y al final recien se muestre los resultados, fuera del ciclo for.
De ésta manera:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
 i,cont,numVoc, numConso :Integer;
 const
 Alfabeto=['A'..'Z'];
 Vocales=['A','E','I','O','U','Á','É','Í','Ó','Ú'];
 Consonantes=Alfabeto-Vocales;
begin
NumVoc := 0;
NumConso := 0;
for i:= 0 to Length(Memo1.Text) - 1 do begin //<- aqui empieza el ciclo for
 if UpCase(Memo1.Text[i]) in Vocales then
 Inc(NumVoc);
 if UpCase(Memo1.Text[i]) in Consonantes then
  Inc(NumConso);
  end;//<-Aqui termina el ciclo for ;)
Cont := Length( Memo1.Text);
 ShowMessage(' letras: '+(IntToStr(Cont)) + ' Vocales: '  + (IntToStr(NumVoc))  +'Consonantes:  '+ (IntToStr(NumConso))); ;
    end;
end.
Nota: seguro está que tu código se puede optimizarlo mejor, pero como eres nuevo en programacion no te voy a exigir demasiado.;):D
Saludos..:)


La franja horaria es GMT +2. Ahora son las 18:34:46.

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