Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas para realizar una curp necesito algo de ayuda (https://www.clubdelphi.com/foros/showthread.php?t=73405)

madrid_cr7 19-04-2011 05:01:33

Problemas para realizar una curp necesito algo de ayuda
 
Pues ya me desespere y acudo a ustedes para ver que se soluciona les pongo el codigo y despues lo que sale mal.

Cita:

var
a,c,d:string;
b,I:integer;
begin
a:=copy(edit1.Text,1,1);
b:=length(edit1.Text);
For I:= 2 to b do
begin
c:=copy(edit1.Text,I,1);
if c='A' then
begin
d:='A';
b:=I;
end;

if c='E' then
begin
d:='E';
b:=I;
end;

if c='I' then
begin
d:='I';
b:=I;
end;

if c='O' then
begin
d:='O';
b:=I;
end;

if c='U' then
begin
d:='U';
b:=I;
end;
end;
edit9.Text:=concat(a,d);
end;
Bueno lo que quiero es copiar la primer vocal del apellido paterno que es el edit1.text pero me copia la ultima vocal. si pongo ALVARADO me pone AO que seria la primera letra del apellido y la primer vocal del apellido sin contar la primer letra pero en vez de eso me pone la ultima vocal.

otras dudas.
si para cerrar el bucle FOR pongo I:=b; me sale error y me dice "Assignment to FOR-Loop variable 'I'" por eso b:=I; pero al parecer no me lo cierra y se va hasta el final y por me copia la ultima vocal.

oscarac 19-04-2011 05:24:55

no entiendo
quieres sacar la Primera Vocal de lo que coloques en el EDIT

ejemplo
si Colocas Alvarado debe mostrar la A ?
si colocas Colmenares debe mostrar la O ?
si colocar swchgener debe mostrar la E ?

oscarac 19-04-2011 05:26:58

P.D.

cuando coloques codigo delphi utiliza el icono del partenon para poder entenderlo bien

madrid_cr7 19-04-2011 05:29:05

Cita:

Empezado por oscarac (Mensaje 397536)
no entiendo
quieres sacar la Primera Vocal de lo que coloques en el EDIT

ejemplo
si Colocas Alvarado debe mostrar la A ?
si colocas Colmenares debe mostrar la O ?
si colocar swchgener debe mostrar la E ?

si pero la primera vocal a partir de la segunda letra del apelldo pues la variable a la uso para copiar la primer letra del apelldo a:=copy(edit1.Text,1,1);
y la d la estoy usando para la primer vocal a partir de la segunda letra hasta el final.

oscarac 19-04-2011 05:52:00

disculpa pero sigo sin entender
podrias colocar ejemplos de como quieres que te salga?
algo asi como lo que te puse yo

ecfisa 19-04-2011 06:06:57

Hola madrid_cr7.

Debo reconocer que no estoy menos desorientado que oscarac con la explicación...

Pero si me atengo 'literalmente' a tu pedido:
Cita:

si pero la primera vocal a partir de la segunda letra del apelldo
Debería ser:
Código Delphi [-]
function DameLaSegundaVocal(Cad: string): char;
var
  i: Integer;
begin
  i:= 2;
  while not (UpCase(Cad[i]) in ['A','E','I','O','U']) do Inc(i);
  Result:= Cad[i];
end;

Llamada de ejemplo:
Código Delphi [-]
   Edit1.Text:= 'Albeniz';
   ShowMessage(DameLaSegundaVocal(Edit1.Text)); //  letra 'e'

Un saludo.

madrid_cr7 19-04-2011 06:32:52

Cita:

Empezado por oscarac (Mensaje 397539)
disculpa pero sigo sin entender
podrias colocar ejemplos de como quieres que te salga?
algo asi como lo que te puse yo

Si mira mira debo hacer que alguien escriba su apellido en el edit1.text y luego copio la primer letra eso ya lo hice con lo siguiente "a:=copy(edit1.text,1,1);

hasta ahi va bien todo ahora con lo que resta del apellido tomar la primer vocal que este. ejemplo

OSAMA - seria la A
ESHJOS - seria la O
PEDROZA - seria la E.

cuando dije a partir de la segunda letra me refiero a que la primer letra ya la copie y esa letra se descarta aunque sea vocal, y con lo que resta del nombre ejemplo de OSAMA la O a la copie tengo que tomar la primer vocal con lo que resta del apellido que seria SAMA.

Cita:

Empezado por ecfisa (Mensaje 397540)
Hola madrid_cr7.

Debo reconocer que no estoy menos desorientado que oscarac con la explicación...

Pero si me atengo 'literalmente' a tu pedido:

Debería ser:
Código Delphi [-]function DameLaSegundaVocal(Cad: string): char; var i: Integer; begin i:= 2; while not (UpCase(Cad[i]) in ['A','E','I','O','U']) do Inc(i); Result:= Cad[i]; end;

Necesito que sea con FOR o con While porque solo eso me permiten usar
por eso quiero ver cual es mi error en el ejemplo que puse arriba ya
tengo toda la curp hecha solo me falta eso es mi unico error



Llamada de ejemplo:
Código Delphi [-] Edit1.Text:= 'Albeniz'; ShowMessage(DameLaSegundaVocal(Edit1.Text)); // letra 'e'


Un saludo.


madrid_cr7 19-04-2011 06:34:30

Cita:

Empezado por ecfisa (Mensaje 397540)
Hola madrid_cr7.

Debo reconocer que no estoy menos desorientado que oscarac con la explicación...

Pero si me atengo 'literalmente' a tu pedido:

Debería ser:
Código Delphi [-]function DameLaSegundaVocal(Cad: string): char; var i: Integer; begin i:= 2; while not (UpCase(Cad[i]) in ['A','E','I','O','U']) do Inc(i); Result:= Cad[i]; end;


Llamada de ejemplo:
Código Delphi [-] Edit1.Text:= 'Albeniz'; ShowMessage(DameLaSegundaVocal(Edit1.Text)); // letra 'e'


Un saludo.

Necesito que sea con FOR o con While porque solo eso me permiten usar
por eso quiero ver cual es mi error en el ejemplo que puse arriba ya
tengo toda la curp hecha solo me falta eso es mi unico error

ecfisa 19-04-2011 06:46:19

Hola madrid_cr7.

Cita:

Necesito que sea con FOR o con While porque solo eso me permiten usar...
Entonces, no veo el problema... Mirá con atención el código que te puse más arriba:
Código Delphi [-]
...
var
  i: Integer;
begin
  i:= 2;
  while not (UpCase(Cad[i]) in ['A','E','I','O','U']) do Inc(i);
  ...

Si te referis a que no te permiten usar una función, incorporá a tu código la porción de la función correspondiente a la extracción de la primera
vocal a partir de la segunda letra.

En tu caso basta con reemplazar Cad[i] por Edit1.Text[i] (que es donde está el apellido) y al salir del ciclo while, tendrás la vocal buscada en Edit1.Text[i] ...

Edito: Veo que la variable 'i' está declarada en tu procedimiento, función o cuerpo de programa. Por lo que supongo que deberías usar otra como contador del while.

Un saludo.

ElKurgan 19-04-2011 07:04:08

Creo que lo que te falta es poner un break o un exit en cuanto encuentre una vocal. Tal como lo tienes, si encuentra la segunda vocal va bien, pero sigue dentro del bucle for.

Pruebalo y nos lo comentas

Saludos

ecfisa 19-04-2011 07:16:05

Hola de nuevo madrid_cr7.

No había reparado pero este hilo estaba en el foro Internet, al igual que este otro tuyo: Necesito ayuda para un ... que también fué movido.
Los temas relacionados con programación en general tienen su lugar en el foro OPP o en Varios. Esto es a fín de que si un día tenés un
problema de internet (por ejemplo) y busques la solución en ese foro, no te encuentres viendo mensajes de como se usa el Quick Report... :)

