
Luận văn 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

I. Đặt vấn đề
*Mục đích của đề tài
Từ khi máy vi tính trở nên phổ biến và rộng rãi trong nước, nhu cầu sử dụng
chữ Việt trên 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 là một vấn đề có tầm quan trọng trong 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 trong nước. Do vậy đã
có nhiều cá nhân, tập thể trong và ngoài nước đã tập trung nhiều công sức trong
việc đưa tiếng Việt vào các máy tính nói chung và máy vi tính nói riêng.
Hiện nay có rất nhiều phần mềm đưa tiếng Việt vào máy tính, số lượng các
phần mềm này lớn cho ta thấy được ý nghĩa của việc đưa tiếng Việt vào máy tính.
Tuy nhiên mỗi phần mềm này lại có một cách thức thể hiện khác nhau (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 nhất theo những quy tắc chung, các giải pháp tiếng
Việt đã phần nào đáp ứng được nhu cầu thực tiễn, ít nhất cũng trong phạm vi của
một tổ chức, cơ quan...và góp phần vào việc “Việt hóa” các ứng dụng cho máy
tính.
ở cấp độ các cơ quan nhà nước, một bộ mã tiếng Việt duy nhất được thống
nhất sử dụng, đó là bộ mã TCVN3 hay còn gọi là mã ABC. Mặc dù vẫn còn nhiều
khiếm khuyết nhưng trên thực tế, bộ mã tiếng Việt 8 bit này đã được chấp nhận và
lưu hành rộng rãi tại Hà Nội và các tỉnh phía Bắc sau một số năm áp dụng. Việc
xử lý các văn bản sử dụng bảng mã ABC vẫn có ý nghĩa quan trọng trong thời
điểm hiện tại.
*Giói thiệu bài toán cụ thể của đề tài

Chuyên đề thực tập này có nội dung như sau:
“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”.
Đề tài gồm hai phần:
Phần thứ nhất thống kê tất cả các kí tự đơn của file văn bản
Phần thứ hai liệt kê số lần xuất hiện của một kí tự đơn sau một kí tự đơn
khác là bao nhiêu lần trong toàn bộ file văn bản (ví dụ ta có kí tự đôi “ca”, vậy kí
tự “a” sẽ đứng sau kí tự “c” là bao nhiêu lần trong văn bản), sau đó tính tần suất
xuất hiện kí tự đôi.
II. Cơ sở lý thuyết của đề tài thực tập
Trình bầy tổng quan các nghiên cứu trong lý thuyết
1) File văn bản
Để giải bà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 bản được hiểu theo nghĩa chuẩn, các dữ liệu
được lưu trữ dưới dạng các ký tự trong bảng mã ASCII. Các ký tự được liên kết
thành từng dòng, dấu hết dòng được ghi nhận bởi cặp ký tự điều khiển có mã 13
(ký tự trở về đầu dòng - CR) và ký tự có mã 10 (ký tự xuống dòng - Lf). Không có
quy định về chiều dài dòng cho file văn bản.

Turbo Pascal dùng tên chuẩn Text để đặt cho file văn bản. Vì thế lời khai báo
biến file văn bản sẽ là:
Var
f: text;
File văn bản chỉ có thể truy cập tuần tự chứ không thể truy cập trực tiếp như file
định kiểu. Và cũng không thể vừa đọc vừa ghi trên file văn bản như file định kiểu.
Tuy nhiên vì file văn bản không phụ thuộc vào định nghĩa kiểu thành phần nên
nó là công cụ giao tiếp chung giữa các chương trình. Bất cứ chương trình nào cũng
có thể đọc dữ liệu từ file văn bản và kết xuất dữ liệu dưới dạng văn bản. Việc soạn
thảo file văn bản có thể dùng bất cứ một hệ soạn thảo nào (là những chương trình
tiện ích vốn rất phong phú hiện nay). Chẳng hạn, có thể dùng ngay hệ soạn thảo
của chính Turbo Pascal để xây dựng và hiệu chỉnh file văn bản.
Các bước thao tác trên file văn bản tuân theo quy trình như sau: đầu tiên cần
đăng ký biến file văn bản (f) với tên file trên đĩa (name) bằng thủ tục Assign (f,
name). Sau đó mở file bằng thủ tục Reset (f) nếu nó đã có để chuẩn bị đọc, hoặc
mở bằng thủ tục Rewrite (f) nếu muốn tạo mới để chuẩn bị ghi. Sau Reset chỉ có
thể đọc và sau Rewrite chỉ có thể ghi. Mỗi lần đọc ghi xong con trỏ lại định vị đến
vị trí kế tiếp. Việc đọc dữ liệu từ file văn bản tương tự như đọc từ bàn phím, cũng
dùng các thủ tục Read (f, var1, var2, ...), Readln nếu muốn đọc từng dòng. Các
biến ký tự được đọc theo từng đơn vị ký tự, các biến xâu ký tự được đọc đúng độ
dài của nó hoặc cho đến khi gặp dấu xuống dòng. Việc ghi ra file văn bản cũng
tương tự như ghi ra màn hình (cũng dùng các thủ tục write và writeln). Sau khi
thao tác xong cần đóng file nhờ thủ tục Close (f) để đảm bảo an toàn dữ liệu.
Ngoài ra còn có thủ tục Append (f) để mở một văn bản có sẵn để ghi kế tiếp,
hàm Eof (f) để kiểm tra đã định vị đến cuối file chưa...

2) Kiểu con trỏ
Trong Pascal, kiểu con trỏ là một kiểu dữ liệu đặc biệt, dùng để biểu diễn
những giá trị địa chỉ. Như thế kiểu con trỏ là những biến dùng để lưu những giá trị
địa chỉ của bộ nhớ. Nhờ các biến con trỏ, ta có thể thao tác trên các giá trị địa chỉ
cũng như truy cập dữ liệu ở các vùng nhớ một cách linh hoạt. Ngoài ra, biến con
trỏ còn là công cụ để xin cấp phát trên vùng Heap (cấp phát động) và xây dựng
kiểu dữ liệu động, cho phép chương trình có thể khai thác tối đa và hiệu quả bộ
nhớ.
Có hai kiểu con trỏ là con trỏ định kiểu và con trỏ không định kiểu.
Với bài toán đã cho, con trỏ định kiểu được sử dụng. Con trỏ định kiểu cần
xác định kiểu dữ kiệu mà nó trỏ đến. Turbo Pascal dùng ký hiệu ^ trước tên kiểu
dữ liệu để khai báo con trỏ định kiểu:
Type
PtrType = ^DataType;
trong đó: PtrType là tên kiểu con trỏ
DataType là tên kiểu dữ liệu xác định kiểu dữ liệu được trỏ.
Vì kiểu con trỏ chỉ lưu địa chỉ nên nó có thể khai báo trước kiểu dữ liệu được
trỏ. Chẳng hạn, có quyền khai báo:
PtrType = ^ DataType;
DataType = record
..............