Pascal/Turbo Pascal - "Como Invertir una frase"

 
Vista:

"Como Invertir una frase"

Publicado por Pablo (7 intervenciones) el 23/04/2008 22:22:45
Hola a todos!!!
Me gustaría que alguien me pueda ayudar resolviendo un ejercicio en pascal
No pido que lo hagan sino que me ayuden;
El ejercicio consta de leer una frase por teclado y que el programa la de vuelta y la muestre de atrás para adelante.
Lo que intente es con un arreglo pero no le puedo cargar palabras (string); me anda con números pero no con palabras; desde ya muchas gracias por todo.-
A me dijeron algo de srtinleng o algo así!!! Conocen?
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:

Publicado por Diego Romero (996 intervenciones) el 23/04/2008 23:38:56
No se entiende tu pregunta.

1) Quieres que la oración quede exactamente hacia atrás. Ejemplo:

s:='Esto es una oración';

Que imprima:

nóicaro anu se otsE

2) Que imprima la oración con las palabas en orden inverso. Ejemplo:

s:='Esto es una oración';

Que imprima:

oración una es Esto

Si es 1):

var
s,t: string;
i: byte;
begin
...
for i:=length(s) downto 1 do t:=s[i];
WriteLn(t);
end.

Si es 2):
Hay muchas formas de hacerlo pero no con arreglos (array). Simplemente jugando con el string que tiene la oración. Un string en Pascal no es más que un array of char y como tal tiene índice. Ejemplo:

s:='Diego';
Writeln(s[3]); { imprime "e" }

Para saber el largo dinámico de la cadena una la función lenght() que devuelve un tipo byte con el largo de la cadena.

largo:=length(s);
Writeln(largo); { imprime "5" }

Sabiendo estas cosas puedes detectar los espacios entre palabras

for i:=1 to length(s) do
if s[i] = ' ' then Writeln('espacio en la posición',i);
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: (cometí un error)

Publicado por Diego Romero (996 intervenciones) el 23/04/2008 23:40:15
En el primer caso el código solución es:

var
s,t: string;
i: byte;
begin
...
for i:=length(s) downto 1 do t:=t+s[i];
WriteLn(t);
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:

Publicado por Martin (1 intervención) el 26/08/2008 22:54:30
Hola.
Una manera de resolverlo es usando recursion en un procedimiento. Osea vas leyendo los caracteres desde el buffer hasta que por ejemplo termine en un (.) punto. Con eso tenes la condicion para salir de la recursion.. Luego al ¨volver¨ de la recursion vas imprimiendo el valor almacenado.

El codigo seria algo asi:

procedure invertir;
var
ch:char;
begin
read(ch);
if car<>'.' then
begin
invertir;
write(ch);
end;
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