Si dudás donde pueda ir tu mensaje, ponelo en el foro Varios y algún moderador se encargará de reubicarlo si así corresponde.

Un saludo y muchas gracias.

madrid_cr7 19-04-2011 07:21:47

ecfisa:
agradesco mucho tu ayuda pero no logro entender, esque yo apenas soy principiante en esto, no podrias corregir el codigo que puse arriba agregando lo que tu me dices y quitando lo que no deberia ir?

Elkurgan:
el exit tengo entendido que finaliza el programa, el break jamas lo he usado, como lo usaria para que en cuanto encuentre la vocal se salga del bucle for y continue con el demas codigo?

Les agradesco mucho a los 3 por tomarse su tiempo.

ecfisa 19-04-2011 07:51:41

Hola madrid_cr7.


Si en Edit9.Text tiene que quedar la primera vocal a partir del segundo caracter del apellido, tu código reformado quedaría así:
Código Delphi [-]
var
  i:integer;
begin
  i:= 2;
  while not (UpCase(Edit1.Text[i]) in ['A','E','I','O','U']) do Inc(i);
  Edit9.Text:= Edit1.Text[1]+Edit1.Text[i];
end;
Te explico que es lo que hace: La primera letra hay que ignorarla sea vocal o consonante y a partir de la segunda recorremos la cadena incrementando la variable 'i' hasta que encuentra una vocal. Alli termina el ciclo while y por supuesto el valor 'i' tiene la posición de la
primera vocal encontrada a partir del segundo caracter. Esa posición es usada como subindice de Edit1.Text[i] para obtener el caracter
buscado.
La función UpCase convierte a mayúsculas lo que estamos comparando, por que no es lo mismo 'A' que 'a', sin ella tendría que haber echo:
Código Delphi [-]
  while not (Edit1.Text[i] in ['A','E','I','O','U','a','e','i','o','u']) do
Al finalizar el ciclo while, se asigna a Edit9.Text la vocal encontrada en Edit1.Text[i].

Si hay algo que no te quedó en claro decimelo y lo vamos a ir tratando de aclarar.

Un saludo.

oscarac 19-04-2011 08:00:27

hice esto rapidamente

