Chương I. GIỚI THIỆU ĐỀ tại và CÔNG CỤ LẬP TRÌNH

CƠ QUAN GIÁO DỤC LIÊN BANG Cơ sở giáo dục đại học chuyên nghiệp quốc gia Trường đại học tổng hợp kỹ thuật điện Xanh-Pêtécbua «LETI» mang tên V.I. Ulianôv(Lênin) (СПбГЭТУ) ---------------------------------------- Hướng ngành 552800 - "Tin học và kỹ thuật tính toán" Bộ môn Đảm bảo toán học máy tính Cho phép bảo vệ: Lãnh đạo hướng ngành TSKH, GS. Geraximov I.V. LUẬN VĂN TỐT NGHIỆP CHUYÊN NGÀNH BẬC CỬ NHÂN Đề tài: “Xây dựng chương trình từ điển tiếng Nga” Sinh viên: Ngô Tuấn Minh

doc48 trang | Chia sẻ: huyen82 | Lượt xem: 1374 | Lượt tải: 0download
Tóm tắt tài liệu Chương I. GIỚI THIỆU ĐỀ tại và CÔNG CỤ LẬP TRÌNH, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lớp: LETI 03D (508517) Giáo viên hướng dẫn: KS. Trần Hoàng Minh Trưởng bộ môn Đảm bảo toán học máy tính: TSKH , GS. A.R.Lixx Xanh-Pêtécbua 2009 LỜI MỞ ĐẦU Ngôn ngữ vốn là phương tiện giao tiếp của loài người, hơn thế nữa ngôn ngữ còn giúp loài người hiểu nhau hơn để cùng giải quyết những khó khăn chung, tiến tới xây dựng một thế giới ngày càng tươi đẹp. Ngày nay, cùng với sự phát triển vượt bậc của công nghệ thông tin thì việc trao đổi liên lạc giữa người với người ngày càng dễ dàng hơn thông qua các ứng dụng tiện ích thực tế. Trong đó phải kể đến sự hỗ trợ của các chương trình từ điển, chúng giúp con người nhanh chóng nắm bắt ngôn ngữ của nhau đồng thời giúp họ thoát khỏi công việc nặng nhọc là tra cứu từ trong các quyển từ điển dày và nặng. Hiện nay ở nước ta, ngoài tiếng Anh là ngoại ngữ chính thì tiếng Nga cũng là ngoại ngữ rất cần thiết cho nhiều ngành khoa học, đặc biệt là các ngành kỹ thuật như cơ khí, luyện kim, thuỷ tinh… Vì thế thông qua ngôn ngữ lập trình trên máy tính, từ điển điện tử tiếng Nga sẽ tạo điều kiện thuận lợi hơn cho người dùng trong việc tra cứu từ vựng. Thêm vào đó cần có một chương trình tiếng Nga hoàn thiện về ngữ pháp, bài tập để phục vụ người dùng không những tra từ mà còn có thể học tốt ngôn ngữ này. Mục tiêu này từ lâu đã là niềm thích thú của bản thân em, chính vì thế “Chương trình học tiếng Nga” được em chọn làm đề tài tốt nghiệp của mình. Do hạn chế về thời gian thực tập nên đề tài không tránh khỏi những thiếu sót, rất mong được sự đóng góp ý kiến của thầy cô và các bạn để chương trình ngày càng hoàn thiện thêm. CHƯƠNG I: GIỚI THIỆU ĐỀ TÀI VÀ CÔNG CỤ LẬP TRÌNH 1.1. GIỚI THIỆU ĐỀ TÀI 1.1.1. Mục tiêu của đề tài Nhằm tạo điều kiện thuận lợi và linh hoạt hơn cho các bạn học sinh, sinh viên cũng như các bạn mới học Tiếng Nga trong việc tra cứu từ vựng, tài liệu ngữ pháp, bài tập ứng dụng cũng như luyện kỹ năng nghe. Chương trình học Tiếng Nga hướng tới khả năng đáp ứng đầy đủ các yếu tố trên với các chức năng như sau: Tra cứu Từ điển Nga Việt. Tham khảo Ngữ pháp Tiếng Nga cơ bản. Thực hành bài tập. Thực hành kĩ năng nghe. 1.1.2. Yêu cầu của đề tài Chương trình học Tiếng Nga cần thỏa mãn các yêu cầu sau: - Từ điển có các chức năng cơ bản: Tra từ, Thêm từ, Sửa từ, Xóa từ và tra lại các từ trước đó. - Có thư viện âm thanh, hình ảnh hỗ trợ cho các từ trong Từ điển. - Giới thiệu bàn phím Tiếng Nga nhằm tạo điều kiện thuận lợi cho người dùng làm quen với ký tự trên bàn phím. - Giao diện bàn phím phải thuận lợi cho người sử dụng trong quá trình tra từ: + Có chức năng tắt/mở hiển thị bàn phím. + Chức năng soạn thảo từ bằng cách click chuột trên các nút chữ. - Ngữ pháp cô đọng, dễ hiểu. - Bài tập không quá khó để phù hợp với kiến thức của người mới học, đồng thời giúp người học nắm thêm từ vựng và áp dụng ngữ pháp đã học. - Thực hành nghe với những bài đối thoại do người bản xứ đọc, âm thanh rõ ràng, chất lượng tốt. - Cấu trúc dữ liệu của chương trình phải gọn và không gây lãng phí bộ nhớ. - Các thuật toán sắp xếp và tìm kiếm trên cây đủ nhanh, hiệu quả. 1.2. CÔNG CỤ LẬP TRÌNH Chương trình được thực hiện với ngôn ngữ Delphi, là ngôn ngữ có cấu trúc tương tự ngôn ngữ Pascal, nhưng thực hiện theo hướng lập trình hướng đối tượng. Qua một thời gian tìm hiểu về ngôn ngữ này, ta có thể rút ra một số nhận xét sau: - Delphi là một bộ phận của môi trường Windows, phát triển ứng dụng có hiệu quả cao và hỗ trợ một cách nhanh chóng các ứng dụng với một lượng mã rất ít. Delphi chính xác là ngôn ngữ Object Pascal dễ học và dễ hiểu. Trong chương trình này Delphi áp dụng để: + Xây dựng các ứng dụng Windows trực quan tương tự Visual Basic. + Thiết kế ứng dụng cơ sở dữ liệu. + Biên dịch các ứng dụng DLL (thư viện liên kết động). + Xây dựng trình điều khiển thiết bị. + Gọi hàm API cấp thấp. Với Delphi, mọi ý tưởng về hình ảnh, đồ họa, âm thanh, lập trình hệ thống, truy xuất cơ sở dữ liệu, lập trình mạng, Internet …. đều có thể trở thành hiện thực. 1.2.1. Các tính năng của môi trường phát triển ứng dụng delphi 1.2.1.1 Môi trường phát triển trực quan Delphi cho phép xây dựng ứng dụng bằng cách chọn các thành phần công cụ có sẳn từ bảng công cụ đặt chúng vào Form (cửa sổ chính), lắp ghép và tạo nên một ứng dụng hoàn chỉnh. Delphi sẽ tự động sinh mã khi kết nối các công cụ trên Form. Cách tiếp cận lập trình này tương tự như môi trường Visual Basic và các môi trường phát triển trực quan khác. Tuy nhiên kỹ thuật lập trình hướng đối tượng thực sự (Object Oriented Programming - OPP) là một trong số những điểm khác biệt để nhận ra Delphi. 1.2.1.2. Lập trình biên dịch 32-bit được tối ưu hóa Điểm đặc biệt tách rời Delphi với các môi trường phát triển trực quan khác (như Visual Basic) là khả năng biên dịch các chương trình thực thi .exe độc lập 32-bit chạy rất nhanh và hiệu quả. Trình biên dịch Delphi cũng đưa ra những chỉ dẫn bổ ích giúp quyết định sự tối ưu, loại bỏ những biến dư thừa không sử dụng đến, thông báo lỗi chính xác. Mã nguồn của chương trình vì thế sẽ trở nên trong sáng, dễ hiểu, tránh được những lỗi tiềm ẩn 1.2.1.3. Truy cập và xử lý cơ sở dữ liệu mềm dẻo Ứng dụng Delphi có khả năng giao tiếp và truy xuất nhiều loại cơ sở dữ liệu khác nhau, từ cơ sở dữ liệu cục bộ (local database) như FoxPro, Acces cho đến cơ sở dữ liệu kết nối từ xa (remote database) như SQL Server, Oracle, InterBase, ... 1.2.1.4. Ngôn ngữ và thư viện - Delphi sử dụng ngôn ngữ hướng đối tượng Object Pascal (một phiên bản tiếp theo của ngôn ngữ Pascal cũ). Object Pascal cung cấp một tập hợp ngôn ngữ mở rộng hiệu quả và uyển chuyển hơn ngôn ngữ Pascal bao gồm: + Xử lý lỗi ngoại lệ (Exception handling): cho phép chương trình đón bắt các lỗi xảy ra trong một khối lệnh lúc thực thi. + Kiểm tra kiểu dữ liệu lúc thực thi (RTTI hay Runtime Time Information): chương trình có thể kiểm tra kiểu dữ liệu của một đối tượng lúc ứng dụng thực thi (runtime) thay vì vào thời điểm biên dịch (compile - time). + Hỗ trợ từ khóa mới Interface: từ khóa này được sử dụng để phát triển các ứng dụng COM. Đồng thời có thể xây dựng nhiều lớp giao tiếp (interface) dành cho một đối tượng nào đó. + Kiểu chuỗi không giới hạn (unlimited-length string): với Object Pascal kiểu chuỗi có thể chứa số ký tự không giới hạn. Theo lý thuyết có thể chứa một chuỗi với kích thước ...2GB (cũng có nghĩa là khoảng 2 tỉ ký tự). + Kiểu dữ liệu tiền tệ (currency type): hướng đến môi trường xí nghiệp và cơ sở dữ liệu, Object Pascal hỗ trợ cách tính toán cho các ứng dụng xử lý giao dịch về tài chính dựa trên kiểu dữ liệu currency + Kiểu dữ liệu variant (“không kiểu” hay “untyped data”): nếu ngại khai báo kiểu tường minh, ta có thể sử dụng biến kiểu variant dùng để chứa và tính toán với mọi kiểu dữ liệu. - Thư viện các thành phần công cụ trực quan VCL (Visual Component Library) là bộ khung làm việc hướng đối tượng chủ yếu của Delphi. Trong Delphi, mỗi đối tượng hay thành phần VCL được nắm kéo từ bảng công cụ gắn lên Form đều tương tác chặt chẽ với nhau thông qua các lớp đối tượng. Đồng thời có thể dễ dàng thay đổi cách ứng xử của đối tượng một cách trực quan từ môi trường Delphi với giao diện đồ họa thân thiện. 1.2.2. Cấu trúc chương trình delphi và unit – Chương trình được xây dựng từ các đa thể mã nguồn nhỏ được gọi là Unit. Mỗi Unit chứa trong một tập tin và được biên dịch độc lập; Unit được biên dịch ra các thư viện: đó là các tập tin mang tên mở rộng .DCU. Đối với người lập trình Pascal, các tập tin .DCU hoàn toàn tương đương với tập tin thư viện của Pascal .TPU. Các Unit dùng để liên kết với nhau tạo ra ứng dụng. Unit cho phép: + Chia một chương trình lớn thành nhiều đơn thể (module) nhỏ có thể soạn thảo mã nguồn và biên dịch độc lập với nhau. + Tạo ra thư viện dùng để lưu trữ hàm dùng chung giữa các chương trình. + Phân phối thư viện đã biên dịch đến các nhà phát triển khác mà không cần kèm theo mã nguồn. – Chương trình chính được lưu trong tập tin dự án (project) có phần mở rộng là .DPR, còn hầu hết mã nguồn của chương trình lại nằm trong Unit với tên truyền thống .PAS. * Thành phần của một Project bao gồm: a) DPR : file Project: Liệt kê tất cả form và unit file trong Project. Lưu giữ mã của các ứng dụng. b) PAS : Mã nguồn cho Unit. Một file .PAS được tạo ra cho mỗi form trong Project. File này chứa tất cả các khai báo và thủ tục. c) DFM : file lưu dạng form. Là file nhị phân, chứa những thuộc tính của form trong Project. Được tạo dựa trên sự tương ứng của file.PAS cho mỗi form. d) OPT : file tùy chọn của Project. File văn bản, chứa những cài đặt hiện hành cho tùy chọn của Project. e) RES : Compiler resource file. File nhị phân, chứa những biểu tượng ứng dụng và những tài nguyên khác. · ~DP : file lưu của Project. · ~PA : File lưu của Unit. · ~DF : file lưu của Graphic form. · DSK : file cài đặt màn hình. · EXE : file thực thi cho ứng dụng, những file này sẽ sát nhập với những file .DCU (điều này có nghĩa ứng dụng không cần file. DCU khi thực thi). · DCU : file mã đối tượng đơn vị. Được tạo ra khi biên dịch file.PAS tương ứng. · DLL : file liên kết động. Ngoài ra còn một số file hỗ trợ như: · Image file ( .BMP, .WMF ): là file bitmap, thể hiện khi sử dụng các thành phần loại Timage, nó có thể nằm bất cứ nơi đâu. Khi cần thiết, Delphi có thể chụp một " bức ảnh" file trên đĩa và nó lưu giữ trên file. DFM và nó sẽ phiên dịch vào trong file thực thi. · Icon files (. ICO), Help files ( .HLP ) : tương tự như Image file. 1.2.3. Lệnh điều khiển trong object pascal 1.2.3.1. Lệnh GOTO Là lệnh nhảy không điều kiện, nó chuyển hướng thực thi của chương trình đến vị trí mà nhãn label đang đứng. Cú pháp: goto label Lệnh goto thường dùng để thoát khỏi vòng lặp. 1.2.3.2. Các lệnh cấu trúc * Lệnh with: dùng để phân rã các cấu trúc phức hợp của một thành phần. * Lệnh điều kiện gồm lệnh if và lệnh case: dùng để rẻ nhánh chương trình theo một tiêu chuẩn nào đó. * Lệnh lặp gồm lệnh repeat, while và for: dùng để quay trở lại thực hiện mã lệnh vơi một điều kiện nào đó. * Lệnh ngắt break và continue: được sử dụng bên trong vòng lặp repeat, while và for. * Các nhóm lệnh đặc biệt khác như raise, try....except và try....final: dùng để xử lý những lỗi ngoại lệ (exception) phát sinh trong khối lệnh. 1.2.4. Các kiểu dữ liệu trong ngôn ngữ object pascal 1.2.4.1. Kiểu dữ liệu đơn giản * Kiểu thứ tự: gồm integer, char, boolean, kiểu liệt kê và kiểu tập con. * Kiểu số nguyên Integer * Kiểu kí tự Char: Delphi có 2 kiểu kí tự cơ sở là AnsiChar và WideChar. - AnsiChar là kiểu kí tự 1 byte (tương tự bộ kí tự ASCII). - WideChar là kiểu kí tự 2 byte, dùng biểu diễn bộ mã Unicode cho tập hợp kí tự. * Kiểu boolean: gồm - ByteBool tương đương với giá trị luận lý kiểu byte có kích thước 1 byte. - WordBool tương đương với giá trị luận lý kiểu Word có kích thước 2 byte. - LongBool tương đương với giá trị luận lý kiểu LongInt có kích thước 4 byte. * Kiểu liệt kê: để khai báo ta sử dụng cú pháp sau Type typeName = (val 1, ..., val n ) Với typeName là tên kiểu (hay tên tập hợp); val là định danh hay tên gọi của các phần tử tự do người lập trình tự đặt. * Kiểu tập con: là một định nghĩa thu hẹp của các kiểu thứ tự khác. Các toán tử áp dụng trên kiểu thứ tự đều có thể áp dụng cho kiểu tập con tương ứng. 1.2.4.2. Kiểu số thực Gồm: Real48, Single, Double, Extended, Comp, Currency, Real 1.2.4.3. Kiểu chuỗi Gồm: ShortString, AnsiString, WideString. 1.2.4.4. Kiểu cấu trúc * Tập hợp (Sets): là một tập các giá trị cùng kiểu thứ tự. Mỗi biến kiểu tập hợp có thể chứa nhiều phần tử của tập hợp. Cú pháp: set of baseType Trong đó baseType là kiểu thứ tự bất kì (thường là tập con) có số phần tử không quá 256. * Mảng (Array): dùng để biểu diễn một tập hợp các phần tử có cùng kiểu dữ liệu. Các phần tử mảng được truy xuất theo chỉ số, mỗi phần tử tương ứng với một chỉ số duy nhất. Mảng có thể được cấp phát tĩnh và cấp phát động vùng nhớ để lưu trữ các giá trị mà nó nắm giữ. - Cú pháp xây dựng mảng tĩnh: array [indexType 1, ..., indexType n] of baseType Trong đó indexType là một tập các số có kiểu thứ tự (hay bất kỳ các tập con thứ tự khác không vượt quá 2 GB) dùng làm chỉ số mảng. baseType là kiểu dữ liệu chung cho các phần tử của mảng. - Cú pháp xây dựng mảng động: array of baseType Trong đó baseType là kiểu dữ liệu của các phần tử mảng. * Bản ghi (Record): là một tập hợp gồm nhiều phần tử có các kiểu khác nhau hợp lại. Mỗi phần tử trong cấu trúc bản ghi được gọi là trường (field). Khai báo kiểu bản ghi sẽ chỉ định tên và kiểu cho mỗi trường. Cú pháp: type recordTypeName = record fieldList 1 : type 1; .... fieldList n : type n; end; Trong đó recordTypeName là tên kiểu bản ghi do người sử dụng đặt. fieldList n cho biết tên trường mà bản ghi lưu trữ. type n cho biết kiểu dữ liệu tương ứng với trường. * Kiểu tập tin (File): bao gồm một tập hợp các phần tử có cùng kiểu được lưu thành tập tin trên đĩa. Cú pháp: type fieldTypeName = file of type Trong đó fieldTypeName là tên định danh của kiểu file. type là các kiểu có kích thước cố định. 1.2.4.5. Con trỏ và kiểu con trỏ * Con trỏ là một biến lưu giữ địa chỉ của một vùng nhớ. * Cú pháp khai báo kiểu con trỏ: type pointerTypeName = ^type 1.2.4.6. Kiểu thủ tục (procedural type) Kiểu thủ tục cho phép sử dụng hàm, thủ tục như một giá trị. Có thể thực hiện các phép gán hàm và thủ tục cho biến, truyền tên hàm và thủ tục như một đối số trong các lời gọi hàm khác. 1.2.4.7. Kiểu Variant Kiểu Variant được sử dụng khi phải xử lý loại dữ liệu không biết trước được kiểu chính xác của nó lúc biên dịch. Các biến kiểu Variant tiêu tốn nhiều bộ nhớ hơn các biến có kiểu dữ liệu thông thường và điều đó làm cho tốc độ thực thi của chương trình sẽ chậm đi, đồng thời trình biên dịch sẽ không thể nào kiểm tra tính tương thích của kiểu dữ liệu trong các phép toán. 1.2.5. Hàm và thủ tục Thủ tục (procedure) và hàm (function) thường được xem như các thường trình (routines). Bản thân chúng là những khối lệnh có thể được gọi từ những vị trí khác nhau của chương trình. Hàm là một thường trình trả về trị, sau khi thực thi xong khối lệnh. Thủ tục là thường trình chỉ dùng thực thi khối lệnh mà không trả về trị. 1.2.5.1. Khai báo thủ tục Khai báo thủ tục theo khuôn mẫu sau: procedure procedureName(parameterList); directives; localDeclaration; begin statements end; trong đó procedureName là tên của thủ tục. parameterList là danh sách các tham số truyền cho thủ tục. directives là các chỉ dẫn để gọi thủ tục. localDeclaration là các khai báo biến cục bộ bên trong thủ tục. statements sẽ được thực thi khi gọi đến thủ tục. 1.2.5.2. Khai báo hàm Khai báo hàm theo khuôn mẫu sau: function functionName(parameterList): returnType;directives; localDeclaration; begin statements end; trong đó functionName là tên của hàm. parameterList là danh sách các tham số truyền cho hàm. returnType là kiểu dữ liệu mà hàm trả về. Directives là các chỉ dẫn để gọi hàm. localDeclaration là các khai báo biến cục bộ bên trong hàm. statements là tập hợp các khối lệnh thể hiện phần thân của hàm. 1.2.5.3. Các qui ước gọi hàm và thủ tục Khi khai báo hàm hay thủ tục, ta có thể khai báo thêm các “qui ước gọi hàm” bằng những chỉ thị (directives) kèm theo như register, pascal, cdecl, stdcall, safecall... Qui ước gọi hàm sẽ qui định cách đặt và lấy các tham số truyền cho hàm hay thủ tục ra khỏi ngăn xếp (stack) của chương trình gọi. Ví dụ: + chỉ thị register, pascal sẽ qui ước đặt tham số truyền cho hàm (hay thủ tục) vào ngăn xếp theo thứ tự từ trái sang phải. + chỉ thị cdecl, stdcall, safecall sẽ gọi hàm và đặt các tham số vào ngăn xếp theo thứ tự từ phải sang trái. 1.2.5.4. Khai báo trước (forward) Chỉ thị forward đặt sau một hàm hay thủ tục đại diện cho khối lệnh chưa được khai báo của hàm hay thủ tục. Mục đích của khai báo forward là để mở rộng phạm vi hoạt động của hàm và thủ tục. Nó cho phép chương trình gọi đến hàm trước khi thân hàm hay thủ tục được định nghĩa chi tiết. 1.2.5.5. Khai báo ngoài (external) Chỉ thị external được dùng để báo cho trình biên dịch biết thân hàm hay thủ tục được cài đặt ở một nơi khác. Các hàm hay thủ tục khai báo external có phần định nghĩa và cài đặt thân hàm từ một ngôn ngữ khác thông qua tập tin mã nhị phân .OBJ hay thư viện liên kết động DLL. Khai báo external với thư viện liên kết động DLL theo khuôn mẫu sau: FunctionDeclaration external StringConstant Trong đó FunctionDeclaration là các khai báo hàm thông thường. StringConstant là một hằng chuỗi cho biết tên tập tin DLL (có thể bao gồm cả đường dẫn đầy đủ). 1.2.6. Form và các thành phần điều khiển 1.2.6.1. Xây dựng ứng dụng từ những thành phần công cụ trực quan VCL Một đối tượng VCL thường bao gồm phương thức (method), thuộc tính (property) và các tình huống (event) để phản ứng lại với sự tương tác từ phía người dùng. 1.2.6.2. Các thành phần điều khiển của Windows Những đối tượng này có thể được tìm thấy trên bảng công cụ Standard. Đây là những đối tượng chuẩn giúp người dùng tương tác với giao diện đồ họa trong Windows được dễ dàng và thuận tiện hơn. Sau đây là những tính năng của các đối tượng: Nút nhấn (Button): được sử dụng với nhiều biến tấu khác nhau như các nút trên thanh công cụ, trên thanh taskbar, hay kết hợp để tạo nên một công cụ mới như thanh trượt (Scrollbar). Nút nhấn được đặt trong lớp đối tượng có tên là TBUTTON. Nhãn (Label): dùng để trình bày một chuỗi văn bản thông thường, nhằm mục đích mô tả thêm thông tin cho các đối tượng khác. Nhãn được đặt trong lớp đối tượng có tên là TLABEL. Ô đánh dấu (CheckBox): cho phép người dùng chọn hoặc bỏ một yêu cầu nào đó. Nó cho phép kết hợp nhiều tùy chọn với nhau. Lớp đối tượng có tên TCHECKBOX. Ô chọn (RadioButton): các ô chọn (radio) thường đi chung với nhau và mỗi lần bạn chỉ thể hiện được trạng thái chọn cho một nút chọn. Lớp đối tượng có tên TRADIOBUTTON. Ô văn bản (Editbox): cho phép nhập vào chuỗi văn bản, chỉnh sửa, di chuyển con nháy để soạn thảo bằng các phím mũi tên. Chỉ được phép nhập một dòng văn bản duy nhất cho ô văn bản. Lớp đối tượng có tên TEDITBOX. Vùng văn bản (Memo): cho phép nhập vào cùng lúc nhiều dòng dữ liệu. Lớp đối tượng có tên TMEMO. Danh sách (ListBox): cho phép chứa một danh sách các mục chọn. Mỗi mục chọn thường được thể hiện là một chuỗi. ListBox cho phép mỗi lần được chọn một hoặc nhiều mục chọn cùng lúc. Lớp đối tượng có tên TLISTBOX. Danh sách xổ (ComboBox): chỉ cho phép mỗi lần thể hiện được một mục và là mục đang ở trạng thái chọn. Lớp đối tượng có tên TCOMBOBOX. Thanh trượt (Scrollbar): được dùng để định vị, cuộn trang, đo mức độ công việc, xem các vùng không gian bị che khuất bởi phạm vi hạn hẹp của cửa sổ. Lớp đối tượng có tên TSCROLLBAR. Nhóm các ô chọn (RadioGroup): đối tượng này giúp cho việc gom các nút chọn có cùng một chức năng lại với nhau thành một nhóm duy nhất. Lớp đối tượng có tên TRADIOGROUP. Nhóm các đối tượng (GroupBox): được dùng để phân loại đối tượng theo chủ đề, đồng thời có thể nhóm các đối tượng như nút nhấn, checkbox, listbox, ..lại với nhau. Lớp đối tượng có tên là TGROUPBOX. Bảng chứa (Panel): tương tự như chức năng của TGroupBox, bảng chứa được dùng để gom, nhóm các đôí tượng con lại với nhau. Tuy nhiên bảng chứa không có tiêu đề caption đặt trên cùng như TGroupBox. Lớp đối tượng có tên TPANEL. Trình đơn chính (MainMenu): là một dãy các lựa chọn nằm phía trên cửa sổ. Khi kích chuột vào một lựa chọn nào đó, sẽ có một danh sách các mục chọn khác xổ xuống. Chọn một mục trên trình đơn, cũng đồng nghĩa với việc yêu cầu chương trình thực hiện một tác vụ nào đó. Tên đối tượng là TMAINMENU. Trình đơn tắt (PopupMenu): thường hiển thị khi người dùng kích phím phải chuột lên Form hoặc lên một đối tượng nào đó. Đối tượng có tên là TPOPUPMENU. 1.2.7. Lập trình đồ họa, in ấn, multimedia và các đối tượng có liên quan 1.2.7.1. Đối tượng TIMAGE Thành phần đối tượng TIMAGE (nằm trên bảng công cụ Additional) cho phép thể hiện rất nhiều loại hình ảnh khác nhau. Với một đối tượng TImage trên Form, ta có thể nạp vào các hình ảnh bitmap, ảnh biểu tượng, và kể cả ảnh .JPG (hay .JPEG), .GIF. 1.2.7.2. In ấn Đối tượng TPrinter được dùng để in ấn mọi hình ảnh đồ họa, văn bản, tài liệu ra máy in một cách rất dễ dàng và thuận tiện 1.2.7.3. Lập trình Multimedia Đối tượng TMediaPlayer: nằm trên bảng công cụ System, có khả năng chơi hầu hết các dạng tập tin multimedia, từ âm thanh cho đến phim ảnh, như .wav, .mini, .dat, .avi.... Thành phần VCL này hầu như có đầy đủ các chức năng tương đương với chương trình CD nhạc, CD phim như các phần mềm hiện nay như WINAMP, CDPlayer, JetAudio.... Đối tượng TMediaPlayer thường bao gồm một tập hợp các nút nhấn điều khiển thông dụng như Play, Stop, Pause... 1.2.7.4. Đối tượng TSpliter Đối tượng TSpliter (vạch phân cách): cho phép người lập trình phân cách hai đối tượng được canh lề (align) với nhau. Khi di chuyển chuột đến vạch phân cách, ta có thể co giãn kích thước hai biên của đối tượng canh lề. TSpliter nằm trên bảng công cụ Additional. 1.2.8. Thư viện liên kết động (dll) 1.2.8.1. Thư viện DLL Thư viện liên kết động là các đơn thể chương trình chứa mã lệnh, dữ liệu hoặc tài nguyên được dùng để chia sẻ giữa các ứng dụng Windows với nhau. DLL cho phép ứng dụng nạp và điều khiển mã lệnh vào lúc chương trình thực thi thay vì phải liên kết mã lệnh vào lúc biên dịch chương trình. DLL chia sẻ mã lệnh, tài nguyên và dữ liệu giữa nhiều tiến trình. Do vậy, các chương trình ứng dụng khác nhau có thể đồng thời gọi đến hàm hay truy xuất tài nguyên do một DLL cung cấp. 1.2.8.2. So sánh giữa liên kết tĩnh và liên kết động Liên kết động Liên kết tĩnh - Mã lệnh thực thi của hàm (thủ tục) nằm trong tập tin .dll. - Có thể được gọi từ bên ngoài và các ứng dụng khác. - Chiếm ít bộ nhớ. - Mỗi khi cập nhật hoặc nâng cấp ứng dụng thì chỉ cần thay thế bằng DLL mới mà không cần phải biên dịch lại toàn bộ chương trình .EXE. - Mã lệnh thực thi của hàm (thủ tục) nằm trong tập tin .exe. - Không gọi được từ bên ngoài và từ các ứng dụng khác. - Chiếm nhiều bộ nhớ. - Mỗi khi cập nhật hoặc nâng cấp ứng dụng thì phải biên dịch lại toàn bộ chương trình .EXE. 1.2.8.3. Sử dụng thư viện DLL Thư viện DLL được sử dụng để: * Nạp và xử lý các hàm (thủ tục) chứa trong DLL. Thư viện DLL không thể gọi thực thi trực tiếp từ dòng lệnh như các tập tin .exe mà phải được gọi gián tiếp từ các chương trình hay DLL khác. Sau khi khai báo chính xác đường dẫn thì các hàm và thủ tục chứa trong DLL được gọi và sử dụng bình thường như các hàm và thủ tục trong Unit của Delphi. * Hiển thị Form chứa trong DLL. Nếu chương trình ứng dụng cần nhiều cửa sổ Form để xây dựng giao diện phức tạp, thì việc đặt tất cả Form trong chương trình chính sẽ làm cho tập tin .exe phình to về kích thước. Vì vậy, có thể đặt Form vào bên trong DLL và gọi hiển thị Form từ chương trình chính. Có hai cách để hiển thị Form chứa trong DLL: + Hiển thị Form ở dạng modeless: khi Form phụ ở dạng modeless, người sử dụng có thể quay lại tương tác với Form chính trong khi Form phụ đang hiển thị. + Hiển thị Form ở dạng dạng model: người sử dụng không thể quay về tương tác với cửa sổ Form chính nếu cửa sổ Form phụ chưa được đóng lại. 1.2.9. Giới thiệu về WIN32 API và hệ thống thông điệp * API (Application Programming Interface), còn gọi là Giao tiếp lập trình ứng dụng, là tập hợp các lời gọi hàm cấp cao do hệ điều hành Windows cung cấp. Sử dụng Win32 API trong Delphi cần khai báo hai Unit Windows và Messages trong mệnh đề USES ở đầu chương tình như sau: Uses Windows, Messages; Trong đó thư viện Windows chứa các khai báo hàm Windows API, thư viện Messages chứa các khai báo hằng và kiểu dữ liệu. * Thông điệp Thông điệp là một mẫu tin báo hiệu do Windows phát sinh và gửi đến cửa sổ ứng dụng và hàm WndProc chính là nơi tiếp nhận và xử lý các thông điệp đó. Mỗi thông điệp chuẩn của Windows là một hằng số bắt đầu bằng tiếp đầu ngữ WM_. Mỗi thông điệp đều có ý nghĩa và cách thức xử lý khác nhau. Ví dụ: WM_KEYDOWN: Nút bàn phím bị nhấn xuống. WM_KEYUP: Nút bàn phím được nhả ra. CHƯƠNG II: TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 2.1. GIỚI THIỆU 2.1.1. Giải thuật và cấu trúc dữ liệu Giải thuật là một dãy các câu lệnh chặt chẽ và rõ ràng xác định một trình tự các thao tác trên một số đối tượng nào đó sao cho sau một số hữu hạn bước thực hiện ta đạt được kết quả mong muốn. Việc giải thuật đó được tác động lên dữ liệu nào và dữ liệu ấy cần được tác động giải thuật gì để đưa tới kết quả tốt. Như vậy giữa cấu trúc dữ liệu và giải thuật có mối quan hệ mật thiết. Chính điều đó đã dẫn tới việc cần nghiên cứu các cấu trúc dữ liệu đi đôi với việc xác lập các giải thuật xử lý trên các cấu trúc ấy. 2.1.2. Cấu trúc dữ liệu và các vấn đề liên quan Trong một bài toán, dữ liệu bao gồm một tập các phần tử cơ sở gọi là dữ liệu nguyên tử. Lựa chọn một cấu trúc dữ liệu thích hợp để tổ chức dữ liệu vào và trên cơ sở đó xây dựng được giải thuật xử lý hữu hiệu đưa tới kết quả mong muốn cho bài toán, đó là khâu rất quan trọng. Cách biểu diễn một cấu trúc dữ liệu trong bộ nhớ được gọi là cấu trúc lưu trữ. Đó chính là cách cài đặt cấu trúc ấy trên máy tính và trên cơ sở các cấu trúc lưu trữ này mà thực hiện các phép xử lý. 2.1.3. Các tiêu chuẩn đánh giá cấu trúc dữ liệu Một cấu trúc dữ liệu tốt phải thỏa mãn các tiêu chuẩn sau: - Phản ánh đúng thực tế: Đây là tiêu chuẩn quan trọng nhất, quyết định tính đúng đắn của toàn bộ bài toán. - Phù hợp với các thao tác trên đó: tiêu chuẩn này giúp tăng tính hiệu quả của đề án: việc phát triển các thuật toán đơn giản, tự nhiên hơn; chương trình đạt hiệu quả cao hơn về tốc độ xử lý. - Tiết kiệm tài nguyên hệ thống: thông thường có 2 loại tài nguyên cần lưu tâm nhất: CPU và bộ nhớ. 2.1..4. Đánh giá độ phức tạp giải thuật Cần tìm những phương pháp đánh giá thuật toán ít phụ thuộc môi trường cũng như phần cứng hơn. Một phương pháp như vậy là phương pháp đánh giá thuật toán theo hướng xấp xỉ tiệm cận qua các khái niệm toán học O(), o(),... Hầu hết các thuật toán đều có một tham số chính là N, thông thường đó là số lượng các phần tử dữ liệu được xử lý mà ảnh hưởng rất nhiều tới thời gian chạy. Hầu hết tất cả các thuật toán trong giáo trình này có thời gian chạy tiệm cận tới một trong các hàm sau: hằng số, logN, N, NlogN, N2, N3, 2N 2.2. SẮP XẾP VÀ TÌM KIẾM Trong hầu hết các hệ lưu trữ, quản lý dữ liệu, thao tác tìm kiếm thường được thực hiện nhiều nhất để khai thác thông tin. Ví dụ: tra cứu từ điển, tìm sách trong thư viện... Do các hệ thống thông tin thường phải lưu trữ một khối lượng dữ liệu đáng kể, nên việc xây dựng các giải thuật cho phép tìm kiếm nhanh sẽ có ý nghĩa rất lớn. Nếu dữ liệu trong hệ thống đã được tổ chức theo một trật tự nào đó, thì việc tìm kiếm sẽ tiến hành nhanh chóng và hiệu quả hơn. Ví dụ: các từ trong từ điển được sắp xếp theo từng vần, trong mỗi vần lại được sắp xếp theo thứ tự bảng chữ cái; sách trong thư viện được xếp theo chủ đề, tên tác giả.... Hiện nay đã có nhiều giải thuật tìm kiếm và sắp xếp được xây dựng, mức độ hiệu quả của từng giải thuật còn phụ thuộc vào tính chất của cấu trúc dữ liệu cụ thể mà nó tác động đến. Dữ liệu được lưu trữ chủ yếu trong bộ nhớ chính và trên bộ nhớ phụ do đặc điểm khác nhau của thiết bị lưu trữ, các thuật toán sắp xếp và tìm kiếm được xây dựng cho các cấu trúc lưu trữ trên bộ nhớ chính hoặc phụ cũng có những đặc thù khác nhau. Các thuật toán sắp xếp được phân thành hai nhóm chính là: - Sắp thứ tự nội: toàn bộ dữ liệu cần sắp thứ tự phải được đưa vào trong bộ nhớ chính, nên thời gian để sắp thứ tự tương đối nhanh. - Sắp thứ tự ngoại: một phần các dữ liệu cần sắp thứ tự được đưa vào trong bộ nhớ chính, phần dữ liệu còn lại được lưu trữ ở trên bộ nhớ ngoài. Thời gian để sắp thứ tự tương đối chậm. 2.2.1.Một số giải thuật sắp xếp. Sắp xếp là quá trình xử lý một danh sách các phần tử (hoặc các mẫu tin) để đặt chúng theo một thứ tự thỏa mãn một tiêu chuẩn nào đó dựa trên nội dung thông tin lưu giữ tại mỗi phần tử. Một số phương pháp sắp xếp thông dụng như: + Sắp xếp kiểu lựa chọn (Selection Sort) + Sắp xếp kiểu thêm dần (Insertion Sort) + Sắp xếp kiểu đổi chỗ (Exchange Sort) + Sắp xếp kiểu nổi bọt (Bubble Sort) + Sắp xếp kiểu phân đoạn (Quick Sort) + Sắp xếp kiểu vun đống (Heap Sort) + Sắp xếp kiển hòa nhập (Merge Sort) + Sắp xếp với độ dài bước giảm dần (Shell Sort) + Sắp xếp theo phương pháp cơ số (Radix Sort) Nhận xét và đánh giá các thuật toán sắp xếp: Phần lớn các thuật toán sắp xếp cơ bản dựa trên sự so sánh giá trị giữa các phần tử. Đó là các thuật toán chọn lựa, thêm dần, nổi bọt, đổi chỗ. Các thuật toán này đều có một điểm chung là chi phí thực hiện chung là tỉ lệ với n2. Các thuật toán shell-sort (cải tiến của phương pháp thêm dần), heap-sort (cải tiến của phương pháp chọn lựa) lại có độ phức tạp nhỏ hơn hẳn các thuật toán gốc. Thuật toán shell-sort có độ phức tạp O(nx) với 1 < x < 2 và thuật toán heap-sort có độ phức tạp O(nlog2n). Các thuật toán merge-sort và quick-sort là những thuật toán thực hiện theo chiến lược chia để trị. Cài đặt chúng tuy phức tạp hơn các thuật toán khác nhưng chi phí thực hiện lại thấp, cả hai thuật toán đều có độ phức tạp O(nlog2n). Merge-sort có nhược điểm là cần dùng thêm bộ nhớ đệm. Thuật toán này sẽ phát huy tốt ưu điểm khi cài đặt trên các cấu trúc dữ liệu khác phù hợp hơn như danh sách liên kết hay phi. Thuật toán quick-sort được đánh giá là thuật toán sắp xếp nhanh nhất trong số các thuật toán sắp xếp dựa trên nền tảng so sánh giá trị của các phần tử. Tuy có chi phí trong trường hợp xấu nhất là O(n) nhưng trong kiểm nghiệm thực tế, thuật toán quick-sort chạy nhanh hơn hai thuật toán cùng nhóm O(nlog2n) là merge-sort và heap-sort. Thuật toán Radix-sort là một thuật toán được phát triển theo hướng khác với các thuật toán trên. Nó được phát triển dựa trên mô phỏng qui trình phân phối thư của người đưa thư. Thuật toán này đại diện cho nhóm các thuật toán sắp xếp có độ phức tạp tuyến tính. Tuy nhiên, thường thì các thuật toán này không th._.

Các file đính kèm theo tài liệu này:

  • doc2478.doc
Tài liệu liên quan