Đến nội dung

Hình ảnh

nén - giải nén xâu


  • Please log in to reply
Chủ đề này có 3 trả lời

#1
Tu Pham

Tu Pham

    Binh nhất

  • Thành viên mới
  • 27 Bài viết

Để tiết kiệm không gian bộ nhớ người ta nén chuỗi theo quy tắc: Nếu có từ 3 kí tự liên tiếp trùng nhau trở lên thì nén thành một con số và 1 kí tự

Yêu cầu: viết chương trình thực hiện công việc sau:

a/ Nhập chuỗi S1 từ b àn phím, nén chuỗi s1 thành chuỗi S2 và xuất S2 ra màn hinh

VD: S1: AABCAAAAACCCCBBB ->S2: AABC5A4C3B

b/ Từ bàn phím nhập chuỗi S2 dưới dạng đã nén, giải nén lại chuỗi S1 ban đầu, xuất kết quả ra màn hình

VD: S2: AABC5A4C3B ->S1: AABCAAAAACCCCBBB 


-- Hồng Tư --


#2
Mystic

Mystic

    Thượng sĩ

  • Thành viên
  • 240 Bài viết

 



Để tiết kiệm không gian bộ nhớ người ta nén chuỗi theo quy tắc: Nếu có từ 3 kí tự liên tiếp trùng nhau trở lên thì nén thành một con số và 1 kí tự

Yêu cầu: viết chương trình thực hiện công việc sau:

a/ Nhập chuỗi S1 từ b àn phím, nén chuỗi s1 thành chuỗi S2 và xuất S2 ra màn hinh

VD: S1: AABCAAAAACCCCBBB ->S2: AABC5A4C3B

b/ Từ bàn phím nhập chuỗi S2 dưới dạng đã nén, giải nén lại chuỗi S1 ban đầu, xuất kết quả ra màn hình

VD: S2: AABC5A4C3B ->S1: AABCAAAAACCCCBBB 

 

program gyu;
uses crt;
var t,i,j,k,l,p,q:integer;
s,s1,s2,n,sp,ss:string;
st:char;
function xt(s:string):char;
begin
xt:=s[1];
end;
begin
clrscr;
write('Nhap xau 1:');readln(s1);
j:=1;
repeat
t:=0;
s:='';
      for i:=j to length(s1) do
          if (s1[i]=s1[i+1]) then t:=t+1 else
             begin
             l:=i;
             p:=i+1;
             break;
             end;
      if t>=2 then
         begin
         for i:=j to l do
         s:=s+s1[i];
         st:=xt(s);
         str(t+1,n);
         sp:=sp+n+st;
         end else
             for i:=j to l do
             sp:=sp+s1[i];
      j:=p;
until j>length(s1);
writeln('Xau nen:',sp);
writeln;
write('Nhap xau 2:');readln(s2);
j:=1;ss:='';
repeat
    val(s2[j],q,l);
    if q>=3 then
    begin
       for k:=1 to q do
       ss:=ss+s2[j+1];
       j:=j+2;
    end else
        begin
        ss:=ss+s2[j];
        j:=j+1;
        end;
until j>length(s2);
writeln('Xau giai nen:',ss);
readln
end.

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#3
Duongdz2k7

Duongdz2k7

    Binh nhất

  • Thành viên mới
  • 25 Bài viết

bài bạn dài quá 

đây là bài của mình 

rất đơn giản :D

program bt1;
uses crt;
var s:string;
a,i,j:integer;
begin
clrscr;
write('nhap xau can giai nen:');
readln(s);
for i:=1 to length(s) do
if s[i] in ['2'..'9'] then
begin
val(s[i],a);
for j:=2 to a do
write(s[i+1]);
end
else
write(s[i]);
readln;
end.

                   Học , học nữa , học mãi  :closedeyes:

Luôn không ngừng cố gắng để đạt thành quả :D  :like


#4
Duongdz2k7

Duongdz2k7

    Binh nhất

  • Thành viên mới
  • 25 Bài viết

à mà nếu hệ số lớn hơn 9 thì anh em dùng hàm concat để ghép hệ số vào rồi dùng val nha! :D


                   Học , học nữa , học mãi  :closedeyes:

Luôn không ngừng cố gắng để đạt thành quả :D  :like





0 người đang xem chủ đề

0 thành viên, 0 khách, 0 thành viên ẩn danh