PDA

Ver la Versión Completa : Codificar un string en Delphi.


napsterk89
21-06-2013, 14:39:35
Hola, hace muy poco estoy aprendiendo a programar en Delphi. Actualmente estoy cursando una carrera de Técnico en Programación y me estoy metiendo en el tema.
Tengo un problema en el cual se me acabaron las ideas y necesito algo de ayuda. Si alguién tiene alguna idea para darme estaría agradecido...

Necesito hacer un programa a el cual cuando le ingrese un texto tome todas las palabras pares e intercambie su primera y última letra. Por ejemplo, si ingreso "El día está lluvioso" me devuelva "Le día áste Oluviosl".

Hasta ahora tengo esto, obviamente no funciona pero tiene cosas que sirven, solo no se como "ordenarlo" para hacerlo funcionar.
Una cosa más. En este prog no me permiten el uso de Arrays.
Gracias!




program ASD;

uses
sysutils,
dialogs;

Var TEXTO,car1,PALABRA,car2,car,mensaje:string; i,c:integer;

BEGIN

Mensaje:=INPUTBOX('Ingresar mensaje','Ingrese un mensaje','');
TEXTO:='';
FOR i:=1 TO Length(Mensaje) DO
Begin
CAR:=COPY(Mensaje,i,1);
TEXTO:=TEXTO+CAR;
End;
IF (CAR=' ') AND (Length(texto) MOD 2 = 0 )
THEN
BEGIN
CAR1:=COPY(texto,1,1);
DELETE(texto, 1, 1);
CAR2:=COPY(texto,Length(texto), 1);
DELETE(texto,Length(texto),1);
TEXTO:= CAR2+texto+CAR1;
end;

SHOWMESSAGE(TEXTO);


end.

Alejandro73
21-06-2013, 16:39:56
Estimado

Para que necesitas realizar lo que comentas, es parte de una tarea de algun ramo?

Saludos

maeyanes
21-06-2013, 16:55:33
Hola...

Prueba con esto:


program ASD;

uses
sysutils, dialogs;

Var
Texto: string;
Car: string;
Car1: string;
Car2: string;
Palabra: string;
Mensaje: string;
I: Integer;

begin
Mensaje := InputBox('Ingresar mensaje', 'Ingrese un mensaje', '');
Texto := '';
// Recorremos todo el mensaje
For := 1 to Length(Mensaje) do
begin
// Obtenemos el siguiente caracter
Car := Copy(Mensaje, I, 1);
// Si no es un espacio en blanco, lo concatenamos con Texto
if Texto <> ' ' then
Texto := Texto + Car
else
// Si la longitud de la palabra es par, hacemos el intercambio
if Length(Texto) mod 2 = 0 then
begin
Car1 := Copy(Texto, 1, 1);
Palabra := Copy(Texto, 2, Length(Texto) - 1);
Car2 := Copy(Texto, Length(Texto), 1);
Palabra := Car2 + Palabra + Car1;
ShowMessage(Palabra);
Texto := ''
end
end
end.

napsterk89
21-06-2013, 16:57:13
En realidad me lo tomaron en un examen de "Introducción a la Programación" y no lo supe resolver. Mis conocimientos sobre Delphi son muy básicos pero me interesa mucho. Supuestamente tengo el conocimiento para resolverlo, pero la verdad es que estoy careciendo de ideas xD

napsterk89
21-06-2013, 17:01:35
Hola...

Prueba con esto:


program ASD;

uses
sysutils, dialogs;

Var
Texto: string;
Car: string;
Car1: string;
Car2: string;
Palabra: string;
Mensaje: string;
I: Integer;

begin
Mensaje := InputBox('Ingresar mensaje', 'Ingrese un mensaje', '');
Texto := '';
// Recorremos todo el mensaje
For := 1 to Length(Mensaje) do
begin
// Obtenemos el siguiente caracter
Car := Copy(Mensaje, I, 1);
// Si no es un espacio en blanco, lo concatenamos con Texto
if Texto <> ' ' then
Texto := Texto + Car
else
// Si la longitud de la palabra es par, hacemos el intercambio
if Length(Texto) mod 2 = 0 then
begin
Car1 := Copy(Texto, 1, 1);
Palabra := Copy(Texto, 2, Length(Texto) - 1);
Car2 := Copy(Texto, Length(Texto), 1);
Palabra := Car2 + Palabra + Car1;
ShowMessage(Palabra);
Texto := ''
end
end
end.



Probé pero ingreso el texto y queda en un loop o algo así porque no da ningún resultado. Gracias igualmente, mientras sigo intentando xD

"Palabra := Copy(Texto, 2, Length(Texto) - 1);" eso es una buena idea en lugar de usar el Delete, no se me había ocurrido!

maeyanes
21-06-2013, 17:42:21
Hola...

El código anterior lo escribí al vuelo y basándome en el código que tenías, así que tiene algunos errores...

La línea Palabra := Copy(Texto, 2, Length(Texto) - 1) en realidad debería decir: Palabra := Copy(Texto, 2, Length(Texto) - 2), para que obtenga la subcadena sin el primer y último caracter.

Ahora, esta es una versión ya comprobada:


var
C: string;
C1: string;
C2: string;
Texto: string;
Palabra: string;
Mensaje: string;
I: Integer;

begin
Texto := InputBox('Ingresar mensaje', 'Ingrese un mensaje', '');
Palabra := '';
for I := 1 to Length(Texto) do
begin
C := Copy(Texto, I, 1);
// Vamos formando la palabra a analizar
if C <> ' ' then
Palabra := Palabra + C;
// Si es un espacio en blanco o ya llegamos al final del texto
if ((C = ' ') or (I = Length(Texto))) then
begin
// Si la longitud es par, hacemos el intercambio
if Length(Palabra) mod 2 = 0 then
begin
// Obtenemos el primer caracter
C1 := Copy(Palabra, 1, 1);
// Obtenemos el último caracter
C2 := Copy(Palabra, Length(Palabra), 1);
// Obtenemos la subcadena sin el primer y último caracter
Palabra := Copy(Palabra, 2, Length(Palabra) - 2);
// Concatenamos la cadena con el primer y último caracteres invertidos
Palabra := C2 + Palabra + C1
end;
// Armamos el mensaje a mostrar
Mensaje := Mensaje + ' ' + Palabra;
Palabra := ''
end
end;
// Mostramos el mensaje ya procesado (Trim elimina los espacios en blanco al inicio y final de la cadena)
ShowMessage(Trim(Mensaje))



Saludos...

napsterk89
21-06-2013, 18:11:56
:D Funciona perfecto! Muchas gracias, más tardo lo miro más detenidamente así capto bien la idea, me hubiese gustado deducirlo solo pero necesito aprender eso porque seguro me lo toman en un examen dentro de pocos días. Muchas gracias por la ayuda!

funkybahiense
28-06-2013, 18:54:40
Hola napster! cual de todos mis compañeros sos? en el recu nos tomaron otro mas facil!

Casimiro Notevi
28-06-2013, 19:15:50
!

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)