Lập trình mã hóa xâu kí tự bằng Pascal

Mã hóa (nén), giải mã (nén) xâu (Tùy vào yêu cầu mã hóa mà cách thực hiện khác nhau ở đây xét VD mã hóa như sau: ‘AAAABBBCDDDDDDDEEF’ mã hóa (nén) thành ‘4A3BC7D2EF’)

Mã hóa:Dùng xâu mới để chứa mã hóa- Lặp lại thao tác: (Đếm  xem có bao nhiêu kí tự liên tiếp giống kí tự đầu tiên, đếm đến đâu xóa dần đến đó, ghi vào xâu mã hóa) cho đến khi xóa hết kí tự của xâu.
Giải mã:Dùng xâu mới để chứa xâu giải mã- lặp lại thao tác ( Nếu vị trí đầu không chứa số thì chuyển sang xâu giải mã, nếu có số thì duyệt các vị trí tiếp theo để xác định số đó -ghi kí tự tiếp theo bấy nhiêu lần sang xâu mới, xóa phần đã giải mã) cho đến hết xâu.

4.7.1. Viết chương trình mã hóa xâu (trong xâu không chứa kí tự số) không quá 255 kí tự như sau: ‘AAAABBBCDDDDDDDEEF’ mã hóa (nén) thành ‘4A3BC7D2EF’

Dữ liệu vào file: mahoa.INPmột dòng không quá 255 kí tự

Dữ liệu ra file: mahoa.OUT chứa dòng đã mã hóa

VD:

mahoa.int mahoa.out
AAAABBBCDDDDDDDEEF 4A3BC7D2EF

Xem code:






































var s1,s2,x_dem:string;
  tem:char;dem:word;f:text;
begin
{----Doc file ----}
    assign(f,'mahoa.inp'); reset(f);
    readln(f,s1);close(f);
{--------------------------------}
while length(s1)>0 do
      if (s1[1] <>s1[2] 

)or(length(s1)=1) then//dem so ki tu giong nhau cua s1 nen ghi vao s2
        begin
            s2:=s2+s1[1] 





;
            delete(s1,1,1);
        end
      else
        begin
            dem:=1;
            while (s1[1] =s1[2] 





)and (length(s1)>1) do
              begin
                  dem:=dem+1;
                  delete(s1,1,1);
              end;
            str(dem,x_dem);
            s2:=s2+x_dem+s1[1] 






;
            delete(s1,1,1);
        end;
{------ghi file -----}
assign(f,'mahoa.out'); rewrite(f);
write(f,s2);
close(f);
end.

 

Read:   Đề khảo sát HSG Tin 11 – Tân Kỳ – Nghệ An 1819
Hình đại diện của người dùng

admin

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *