[ Foro de Pascal ]

AYUDA cadenainvertida

09-Nov-2012 00:25
oscar diaz diaz
1 Respuestas

hola se me pide esto
Escriba un procedimiento que reciba una cadena de caracteres y la devuelva invertida. Es decir, si recibe ‘hola’ devolverá ‘aloh’. A continuación, introduzca el procedimiento en un programa que pida al usuario una cadena, se asegure que no supera una longitud máxima definida en una constante, invoque el procedimiento anterior, y muestre por pantalla la cadena resultado.

yo hice

program ej2;

const TAM = 10; // Definimos el tamaño del string y la tabla

type
tCadena = string; // Tipo para representar cadenas
var
cadena: tCadena;

procedure invertir_cadena(var cadena: tCadena);
var
i,j:integer;
t:char; // Variable auxiliar para intercambiar los caracteres
begin

i:=1; // Inicializamos i al primer elemento del string
j:=length(cadena); // Inicializamos j al último elemento del string

while (i<j) do begin
// Intercambiamos los valores
t := cadena[i];
cadena[i] := cadena[j];
cadena[j] := t;
// Intercambiamos los valores

i + := 1; // Movemos i hacia adelante(aqui ya me tira error)
j - := 1; // Movemos j hacia atrás
end;

end;

begin

// Comprobamos que el usuario introduce una cadena de <= TAM tamaño
repeat
writeln('Introduzca una cadena, por favor: ');
readln(cadena);
if not(length(cadena) in [0..TAM]) then begin
writeln('Error. Introduzca una cadena de ', TAM, ' caracteres como maximo.');
writeln;
end;
until (length(cadena) in [0..TAM]);

invertir_cadena(cadena);

writeln('La cadena invertida es: ', cadena);

end.

pero no me compila. alguna ayuda??


15-Dec-2012 11:44
Nacho Cabanes (+30)

Revisando el foro he visto que esta pregunta estaba sin contestar...

En primer lugar, lo estás haciendo de una forma innecesariamente engorrosa: basta con crear una nueva cadena, en la que vas añadiendo letras desde el final hacia el principio:

cadenaInvertida := '';
for i := length(cadena) downto 1 do
 cadenaInvertida := cadenaInvertida + cadena[i];


En cualquier caso, los fallos te los da aquí:

i + := 1; // Movemos i hacia adelante(aqui ya me tira error)
j - := 1; // Movemos j hacia atrás

Para incrementar el valor de una variable no se hace eso, sino

i := i + 1;

o (en ciertas versiones de Pascal)   inc (i);

Y para disminuir su valor:

j := j - 1;

o (en ciertas versiones de Pascal)   dec (j);






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)