[ Foro de Pascal ]
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??
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.)