Pascal/Turbo Pascal - Invertir Cadenas

 
Vista:

Invertir Cadenas

Publicado por Mildred Ruiz (1 intervención) el 08/07/2006 23:21:21
Hola... quizas sea muy sencillo pero para mi no lo es. Necesito un codigo que me invierta un string. Conseguí uno con arreglos pero no consigo la forma de cambiarlo a string ya que tengo que escoger parte de ese del mismo, es decir, si ingresan la palabra "dolor" tengo que invertirla a "rolod" y sacar las 3 primeras letras. Se hacer todo eso menos lo de invertir.

Muchas Gracias!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Invertir Cadenas

Publicado por Carlos Guimaraenz (265 intervenciones) el 09/07/2006 05:08:43
Hola Mildred!! Te doy una función que te devuelve el string invertido:

function InvertirStr (cadena : string) : string;
var
aux : string;
i : integer;
begin
aux:=''; {inicializamos la cadena auxiliar vacía}
{a continuación concateno cada letra antes que aux para formarla al revés}
for i:=1 to Length(cadena) do
aux:=cadena[i] + aux;InvertirStr:=aux;
{la función devuelve CADENA invertido}
end;

Si quieres puedes usar la misma función para que devuelva sólo los primeros 3 caracteres... lo único que deberías cambiar sería el for, podrías, por ejemplo, ponerlo de la siguiente manera:

for i:= Length(cadena) - 2 to Length(cadena) do
.......................

con lo cual estarías concatenando sólo los últimos 3 caracteres de CADENA, con lo cual devolverías los primeros 3 al invertirlo.

Cualquier duda que te quede de esta explicación o alguna otra duda, no dudes (que lindo juego de palabras :P) en preguntar.
Un beso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Invertir Cadenas

Publicado por micropais (209 intervenciones) el 09/07/2006 20:00:24
saludos Mildred Ruiz:
la funcion que nos envia Carlos Guimaraenz funciona a la perfeccion , no obstante usa terminos como recursividad , y creo que te vas a liar bastante ,
haber si lo ves mejor en este ejemplo.
____________________________________________________________

Y Saludos tambien para Carlos Guimaraenz , podrias haber usado punteros y
asembler para sumar cadenas o usar la libreria STRING para liarlo mas.
espero que no te ofendas...
____________________________________________________________

uses crt;
var texto:string;

{**************************************************}
function Invertir_cadena (cadena : string) : string;
var longitud:byte; { longitud del string cadena }
a:byte; { contador bucle }
Xcadena:string;{ cadena temporal}
begin

Invertir_cadena:=''; { reiniciamos a null y retorno de la funcion }
Xcadena:=''; { reiniciamos a null ( cadena vacia ) }

longitud:=length(cadena);

for a:=longitud downto 1 do Xcadena:=Xcadena+cadena[a];

Invertir_cadena:=xcadena; { retorno de la funcion }

end;

{**************************************************}
begin

clrscr;
texto:='SALUDOS a Mildred Ruiz y a Carlos Guimaraenz ';

writeln(texto ); { texto normal }
writeln( invertir_cadena(texto));{ texto invertido }


readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Invertir Cadenas

Publicado por Carlos Guimaraenz (265 intervenciones) el 10/07/2006 01:13:01
Hola Micropais! Bueno, desde ya que no me ofendo... se que nadie tiene la verdad absoluta, y si alguien tiene una verdad mejor que la mia, bienvenida sea jaja.
De todos modos, en la función InvertirStr no llamo a recursión en ningún momento, por algún motivo quedó medio encimado y sin espacios el código y no se nota bien, pero ahora que lo reveo hay una línea donde asigno el valor de aux para retornar en la función, y puede parecer un llamado recursivo.

De todos modos, igual funciona, asi que no hay problema ;)

Un abrazo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

mis disculpas

Publicado por micropais (209 intervenciones) el 11/07/2006 01:02:41
Saludos Carlos Guimaraenz .
- Tienes toda razón.
- Por algun motivo vi recursividad donde no la habia.
- Pido disculpas por ello , no obstante veo un poco retorcida la funcion , aunque
funciona perfectamente , me cuesta trabajo visualizarla mentalmente y tuve que probarla bajo TP, para ver lo que hacia.
desde luego que es otra forma de ver las cosas pero de seguro que no la más simple , sobre todo para alguien que pregunta algo como esto es que no tiene el nivel suficiente. Si yo no lo veo claro (llevo bastante tiempo en el mundillo pascal)
un principiante mucho menos.

