Pascal/Turbo Pascal - NO SE PORQUE DA UN BUCLE INFINITO

   
Vista:

NO SE PORQUE DA UN BUCLE INFINITO

Publicado por David (4 intervenciones) el 03/12/2009 02:02:41
hola!

tengo que hacer el siguiente programa:

Completar el siguiente programa para que asigne a la variable s2 el valor de la cadena asignada previamente a s1 eliminando los caracteres de espacio en blanco que ésta pudiera contener. Por ejemplo, s2 debe tomar el valor 'JuanPerezPerez' si s1 vale 'Juan Perez Perez'

y ya me dan este codigo el cual no puedes modificar:

program espaciosenblanco;
var s1,s2:string; i:byte;
begin
write('introduce caracteres: ');
readln(s1);

(* introduce aqui tu codigo para completar el programa*)

writeln('El valor de s2 es: ',s2)
end.

entonces yo se hacerlo con un procedimiento y sale perfecto, pero como no puedes declararlo pues lo hice de esta forma:
program espaciosenblanco;
var s1,s2:string; i:byte;
begin
write('introduce caracteres: ');
readln(s1);

for i:= 1 to length(s1) do
if s1[i]=' ' then
begin
delete(s1,i,1);
i:=0;
end;
s2:=s1;

writeln('El valor de s2 es: ',s2)
end.

Entonces para todos los casos posibles funciona excepto si introduces la cadena 'a ' (es decir, que términe en espacio) de donde el programa no hace nada, vamos se pilla XD
alguna idea?

saludos!
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por Diego Romero (997 intervenciones) el 03/12/2009 10:57:34
Yo no lo haría así desde un principio, lo haría así:

program espaciosenblanco;
var s1,s2:string; i:byte;
begin
write('introduce caracteres: ');
readln(s1);

s1:=trim(s1); { aquí elimino los espacios por delante y por detrás de la cadena }
s2:='';

if length(s1) > 0 then
for i:=1 to length(s1) do
if s1[i] <> '' then s2:=s2+s1[i];

writeln('El valor de s2 es: ',s2)
end.

El problema con tu código es que estás manipulando el índice del for dentro del ciclo, algo que por regla general no se debe hacer.
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por David (4 intervenciones) el 03/12/2009 13:29:45
Tiene buena pinta la solucion, pero es que me dice que no reconoce lo que es trim, hay que declarar algun uso de librería? porque no se porque me dice que no sabe que es!jeje
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por Diego Romero (997 intervenciones) el 03/12/2009 13:45:02
Mea culpa, David. En TP7 no existe la función trim(), estaba pensando en FreePascal que sí la tiene :P.

Como sea, puedes quitar esa línea tranquilamente.
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por David (4 intervenciones) el 03/12/2009 13:48:17
es verdad, funciona perfectamente, gracias por la ayuda!
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por micky (2 intervenciones) el 08/12/2009 18:23:52
como queda al final pues? a mi me da error en el lenght? XDD, se ha debido de pillar, jejeje.

Pongan la solucion del tiron, gracias por la ayuda!
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por Diego Romero (997 intervenciones) el 08/12/2009 18:51:19
Pon tu versión del programa.
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por micky (2 intervenciones) el 08/12/2009 19:01:22
no se cual es, es un TP "online", de la uni, pero debe de ser el mismo que el de david. Cuanod has escrito que lo del trim sobra, ya no sabia que si habeis quitado y que no habeis quitado, XDD.
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por Diego Romero (997 intervenciones) el 08/12/2009 23:16:54
Oh, pues, la línea que tiene el trim(), sobra.
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por micky (1 intervención) el 10/12/2009 19:30:47
Gracias Diego por tu sabiduria, al parecer es que no se escribir bien lengTH, pesaba yo que en ingles siempre era gHT, jajaja.

Funciona todo ok!

Un saludo
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:NO SE PORQUE DA UN BUCLE INFINITO

Publicado por LEONEL (1 intervención) el 06/11/2010 19:52:21
oigan necesito saber como hacer un bucle amigos me ayudan es que soy medio novato y es una tarea del cole te lo agradeceria plz ...
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