1. Trang chủ
  2. » Giáo Dục - Đào Tạo

thực tập xây dựng chương trình thống kê kí tự đơn và kí tự đôi trong file văn bản tiếng việt mã ABC

38 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

I Đặt vấn đề *Mục đích đề tài Từ máy vi tính trở nên phổ biến rộng rÃi nớc, nhu cầu sử dụng chữ Việt máy vi tính đà trở thành nhu cầu cấp thiết ®èi víi ngêi sư dơng ViƯc ®a tiÕng ViƯt vµo máy tính vấn đề có tầm quan trọng viƯc tin häc hãa, phỉ cËp tin häc vµ phát triển công nghệ phần mềm nớc Do đà có nhiều cá nhân, tập thể nớc đà tập trung nhiều công sức việc đa tiếng Việt vào máy tính nói chung máy vi tính nói riêng Hiện có nhiều phần mềm đa tiếng Việt vào máy tính, số lợng phần mềm lớn cho ta thấy đợc ý nghĩa việc đa tiếng Việt vào máy tính Tuy nhiên phần mềm lại có cách thức thể hiƯn kh¸c (c¸ch m· hãa ký tù tiÕng ViƯt kh¸c nhau) Cã rÊt nhiỊu c¸ch m· hãa ký tù Tiếng Việt Mặc dù khác nhau, không thống theo quy tắc chung, giải pháp tiếng Việt đà phần đáp ứng đợc nhu cầu thực tiễn, phạm vi tổ chức, quan góp phần vào việc Việt hóa ứng dụng cho máy tính cấp độ quan nhà nớc, mà tiếng Việt đợc thống sử dụng, mà TCVN3 hay gọi mà ABC Mặc dù nhiều khiÕm khuyÕt nhng trªn thùc tÕ, bé LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com m· tiÕng ViÖt bit đà đợc chấp nhận lu hành rộng rÃi Hà Nội tỉnh phía Bắc sau số năm áp dụng Việc xử lý văn sư dơng b¶ng m· ABC vÉn cã ý nghÜa quan trọng thời điểm *Giói thiệu toán cụ thể đề tài Chuyên đề thực tập có nội dung nh sau: Xây dựng chơng trình thống kê kí tự đơn kí tự đôi file văn tiếng Việt mà ABC Đề tài gồm hai phần: Phần thứ thống kê tất kí tự đơn file văn Phần thứ hai liệt kê số lần xuất kí tự đơn sau kí tự đơn khác lần toàn file văn (ví dụ ta có kí tự đôi ca, kí tự a đứng sau kí tự c lần văn bản), sau tính tần suất xuất kí tự đôi II Cơ sở lý thuyết đề tài thực tập Trình bầy tổng quan nghiên cứu lý thuyÕt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 1) File văn Để giải toán đặt ra, trớc hết ta phải xác định kiểu file đầu vào cho chơng trình Trong Turbo Pascal, file văn đợc hiểu theo nghĩa chuẩn, liệu đợc lu trữ dới dạng ký tự bảng mà ASCII Các ký tự đợc liên kết thành dòng, dấu hết dòng đợc ghi nhận cặp ký tự điều khiển có mà 13 (ký tự trở đầu dòng - CR) ký tự có mà 10 (ký tự xuống dòng - Lf) Không có quy định chiều dài dòng cho file văn Turbo Pascal dùng tên chuẩn Text để đặt cho file văn Vì lời khai báo biến file văn là: Var f: text; File văn truy cập truy cập trực tiếp nh file định kiểu Và vừa đọc vừa ghi file văn nh file định kiểu Tuy nhiên file văn không phụ thuộc vào định nghĩa kiểu thành phần nên công cụ giao tiếp chung chơng trình Bất chơng trình đọc liệu từ file văn kết xuất liệu dới dạng văn Việc soạn thảo file văn dùng hệ soạn thảo (là chơng trình tiện ích vốn phong phú nay) Chẳng hạn, dùng hệ soạn thảo Turbo Pascal để xây dựng hiệu chỉnh file văn LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com C¸c bíc thao t¸c file văn tuân theo quy trình nh sau: cần đăng ký biến file văn (f) với tên file đĩa (name) thủ tục Assign (f, name) Sau ®ã më file b»ng thđ tơc Reset (f) đà có để chuẩn bị đọc, më b»ng thđ tơc Rewrite (f) nÕu mn t¹o míi ®Ĩ chn bÞ ghi Sau Reset chØ cã thĨ ®äc sau Rewrite ghi Mỗi lần đọc ghi xong trỏ lại định vị đến vị trí Việc đọc liệu từ file văn tơng tự nh đọc từ bàn phím, dùng thđ tơc Read (f, var1, var2, ), Readln nÕu mn đọc dòng Các biến ký tự đợc đọc theo đơn vị ký tự, biến xâu ký tự đợc đọc độ dài gặp dấu xuống dòng Việc ghi file văn tơng tự nh ghi hình (cũng dùng thủ tục write writeln) Sau thao tác xong cần đóng file nhờ thủ tục Close (f) để đảm bảo an toàn liệu Ngoài có thủ tục Append (f) để mở văn có sẵn để ghi kế tiếp, hàm Eof (f) để kiểm tra đà định vị đến cuối file cha 2) KiĨu trá Trong Pascal, kiĨu trá lµ kiểu liệu đặc biệt, dùng để biểu diễn giá trị địa Nh kiểu trỏ biến dùng để lu giá trị địa chØ cđa bé nhí Nhê c¸c biÕn trá, ta thao tác giá trị địa nh truy cập liệu vùng nhớ cách linh hoạt Ngoài ra, biến trỏ công cụ để xin cấp phát vùng Heap (cÊp LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ph¸t động) xây dựng kiểu liệu động, cho phép chơng trình khai thác tối đa hiệu nhớ Có hai kiểu trỏ trỏ định kiểu trỏ không định kiểu Với toán đà cho, trỏ định kiểu đợc sử dụng Con trỏ định kiểu cần xác định kiểu kiệu mà trỏ đến Turbo Pascal dùng ký hiệu ^ trớc tên kiểu liệu để khai báo trỏ định kiểu: Type PtrType = ^DataType; đó: PtrType DataType tên kiểu trỏ tên kiểu liệu xác định kiểu liệu đợc trỏ Vì kiểu trỏ lu địa nên khai báo trớc kiểu liệu đợc trỏ Chẳng hạn, cã qun khai b¸o: PtrType = ^ DataType; DataType = record end; Hai biÕn trá cã thÓ gán giá trị cho trờng hợp tơng thích Khi chúng trỏ tới địa nhiªn, LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com hai trỏ định kiểu mà trỏ tới kiểu liệu khác không tơng thích Để truy cập liệu mà trỏ p trỏ, Turbo Pascal dùng ký hiệu p^ Ký hiệu đóng vai trò nh biến, có nội dung nội dung vùng liệu mà p trỏ Dùng p^ thay cho mảng Mem biến tuyệt ®èi viƯc truy cËp bé nhí Khi p lµ trỏ định kiểu Khi p^ biến định kiểu có địa đựợc p lu giữ Kiểu p^ đợc xác định kiểu mà trỏ p trỏ tới Mọi thao tác biến dịnh kiểu thông thờng đợc áp dụng cho p^ Tuy nhiên, p^ biến định kiểu đặc biệt, thay đổi địa trình hoạt động cách gán địa tơng ứng cho p, p^ cã thĨ truy cËp vµo bÊt cø vïng nhí theo kiểu liệu Có thể xem p^ nh biến tuyệt đối có khả thay đổi địa nhờ phép gán 3) Cấp phát động ViƯc dïng p^ b»ng c¸ch g¸n cho p mét gi¸ trị địa việc cung cấp biến p^ mới, phải thận trọng truy cập p^ Muốn p^ thực đợc cấp phát nh biến, phải dùng kỹ thuật cấp phát động cho p Cấp phát động đợc thực câu lệnh thân chơng trình (chứ khai báo) đợc thu hồi cần (cũng câu lệnh chơng trình) Vùng cấp phát động vùng nhớ tự (Heap) Địa vùng cấp phát động đợc quản lý biến trỏ Việc cấp phát động cho phép ngời lập tr×nh sư LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com dụng nhớ linh hoạt tiết kiệm đặc biệt, nhờ cấp phát động, ngời ta xây dựng đợc kiểu liệu động, cho phép khai thác tối đa nhớ Cấp phát động ứng dơng quan träng cđa trá ViƯc dïng trá thờng đợc gắn liền với cấp phát động Nhứng biến đợc xin vùng Heap nhờ cấp phát động, đợc gọi biến động (dynamic variable) để phân biệt với biến thông thờng đợc xin từ khai báo Pascal tổ chức hai cách cấp phát động: Một, dành cho trỏ định kiểu hai, dành cho trỏ (không quan tâm đến kiểu) quan tâm đến cấp phát cho trỏ định kiểu - đợc gọi cấp phát định kiểu Giả sử p trỏ định kiĨu thđ tơc New (p) sÏ cÊp mét vïng nhí trªn Heap cho trá p víi kÝch thíc b»ng kích thớc kiểu liệu gán địa cua vùng cho p Khi biến động định kiểu p^ truy cập vùng đợc cấp phát chừng p giữ địa vùng Mọi thao tác biến thông thờng đợc áp dụng cho p^ Vùng nhớ đà cấp phát cho trỏ p thủ tục New(p) đợc thu hồi nhờ thủ tục Dispose (p) Vùng nhớ đà cấp phát đợc hệ thống bảo vệ đợc thu hồi 4) Danh sách liên kết Một ứng dụng quan trọng cấp phát động tạo cấu trúc liệu động, cho phép khai thác LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com linh ho¹t tối đa nhớ Các cài đặt dùng cấu trúc liệu động không bị hạn chế (về lôgic) kích thớc liệu, đặc biệt thuận lợi phải dùng thờng xuyên thao tác chèn xóa Danh sách liên kết dÃy phần tử có kiểu liệu, cần rõ mối liên kết trớc-sau phần tử danh sách Một dạng cài đặt thờng gặp danh sách liên kết dùng mảng, mối liên kết đợc ẩn dới giá trị kề cđa chØ sè ViƯc dïng m¶ng cho phÐp truy cËp nhanh đến phần tử danh sách nhờ giá trị số Tuy nhiên hạn chế việc dùng mảng là: Khai thác nhớ không linh hoạt nhớ phải khai báo trớc Không thể làm việc với danh sách lớn 64 Kb mảng cần đợc cấp vùng nhớ liên tục Các thao tác chèn, xóa đòi hỏi phải dồn số cho phần tử mảng Việc cấp phát động cho phần tử danh sách cho phép khai thác nhớ tốt Một mặt, không phụ thuộc vào kích thớc danh sách khai báo trớc Mặt khác, phần tử danh sách đợc cấp phát riêng rẽ nên danh sách không bị hạn chế giới hạn 64 Kb Ngoài ra, thao tác chèn, xóa đòi hỏi dồn phần tử Để xây dựng danh sách liên kết cấp phát dộng phần tử (mà ta gọi nút - node) cần phải xác định hai LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com thành phần: Một nội dung liệu mà nút lu trữ, hai địa nút Ta dùng kiểu ghi để định nghĩa mét nót nh vËy: Type DataType = {kiĨu d÷ liÖu} PtrType = ^Node; Node = record Data: DataType; {lu trữ liệu} Next: PtrType; {trỏ đến nút kế tiếp} End; Khai báo định nghĩa kiểu PtrType trỏ tới Node, Node kiểu ghi mô tả mét nót gåm hai trêng Trêng Data dïng ®Ĩ lu với giả thiết tên kiểu DataType (là kiểu liệu đà đợc định nghĩa, gồm nhiều thành phần) trờng Next thuộc kiểu PtrType, dùng để lu địa nút Trong khai báo nh PtrType cần đợc định nghĩa trớc Node Để quản lý danh sách, cần có biến toàn thể thuộc kiểu PtrType lu địa nút danh sách Ta đặt tên cho biến First: Var First: PtrType; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Tõ gi¸ trị First ta truy cập đến nút đầu tiên, sau từ trờng Next nút này, ta cã thĨ truy cËp tíi nót thø hai, §Ĩ báo hết danh sách, trờng Next nút cuối cần trỏ vào Nil Bằng cách nh vậy, ta truy cập đợc toàn nút danh sách - Để khởi tạo danh sách rỗng (cha có nút nào), ta gán Nil cho trỏ First: First:=Nil; - Duyệt danh sách: Để lần lợt qua nút danh sách, cần phải khởi động trỏ CurrPtr trỏ đến nút đầu tiên, tiếp qua danh sách theo trờng liên kết xử lý liệu nút - Xây dựng danh sách: Đây công việc gặp toán đề tài Trong toán thờng xảy tình chèn nút vào cuối danh sách Công việc đòi hỏi phải tổ chức thêm trỏ Last trỏ tới cuối danh sách nhằm tìm kiếm lại Nh sau lần nối, phải cập nhập lại giá trị cho trỏ Ngoài việc nối vào danh sách rỗng phải đợc xử lý riêng nút trớc First := Nil; While not Stop Begin New (TempPtr); TempPtr^.Data:= Item; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com end; VAR first: ptrtype; name1, name2, name3: string; procedure Creatlist (name: string); {tao lap danh sach chua cac tu cua file} Var f: text; Item: char; last: ptrtype; Function Getchar: char; Const delimitset: set of char = [chr(0), chr(13), chr(10), chr(0) Chr(64), chr(91) Chr(96), chr(123) Chr(127)]; Var ch: char; more: boolean; Begin ch: =chr(0); more: =true; while not eof(f) begin read(f, ch); LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com more: = ch in delimitset; if not more then begin getchar: =ch; break; end; end; End; Procedure Insertlist (Item: char; var last: ptrtype); Var tempptr: ptrtype; Begin new (tempptr); tempptr^ Data: = Item; if first=nil then first: =tempptr else last^ Next: =tempptr; last: =tempptr; last^ Next: =nil; End; Begin assign(f, name); reset(f); first: =nil; last: =first; while not eof(f) begin LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Item: =getchar; if (itemchr(0)) and (itemchr(11)) then begin insertlist(Item, last); end; end; close(f); End; procedure thongkekytudon(name: string); {thong ke ky tu don va ghi ket qua file co ten name} Type ptrrec = ^rec; rec = record term: char; lanxh: integer; nextrec: ptrrec; end; Var f: text; firstrec, lastrec: ptrrec; Function InRec(w: char): boolean; {tim w list} Var LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com currrec: ptrrec; Begin currrec: = firstrec; inrec: =false; while (currrecnil) begin if currrec^ Term =w then begin inrec: =true; break; end; currrec: = currrec^ Nextrec; end; End; Procedure InsertRec (L: char; N: integer; var lastrec: ptrrec); Var tempptr: ptrrec; Begin new (tempptr); tempptr^ Term: = L; tempptr^ Lanxh: =N; if firstrec=nil then firstrec: =tempptr else lastrec^ Nextrec: =tempptr; lastrec: =tempptr; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com lastrec^ Nextrec: =nil; End; Procedure Taodanhsachkytudon; Var currptr, currptr2: ptrtype; ch: char; count: integer; Begin currptr: =first; while currptrnil begin ch: =currptr^ Data; currptr2: =first; count: =0; while currptr2nil begin if (currptr2^ Data=ch) then count: =count+1; currptr2: =currptr2^ Next; end; if not inrec(ch) then insertrec(ch, count, lastrec); currptr: =currptr^ Next; end; end; procedure ghirafile; var LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com currptr: ptrrec; begin assign (f, name); rewrite(f); currptr: =firstrec; while currptrnil begin writeln(f, currptr^ Term, ' ': 16-length(currptr^ Term), 'xuat hien: ', currptr^ Lanxh: 10, ' lan'); currptr: =currptr^ Nextrec; end; close(f); end; Begin firstrec: =nil; lastrec: =firstrec; taodanhsachkytudon; ghirafile; End; procedure thongkekytudoi(name: string); {thong ke so lan xuat hien cua mot ky tu lien sau mot ky tu khac van ban va ghi ket qua file co ten name} Var currptr, back, currptr2, back2: ptrtype; w1, w2: char; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com count: integer; f: text; Begin assign (f, name); rewrite(f); currptr: =first; back: =currptr^ Next; while (currptrnil) and (backnil) begin w1: =currptr^ Data; w2: =back^ Data; currptr2: =first; back2: =currptr2^ Next; count: =0; while ((currptr2nil) and (back2nil)) begin if ((currptr2^ Data=w1) and (back2^ Data=w2)) then count: =count+1; currptr2: =currptr2^ Next; back2: =back2^ Next; end; writeln (f, w2, ' sau ', w1, ' ', count: 10, ' lan'); currptr: =currptr^ Next; back: =back^ Next; end; close(f); End; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com BEGIN write('nhap ten file can thong ke: '); readln(name1); write('nhap ten file chua ket qua thong ke ky tu don: '); readln(name2); write('nhap ten file chua ket qua thong ke ky tu doi: '); readln(name3); creatlist (name1); thongkekytudon (name2); thongkekytudoi(name3); writeln; writeln('Chuong trinh da thuc hien xong An phim bat ky de ket thuc '); readln; END LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com V KÕt qu¶ thư nghiƯm Chơng trình đợc chạy thử cho file văn có tên A.TXT kết đợc ghi file: KETQUA1.TXT: chứa kết thống kê kí tự đơn KETQUA2.TXT: chứa kết thống kê kí tự đôi Nội dung file A.TXT đợc thử: cộng hòa xà hội chủ nghĩa việt nam độc lập tự hạnh phúc Kết file KETQUA1.TXT: c xuat hien: lan ộ xuat hien: lan n xuat hien: lan g xuat hien: lan h xuat hien: lan LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ß xuat hien: lan a xuat hien: lan x xuat hien: lan · xuat hien: lan i xuat hien: lan ñ xuat hien: lan Ü xuat hien: lan v xuat hien: lan Ö xuat hien: lan t xuat hien: lan m xuat hien: lan ® xuat hien: lan l xuat hien: lan Ë xuat hien: lan p xuat hien: lan ù xuat hien: lan d xuat hien: lan o xuat hien: lan ¹ xuat hien: lan ú xuat hien: lan Kết file KETQUA2.TXT: é sau c lan n sau é lan g sau n lan h sau g lan ß sau h lan LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com a sau ß lan x sau a lan · sau x lan h sau · lan é sau h lan i sau é lan c sau i lan h sau c lan ñ sau h lan n sau ñ lan g sau n lan h sau g lan Ü sau h lan a sau Ü lan v sau a lan i sau v lan Ö sau i lan t sau Ö lan n sau t lan a sau n lan m sau a ® sau m é sau ® c sau é lan lan lan lan l sau c lan Ë sau l lan p sau Ë lan t sau p lan ù sau t lan d sau ù lan o sau d lan LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com h sau o lan ¹ sau h lan n sau ¹ lan h sau n lan p sau h lan h sau p lan ó sau h lan c sau ó lan Tµi liƯu tham khảo Ngôn ngữ lập trình PASCAL Quách Tuấn Ngọc Nhà xuất Giáo Dục Lập trình nâng cao ngôn ngữ PASCAL Nguyễn Tô Thành Nhà xuất Đại học Quốc gia Hà Nội Bài tập ngôn ngữ lập trình PASCAL Quách Tuấn Ngọc Nhà xuất Thống kê TURBO PASCAL cẩm nang tra cứu Quách Tuấn Ngọc Nhà xuất Thèng kª ***************** LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Môc lục I Đặt vấn đề II Cơ sở lý thuyết đề tài thực tập 1) File văn b¶n 2) KiÓu trá 3) Cấp phát động 4) Danh sách liên kết III.Xây dựng phơng án giải toán . LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 1) Mô tả phơng án giải toán 2) Mô tả chơng trình VI Nội dung chơng trình: 14 V KÕt qu¶ thư nghiƯm 18 Tài liệu tham 22 khảo LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... đề thực tập có nội dung nh sau: Xây dựng chơng trình thống kê kí tự đơn kí tự đôi file văn tiếng Việt mà ABC Đề tài gồm hai phần: Phần thứ thống kê tất kí tự đơn file văn Phần thứ hai liệt kê. .. III .Xây dựng phơng án giải toán Chơng trình để giải toán thực công việc chính, thống kê kí tự đơn (liệt kê kí tự có văn bản, số lần xuất kí tự) thống kê số lần xuất kí tự đơn sau kí tự đơn khác kí. .. xuất kí tự đơn sau kí tự đơn khác lần toàn file văn (ví dụ ta có kí tự đôi ca, kí tự a đứng sau kí tự c lần văn bản) , sau tính tần suất xuất kí tự đôi II Cơ sở lý thuyết đề tài thực tập Trình

Ngày đăng: 19/10/2022, 14:52

Xem thêm:

Mục lục

    II. Cơ sở lý thuyết của đề tài thực tập

    III.Xây dựng phương án giải quyết bài toán

    1) Mô tả phương án giải quyết bài toán

    2) Mô tả chương trình

    1. Ngôn ngữ lập trình PASCAL

    2. Lập trình nâng cao trên ngôn ngữ PASCAL

    3. Bài tập ngôn ngữ lập trình PASCAL

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w