Aunque ya veo que hay otras formas de ver las cosas , no solo la mia ,
y quizás mas faciles de entender.

De todas formas yo no tengo la verdad en mis manos ni mucho menos , y por supuesto que agradezco tu forma de ser.

SALUDOS MICROPAIS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:mis disculpas

Publicado por M@rceloL (152 intervenciones) el 25/07/2006 22:24:06
¡Qué bueno es ver gente discutiendo sin pelearse ni ofenderse!
¿No es maravilloso?
De esto tenemos que aprender. Tratemos a la gente con respeto; no nos enojemos si alguien nos corrije; y cuando nos equivoquemos, pidamos perdón.

Muy bueno Micropais y Carlos. Muy bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:mis disculpas

Publicado por Carlos Guimaraenz (265 intervenciones) el 25/07/2006 23:29:52
Bueno, M@arceloL y Micropais, ya sabemos que así debería ser siempre, especialmente en un entorno como éste donde compartimos los conocimientos... y aprovecho para decirles a aquellos que plantean sus dudas y que son maltratados por algunos, no se dejen amedrentar por éstos, ya aparecerá alguien que les evacúe su duda amablemente; y para aquellos que se dedican a maltratar dándoselas de supergenios, recuerden que algún día tuvieron que aprender, y si no lo hicieron de esta manera, sepan que no todas las personas tenemos las mismas posibilidades.

Un abrazo grande para todos, nos estamos viendo por aquí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Invertir Cadenas-funciones-pascal

Publicado por vladimir vasquez marin (3 intervenciones) el 10/11/2009 18:50:59
hola saludos a todos aqui les djo otro codigo utilizando tambien cadenas espero y les ayude, solo copienlo en archivo de text y cambienle la extencion a .pas y es todo.

PROGRAM CADENA;
USES CRT;
VAR
CAD,T,E:STRING;
FUNCTION CADENA_CAD (VAR X:STRING):STRING;
VAR
F,G,K,SUMA: STRING;
I:INTEGER;
BEGIN
G:='SALIDA';
F:= X; K:=G;
SUMA:=F+' '+K;
CADENA_CAD:= SUMA;

FOR I:= LENGTH(SUMA) DOWNTO 1 DO
BEGIN
WRITE(SUMA[I])
END;
READLN;
END;

BEGIN
CLRSCR;
CAD:='HOLA';
E:= CADENA_CAD(CAD);
WRITELN('',E);
READKEY;
END.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Invertir Cadenas-funciones-pascal

Publicado por vladimir vasquez marin (3 intervenciones) el 10/11/2009 18:51:05
hola saludos a todos aqui les djo otro codigo utilizando tambien cadenas espero y les ayude, solo copienlo en archivo de text y cambienle la extencion a .pas y es todo.

PROGRAM CADENA;
USES CRT;
VAR
CAD,T,E:STRING;
FUNCTION CADENA_CAD (VAR X:STRING):STRING;
VAR
F,G,K,SUMA: STRING;
I:INTEGER;
BEGIN
G:='SALIDA';
F:= X; K:=G;
SUMA:=F+' '+K;
CADENA_CAD:= SUMA;

FOR I:= LENGTH(SUMA) DOWNTO 1 DO
BEGIN
WRITE(SUMA[I])
END;
READLN;
END;

BEGIN
CLRSCR;
CAD:='HOLA';
E:= CADENA_CAD(CAD);
WRITELN('',E);
READKEY;
END.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Invertir Cadenas

Publicado por vladimir vasquez marin (3 intervenciones) el 10/11/2009 18:54:09
hola saludos a todos aqui les djo otro codigo utilizando tambien cadenas espero y les ayude, solo copienlo en archivo de text y cambienle la extencion a .pas y es todo.

PROGRAM CADENA;
USES CRT;
VAR
CAD,T,E:STRING;
FUNCTION CADENA_CAD (VAR X:STRING):STRING;
VAR
F,G,K,SUMA: STRING;
I:INTEGER;
BEGIN
G:='SALIDA';
F:= X; K:=G;
SUMA:=F+' '+K;
CADENA_CAD:= SUMA;

FOR I:= LENGTH(SUMA) DOWNTO 1 DO
BEGIN
WRITE(SUMA[I])
END;
READLN;
END;

BEGIN
CLRSCR;
CAD:='HOLA';
E:= CADENA_CAD(CAD);
WRITELN('',E);
READKEY;
END.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar