Giải Giùm Bài Nén Chuỗi Bằng Pascal [Archive] - Diễn Đàn Tin Học
Có thể bạn quan tâm
Diễn Đàn Tin Học > Lập trình > Các ngôn ngữ lập trình > Pascal/Delphi/Kylix > Giải giùm bài nén chuỗi bằng Pascal PDA
View Full Version : Giải giùm bài nén chuỗi bằng Pascal
Mai Nhựt Tân12-11-2007, 21:33Đề ra: file IN.DAT gồm một chuỗi dài từ 1 đến 255 kí tự chữ cái, có thể có các kí tự giống nhau liền kề. Hãy viết chương trình nén chuỗi theo quy ước nếu có các chữ cái giống nhau thì thay chuỗi con đó thành dạng số chỉ số lượng có mặt kí tự trong chuỗi đó + kí tự được lặp lại (ví dụ: chuỗi 'AAAAAAA' thì chuyển thành '7A', chuỗi 'AADGhht' chuyển thành '2ADG2ht') và xuất ra file OUT.DAT. Cũng như vậy, viết tiếp chương trình giải nén chuỗi cũng với quy luật trên. Mình đã giải thử phần nén chuỗi nhưng có gì đó không ổn. Mong các bạn giúp sức; uses crt; var st,st1:string; Function Trim(st:string):string; var i,l:integer; begin l:=length(st); i:=1; repeat while (st[i]<>' ') and (i<=l) do inc(i); if st[i] = ' ' then delete(st,i,1); until i>l; trim:=st; end; Function Trim1(st:string):string; var i,l:integer; begin l:=length(st); i:=0; repeat while (st[i]<>'1') and (i<=l-1) do inc(i); if (st[i] = '1') and (not(st[i+1] in ['0'..'9'])) then delete(st,i,1); until i>l; trim1:=st; end; FUNCTION nenchuoi(st:string):string; var l,i,k:integer; x:char; s,s1:string; begin st:=trim(st); l:=length(st); i:=1; s:=''; repeat x:=st[i]; k:=0; while (st[i] = x) and (i<=l) do begin inc(i); inc(k); end; str(k,s1); s:=s+s1+x; until i>l; nenchuoi:=s; end; BEGIN clrscr; write('Nhap vao chuoi ');readln(st); writeln('Chuoi da nhap vao: ',trim(st)); writeln; writeln('Ket qua nen chuoi:'); writeln(trim1(nenchuoi(st))); readln end. ngtrhieu001113-11-2007, 12:52chời bài này ngồi cắt chuỗi ra mà ... đễ wá... thử làm bài này coi: (đề olimpic khối ko chuyên- ISM) một số M dc mã hoá như sau 113 2113 122113 11222113 21322113 122113222113 11222113322113 ... (mã hoá đến vô hạn) từ cách mã hoá trên, hãy giải mã số N đến triệt để. (thuật giải mã tương tự như bài trên) Mai Nhựt Tân13-11-2007, 21:24Pó tay, nhờ các cao thủ giải giúp cả hai bài ạ! arsene_lupin13-11-2007, 21:54hĩ toàn cao thủ nói chuyện với nhau thấy đau hết cả đầu mới nghĩ bài một còn chưa biết sai ở đâu đã thấy bài hai sởn hết cả gai ốc ngtrhieu001114-11-2007, 17:20??? pác nói jì em hok hiểu..................... ngtrhieu001114-11-2007, 17:50bài của em dễ mà ... ai đọc báo ISM đều biết chứ... cách mã hóa số sau sẽ dc mã hoá theo số trước như sau 113 => 2113 (có nghĩa là 2 số 1 và 1 số 3) => 122113 (1 số 2 và 2 số 1 và 1 số 3) => ... Vậy một số dc coi là đã giải mã triệt để khi số đó không là kết wả mã hoá của bất kỳ số nào => số đó là số có số chữ số lẻ... như vậy ta có một bài tập trên mảng dễ dàng... lee_huynh30614-11-2007, 18:14Để ý lại bài 1 chút, rủi may chuỗi trong IN.DAT nó có các kí tự ['0'..'9'] thì làm sao? Đề có giớn hạn là chuỗi không bao gồm ['0'..'9'] hay không? bete15-11-2007, 01:35Xin hỏi bạn ngtrhieu0011: Vậy một số dc coi là đã giải mã triệt để khi số đó không là kết wả mã hoá của bất kỳ số nào => số đó là số có số chữ số lẻ => bạn giải mã TRIỆT ĐỂ 1 cách chi tiết chuỗi "22" ra sao ? -thân Phannhatnghi15-11-2007, 01:42Để ý lại bài 1 chút, rủi may chuỗi trong IN.DAT nó có các kí tự ['0'..'9'] thì làm sao? Đề có giớn hạn là chuỗi không bao gồm ['0'..'9'] hay không? file IN.DAT gồm một chuỗi dài từ 1 đến 255 kí tự chữ cái, có thể có các kí tự giống nhau liền kề. ngtrhieu001115-11-2007, 12:54àh em wên nói, trừ số 22 ra thì tất cả các số chẵn đề là số chưa triệt để. nếu không thử phương pháp sau nếu số trước giải mã ra giống nó thì coi nư nó triệt để :D cảm ơn anh bete Mai Nhựt Tân15-11-2007, 15:15Hic, mình cầu cứu mà mấy vị cao thủ toàn đưa cái gì cao quá trời, sao hỉu được? doremon_No115-11-2007, 19:33Bài của bạn MNT chỉ cần đếm số lần xuất hiện của 1 từ sau đó viết ra thôi mà. Theo mình là thế. Nhờ các cao thủ chỉ giáo. cashier15-11-2007, 21:18Bài của bạn Tân thì thuật toán ko hề sai tuy nhiên trong lúc cài đặt bạn ( có lẽ quên ) nên ở trong function Trim1, bạn thử để ý lại coi, ko bao giờ vòng lặp đó kết thúc đâu :D ( nếu như xâu của bạn là st='aaaa' chẳng hạn ) , mà sửa cũng ko khó đâu , chỉ cần thêm 1 dòng else vào sau if : Function Trim1(st:string):string; var i,l:integer; begin l:=length(st); i:=0; repeat while (st[i]<>'1') and (i<=l-1) do inc(i); if (st[i] = '1') and (not(st[i+1] in ['0'..'9'])) then delete(st,i,1) else inc (i); until i>l; trim1:=st; end; Mà mình cũng góp ý thêm cho bạn khi trình bày một bài, tuy là ko bắt buộc nhưng để dễ tìm ra cấu trúc của chương trình, bạn nên trình bày rõ ràng một chút, như bài của bạn, để tìm ra chỗ sai mình cũng mất kha khá thời gian :d À mà cái hàm trim của bạn mình nghĩ nên để ở dạng thủ tục với st là tham biến ( chứ ko phải là tham trị như bây giờ) sẽ hay hơn, bạn thử lại xem . cashier15-11-2007, 21:27còn về bài giải nén, nếu như trong xâu nén có cả chữ số 0..9 thì phải làm sao?? ví dụ như xâu là 31 thì nên hiểu là có 3 chữ số 1 : 111 hay là xâu chỉ có 1 số là : 31? tổng quát hoá vấn đề lên thì, ví dụ xâu st có 2 thành phần là A và B tạo thành : st='AB' trong đó có 2 khả năng: nếu A không là số thì khi đó xâu giải nén vẫn là st='AB'; nhưng nếu A là số thì + nếu B ko là số : giải nén xâu st='BB..BB' ( B lần chữ B) + nếu B là số : khi này xâu st sẽ thành st='AB' hay vẫn như trường hợp trên ?? vì thế nên nếu ko nói jì thêm như ở đầu bài thì chắc ko giải nén được xâu với tất cả các trường hợp được đâu :D Mai Nhựt Tân17-11-2007, 12:33Cảm ơn bạn cashier nhiều lắm. Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.Từ khóa » Giải Nén Xâu Trong Pascal
-
Lập Trình Pascal, Giải Nén Xâu Ký Tự, Giai Nen Xau Ki Tu Bồi Dưỡng ...
-
Giải Nén Xâu GNEN - Thầy Quách Văn Lượm
-
Giải Nén Xâu
-
Nén Xâu Kí Tự
-
Xâu Thuần Nhất (Giải Nén Xâu Trong Pascal) - Tài Liệu Text - 123doc
-
Giải Nén Xâu - Góc Tin Học
-
Giải Nén Xâu Trong Pascal
-
Viết Chương Trình Nhập Vào 1 Xâu Ký Tự (\(1< S\le255 ... - Hoc24
-
NÉN-GIẢI NÉN XÂU KÍ TỰ - Bài Tập Chuỗi - Nguyễn Thị Dương Hương
-
Đề Thi Chọn Học Sinh Giỏi Cấp Tỉnh - Môn Tin Học 11 - Bài Giảng Lớp 11
-
Viết CT Nén Xâu Kí Tự S được Nhập Từ Bàn Phím. VD
-
[PDF] Chuyên đề Xử Lý Xâu
-
Giải Nén Xâu - LQDOJ: Le Quy Don Online Judge