Fallo en un proceso
Publicado por Carlos (2 intervenciones) el 14/12/2006 19:57:05
Tengo un programa que usa la tecnica de compresion de datos RLE (Run Lenght Encoding). Se basa en la sustitucion de una secuencia de datos (terminada en punto) repetidos por un dato especial (marcador) seguido del numero de repeticiones y del dato que se repite.
En el caso
aaaaaaabbccccddde. ----------------> /7abb/4cddde
Bueno el caso esq mi programa se basa en dos procesos el de codificar y el de descodificar, y el segundo me falla al introducirle una secuencia que contenga el " / ", y no se a que se debe. ¿Alguna Idea?
Program RLE(input,output);
Var
seleccion:integer;
caracter:char;
Procedure Codificar(c:char);
Var
letrasiguiente,letra:char;
contador,i:integer;
Begin
contador:=1;
letra:=c;
Repeat
Read(letrasiguiente);
If letrasiguiente=letra
then
Begin
Contador:=Contador+1;
End
else
If contador>3
then
Begin
Write('/',contador:1,letra:1);
Contador:=1;
End
else
Begin
For i:=1 to contador do
Begin
Write(letra:1)
End;
Contador:=1;
End;
letra:=letrasiguiente;
Until letrasiguiente='.';
End;
Procedure Descodificar(c:char);
Var
letrasiguiente,letra:char;
contador,i:integer;
Begin
letra:=c;
If letra='/'
then
Begin
Read(contador);Read(letra);
For i:=1 to contador do
Write(letra:1);
Read(letra);
End;
Repeat
Read(letrasiguiente);
If letrasiguiente='/'
then
Begin
Read(contador);Read(letrasiguiente);
Write(letra);
For i:=1 to contador do
Write(letrasiguiente:1);
End
else
Write(letra:1);
letra:=letrasiguiente;
Until (letrasiguiente='.')OR(letra='.');
End;
Begin
Repeat
Writeln('Para codificar pulsa 1 ');
Writeln('Para descodificar pulsa 2 ');Readln(seleccion);
If seleccion=1
then
begin
Writeln('Dame una secuencia de caracteres terminada en punto');Read(caracter);
Codificar(caracter);
End;
If seleccion=2
then
Begin
Writeln('Dame una secuencia de caracteres codificada segun RLE');Read(caracter);
Descodificar(caracter);
End;
Until (seleccion=1)OR(seleccion=2);
Readln;Writeln(' ');
Repeat
Write('Para finalizar pulsa "Enter"');
Until caracter='?';
Readln;
End.
En el caso
aaaaaaabbccccddde. ----------------> /7abb/4cddde
Bueno el caso esq mi programa se basa en dos procesos el de codificar y el de descodificar, y el segundo me falla al introducirle una secuencia que contenga el " / ", y no se a que se debe. ¿Alguna Idea?
Program RLE(input,output);
Var
seleccion:integer;
caracter:char;
Procedure Codificar(c:char);
Var
letrasiguiente,letra:char;
contador,i:integer;
Begin
contador:=1;
letra:=c;
Repeat
Read(letrasiguiente);
If letrasiguiente=letra
then
Begin
Contador:=Contador+1;
End
else
If contador>3
then
Begin
Write('/',contador:1,letra:1);
Contador:=1;
End
else
Begin
For i:=1 to contador do
Begin
Write(letra:1)
End;
Contador:=1;
End;
letra:=letrasiguiente;
Until letrasiguiente='.';
End;
Procedure Descodificar(c:char);
Var
letrasiguiente,letra:char;
contador,i:integer;
Begin
letra:=c;
If letra='/'
then
Begin
Read(contador);Read(letra);
For i:=1 to contador do
Write(letra:1);
Read(letra);
End;
Repeat
Read(letrasiguiente);
If letrasiguiente='/'
then
Begin
Read(contador);Read(letrasiguiente);
Write(letra);
For i:=1 to contador do
Write(letrasiguiente:1);
End
else
Write(letra:1);
letra:=letrasiguiente;
Until (letrasiguiente='.')OR(letra='.');
End;
Begin
Repeat
Writeln('Para codificar pulsa 1 ');
Writeln('Para descodificar pulsa 2 ');Readln(seleccion);
If seleccion=1
then
begin
Writeln('Dame una secuencia de caracteres terminada en punto');Read(caracter);
Codificar(caracter);
End;
If seleccion=2
then
Begin
Writeln('Dame una secuencia de caracteres codificada segun RLE');Read(caracter);
Descodificar(caracter);
End;
Until (seleccion=1)OR(seleccion=2);
Readln;Writeln(' ');
Repeat
Write('Para finalizar pulsa "Enter"');
Until caracter='?';
Readln;
End.
Valora esta pregunta


0