la idea es que despues de digitar el apellido en el edit presiono un boton y me sale el label con la primera letra y la primera vocal

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var i: Integer;
_PrimeraLetra, _PrimeraVocal, _Letra, _Linea :string;

begin
  _PrimeraLetra := '';
  _PrimeraVocal := '';
  _Linea := Edit1.Text;
  _primeraLetra := Copy(_Linea,1,1);
  For i := 2 to Length(_linea) do
  Begin
    _Letra := Copy(edit1.Text, i,1);
    if (_letra = 'A') or (_letra = 'E') or (_letra ='I') or (_Letra = 'O') or (_letra = 'U') then
       Begin
       _PrimeraVocal := _Letra;
       Break;
       End;
  End;
  Label1.Caption := _PrimeraLetra + _PrimeraVocal;
end;

fijate si te es de utilidad

madrid_cr7 19-04-2011 08:08:42

Cita:

Empezado por ecfisa (Mensaje 397548)
Hola madrid_cr7.


Si en Edit9.Text tiene que quedar la primera vocal a partir del segundo caracter del apellido, tu código reformado quedaría así:
Código Delphi [-]var i:integer; begin i:= 2; while not (UpCase(Edit1.Text[i]) in ['A','E','I','O','U']) do Inc(i); Edit9.Text:= Edit1.Text[i]; end;

Te explico que es lo que hace: La primera letra hay que ignorarla sea vocal o consonante y a partir de la segunda recorremos la cadena incrementando la varialbe 'i' hasta que encuentra una vocal. Alli termina el ciclo while y por supuesto el valor 'i' tiene la posición de la
primera vocal encontrada a partir del segundo caracter. Esa posición es usada como subindice de Edit1.Text[i] para obtener el caracter
buscado.
La función UpCase convierte a mayúsculas lo que estamos comparando, por que no es lo mismo 'A' que 'a', sin ella tendría que haber echo:
Código Delphi [-] while not (Edit1.Text[i] in ['A','E','I','O','U','a','e','i','o','u']) do

Al finalizar el ciclo while, se asigna a Edit9.Text la vocal encontrada en Edit1.Text[i].

Si hay algo que no te quedó en claro decimelo y lo vamos a ir tratando de aclarar.

Un saludo.

Muchisimas Gracias, ya quedo el programa ya me toma la primer vocal a partir de la segunda letra, gracias por todo me salvaste la vida.


Cita:

Empezado por oscarac (Mensaje 397549)
hice esto rapidamente

la idea es que despues de digitar el apellido en el edit presiono un boton y me sale el label con la primera letra y la primera vocal

Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject); Var i: Integer; _PrimeraLetra, _PrimeraVocal, _Letra, _Linea :string; begin _PrimeraLetra := ''; _PrimeraVocal := ''; _Linea := Edit1.Text; _primeraLetra := Copy(_Linea,1,1); For i := 2 to Length(_linea) do Begin _Letra := Copy(edit1.Text, i,1); if (_letra = 'A') or (_letra = 'E') or (_letra ='I') or (_Letra = 'O') or (_letra = 'U') then Begin _PrimeraVocal := _Letra; Break; End; End; Label1.Caption := _PrimeraLetra + _PrimeraVocal; end;


fijate si te es de utilidad

Gracias amigo por tu ayuda pero ya se resolvio con el metodo de ecfisa.

un saludo a los 2 y gracias

oscarac 19-04-2011 08:11:01

ah ok..
es que como dijiste que debias hacerlo con for....

madrid_cr7 19-04-2011 08:14:12

Cita:

Empezado por oscarac (Mensaje 397549)
hice esto rapidamente

la idea es que despues de digitar el apellido en el edit presiono un boton y me sale el label con la primera letra y la primera vocal

Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject); Var i: Integer; _PrimeraLetra, _PrimeraVocal, _Letra, _Linea :string; begin _PrimeraLetra := ''; _PrimeraVocal := ''; _Linea := Edit1.Text; _primeraLetra := Copy(_Linea,1,1); For i := 2 to Length(_linea) do Begin _Letra := Copy(edit1.Text, i,1); if (_letra = 'A') or (_letra = 'E') or (_letra ='I') or (_Letra = 'O') or (_letra = 'U') then Begin _PrimeraVocal := _Letra; Break; End; End; Label1.Caption := _PrimeraLetra + _PrimeraVocal; end;


fijate si te es de utilidad

Bueno aqui solo para decir que al final me decidi por tu metodo, aunque ambos funcionan, el tuyo utiliza lo que he visto en cambio el de ecfisa usa cosas que no he visto y no valla a ser que no me lo acepten.

una vez mas gracias a ambos

mRoman 21-08-2011 16:12:54

Cogido CURP
 
Hola ....

Fijate que navengando en buscar de información acerca de como calcular la CURP (en México), di con tu post el cual segun el primer mensaje posteado que dice "Problemas para realizar una curp necesito algo de ayuda", preguntas acerca de como obtener la segunda vocal.....bueno fijate que yo ando en busca de código para calcular la CURP y me preguntaba si pudieras compartir tu codigo aqui en el foro....

Te agradezco.Saludos.


La franja horaria es GMT +2. Ahora son las 06:31:56.

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