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

26 173 0

Fowin Gửi tin nhắn Báo tài liệu vi phạm

Tải lên: 10,913 tài liệu

  • Loading ...
1/26 trang

Thông tin tài liệu

Ngày đăng: 28/03/2016, 15:51

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 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 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ể khác (cách mã hóa ký tự tiếng Việt khác nhau) Có 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 thực tế, 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 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 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 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 thủ tục Reset (f) có để chuẩn bị đọc, mở thủ tục Rewrite (f) muốn tạo để chuẩn bị ghi Sau Reset đọ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 muốn đọ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ỏ 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 nhớ Nhờ 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 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 tên kiểu trỏ DataType 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ó quyền khai báo: PtrType = ^ DataType; DataType = record end; Hai biến trỏ gán giá trị cho trờng hợp tơng thích Khi chúng trỏ tới địa nhiên, 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 nhớ Khi p 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^ truy cập vào 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^ cách gán cho p 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ử 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 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) cấp vùng nhớ Heap cho trỏ p với kích thớc 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 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ề 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 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 nút nh vậy: Type DataType = {kiểu 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ả 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; Từ giá trị First ta truy cập đến nút đầu tiên, sau từ trờng Next nút này, ta 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; If First = Nil then First:= TempPtr; else Last^.Next:=Tempptr; Last:=Tempptr; Last^.Next:=Nil; End; - Tìm kiếm nút danh sách: Giả sử cần tìm nút danh sách có nội dung liệu Item (có kiểu DataType) Việc tìm kiếm đợc tiến hành theo chiều duyệt danh sách First nhờ trỏ CurrPtr Mỗi đến nút, vùng liệu Currptr lại đợc so sánh với Item Nếu tìm thấy, trỏ Currptr xác định nút cần tìm, trái lại trỏ Currptr có giá trị Nil 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í tự đôi (xét xem kí tự đứng sau kí tự lần toàn văn bản) 1) Mô tả phơng án giải toán Để làm đợc việc đó, chơng trình cần phải trải qua bớc chính: - Bớc 1: Lập danh sách liên kết chứa toàn kí tự đơn văn Mỗi nút danh sách chứa kí tự đơn: Đầu tiên tiến hành đọc file văn đầu vào theo ký tự, dùng thủ tục Read(f, ch); nhận ký tự chuẩn (các ký tự tạo thành từ) Sau lần có đợc kí tự tiến hành tạo nút có phần nội dung chứa kí tự tiến hành chèn nút vào cuối danh sách Nh sau bớc ta có danh sách liên kết chứa kí tự đơn file văn nguồn Đây danh sách trung chuyển để tiện cho việc xử lý liệu sau mà cha phải danh sách thống kê kí tự chuẩn Thực từ đọc file văn nguồn nh bớc ta tạo danh sách thống kê kí tự đơn hoàn chỉnh Danh sách có phần nội dung gồm trờng: Trờng 1: Chứa nội dung kí tự Trờng 2: Chứa số lần xuất kí tự file văn Tuy nhiên, toán liên quan đến việc thống kê kí tự đôi Vì ta cần có danh sách chứa kí tự đơn văn mà giữ nguyên trật kí tự nh văn bản, kí tự đứng trớc văn đứng trớc danh sách Sau có đợc danh sách chứa kí tự đôi văn đợc xếp trật tự, ta chuyển sang bớc - Bớc 2: Lập danh sách thống kí tự từ đơn đa kết file văn Từ danh sách thu đợc từ bớc 1, ta tiến hành thực công việc thứ toán: thống kê kí tự đơn văn Để thống kê kí tự đơn đa kết file văn bản, trớc hết cần phải lập danh sách thống kê kí tự đơn hoàn chỉnh với phần nội dung gồm hai trờng: Trờng 1: Term: char - chứa kí tự Trờng 2: lanxh: integer; chứa số lần xuất kí tự Tiến hành duyệt nút danh sách thu đợc từ bớc để lấy lần lợt kí tự đơn file văn Các kí tự qua thủ tục để kiểm tra có danh sách thống kê hay cha, cha có thêm nút có nội dung term kí tự đa vào cuối danh sách, số lần xuất kí tự lúc đợc đa vào Nếu kí tự có danh sách tìm đến vị trí nút chứa kí tự đó, tăng tr ờng số lần xuất kí tự lên Sau có danh sách thống kê kí tự đơn hoàn chỉnh, cung cấp đầy đủ thông tin nội dung số lần xuất kí tự , ta tiến hành duyệt danh sách để đa file kết File kết file văn bản, có tên ng ời dùng tự đặt, tên file đợc nhập từ bàn phím - Bớc 3: Thống kê số lần xuất kí tự liền sau kí tự (thống kê từ đôi) Với danh sách thu đợc từ bớc 1, tổ chức trỏ currptr back Ban đầu currptr vào nút danh sách, back vào nút liền sau nút trỏ currptr Nh duyệt danh sách trỏ ta lần lợt nhận đợc từ đứng trớc (nhờ trỏ currptr) từ đứng sau (nhờ trỏ back) Lập trỏ khác currptr2 back2 với kiểu nh trỏ currptr back để tìm số lần lặp lại từ đơn liền Mỗi có đợc kết hoàn chỉnh (kí tự đơn đứng sau kí tự đơn lần), tiến hành ghi kết file văn chứa kết quả, tên ngời dùng đặt nhập từ bàn phím 2) Mô tả chơng trình Chơng trình giải toán (có tên THONG_KE_ky_tu) có định nghĩa kiểu danh sách khai báo biến nh sau: Type ptrtype = ^node; node = record data: char; next: ptrtype; end; {kiểu trỏ trỏ vào danh sách} {định nghĩa danh sách theo kiểu ghi} var first: ptrtype; {con trỏ trỏ vào nút danh sách, biến toàn cục} name1, name2, name3: string; {các tên file văn bản} Chơng trình gồm thủ tục chính: procedure Creatlist (name: string); procedure Thongkekytudon (name: string); procedure Thongkekytudoi (name: string); +) Thủ tục procedure Creatlist (name: string); thực bớc 1: tạo danh sách chứa toàn ký tự đơn file văn có tên name, giữ nguyên trật tự nh file văn Thủ tục gồm số hàm thủ tục sau: - Hàm function Getchar: char; , trả lại ký tự đơn hợp lệ (khác dấu ký tự đặc biệt) lấy đợc từ file văn bản, trả lại rỗng Nội dung hàm nh sau: last^.next: =nil; end; Và phần thân chơng trình thủ tục procedure Creatlist (name: string); begin assign(f, name); reset(f); {mở file văn nguồn} first: =nil; last: =first; {khởi tạo danh sách} while not eof(f) begin Item: =getchar; {lấy ký tự đơn vào biến Item} if (Itemchr(0)) and ((Itemchr(11)) {lọc để đảm bảo Item hợp lệ} then insertlist(Item, last); {chèn vào danh sách} end; close(f); {đóng file văn nguồn để bảo vệ liệu} end; +) Thủ tục procedure thongkekytudon (name: string); thống kê từ đơn ghi kết file có tên name Thủ tục có phần khai báo nh sau: type ptrrec = ^rec; {định nghĩa kiểu trỏ mới, trỏ vào danh sách thống kê từ} rec = record {định nghĩa nút danh sách} term: char; {chứa từ} lanxh: integer; {chứa số lần xuất từ} nextrec: ptrrec; {con trỏ trỏ tới nút kế tiếp} end; var f: text; {biến gắn với tên file chứa kết thống kê từ đơn} firstrec, lastrec: ptrrec; {2 trỏ trỏ vào đầu cuối danh sách thống kê} Thủ tục bao gồm hàm thủ tục nh sau: - Hàm function InRec (w: char): boolean; {tìm danh sách rec nút có nội dung w} var currrec: ptrrec; begin currrec: = firstrec; {bắt đầu tìm từ nút danh sách} inrec: =false; while (currrecnil) begin if currrec^.term=w then begin inrec: =true; break; {ngắt khỏi vòng lặp tìm thấy} end; currrec: = currrec^ Nextrec; {không tìm thấy, tiếp tục chuyển tới nút sau} end; end; - Thủ tục procedure InsertRec (L: char; N: integer; var lastrec: ptrrec); thêm nút vào cuối danh sách: Var tempptr: ptrrec; begin new (tempptr); {xin cấp phát nút mới} tempptr^.term: = L; {nạp nội dung cho nút mới} tempptr^.lanxh: =N; if firstrec=nil then {nếu danh sách rỗng} firstrec:=tempptr else lastrec^.nextrec: =tempptr; {nối vào cuối danh sách} lastrec: =tempptr; {định vị lại trỏ last} lastrec^.nextrec: =nil; end; - Thủ tục procedure Taodanhsachkytudon; tạo danh sách thống kê ký tự đơn hoàn chỉnh để chuẩn bị đa file kết var currptr, currptr2: ptrtype; ch: char; count: integer; begin currptr: =first; while currptrnil {duyệt danh sách bớc để lấy từ} begin ch: =currptr^.data; {lấy từ vào biến ch} currptr2: =first; count: =0; while currptr2nil {tìm số lần lặp lại từ} begin if (currptr2^.data=ch) then count: =count+1; currptr2: =currptr2^.next; end; if not inrec(ch) then insertrec(ch, count, lastrec); {kiểm tra từ có danh sách thống kê cha, cha có đa vào cuối danh sách} currptr: =currptr^.next; end; end; - Thủ tục procedure Ghirafile; duyệt danh sách thống kê ký tự đơn (rec) để ghi file kết var currptr: ptrrec; begin assign (f, name); rewrite(f); {mở file kết để ghi} currptr: =firstrec; {bắt đầu duyệt từ nút đầu tiên} while currptrnil begin {duyệt danh sách để ghi lên file f} writeln(f, currptr^.term, ' ': 16-length(currptr^.term), 'xuat hien: ', currptr^.lanxh: 10, ' lan'); currptr:=currptr^.nextrec; end; close(f); end; - Phần thân chơng trình thủ tục procedure thongkekytudon (name: string);là begin firstrec: =nil; lastrec: =firstrec; taodanhsachkytudon; ghirafile; end; +) Thủ tục procedure thongkekytudoi(name: string); thống kê số lần lặp lại ký tự đơn sau ký tự đơn khác ký tự đôi ghi kết file văn Thủ tục có nội dung nh sau: var currptr, back, currptr2, back2: ptrtype; {khai báo trỏ để duyệt danh sách thu đợc từ bớc 1} w1, w2: char; count: integer; f: text; begin assign (f, name); rewrite(f); {mở file kết để ghi} currptr: =first; back: =currptr^.next; while (currptrnil) and (backnil) begin w1: =currptr^.data; {lấy ký tự đứng trớc} w2: =back^.data; {lấy ký tự đứng sau} currptr2: =first; back2: =currptr2^.next; count: =0; while ((currptr2nil) and (back2nil)) {duyệt danh sách để tìm số lần lăp lại} 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'); {ghi thông tin file f} currptr: =currptr^.next; back: =back^.next; end; close(f); end; 3) Nội dung chơng trình: Program THONG_KE_ky_tu; TYPE ptrtype = ^node; node = record data: char; next: ptrtype; 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); 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 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 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; 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 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; 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; 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 V Kết 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 ộ n g h ò a x ã i ủ ĩ v ệ t m đ l ậ p ự d o ú xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat xuat hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: hien: Kết file KETQUA2.TXT: ộ sau c n sau ộ lan lan 4 1 1 1 1 1 1 1 lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan g h ò a x ã h ộ i c h ủ n g h ĩ a v i ệ t n a m đ ộ c l ậ p t ự d o h n h p h ú c sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau sau n g h ò a x ã h ộ i c h ủ n g h ĩ a v i ệ t n a m đ ộ c l ậ p t ự d o h n h p h ú 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan lan 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ê ***************** Mục lục I Đặt vấn đề II Cơ sở lý thuyết đề tài thực tập 1) File vă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 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 thử nghiệm 18 Tài liệu tham khảo 22 [...]... thuc '); readln; END V Kết quả thử nghiệm Chơng trình đợc chạy thử cho file văn bản có tên là A.TXT và kết quả đợc ghi trên 2 file: KETQUA1.TXT: chứa kết quả thống kê kí tự đơn KETQUA2.TXT: chứa kết quả 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ự do hạnh phúc Kết quả trên file KETQUA1.TXT: c ộ n g h ò a x ã i ủ ĩ v ệ t m đ l ậ p ự d o ạ ú xuat xuat xuat... currptr:=currptr^.nextrec; end; close(f); end; - Phần thân chơng trình của thủ tục procedure thongkekytudon (name: string);là begin firstrec: =nil; lastrec: =firstrec; taodanhsachkytudon; ghirafile; end; +) Thủ tục procedure thongkekytudoi(name: string); thống kê số lần lặp lại của một ký tự đơn sau một ký tự đơn khác trong ký tự đôi và ghi kết quả ra file văn bản Thủ tục này có nội dung nh sau: var currptr, back,... lập trình PASCAL Quách Tuấn Ngọc Nhà xuất bản Giáo Dục 2 Lập trình nâng cao trên ngôn ngữ PASCAL Nguyễn Tô Thành Nhà xuất bản Đại học Quốc gia Hà Nội 3 Bài tập ngôn ngữ lập trình PASCAL Quách Tuấn Ngọc Nhà xuất bản Thống kê 4 TURBO PASCAL cẩm nang tra cứu Quách Tuấn Ngọc Nhà xuất bản Thống kê ***************** Mục lục I Đặt vấn đề 1 II Cơ sở lý thuyết của đề tài thực tập 1 1) File. .. đã có trong danh sách thống kê cha, nếu cha có thì đa vào cuối danh sách} currptr: =currptr^.next; end; end; - Thủ tục procedure Ghirafile; duyệt danh sách thống kê ký tự đơn (rec) để ghi ra file kết quả var currptr: ptrrec; begin assign (f, name); rewrite(f); {mở file kết quả để ghi} currptr: =firstrec; {bắt đầu duyệt từ nút đầu tiên} while currptrnil do begin {duyệt danh sách để ghi lên file f}... then insertlist(Item, last); {chèn vào danh sách} end; close(f); {đóng file văn bản nguồn để bảo vệ dữ liệu} end; +) Thủ tục procedure thongkekytudon (name: string); thống kê từ đơn và ghi kết quả ra file có tên name Thủ tục này có phần khai báo nh sau: type ptrrec = ^rec; {định nghĩa một kiểu con trỏ mới, trỏ vào danh sách thống kê từ} rec = record {định nghĩa từng nút của danh sách} term: char; {chứa... xuất hiện của từ} nextrec: ptrrec; {con trỏ trỏ tới nút kế tiếp} end; var f: text; {biến gắn với tên file chứa kết quả thống kê từ đơn} firstrec, lastrec: ptrrec; {2 con trỏ trỏ vào đầu và cuối danh sách thống kê} Thủ tục này bao gồm các hàm và thủ tục nh sau: - Hàm function InRec (w: char): boolean; {tìm trong danh sách rec nút có nội dung w} var currrec: ptrrec; begin currrec: = firstrec; {bắt đầu tìm... last^.next: =nil; end; Và đây là phần thân chơng trình của thủ tục procedure Creatlist (name: string); begin assign(f, name); reset(f); {mở file văn bản nguồn} first: =nil; last: =first; {khởi tạo danh sách} while not eof(f) do begin Item: =getchar; {lấy từng ký tự đơn vào biến Item} if (Itemchr(0)) and ((Itemchr(11)) {lọc để đảm bảo Item là hợp lệ} then insertlist(Item, last); {chèn vào danh sách} end;...const {khai báo mảng chứa các ký tự không hợp lệ} delimitset: set of char = [chr(0), chr(13), chr(10), chr(0) Chr(64), chr(91) Chr(96), chr(123) Chr(127)]; Var w ,ch: char; more: boolean; begin ch: =chr(0); more: =true; while not eof(f) do begin read(f, ch); {đọc từng ký tự của file văn bản vào biến ch} more: = ch in delimitset; if not more then {nếu ký tự là hợp lệ} begin getchar: =ch; break;... lastrec^.nextrec: =nil; end; - Thủ tục procedure Taodanhsachkytudon; tạo danh sách thống kê ký tự đơn hoàn chỉnh để chuẩn bị đa ra file kết quả var currptr, currptr2: ptrtype; ch: char; count: integer; begin currptr: =first; while currptrnil do {duyệt danh sách ở bớc 1 để lấy từ} begin ch: =currptr^.data; {lấy từng từ vào biến ch} currptr2: =first; count: =0; while currptr2nil do {tìm số lần lặp... 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 V Kết quả thử nghiệm Chơng trình đợc chạy thử cho file vă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... 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í. .. Chứa số lần xuất kí tự file văn Tuy nhiên, toán liên quan đến việc thống kê kí tự đôi Vì ta cần có danh sách chứa kí tự đơn văn mà giữ nguyên trật kí tự nh văn bản, kí tự đứng trớc văn đứng trớc
- Xem thêm -

Xem thêm: 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 , 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 , 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 , 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

Tài liệu mới bán

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay