Pascal/Turbo Pascal - letras repetidas

 
Vista:

letras repetidas

Publicado por manuel (4 intervenciones) el 14/05/2008 13:16:01
hola , tenqo que suprimir las letras repetidas en un string mientras sean direferentes a c y a r , el caso esque me las suprime una repeticion pero no se como hacer para que por ejemplo de la palabra , hooooola , quede hola yo solo borro una repeticion y he intentado meter un repeat pero no funciona.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:letras repetidas

Publicado por Dani (94 intervenciones) el 14/05/2008 13:40:37
Pega aquí tu código y le echo un vistazo
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:letras repetidas

Publicado por manuel (4 intervenciones) el 14/05/2008 13:52:34
esto es un ejemplo de lo que hace y tal , en realidad es una function dentro de un programa mas grande:


program prueba;
uses crt;
var
cadena , resultado:String;
y:byte;
begin
clrscr;
y:=1;
cadena:='hoola que paasa , cojisstee la llave paa accionar la llave marron ';

for y:=1 to (length(cadena)) do
begin
if ((cadena[y]=cadena[y+1]) and (cadena[y]<>'l') and (cadena[y]<>'r') and (cadena[y]<>'c'))then
begin
delete(cadena,y,1);
end;
end;
resultado:=cadena;
writeln(resultado);
readkey;
END.

Aqui borra solo una posicion pero si le intento meter un repeat hasta que cadena[y]<>cadena[y+1] entra en un bucle infinito
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:letras repetidas

Publicado por micropais (209 intervenciones) el 14/05/2008 18:56:45
hola manuel ...
hola Dani , perdon por haberme adelantado , pero yo ya estaba trabajando en
el code y no quiero echar a perder .

De todas formas si DANI tiene otra solucion , mejor que mejor.

ahi va el code .
______________________________
uses crt;
var
cadena , resultado:String;
cad_tmp:string; // a¤adido
ultimo_car:char; // a¤adido
y:byte;
begin
clrscr;
y:=1;
cadena:=' era de cooolor cccclaro yyyy un aaazul brrrrillaaaante ';

ultimo_car:=#32;
cad_tmp:='';
for y:=1 to length(cadena) do
begin
// si no hay repeticion entonces
if (ultimo_car<>cadena[y]) then
// se a¤ade un caracter a la cadena temporal
cad_tmp:=cad_tmp+cadena[y]
else
// hay repeticion ,incluir solo si no son los caracteres c y a r
if
(cadena[y] <> 'c' ) and
(cadena[y] <> 'y' ) and
(cadena[y] <> 'a' ) and
(cadena[y] <> 'r' ) then cad_tmp:=cad_tmp+cadena[y];

ultimo_car:=cadena[y];
end;
resultado:=cad_tmp;
writeln(cadena);
writeln(resultado);
// cOOOlor no ha sido modificado pues 'o' no pertenece   "c","y","a","r"

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:letras repetidas

Publicado por manuel (4 intervenciones) el 14/05/2008 19:14:20
Muchas gracias por el código , pero sigo teniendo problemillas , se supone que ninguna letra se puede repetir excepto la `r` , la `c` y la `l`que se pueden repetir al menos una vez , si contemplo esas letras en el programa borra hasta quedarse en una
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:letras repetidas

Publicado por micropais (209 intervenciones) el 14/05/2008 19:37:55
hola manuel :

lo entendi alreves , cambia el code siguiente:
en el caso del programa solo quita los caracteres c y a r

// hay repeticion ,incluir solo si no son los caracteres c y a r
if
(cadena[y] <> 'c' ) and
(cadena[y] <> 'y' ) and
(cadena[y] <> 'a' ) and
(cadena[y] <> 'r' ) then cad_tmp:=cad_tmp+cadena[y];

Debes amoldar el programa o asignar otra lógica , no se trata de que te hiciera el programa , si no de que lo entendieras , ahora mismo ya estoy con otras cosas y no puedo ayudarte , para la proxima vez ¡¡¡ especifica !!!, pues yo entendi lo contrario.
mejor aun espera por si DANI te puede echar una mano.

SALUDOS de 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:letras repetidas

Publicado por manuel (4 intervenciones) el 14/05/2008 20:13:04
Muchas gracias tampoco hace falta que te molestes , solo que estaba algo bloqueado no era mi intencion preguntar todo , muchas gracias la verdad
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:letras repetidas

Publicado por micropais (209 intervenciones) el 14/05/2008 19:51:24
ahi va , se pueden repetir almenos una vez , no esta contemplado el caso de que si hay tres erres te quite una (por si acaso)....
he usado las mismas letras que antes, ajustalas a R C I , si te sobra una linea quitala. te marqué la linea con un comentario , nota que cambie AND por OR.
// -> !!!!!!!!!!!!!!!!!!!!!!!!!!!! desde aqui

________________________________________________________

uses crt;
var
cadena , resultado:String;
cad_tmp:string; // a¤adido
ultimo_car:char; // a¤adido
y:byte;
begin
clrscr;
y:=1;
cadena:=' erre que te errre la CCCC y la III cooolor cuuualquier otra cosa ';

ultimo_car:=#32;
cad_tmp:='';
for y:=1 to length(cadena) do
begin
// si no hay repeticion entonces
if (ultimo_car<>cadena[y]) then
// se a¤ade un caracter a la cadena temporal
cad_tmp:=cad_tmp+cadena[y]
else
// -> !!!!!!!!!!!!!!!!!!!!!!!!!!!! desde aqui
// hay repeticion ,incluir solo si no son los caracteres c y a r
if
(cadena[y] = 'c' ) or
(cadena[y] = 'y' ) or
(cadena[y] = 'a' ) or
(cadena[y] = 'r' ) then cad_tmp:=cad_tmp+cadena[y];

ultimo_car:=cadena[y];
end;
resultado:=cad_tmp;
writeln(cadena);
writeln(resultado);
// cOOOlor no ha sido modificado pues 'o' no pertenece   "c","y","a","r"

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