Upload
dinhliem
View
231
Download
0
Embed Size (px)
Citation preview
1
MỤC LỤC
Phần 1: Tin học cơ sở ............................................................... 3
Chƣơng 1. Những khái niệm nhập môn tin học cơ sở ............ 3
1.1. Những khái niệm cơ bản. ............................................... 3
1.2. Hệ đếm và cách chuyển đổi giữa các hệ đếm. ................ 9
Chƣơng 2. Hệ điều hành Windows.......................................... 13
2.1. Một số khái niệm ........................................................... 13.
2.2. Một số lệnh hay dùng nhất của Start memu ................... 16
2.3 Cách tổ chức và trao đổi thông tin trên DESKTOP ......... 18
2.4 Cách tạo Shortcut trên DESKTOP .................................. 19
2.5. Trình ứng dụng Windows Explorer ................................ 20
Chƣơng 3. Hệ soạn thảo văn bản Microsoft Word ................. 25
3.1. Khái niệm ..................................................................... 25
3.2. Những yếu tố đầu tiên để soạn thảo văn bản .................. 25
3.3. Cất, mở, đóng tệp tài liệu. .............................................. 28
3.4. Các xử lý văn bản và khối văn bản; định dạng ký tự ...... 29
3.5. Một số kỹ thuật tăng tốc khi soạn thảo văn bản .............. 32
3.6. Tạo bảng và các xử lý trong bảng................................... 37
3.7. Thiết lập trang và một số chức năng khác ...................... 41
Phần 2: Ngôn ngữ lập trình Pascal.......................................... 45
Chƣơng 1. Nhập môn ............................................................... 45
1.1. Những khái niệm mở đầu chung về lập trình .................. 45
1.1.1. Ngôn ngữ lập trình là gì? ....................................... 45
1.1.2. Chương trình là gì? ................................................ 45
1.2. Những khái niệm cơ bản về ngôn ngữ Pascal ................. 47
1.2.1. Bộ ký tự của PASCAL .......................................... 48
1.2.2. Từ khoá ................................................................. 48
1.2.3. Tên ........................................................................ 49
1.2.4. Tên chuẩn .............................................................. 49
1.2.5. Cấu trúc của chương trình viết trên PASCAL ........ 49
1.2.6. Một vài vấn đề khác .............................................. 51
1.3. Các kiểu dữ liệu đơn giản chuẩn, các hàm chuẩn ........... 51
1.4. Các hàm chuẩn của PASCAL. ....................................... 54
1.5. Khai báo hằng, biến, kiểu, biểu thức, câu lệnh ............... 55
Chƣơng 2. Các lệnh cơ bản có cấu trúc .................................. 58
2.1. Cấu trúc tuần tự ............................................................. 58
2.2. Các cấu trúc rẽ nhánh .................................................... 59
2.2.1. Lệnh IF...THEN .................................................... 59
2
2.2.2. Lệnh IF...THEN...ELSE ........................................ 60
2.2.3. Lệnh CASE...OF .................................................. 61
2.3. Các cấu trúc lặp (các câu lệnh lặp) ................................. 62
2.3.1. Câu lệnh FOR (dạng tiến và dạng lùi) .................... 62
2.3.2. Câu lệnh REPEAT...UNTIL .................................. 63
2.3.3. Câu lệnh WHILE...DO .......................................... 63
Chƣơng 3. Lập trình cấu trúc trong Pascal (Hàm - Thủ tục) 65
3.1. Thủ tục trong Pascal ...................................................... 65
3.1.1. Thủ tục không có các tham số hình thức. ............... 65
3.1.2. Thủ tục có các tham biến hình thức ....................... 66
3.2. Các loại biến nhớ trong lập trình cấu trúc ....................... 67
3.2.1. Biến chung ............................................................ 67
3.2.2. Biến riêng .............................................................. 67
3.3. Hàm trong Pascal ........................................................... 67
3.4. Hàm đệ quy ................................................................... 69
Chƣơng 4. Mảng và tập hợp .................................................... 72
4.1. Mảng ............................................................................. 72
4.1.1. Khai báo mảng ...................................................... 72
4.1.2. Một số thuật toán cơ bản trên mảng ....................... 73
4.2. Tập hợp ......................................................................... 75
Chƣơng 5. Dữ liệu kiểu xâu ký tự (String) ............................. 79
5.1. Khai báo xâu và các phép toán trên xâu ......................... 79
5.2. Các thủ tục và hàm xử lý xâu ......................................... 80
Chƣơng 6. Dữ liệu kiểu bản ghi và tệp .................................... 82
6.1. Bản ghi .......................................................................... 82
6.2. Mảng các bản ghi ........................................................... 84
6.3. Tệp ................................................................................ 85
Chƣơng 7: Biến con trỏ ........................................................... 91
7.1. Khai báo ........................................................................ 91
7.2. Các phép toán ................................................................. 93
3
PHẦN 1: TIN HỌC CƠ SỞ
CHƢƠNG 1: NHỮNG KHÁI NIỆM NHẬP MÔN
TIN HỌC CƠ SỞ 1.1. Những khái niệm cơ bản
Tin học là gì?
- Tin học là một bộ môn khoa học có:
Đối tượng nghiên cứu là thông tin.
Phương pháp nghiên cứu chủ yếu là xử lý thông tin tự
động với sự trợ giúp của máy tính.
- Thông tin là một khái niệm trừu tượng, là đại lượng đo
lượng thông tin có ích của một thông báo.
- Đơn vị đo thông tin: là lượng thông tin cần thiết đủ để nhận
biết một trong hai trạng thái có xác suất hiện như nhau của
một đối tượng hai trạng thái.
- Ký hiệu đơn vị đo thông tin là bit (Binary Digit). Ngoài ra
còn có một số đơn vị sau:
Tên gọi Viết tắt Giá trị
Byte B 8 bit
Kilobyte KB 1024B = 210
B
Megabyte MB 1024KB = 210
KB
Gigabyte GB 1024MB = = 210
MB
Tetabyte TB 1024GB = = 210
GB
Sơ đồ khối của máy tính số hiện đại
Hình 1.1: Sơ đồ khối của máy tính
4
Màn hình (Monitor)
Màn hình có hai dây cáp, một dây nối với thân máy, là cáp
truyền tin; dây thứ hai là cáp điện, có thể nối thẳng với ổ điện hoặc
nối lấy điện từ thân máy.
Màn hình là thiết bị hiện thông tin giao tiếp giữa người sử
dụng và máy tính. Màn hình dùng một loạt các ô vuông rất nhỏ gọi
là các chấm (pixels) để hiển thị hình ảnh. Số các chấm này càng
nhiều thì độ phân giải màn hình càng lớn và khi đó ta thấy hình
ảnh, màu sắc đẹp hơn, cũng như hiển thị được nhiều thông tin hơn.
Có nhiều loại màn hình có chế độ phân giải khác nhau:
CGA (Color Graphic Adaptor) có 8 màu: 640 x 200
EGA (Enhanced Graphic Adaptor) có từ 16 đến 256
màu: 640 x 350
VGA (Video Graphic Adaptor) có độ phân giải cao: 800
x 600, 1024 x 768
Bàn phím (Keyboard)
Bàn phím nối với thân máy bởi một dây cáp (vứa dẫn điện vừa
truyền thông tin). Bàn phím được sử dụng để chuyển các chỉ thị
hoặc thông tin cho máy tính xử lý. Thông thường mỗi bàn phím có
104 phím, chia thành 4 khối: khối phím ký tự, khối phím số, khối
phím di chuyển và khối phím chức năng.
Con chuột (Mouse)
Là thiết bị vào có hình dáng con chuột. Di chuột trên mặt
phẳng di chuyển con trỏ (cursor) trên màn hình
Thân máy (Case)
Có hai bộ phận chính là CPU và bộ nhớ.
*Bộ xử lý trung tâm (CPU - Central Processing Unit).
Là một vi mạch, hầu hết mọi bit dữ liệu vào/ra máy tính đều
phải qua CPU để được xử lý hoặc định hướng lại.
CPU điều khiển các hoạt động cơ bản của máy bằng cách
gửi đi hoặc thu nhận: các tín hiệu điều khiển, các địa chỉ bộ nhớ và
các dữ liệu từ phần này sang phần khác của máy tính, thông qua các
đường liên lạc điện tử gọi là BUS.
5
CPU có 3 bộ phận chính:
Khối tính toán số học và logic (ALU: Arithmetic
Logical Unit).
Khối điều khiển (CU: Control Unit).
Một số thanh ghi (Registers)
- Khối tính toán số học và logic (ALU: Arithmetic Logical
Unit) bthực hiện hầu hết các thao tác, các phép tính quan
trọng của hệ thống, đó là các phép tính số học (+, -, *, /), các
phép tính logic (not, and, or, xor), các phép tính quan hệ (3
phép so sánh >, <, =).
- Khối điều khiển (CU: Control Unit): quyết định dãy thao tác
cần phải làm với hệ thống bằng cách tạo ra các tín hiệu điều
khiển mọi công việc. Khối điều khiển không tự thực hiện các
lệnh mà hớng dẫn các bộ phận khác của hệ thống thực hiện
các lệnh của chương trình được lưu trữ
- Các thanh ghi (Registers): làm nhiệm vụ bộ nhớ trung gian
cho các lệnh và dữ liệu.
*Bộ nhớ (Memory).
Gồm các vi mạch có nhiệm vụ lưu giữ thông tin, bao gồm dữ
liệu và chương trình. Bộ nhớ được đặc trưng bởi hai tham số: dung
lượng và thời gian truy cập. Có hai loại bộ nhớ chính là bộ nhớ
trong và bộ nhớ ngoài.
Bộ nhớ trong hay còn gọi là bộ nhớ trung tâm (main
memory) là loại bộ nhớ nằm bên trong máy vi tính. Có hai loại bộ
nhớ trong:
Bộ nhớ chỉ đọc (ROM - Read Only Memory): thông
tin đã có sẵn từ khi sản xuất, đây là bộ nhớ chỉ đọc,
không ghi được. Khi mất điện thì thông tin vẫn còn.
Bộ nhớ ngẫu nhiên (RAM - Random Access
Memory): Lưu trữ dữ liệu và các kết quả trung gian
trong quá trình thực hiện việc tính toán xử lý dữ liệu.
Thông tin trong bộ nhớ RAM có thể đọc và thay đổi
bất kỳ ở thời điểm nào (lý do có tên là bộ nhớ truy
cạp ngẫu nhiên). Khi mất điện thì thông tin trong
RAM bị xoá mất.
Bộ nhớ ngoài (Auxiliary Storage): là loại bộ nhớ được thiết
kế rời bên ngoài máy tính. Đó là đĩa mềm, đĩa cứng, CD-ROM,
6
USB,… có thể đọc/ghi dùng để lưu trữ dữ liệu. Thông tin trên đĩa
được bảo toàn khi máy không có điện nguồn.
Nhận xét: ROM/RAM được gọi là bộ nhớ trong, có tốc độ
trao đổi thông tin nhanh hơn nhưng với bộ nhớ ngoài thì rẻ hơn và
dung lượng nhớ cao hơn.
Phần mềm (Software) Phần mềm là những chương trình do con người xây dựng lên
bằng các ngôn ngữ lập trình. Có rất nhiều phần mềm và chúng được
phân làm các lớp cơ bản như sau:
- Chương trình cơ sở: là chương trình cứng hoá nằm trong
ROM.
- Hệ điều hành: là những chương trình điều khiển sự hoạt
động của máy tính. Tạo ra môi trường giao tiếp giữa người
sử dụng và máy tính: DOS, WINDOWS, LINUX…
- Ngôn ngữ lập trình (Programming Language): Dùng lập
chương trình cho máy tính hoạt động. Một số ngôn ngữ lập
trình : C, Pascal, C++, Visual Basic, Visual C++, Delphi,
Java…
- Chương trình tiện ích: là những chương trình giúp người sử
dụng khai thác có hiệu quả hệ điều hành: Chương trình tiện
ích NC, Windows Explorer.
- Chương trình ứng dụng: Là những chương trình phục vụ cho
một lớp công việc cụ thể của người sử dụng: Bộ chương
trình ứng dụng Office (Word, Excel, PowerPoint…)
- Virus tin học: là một chương trình có khả năng ký sinh vào
các chương trình khác, tự nhân bản để tồn tại và lây lan; tiến
hành các thao tác vô ích, vô nghĩa, đôi khi là thao tác phá
hoại.
Cơ chế hoạt động của virus: Nhiễm → Kích hoạt → Thường trú →
Tìm cơ hội lay lan → Nhiễm.
Hệ điều hành
Là chương trình điều khiển chủ đạo đối với một máy tính, dùng để
quản lý các chức năng nội trú của máy tính, và cung cấp những
phương tiện để kiểm soát các hoạt động của máy đó.
Cấu trúc của hệ điều hành DOS
DOS (Disk Operating System): hệ điều hành đĩa
DOS gồm nhiều thành phần, mỗi thành phần làm một nhiệm
vụ xác định trong hệ thống. Ba thành phần chính của DOS:
7
- Hệ thống điều khiển vào/ra: được đặt trong tệp
IO.SYS. Nó gồm các chương trình điều khiển thiết bị:
bàn phím, màn hình, máy in, đĩa cứng, đĩa mềm,...
- Hạt nhân của DOS: được đặt trong tệp MSDOS.SYS.
Nó gồm các chương trình con để truy nhập tệp, sử
dụng RAM và vào/ra ký tự.
- Bộ xử lý lệnh: nằm trong tệp COMMAND.COM. Tệp
này làm hiện lên màn hình dấu nhắc C:\>, nó nhận
các lệnh của người sử dụng và thực hiện chúng.
Tệp và thư mục
Mọi thông tin được lưu trữ trên đĩa dưới dạng tệp (File).
Nội dung của tệp có thể là văn bản, chương trình, bảng tính,...
*Tên tệp: Gồm hai phần:
Phần chính gồm không quá 8 ký tự, ký tự đầu tiên là
chữ cái, không có khoảng trắng và ký tự đặc biệt.
Phần thứ hai là phần mở rộng (phần đuôi): gồm
không quá 3 ký tự, không có khoảng trắng và ký tự
đặc biệt. Phần chính và phần mở rộng nối với nhau
bởi dấu chấm (.). Phần chính bắt buộc phải có, phần
mở rộng có thể không có.
Sử dụng các ký hiệu *, ? trong tên tệp:
- Ký hiệu * thay cho một nhóm ký tự.
Ví dụ: *.doc: có nghĩa là tất cả các tệp có phần mở rộng
là .doc
- Ký hiệu ? thay cho một ký tự
Ví dụ: a? có nghĩa là các tệp có tên bắt đầu là a, sau a có
thể có một ký tự hoặc không có ký tự nào.
*Thư mục (Folder): Thư mục được coi như một cái cặp
đựng tài liệu và bạn có thể sắp xếp các tệp vào đó sao cho khi hiển
thị không bị lộn xộn chồng chéo giữa các tệp.
Tên của thư mục giống như tên tệp nhưng không có phần mở
rộng.
Cấu trúc của thư mục: Các thư mục được liên kết với nhau
trong một cấu trúc hình cây. Thư mục chính giống gốc cây và các
thư mục con như các cành cây. Cấu trúc các thư mục lồng vào nhau
như hình dáng của cây do đó bạn có thể gom các tệp và chương
trình lại thành từng nhóm và tổ chức sắp xếp dữ liệu cho phù hợp
với yêu cầu riêng.
8
Thư mục gốc: là thư mục cấp cao nhất được tạo ra khi bạn
tạo khuôn dạng cho đĩa. Thư mục gốc có độ rộng cố định nó chỉ đủ
để chứa thông tin đối với 512 tệp.
Thư mục hiện hành: là thư mục mà hiện hệ điều hành đang
làm việc.
Thư mục con: được tạo trong thư mục khác. Thư mục con
dùng để bổ xung thêm các tệp tin vào đĩa cứng.
Ví dụ:
Truong_DHPD
Khoa_QTK
D Khoa_CNTT Khoa_KTCT
Tinhoc DTVT
Lop512100A Lop512100B
Bai1.doc
Bai2.txt
Lamquen.txt
Thư mục gốc
9
Ổ đĩa và đƣờng dẫn.
Nếu có một ổ đĩa mềm, ổ đó được ký hiệu là A: (tên ổ có
dâu hai chấm đi liền sau). Nếu có hai ổ đĩa mềm, chúng được ký
hiệu là A: và B:.
Ổ đĩa cứng được gọi là C:, D:,..., có thể chúng thực sự là các
đĩa “vật lý” khác nhau, nhưng thường thì chỉ là một đĩa, được chia
“logic” khác nhau để tiện quản lý, sử dụng.
Một tệp hoặc một thư mục (gọi chung là đối tượng) phải
được quản lý trên một đĩa. Dãy tên ổ đĩa và các thư mục nối tiếp
dẫn đến đối tượng, cách nhau bởi dấ$u gạch chéo (\) được gọi
đường dẫn (path).
Đƣờng dẫn mặc định (default) và dấu nhắc (prompt):
- Tại một thời điểm, DOS mặc nhiên hiểu người sử
dụng muốn làm việc với ổ đĩa nào, thư mục nào mà
không cần chỉ rõ tên. Đó là ổ mặc định và thư mục
mặc định. Đường dẫn bắt đầu từ ổ mặc định, kết thúc
là thư mục mặc định được gọi là đường dẫn mặc định.
- Khi dùng tên tệp không có đường dẫn, DOS sẽ tự
động tìm tệp ở đường dẫn mặc định. Thông thường
khi mới bật máy, chúng ta sẽ nhìn thấy tên ổ khởi
động, sau đó là dấu \ và >.
Ví dụ: C:\>; C là ổ mặc định, thư mục gốc (\) là thư mục mặc định,
C:\ là đường dẫn mặc định.
Dãy ký tự “C:>” được gọi là dấu nhắc của DOS.
Cách khởi động hệ điều hành DOS.
Cách 1:
- Bật điện nguồn
- Nhấn phím F8
- Chọn Command Dos Only
Cách 2:
- Nếu đang trong môi trường Windows, muốn khởi
động DOS ta làm như sau:
Start -> Chọn Shutdown-> Chon Restart in MS-DOS mode.
1.2. Hệ đếm và cách chuyển đổi giữa các hệ đếm
*Các hệ đếm
Hệ đếm cơ số 10- Thập phân: 0 1 2 3 4 5 6 7 8 9
Hệ đếm cơ số 2 - Nhị phân: 0 1
Hệ đếm cơ số 8: 0 1 2 3 4 5 6 7
10
Hệ đếm cơ số 16 - HEXA: 0 1 2 3 4 5 6 7 8 9 A B C
D E F
Mã hoá là quá trình đưa thông tin về dạng chuẩn. Quá trình
ngược lại gọi là giải mã.
* Cách chuyển một số nguyên thập phân sang các hệ đếm khác
Nguyên tắc:
- Lấy con số của hệ đếm 10 chia cho cơ số của hệ đếm cần
chuyển đổi cho tới khi thương số (kết quả) của phép chia bằng 0.
- Thứ tự viết ngược lại của dãy số dư là kết quả cần tìm
Ví dụ 1: Chuyển số 16 ở hệ cơ số 10 sang số ở hệ cơ số 2 (Nhị
phân): Chia liên tiếp số muốn chuyển từ hệ 10 cho 2.
1610 sang hệ đếm cơ số 2 được 100002
Ví dụ 2: Cách chuyển hệ thập phân sang hệ cơ số 16:
0
16 2
8 0 2
4 0 2
2 0 2
1 0 2
0 1
1610 = 100002
21 2
10 1 2
5 0 2
2 1
2
1 0 2
0 1
2110 = 101012
50 16
2 3 16
0 3
5010 = 3216
61 16
13 3 16
0 3
6110 = 3D16
11
* Cách chuyển một số nguyên từ hệ khác về hệ thập phân:
Gọi n là số chữ số của số ban đầu. Lấy từng chữ số của số
ban đầu nhân với cơ số đó mũ giảm dần (số mũ bắt đầu từ n-1) rồi
cộng các kết quả lại với nhau ta được số hệ thập phân.
Ví dụ: 101012 = 1*24 + 0* 2
3 + 1*2
2 + 0*2
1 + 1*2
0 = 21.
Hệ đếm cơ số 2 có nhược điểm là số viết quá dài. Hệ đếm cơ
số 16 viết ngắn hơn và việc chuyển đổi giữa hai hệ đếm cơ số 2 và
cơ số 16 gần như “tự động”. Nên trong nhiều trường hợp, người ta
sử dụng hệ đếm cơ số 16. Hệ đếm cơ số 16 sử dụng 15 “chữ số” : 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Ví dụ:
Hệ 10 Hệ 16 Hệ 2
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
* Cách đổi từ hệ cơ số 2 sang cơ số 16:
Nhóm bốn chữ số từ trái sang thành một nhóm cho đến hết
rồi đổi tương ứng sang hệ 16.
Ví dụ:
Vậy: (101010110001)2=( AB1)16
* Để đổi ngƣợc từ hệ 16 sang hệ cơ số 2:
1010 1011 00012
1 B A
12
Với mỗi số của hệ 16 ta đổi thành bốn số nhị phân
Ví dụ:
Vậy: (AB1)16 = (101010110001)2
AB11
6
1010 1011 0001
13
CHƢƠNG 2:HỆ ĐIỀU HÀNH WINDOWS
2.1. Một số khái niệm
Các phiên bản của Windows
Hệ điều hành Windows được ra đời bởi hãng phần mềm
Microsoft. Windows có các phiên bản gần đây như: Windows 3.1,
Windows 95, Windows 98, Windows 98SE, Windows ME,
Windows 2000, Windows XP, Windows Vista
Cách khởi động Windows XP
Bật điện nguồn máy tính, Windows sẽ tự khởi động.
Tùy thuộc vào cách cài đặt, có thể bạn phải gõ mật khẩu
(Password) để vào màn hình làm việc, gọi là Desktop, của
Windows.
Trong môi trường DOS muốn khởi động Windows thì tại dấu
nhắc của DOS ta gõ lệnh Win (C:\> Win).
Thoát khỏi Windows
Trước khi thoát khỏi Windows, ta phải đóng hết các trình
ứng dụng đang mở. Sau đó chọn Start chọn mục Turn Off
Computer, xuất hiện cửa sổ:
Chọn Turn Off. Nếu bạn không muốn thoát khỏi Windows
thì chọn Cancel để huỷ bỏ.
14
Trong môi trường làm việc của hệ điều hành WindowXP có
thể có nhiều người sử dụng, để thay đổi môi trường làm việc của
từng người ta làm như sau:
Start -> Log off, xuất hiện của sổ sau:
Chọn Log off nếu muốn thay đổi môi trường làm việc ngược
lại nhấn Cancel để huỷ bỏ.
Màn hình nền Desktop của Window
Desktop là toàn bộ màn hình nền bao gồm các cửa sổ, các
biểu tượng và các hộp hội thoại đang xuất hiện. Nó như là mặt bàn
để bạn đặt các tài liệu trên đó.
Màn hình Desktop:
15
Biểu tƣợng chuẩn: là các biểu tượng sẽ xuất hiện khi cài đặt
Windows:
- My Doccuments: là một thư mục trên Desktop, là nơi
lưu trữ các tệp văn bản, đồ họa hoặc các tệp khác mà
ta có thể truy nhập một cách nhanh chóng.
- Recycle Bin: Trong Windows khi xoá tệp, thư
mục...về mặt hình thức chúng đã bị xoá nhưng dữ liệu
vẫn tồn tại kể cả khi thực hiện nhiều lệnh ghi đĩa.
Windows chuyển những thứ đã xoá trong môi trường
Windows vào Recycle bin. Từ đây, bạn cũng có thể
hồi phục lại được tệp, thư mục đã xoá bằng cách chọn
tệp cần hồi phục, sau đó nhấn phải chuột vào tệp đó,
xuất hiện một menu và bạn chọn Restore. Nếu bạn
muốn xoá hẳn các tệp, thư mục,... thì phải chuột vào
biểu tượng Recycle bin trên màn hình và chọn Empty.
- My Computer: chứa đựng tất cả tài nguyên trong máy
tính của bạn.
Biểu tƣợng không chuẩn: là các biểu tượng do người sử dụng tạo
ra, ví dụ như folder, shortcut,...
Thanh tác vụ (Taskbar) chứa:
Nút Start: dùng mở menu Start để khởi động các
chương trình.
Nút các chương trình đang chạy: dùng chuyển đổi
qua lại giữa các chương trình.
Khay hệ thống: chứa biểu tượng của các chương
trình đang chạy trong bộ nhớ và hiển thị giờ của hệ
thống.
Cách tổ chức quản lý thông tin trong máy của Windows
Trong máy tính các thông tin được lưu trữ trong các ổ đĩa từ.
Thông thường là ổ cứng.
Giống như DOS, các thông tin được cất giữ theo dạng tệp
(file) hay tập hợp file (thư mục). Tuy nhiên, trong Windows tên file
không bị hạn chế bởi 8 ký tự, mà nó có thể dài tối đa là 255 ký tự
và có thể sử dụng khoảng trắng.
16
2.2. Một số lệnh hay dùng nhất của Start memu
Thực đơn Start
Lệnh Shutdown: dùng để kết thúc một phiên làm việc với
Windows hoặc chấm dứt làm việc và khởi động lại Windows hoặc
chuyển về chế độ DOS.
Lệnh Log Off: thay đổi người sử dụng.
Lệnh Run: dùng để khởi động một ứng dụng. Bạn có thể nhập
đường dẫn tệp cần thực hiện vào hộp Open hoặc nhấn nút Browse
để tìm tên tệp chương trình. Theo hình sau:
Control Panel: dùng để để thiết đặt các thông số cấu hình cho
Windows.
Lệnh Search: dùng để tìm kiếm thư mục hay tệp tin.
17
- Để thực hiện việc tìm kiếm đầu tiên bấm chuột vào Start\
Search xuất hiện hộp thoại.
Có 4 lựa chọn được chỉ dẫn bằng các mũi tên: có thể chỉ tìm
kiếm các file tranh ảnh, nhạc; hoặc các file tài liệu (.doc); tìm tất cả
các file và thư mục; tìm kiếm trên mạng.
Ví dụ: Nếu bấm vào All files and folders xuất hiện hộp thoại
sau:
- Nếu biết đầy đủ thông tin về tên tệp thì bạn gõ đầy đủ
vào hộp thoại đầu tiên.
18
- Tiếp theo trong ô Look in chọn giới hạn tìm kiếm.
- Bạn cũng có thể nhập một đoạn nội dung của tệp cần
tìm vào hộp thoại thứ 2.
- Bấm vào biểu tượng tại dòng chữ để xác định
ngày tháng của tệp cần tìm. Có các lựa chọn sau:
Không nhớ ngày tháng
Trong một tuần trước đó
Trong tháng trước
Trong một năm
Trong một khoảng thời gian nhất định
Sau đó nhấn Search để thực hiện tìm kiếm, ngược lại có thể
bấm vào nút Back để thực hiện lựa chọn khác. Trong trường hợp
thiếu thông tin bạn có thể dùng các ký tự đại diện như * hoặc ? để
thay thế cho chỗ thông tin thiếu.
2.3. Cách tổ chức và trao đổi thông tin trên DESKTOP
Tạo folder mới
Trên màn hình Desktop, bấm phải chuột vào chỗ trống của
màn hình, một menu xuất hiện. Chọn New\Folder. Một folder mới
sẽ xuất hiện trên màn hình với tên mặc định là New folder, bạn hãy
gõ tên thư mục của mình vào rồi nhấn Enter.
Tạo folder con
Muốn tạo folder con cho một Folder khác thì bạn bấm đúp
chuột vào Folder đó để mở nó ra. Trong cửa sổ của folder này, bấm
phải chuột vào chỗ trống để mở menu, chọn New \folder. Hoặc
chọn File\New\Folder, khi đó một folder mới sẽ xuất hiện trên màn
hình với tên mặc định là New folder, bạn hãy gõ tên thư mục của
mình vào rồi nhấn Enter.
Chuyển một hoặc nhiều Folder sang một Folder khác:
Trước tiên đánh dấu các Folder cần chuyển theo hai cách:
Cách 1: chọn các Folder rời rạc
19
Bấm chuột vào Folder đầu tiên, sau đó nhấn phím
Ctrl và đồng thời bấm chuột vào các Folder còn lại. Sau khi
đánh dấu xong các Folder sẽ đổi mầu thành sẫm hơn.
Cách 2: chọn các Folder liên tiếp
Bấm chuột vào Folder đầu tiên, sau đó nhấn phím
Shift và đồng thời bấm chuột vào các Folder còn lại. Sau khi
đánh dấu xong các Folder sẽ đổi mầu thành sẫm hơn.
Sau khi đã đánh dấu xong, bấm chuột phải vào một trong các
Folder đã chọn. Xuất hiện một menu Shortcut. Chọn lệnh Cut. Mở
Folder cần chuyển dữ liệu sang (Folder đích), bấm chuột phải vào
vị trí còn trống trong Folder, xuất hiện menu Shortcut, chọn lệnh
Paste.
Sao chép một hoặc nhiều Folder sang một Folder khác:
Trước tiên đánh dấu các Folder cần sao chép.
Sau khi đã đánh dấu xong, bấm chuột phải vào một trong các
Folder đã chọn. Xuất hiện một menu Shortcut. Chọn lệnh Copy.
Mở Folder cần chuyển dữ liệu sang (Folder đích), bấm chuột phải
vào vị trí còn trống trong Folder, xuất hiện menu Shortcut, chọn
lệnh Paste.
Xoá các đối tƣợng trên Desktop (File, Folder, Shorcut):
- Xoá một đối tượng: Bấm phím phải chuột vào đối
tượng cần xoá, xuất hiện menu Shorcut chọn lệnh
Delete.
- Xoá nhiều đối tượng: Thực hiện đánh dấu các đối
tượng rồi thao tác như xoá một đối tượng.
Đổi tên đối tƣợng trên Desktop (File, Folder, Shortcut):
Bấm phải chuột vào đối tượng cần đổi tên, xuất hiện menu
Shortcut, chọn lệnh Rename, sau đó gõ tên mới rồi nhấn Enter để
chấp nhận tên mới.
2.4. Cách tạo Shortcut trên DESKTOP
Shorcut là gì?
Shortcut là một cách để thực hiện hay mở một tệp hoặc một
thư mục mà không phải tìm kiếm. Shortcut thật sự hiệu quả cho
những chương trình, tệp và thư mục mà bạn thường xuyên sử dụng.
Cách tạo Shortcut.
Trên màn hình Desktop, bấm chuột phải vào vị trí trống,
xuất hiện một menu Short cut, chọn lệnh New\ Shortcut. Xuất hiện
hộp thoại như sau:
20
Tại hộp thoại bạn gõ đường dẫn đến tệp khả thi nếu biết
chính xác đường dẫn. Nếu không biết đường dẫn, bạn có thể dùng
lệnh Search hoặc bấm vào nút Browse để tìm kiếm. Sau đó chọn
Next, tại hộp thoại tiếp theo gõ tên đặt cho Shortcut và chọn Finish.
Hoặc, mở thư mục chứa tập tin chương trình cần tạo
Shortcut, Click phải chuột vào tập tin, chọn Create Shortcut : nếu
tạo Shortcut ngay trong thư mục đang mở, chọn Send
to\Desktop(create shortcut): nếu muốn tạo Shortcut trên nền
Desktop.
Chú ý:
- Các tệp chương trình (Application) thường có phần mở
rộng là .exe.
Những chương trình của Windows được lưu trữ trong thư
mục Windows, những chương trình khác thường được cài đặt tại
thư mục Program Files.
2.5. Trình ứng dụng Windows Explorer
Chức năng
Explorer là trình thám hiểm, một chương trình duyệt sự phân
bố tập tin hay thư mục của Windows.
Khởi động và thoát Windows Explorer
Bấm chuột phải vào nút Start, chọn Explore. Hoặc, bấm
chuột trái vào Start chọn All Programs\Windows Explorer.
Muốn thoát khỏi chương trình Windows Explorer, trên thanh
trình đơn chọn menu File \Close.
21
Cấu trúc cửa sổ Windows Exploring
Muốn xem nội dung của một folder thì bấm trái chuột vào
Folder đó ở phần bên trái, nội dung của nó sẽ được hiển thị ở phần
bên phải.
Muốn xem trong các Folder con trong một Folder khác thì
bấm trái chuột vào dấu cộng (+) ở bên trái. Để thay đổi kích thước
của hai phần cửa sổ, di chuột đến thanh phân cách giữa hai bên, khi
trỏ chuột đổi thành mũi tên hai chiều thì nhấn giữ phím trái rồi kéo
về bên trái hoặc bên phải.
Để hiện/ẩn cây thư mục trên khung trái: Click chọn hay bỏ
chọn nút Folders trên thanh công cụ chuẩn
Các thanh trong cửa sổ:
- Thanh tiêu đề (title bar): Thông thường là tên hay
tiêu đề của cửa sổ đang mở.
- Thanh công cụ (tool bar): chứa các nút lệnh giúp cho
ta thao tác nhanh chóng hơn.
- Thanh trình đơn (menu bar): chứa danh sách các
menu lệnh.
- Thanh địa chỉ (address bar): chỉ ra đường dẫn đến
thư mục hiện hành.
- Các thanh cuộn dọc, cuộn ngang (scroll bar): Khi nội
dung trong một cửa sổ không thể hiện hết trên màn
hình thì ta có thể sử dụng thanh cuộn ngang hay thanh
22
cuộn dọc để di chuyển tới vùng không được xuất hiện
trên màn hình.
Chức năng một số nút lệnh
- Cut: chuyển dữ liệu vào vùng đệm
- Copy: Sao chép dữ liệu vào vùng đệm
- Paste: Chuyển dữ liệu từ vùng đệm đến đích (Folder,
ổ đĩa)
- Delete: Xoá tệp hoặc thư mục
- Up: Chuyển lên thư mục mẹ của thư mục hiện hành.
Mở một File trong Windows Explorer
Duyệt cây thư mục để chuyển đến thư mục chứa tệp cần mở.
Tại phần cửa sở bên phải bấm đúp chuột vào tệp đó hoặc trên thanh
trình đơn chọn File\Open.
Tạo Folder trong cửa sổ:
- Tạo folder mới: Trên màn hình Desktop, bấm phải
chuột vào chỗ trống của màn hình, một menu xuất
hiện. Chọn New \ Folder hoặc chọn menu File \ New \
Folder hay chọn Make a new Folder bên khung trái.
Một thư mục mới hiển thị với tên mặc định là New
Folder, bạn hãy gõ tên thư mục của mình vào rồi nhấn
Enter.
- Tạo folder con: Muốn tạo folder con cho một Folder
khác thì bạn bấm đúp chuột vào Folder đó để mở nó
ra. Trong cửa sổ của folder này, thực hiện các thao tác
tạo Folder như trên.
Trao đổi thông tin trên một ổ đĩa và giữa các ổ đĩa với
nhau
- Sao chép trên một ổ đĩa: chọn đối tượng cần sao chép
(đối tượng nguồn). Bấm phải chuột vào đối tượng đã
lựa chọn, chọn lệnh Copy, hoặc Edit \ Copy hoặc
nhấn Ctrl+C. Mở Folder đích, bấm phải chuột vào vị
trí còn trống chọn lệnh Paste hoặc Edit \ Paste hoặc
Ctrl+V.
- Chuyển trên một ổ đĩa: chọn các đối tượng cần
chuyển (đối tượng nguồn). Bấm chuột phải vào một
trong các đối tượng đã chọn, chọn lệnh Cut hoặc Edit
\ Cut hoặc Ctrl+X. Mở folder đích, bấm chuột vào vị
trí còn trống, chọn lệnh Paste hoặc Edit \ Paste hoặc
Ctrl+V.
23
Trao đổi thông tin giữa các ổ đĩa khác nhau
- Sao chép vào thư mục My documents ở ổ C: Mở ổ đĩa
chứa dữ liệu nguồn, chọn đối tượng cần sao chép.
Bấm chuột phải vào đối tượng đã chọn chọn lệnh
Send to\ My documents hoặc chọn File\ Send to \ My
documents.
- Sao chép ra ổ đĩa USB: Mở ổ đĩa chứa dữ liệu nguồn,
lựa chọn các đối tượng cấn sao chép. Bấm chuột phải
vào một trong các đối tượng chọn lệnh Send to \
Removeable Disk (F:) hoặc chọn File \ Send to \
Removeable Disk (F:). Đổi tên, xoá các đối tượng:
- Chọn đối tượng cần đổi tên. Sau đó trên thanh trình
đơn chọn menu File\Rename hoặc bấm chuột phải
vào đối tượng, xuất hiện menu Shortcut chọn
Rename. Gõ tên mới và nhấn Enter.
Muốn xoá các đối tượng, đấu tiên chọn các đối tượng cần xoá. Trên
thanh trình đơn chọn menu File \ Delete hoặc bấm chuột phải vào
đối tượng, xuất hiện menu Shortcut chọn lệnh Delete.
Hiển thị tệp và sắp xếp các biểu tƣợng Hiển thị tệp: Trong Windows Explorer các tệp có thể được
hiện thị theo kích thước khác nhau hoặc chi tiết khác nhau. Trên
thanh trình đơn chọn menu View, cho phép hiển thị theo các cách
sau:
- Thumbnails: thường dùng để xem trước các File hình.
- Tiles: Hiện các tập tin và các thư mục con ở dạng
biểu tượng lớn.
- Icons: Hiện các tập tin và các thư mục con ở dạng
biểu tượng nhỏ.
- List: Hiện các tập tin và các thư mục con ở dạng liệt
kê danh sách.
- Details: Liệt kê chi tiết các thông tin như tên (Name),
kiểu (Type), kích thước lưu trữ (Size), ngày giờ tạo
hay sửa (Modified).
Sắp xếp các biểu tượng: Khi số lượng tệp, thư mục lớn, việc
sắp xếp sẽ làm cho người sử dụng dễ dàng truy cập các tệp hay thư
mục nhanh chóng hơn. Trên thanh trình đơn chọn menu View, có
bốn cách sắp xếp:
- Name (theo tên): được sắp xếp theo tên chính
24
- Type (theo kiểu): Sắp xếp theo phần mở rộng của tệp.
- Size (theo độ lớn): sắp xếp theo kích thước của tệp
hay thư mục. Sắp xếp theo độ lớn tăng dần.
Date (theo thời gian): Sắp xếp giảm dần theo thời gian tạo tệp.
Tìm kiếm
Bấm vào lệnh Search trên thanh công cụ và thực hiện tương tự như
ở Desktop.
25
CHƢƠNG 3: HỆ SOẠN THẢO VĂN BẢN
MICROSOFT WORD 3.1. Khái niệm
Microsoff Word hay gọi tắt là Word là một phần mềm dùng để soạn
thảo văn bản. Cho đến nay đã có nhiều phiên bản như Microsoft
Word 97, 98, 2000, 2003, 2007…
3.2. Những yếu tố đầu tiên để soạn thảo văn bản trong WORD
Khởi động Word Chúng ta có thể khởi động Word theo các cách sau:
- Bấm chọn Start\ Programs\ Microsoft Word
- Bấm vào biểu tượng W để khởi động chương trình
soạn thảo.
Cấu trúc màn hình Word:
Thanh tiêu đề: ghi tiêu đề của cửa sổ cùng tên tệp văn bản hiện hành
Thanh trình đơn: chứa các menu lệnh
Thanh công cụ chuẩn và thanh công cụ định dạng: dùng để định
dạng, chỉnh sửa văn bản.
Thanh trạng thái: thể hiện số trang hiện tại, tổng số trang của văn
bản, địa chỉ dòng, cột, chế độ bàn phím,...
Thanh trình
đơn
Thanh tiêu đề
Thanh cuốn dọc
và ngang
Thanh trạng thái
Thanh định dạng
26
Thanh cuốn màn hình(dọc, ngang): Khi văn bản bị che khuất có
thể dùng thanh cuốn dọc hoặc ngang để chuyển tới phần bị khuất.
Thanh Draw: dùng để vẽ các hình khối...Nếu không thấy thanh
Draw thì bấm vào View \Toolbars và bấm chuột vào Drawing
Thước kẻ: gồm 2 thước (ruler) bao viền trang văn bản. Sử dụng
thước này bạn có thể điều chỉnh được lề trang văn bản, cũng như
thiết lập các điểm dịch (tab) một cách đơn giản và trực quan
Cách thoát khỏi Microsoft Word
+ Trước khi thoát khỏi Word phải đóng tất cả các tài liệu đang
mở. Có thể dùng một trong những cách sau:
- File \ Exit
- Bấm vào nút có hình chữ X ở góc trên bên phải của
màn hình
- Nhấn tổ hợp phím Alt+X
Điều kiện để gõ tiếng Việt
Hiện nay trong các phần mềm gõ tiếng Việt thì
VietKey là phần mềm gõ tiếng Việt phổ biến nhất. Để gõ
được tiếng Việt, máy tính cần phải cài đặt phần mềm
VietKey hoặc Unikey.
- Có 2 kiểu gõ thông dụng:
+ Kiểu VNI:
- Nhập nguyên âm trước , gõ dấu sau.
- Các phím tương ứng với các dấu như sau :
1 :sắc; 2 huyền; 3 : hỏi; 4 : ngã 5 : nặng; 6 : mũ ; 7 : móc;
8 :trăng (ă) ; 9: ngang (đ); 0: xóa dấu
Ví dụ: Sở Giáo dục và Đào tạo Đồng Nai ( So73 Gia1o du5c va2
D9a2o ta5o D9o6ng Nai)
+ Kiểu TELEX :
s : sắc x : ngã aa: â oo : ô
z: xoá dấu
f : huyền j : nặng aw:ă ow : ơ
r : hỏi ee : ê dd :đ w : ư
27
* Sử dụng phần mềm
Vietkey để gõ tiếng
Việt:
- Khởi động hiện cửa
sổ Vietkey:
+ Start/Viet
key 2000
+ Desktop,
click biểu tượng
Vietkey2000
+ Click phải
chuột vào biểu tượng
Vietkey trên thanh
Taskbar -> chọn Hiện
cửa số Vietkey…
- Giao diện Vietkey:
28
Sử dụng gõ kiểu Telex chọn:
\Tab Kiểu gõ: Telex
\Tab Bảng mã: TCVN3- ABC (.VnTime,…)
- Rồi chọn nhấn nút Taskbar để Vietkey thường trú trên
thanh Taskbar, gần biểu tượng đồng hồ của máy tính.
Khi đó tất cả font chữ tiếng Việt Nam là các font bắt
đầu bởi .Vn…; font chữ in có tận cùng là chữ H in.
3.3. Mở, cất, đóng tài liệu
Mở một văn bản mới:
- Để mở một tài liệu mới để soạn thảo ta làm như sau:
Trên thanh menu chọn File \ New hoặc trên thanh
công cụ định dạng bấm vào biểu tượng New (hình tờ
giấy).
- Để mở một tài liệu đã có sẵn trên thanh menu chọn
File\Open hoặc trên thanh công cụ định dạng bấm vào
biểu tượng Open (hình quyển sách đang mở), một hộp
thoại sẽ xuất hiện:
- Trong ô Look in chọn thư mục chứa các tệp. Thư mục
mặc định là My Documents.
- Trong ô Files of Type chọn Word Document (để chỉ
mở các file có phần mở rộng là .doc).
- Trong ô File name gõ tên tệp cần mở. Hoặc có thể
bấm chuột vào tệp cần mở sau đó bấm nút Open.
29
Cất tài liệu:
- Để lưu trữ tài liệu ta chọn File\Save hoặc bấm vào
biểu tượng cái đĩa trên thanh công cụ định dạng.
Word mở một cửa sổ như sau:
- Trong ô Save in chọn thư mục cần lưu tài liệu, thư
mục mặc định là My Documents.
- Trong ô File name gõ tên cho tài liệu. Sau đó nhấn
nút save.
- Ta cũng có thể lưu một tài liệu với một tên khác tên
cũ bằng cách chọn File \ Save as, sau đó thao tác
tương tự.
Đóng tài liệu:
Để đóng tài liệu đang mở trên thanh menu chọn File \ Close.
3.4. Các xử lý văn bản và khối văn bản; định dạng ký tự
Định dạng văn bản có nghĩa là thay đổi về mặt hình
thức trình bày văn bản nhằm mục đích làm cho văn bản rõ
ràng và đẹp hơn.
Trước khi muốn xử lý, định dạng văn bản thì nguyên
tắc số một là phải lựa chọn hay đánh dấu (bôi đen) khối văn
Có thể bấm vào đây
để tạo một thư mục
mới
30
bản cần xử lý. Các xử lý, định dạng chỉ tác động lên khối
văn bản được đánh dấu.
Muốn đánh dấu toàn bộ văn băn thì nhấn Ctrl+A hoặc
chọn Edit\Select all. Còn muốn chọn một đoạn hay một khối
văn bản có thể dùng bàn phím hay chuột.
Định dạng văn bản:
Chọn Format \ Paragraph xuất hiện hộp thoại sau:
- Trong ô Alightment chọn căn giữa, trái, phải hoặc căn đều
văn bản.
- Left, right để đặt lề cho văn bản.
- Ô Special chọn First line để đặt dòng đầu tiên của mỗi
đoạn lùi vào một khoảng do ta đặt ở ô By.
- Line spacing đặt khoảng cách giữa các dòng
- Ô Before và After để đặt khoảng cách giữa các đoạn.
- Sau khi đã chọn xong thì nhấn OK để chấp nhận định
dạng.
Định dạng font chữ:
Format \ Font xuất hiện hộp thoại:
31
- Trong ô Font ta chọn phông chữ cần để soạn thảo.
- Ô Font style để chọn kiểu chữ: Bình thường, nghiêng,
đậm, đậm nghiêng.
- Ô Font size để chọn cỡ chữ .
- Ô Font color để chọn màu cho ký tự.
- Sau khi đã chọn xong bấm OK để chấp nhận.
Đặt mầu nền cho văn bản:
Chọn Format\Background, sau đó chọn màu trong hộp thoại.
Đóng khung cho văn bản:
Chọn Format\Border. Xuất hiện hộp thoại nhấn vào
nút Box để đóng khung cho văn bản.
Tô bóng mờ cho văn bản:
Chọn Format \ Border and Shading chọn Tab
Shading. Sau đó chọn mầu muốn tô trong ô Fill hoặc chọn
Style và Color trong phần Paternt.
Sao chép, chuyển khối văn bản đến chỗ khác trên màn hình:
Trong khi soạn thảo có những đoạn văn bản có nội
dung giống nhau hoặc gần giống nhau để không phải nhập
lại đoạn văn bản đó ta có thể sao chép lại rồi đưa đến nơi cần
32
nhập bằng cách: Đánh dấu đoạn văn bản cần sao chép. Bấm
chọn lệnh Edit\Copy, sau đó đưa con trỏ đến vị trí cần thiết
rồi thực hiện lệnh Edit \ Paste.
Muốn di chuyển một khối văn bản đến một chỗ khác
ta làm như sau: Đánh dấu đoạn văn bản cần di chuyển, bấm
chọn lệnh Edit \ Cut. Sau đó đưa con trỏ văn bản đến vị trí
cần thiết rồi thực hiện lệnh Edit \ Paste.
3.5. Một số kỹ thuật tăng tốc khi soạn thảo văn bản
AutoCorrect.
Đây là tính năng tự động sửa lỗi chính tả rất mạnh
trên Word. Nó giúp tốc độ soạn thảo văn bản của nhanh
hơn nhờ những từ viết tắt và tránh được các lỗi chính tả
không cần thiết bởi khả năng tự động sửa lỗi chính tả của nó.
a. Thêm một từ viết tắt Để thêm một từ viết tắt, thực hiện theo các bước sau:
Bƣớc 1: Khởi động tính năng AutoCorrect bằng cách mở
mục chọn lệnh: Tools \ AutoCorrect.., Hộp thoại
AutoCorrect xuất hiện:
33
- Gõ cụm từ viết tắt vào mục Replace:
- Gõ cụm từ sẽ thay thế vào mục With:
Ví dụ: Muốn viết tắt từ văn bản bởi vb thì:
Replace gõ vb
With gõ văn bản
Bƣớc 2: Nhấn nút Add để ghi thêm từ này vào danh sách
viết tắt của Word.
b. Xoá đi một từ viết tắt
Để xoá đi một từ viết tắt, thực hiện theo các bước sau:
Bƣớc 1: Khởi động tính năng AutoCorrect;
Bƣớc 2: Tìm đến từ viết tắt cần xoá bằng cách gõ từ viết tắt
vào mục Replace. Ví dụ: Muốn xoá từ vb – văn bản vừa
thiết lập ở trên, hãy gõ vb vào mục Replace;
Bƣớc 3: Nhấn nút Delete để xoá cụm từ viết tắt này.
c. Các tuỳ chọn về sửa lỗi chính tả
AutoCorrect cho phép thiết lập một số tính chất tự
động sửa các lỗi chính tả trong quá trình soạn thảo. Để thiết
lập các tính chất tự động sửa lỗi chính tả, hãy làm như sau:
Bƣớc 1: Khởi động tính năng AutoCorrect;
Bƣớc 2: Thiết lập các thông số về tự động sửa lỗi chính tả
bằng cách chọn (checked) các mục sau:
- tự động sửa những từ nếu có 2 ký
tự hoa đầu dòng sẽ chỉ để lại ký tự hoa đầu tiên. Ví dụ, TWo sẽ
tự động sửa thành Two;
- tự động sửa ký tự đầu tiên của
một câu thành ký tự in hoa;
- viết in hoa cho ký tự đầu tiên của
ngày. Ví dụ, sẽ luôn sửa là Monday;
- tự động sửa lỗi kiểu
như cAPS LOCK khi bật nhầm phím Caps lock. Khi đó
máy sẽ sửa thành Caps lock.
Autotext.
Những đoạn văn lặp lại nhiều lần trong văn bản. Để
không phải gõ lại tạo bảng từ thường dùng AutoText.
a. Cách tạo
- Gõ văn bản thường dùng.
34
- Bôi đen khối cần tạo.
- Chọn Insert \ AutoText \ New hoặc bấm Alt+F3.
- Trong ô Please name your Autotext entry, bạn gõ tên đại
diện cho đoạn văn bản (tên của mục từ).
- Nhấn OK
b. Sử dụng một mục của bảng từ thường dùng AutoText
- Đưa con trỏ bàn phím đến vị trí cần chèn nội dung mục của
bảng từ thường dùng.
- Chọn 1 trong 2 cách:
+ Cách 1: bấm phím F3
+ Cách 2: Insert \ AutoText \ Chọn tên của mục từ danh sách
rồi bấn nút Insert
35
Tìm kiếm và thay thế:
Tính năng Find & Replace trong Word giúp tìm
kiếm văn bản, đồng thời giúp thay thế một cụm từ bởi một
cụm từ mới. Điều này giúp ích rất nhiều khi phải làm việc
trên một số lượng trang văn bản rất lớn (một giáo trình, một
báo cáo dài chẳng hạn).
a. Tìm kiếm văn bản Để tìm kiếm một cụm từ trong tài liệu của mình, làm như sau:
Bƣớc 1: Chọn vùng văn bản muốn tìm kiếm; Nếu không lựa
chọn một vùng văn bản, Word sẽ thực hiện tìm kiếm trên toàn
bộ tài liệu.
Bƣớc 2: Khởi động tính năng tìm kiếm văn bản bằng cách:
kích hoạt mục chọn Edit \ Find.. hoặc nhấn tổ hợp phím tắt
Ctrl + F, hộp thoại Find and Replace xuất hiện:
Bƣớc 3: Thiết lập các thông tin về tìm kiếm trên thẻ Find. ý
nghĩa các mục tin như sau:
- Gõ từ cần tìm kiếm vào mục Find what: Ví dụ: Viet Nam.
36
- Thiết lập các tuỳ chọn tìm kiếm ở mục Search Options
như sau:
Match case- tìm kiếm mà không phân biệt chữ hoa,
chữ thường;
Find whole words only- chỉ tìm trên những từ độc
lập
Bƣớc 4: Nhấn nút Find Next, máy sẽ chỉ đến vị trí văn bản
chứa cụm từ cần tìm.
b. Tìm và thay thế văn bản
Tính năng này giúp tìm ra những cụm từ trên văn bản,
đồng thời có thể thay thế cụm từ tìm được bởi một cụm từ
mới. Để thực hiện tính năng này, làm như sau:
Bƣớc 1: Chọn vùng văn bản muốn tìm kiếm; khởi động tính
năng tìm kiếm văn bản;
Bƣớc 2: Thiết lập thông tin về cụm từ cần tìm và cụm từ sẽ
thay thế ở thẻ Replace của hộp thoại:
- Gõ cụm từ cần tìm kiếm vào mục Find what:
- Gõ cụm từ sẽ thay thế ở mục Replace with:
Hộp thoại trên thiết lập thông tin tìm kiếm cụm từ Viet
Nam, nếu tìm thấy có thể thay thế cụm từ đó bởi Việt Nam.
Bƣớc 3: Nhấn nút Find next để tìm đến vị trí văn bản chứa
cụm từ cần tìm. Khi tìm thấy, có thể bấm nút Replace để thay
thế cụm từ tìm được bởi cụm từ đã chỉ định ở mục Replace
with: hoặc nhấn nút Replace All, Word sẽ tự động thay thế
toàn bộ các cụm từ sẽ tìm được như chỉ định.
37
3.6. Tạo bảng và các xử lý trong bảng
Bảng cho phép người sử dụng tổ chức lại thông tin thành các
hàng và cột. Giao giữa hàng và cột gọi là ô.
Cách tạo bảng:
Trên thanh menu chọn Table\Insert Table...xuất hiện
hộp thoại:
Tại ô Number of columns nhập vào số cột của bảng, ví
dụ là 5
Tại ô Number of rows nhập vào số hàng của bảng ví dụ
là 2.
Trong ô Column Width, chọn chiều rộng cột. Muốn để
Word tự động phân chia chiều rộng các cột bằng nhau thì
chọn Auto.
Bấm OK thì một bảng gồm 5 cột và 2 dòng sẽ xuất hiện
Đóng khung cho bảng:
Bôi đen phần cần đóng khung. Chọn lệnh Format \
Border and Shading...Chọn Tab Border.
Bấm chọn Box để kẻ khung cho bảng.
38
Tại ô Style chọn kiểu đường cho bảng
Tại ô Color chọn mầu cho đường kẻ.
Tại ô Width chọn độ rông cho đường kẻ. Sau đó bấm
OK.
Cách chọn các ô, cột, dòng trong bảng:
- Chọn ô nào thì ta bấm chuột vào ô đó. Muốn chọn nhiều
ô thì bấm chuột vào ô đầu tiên và kéo chuột tới ô cuối
cùng.
- Chọn cột nào thì di chuột tại đỉnh cột, con trỏ chuột đổi
thành hình mũi tên trỏ xuống, nhấn chuột để chọn
nguyên một cột. Muốn chọn nhiều cột thì chọn một cột
rồi kéo chuột để chọn những ô bên cạnh.
- Chọn một dòng nào đó thì di chuyển tại biên trái của
dòng, con trỏ chuột có dạng mũi tên, nhấn chuột để chọn
nguyên một dòng. Để chọn nhiều dòng cùng một lúc thì
ta chọn một dòng đầu tiên rồi kéo chuột để chọn những
dòng còn lại.
Các phép tính toán trong bảng:
Trong bảng các cột được ký hiệu là chữ cái A, B,
C, D,... tính từ bên trái. Và các dòng được ký hiệu là 1, 2,
3,... tính từ trên xuống. Các ô được ký hiệu bởi địa chỉ
kết hợp của cột và hàng. Ví dụ: A1 có nghĩa là sự kết hợp
của cột 1 và dòng 1.
- Tính tổng (Sum); Tính giá trị trung bình (Avegare).
- Lấy phần dư, lấy phần nguyên của phép chia hai số.
- Làm tròn số
- Lấy giá trị nhỏ nhất, lớn nhất.
Cách viết công thức
- Khi viết công thức tính toán phải sử dụng các hàm và các
địa chỉ của các ô (là các thành phần tham gia vào công
thức).
- Đặt con trỏ văn bản vào ô chứa kết quả. Chọn Table \
Formula, xuất hiện hộp thoại:
39
Trong ô Formula gõ vào địa chỉ cần tính sau dấu bằng.
Trong ô Paste function có thể chọn hàm để tính (sum,
max, min, ...).
Sau đó bấm OK để thực hiện phép toán.
Trộn và tách các ô:
Ta có thể trộn hai hoặc nhiều ô trên một dòng hoặc
một cột thành một ô bằng cách sau:
Bôi đen các ô cần trộn.
Vào Table \ Merge Cell.
Ta cũng có thể tách một ô thành nhiều ô khác nhau.
Chọn ô cần tách.
Vào Table \ Split Cells. Chọn số cột hoặc số dòng hoăc
cả hai mà ta định tách từ ô được chọn.
Bấm OK.
Sắp xếp dữ liệu trong bảng: Đôi khi bạn cần dữ liệu trong bảng được sắp xếp theo
một trật tự nào đó (tăng hoặc giảm). Word cho phép bạn
thực hiện điều đó một cách dễ dàng. Để sắp xếp được bạn
cần một cột làm khoá. Thực hiện sắp xếp như sau:
Lựa chọn cột làm khoá sắp xếp sau đó thực hiện lệnh
Table \ Sort … Trong hộp thoại có tiêu đề Sort xuất hiện : ở
phần Sort by sẽ hiện cột mà bạn đã chọn, trong ô Type là
kiểu dữ liệu sắp xếp (Number: số, Text : Ký tự, Date: Ngày),
cuối phần này sẽ có hai lựa chọn sắp xếp là tăng dần
(Ascending) hoặc giảm dần (Descending). Bạn hãy chọn
kiểu tăng dần hay giảm dần rồi bấm OK.
Bạn cũng có thể sắp xếp trên nhiều cột (hay nhiều
điều kiện sắp xếp). Để thực hiện bạn thao tác chọn như trên
một cột sau đó chọn Then by để sắp xếp theo cột tiếp theo.
Căn chỉnh dữ liệu trong bảng:
Lựa chọn ô, dòng, cột cần căn chỉnh sau đó bấm:
- Nút Align Left trên thanh công cụ hoặc tổ hợp phím Ctrl
+ L để dữ liệu được căn trái.
- Nút Align Right trên thanh công cụ hoặc tổ hợp phím
Ctrl + R để dữ liệu được căn phải.
40
- Nút Center trên thanh công cụ hoặc tổ hợp phím Ctrl + E
để dữ liệu được căn trái.
- Nút Justify trên thanh công cụ hoặc tổ hợp phím Ctrl + J
để dữ liệu được căn đều hai bên trái và phải.
Chèn thêm cột, hàng vào bảng:
- Chọn cột cần chèn sau đó chọn Table \ Insert \ Columns
to the Left để chèn thêm vào bên trái hoặc Table \ Insert
\ Columns to the Right để chèn thêm vào bên phải cột lựa
chọn.
- Chọn dòng cần chèn sau đó chọn Table \ Insert \ Rows
above để chèn thêm vào một dòng bên trên hoặc Table \
Insert \ Rows Below để chèn thêm vào bên dưới dòng lựa
chọn.
- Muốn chèn thêm một dòng vào cuối bảng thì chuyển con
trỏ đến ô dưới cùng bên phải của bảng sau đó bấm phím
Tab một dong mới sẽ được chèn vào cuối bảng.
Xoá bớt cột, dòng:
- Chọn cột hoặc dòng cần xoá.
- Chọn lệnh Table \ Delete Rows để xoá dòng hoặc Table \
Delete Columns để xoá cột.
Thay đổi kích thƣớc của dòng, cột:
- Bôi đen cột hoặc dòng cần thay đổi kích thước.
- Trên thanh menu chọn Table\ Table Properties.
- Để thay đổi độ rộng của cột ta chọn Tab Column trong
hộp thoại Table Properties sau đó tại ô Column 1 (1 là số
của cột bạn chọn) bạn nhập vào độ rộng mà bạn muốn
thay đổi.
- Bạn cũng có thể dùng nút lệnh Previus Column hoặc
Next Column để chuyển đến cột đằng trước hay cột kế
tiếp bên cạnh cột bạn đang chọn để thay đổi độ rộng luôn
mà không cần phải ra bảng chọn.
- Muốn thay đổi kích thước của dòng thì trong hộp thoại
Table Properties ta chọn Tab Row. Trong ô Height of
Row chọn At Least hoặc Exactly rồi nhập chiều cao
muốn thay đổi vào ô At
- Bấm OK để chấp nhận thay đổi kích thước.
41
3.7. Thiết lập trang và một số chức năng khác
Thiết lập trang
Sau khi đã soạn và chỉnh sửa văn bản thì việc cuối
cùng là in văn bản đó ra giấy.
Để in ra giấy bạn phải đặt lề, chọn cỡ giấy... Chúng ta
làm như sau:
Trên thanh menu chọn lệnh File\Page Setup, xuất
hiện hộp thoại
Chọn Tab Margins để dặt lề trên, dưới, trái, phải. Bạn
có thể gõ trực tiếp vào các ô tương ứng. Sau đó bấm OK để
chấp nhận.
Muốn chọn cỡ giấy (A1, A2,...) thông thường là A4, và
chọn kiểu in ngang, dọc thì ta bấm vào Tab Paper Size.
Để in văn bản ta thực hiện lệnh File \ Print.
Ta cũng có thể đánh số trang cho văn bản bằng cách
thực hiện lệnh Insert \ Page Number, sau đó ta chọn vị trí thích
hợp cho số trang: Đầu trang (Top of Page), cuối trang(Botttom
of Page). Trong ô Alightment, chọn cách đặt số trang ở giữa,
trái, phải. Sau đó bấm OK để in.
Đồ hoạ
Đồ hoạ trong Word dùng để vẽ được các hình khối,
sơ đồ…Nếu trên màn hình chưa có thanh công cụ đồ hoạ như
42
dưới đây thì bạn vào menu View\Toolbars sau đó bấm chuột
vào Drawing.
Cách vẽ: Nhấn nút cần thiết trên thanh công cụ như
đường thẳng, hình vuông, mũi tên,… Sau đó nhấn và giữ trái
chuột để xác định điểm đầu và điểm cuối.
Có thể sửa đổi đối tượng đã vẽ bằng cách trỏ chuột
vào biên của đối tượng sẽ xuất hiện mũi tên 4 đầu nhấn trái
chuột xuất hiện các ô vuông nhỏ.
Chèn hình ảnh, WordArt vào tài liệu
a. Chèn hình ảnh
Vào Menu Insert \ Picture sẽ có hai lựa chọn là chèn từ
clipart hoặc From File.
Chọn một hình bằng cách nhấn chuột vào hình đó rồi nhấn
nút Insert.
Có thể thay đổi hình ảnh như phóng to, thu nhỏ,…nhấn phải
chuột vào hình ảnh sau đó chọn Format Object.
b. Chèn WordArt
Đưa con trỏ về vị trí cần chèn sau đó vào Insert \ Picture \
WordArt.
43
Chọn một kiểu chữ nghệ thuật và nhấn OK.
Chọn font chữ, kiểu và cỡ chữ sau đó gõ văn bản vào vị trí
Your Text Here.
Đặt các dấu dẫn trƣớc (TAB STOP POSITION)
Các loại Tab:
Tab trái: văn bản gõ vào sẽ được khoá ở vị trí bên trái và
đổ dồn về phía bên phải.
Tab phải: văn bản gõ vào sẽ được khoá ở vị trí bên phải
và đổ dồn về phía bên trái.
Tab giữa: văn bản gõ vào sẽ được căn giữa tại điểm dừng
Tab và giàn đều ra hai bên.
Tab thập phân: Dấu chấm thập phân sẽ được căn giữa tại
điểm dừng Tab, phần nguyên đổ về bên trái và phần thập
phân đổ về bên phải (dùng để căn cột số).
Cách tạo: Chọn Format \ Tabs xuất hiện hộp thoại:
44
- Trong ô Default Tab Stops, bấm giữ mũi tên lên hoặc
xuống để tăng hoặc giảm khoảng cách giứa các điểm
dừng Tab mặc nhiên.
- Muốn tạo một Tab mới tại ô Tab stop Position nhập vị trí
dừng của Tab.
- Trong phần Alightment chọn loại tab (trái, phải, giữa,
thập phân).
- Trong phần Leader chọn kiểu tab được chèn vào.
- Bấm nút Set để thiết lập Tab, rồi nhấn OK.
Muốn xoá Tab thì bạn chọn tab cần xoá trong ô Tab
stop Position rồi nhấn Clear, muốn xóa tất cả các Tab thì nhấn
Clear All.
Tạo tiêu đề đầu trang và cuối trang
Tiêu đề đầu và cuối trang là phần văn bản được in ở
đầu trang hoặc cuối trang cho mỗi trang tài liệu. Một tiêu đề
đầu trang hoặc cuối trang có thể đơn giản chỉ gồm số trang
hoặc nó có thể chứa nhan đề của chương, tên tác giả hoặc
bất kỳ thông tin nào cần thiết. Word cho phép đặt tiêu đề
đầu trang và cuối trang như sau: Trên thanh menu chọn
View\Header and Footer, Word sẽ hiện ra tiêu đề đầu trang
của trang hiện thời và bạn có thể soạn tiêu đề dầu và cuối
trang theo ý thích.
45
PHẦN 2: NGÔN NGỮ LẬP TRÌNH PASCAL
CHƢƠNG 1: NHẬP MÔN 1.1. Những khái niệm mở đầu chung về lập trình
1.1.1. Ngôn ngữ lập trình là gì?
Ngôn ngữ lập trình (programming language) là một tập con
của ngôn ngữ máy tính. Đây là một dạng ngôn ngữđược chuẩn hóa
(đối lập với ngôn ngữ tự nhiên). Nó được dùng để miêu tả những
quá trình, những ngữ cảnh một cách rất chi tiết.
Định nghĩa:Ngôn ngữ lập trình là một hệ thống được ký
hiệu hóa để miêu tả những tính toán (qua máy tính) trong
một dạng mà cả con người và máy đều có thể đọc và hiểu được.
Theo định nghĩa ở trên thì một ngôn ngữ lập trình phải thỏa
mãn được hai điều kiện cơ bản là:
1. Nó phải dễ hiểu và dễ sử dụng đối với người lập trình,
để con người có thể dùng nó giải quyết các bài toán
khác.
2. Nó phải miêu tả một cách đầy đủ và rõ ràng các tiến
trình (process), để có thể chạy được trên các máy
tínhkhác.
1.1.2. Chƣơng trình là gì?
Một tập hợp các chỉ thị được biểu thị nhờ ngôn ngữ lập trình
để thực hiện các thao tác máy tính nào đó thông qua mộtchương
trình. Các tên khác của khái niệm này nếu không bị lầm lẫn
là chương trình máy tính hay chương trình điện toán.
Lưu ý: Khái niệm chương trình (program) viết cho máy vi
tính nhằm giải quyết một vấn đế nào đó thường được gọi là phần
mềm máy tính. (Ví dụ chương trình MS Word là một cách gọi
chung chung, chính xác hơn là phần mềm MS Word thì rõ hơn đó
là một chương trình ứng dụng).
Chữ lập trình dùng để chỉ thao tác của con người nhằm kiến
tạo nên các chương trình máy tính thông qua các ngôn ngữ lập
trình. Người ta còn gọi quá trình lập trình đó là quá trình mã
hoá thông tin tự nhiên thành ngôn ngữ máy. Trong các trường hợp
xác định thì chữ lập trình còn được viết là "viết mã" (cho chương
trình máy tính).
46
Như vậy, theo định nghĩa, mỗi ngôn ngữ lập trình cũng
chính là một chương trình, nhưng có thể được dùng để tạo nên các
chương trình khác. Một chương trình máy tính được viết bằng một
ngôn ngữ lập trình thì những chỉ thị (của riêng ngôn ngữ ấy) góp
phần tạo nên chương trình được gọi là mã nguồn của chương trình
ấy.
Thao tác chuyển dạng từ mã nguồn sang thành chuỗi các chỉ
thị máy tính được thực hiện hoàn toàn tương tự như là việc chuyển
dịch giữa các ngôn ngữ tự nhiên của con người. Các thao tác này
gọi là biên dịch (hay ngắn gọn hơn là dịch). Người ta còn phân việc
biên dịch làm hai loại tùy theo quá trình dịch xảy ra trước quá trình
thực thi các tính toán hay nó xảy ra cùng lúc với quá trình tính toán:
1. Một phần mềm thông dịch là một phần mềm có khả năng
đọc, chuyển dịch mã nguồn của một ngôn ngữ và ra lệnh
cho máy tính tiến hành các tính toán dựa theo cú pháp của
ngôn ngữ.
2. Một phần mềm biên dịch hay ngắn gọn hơn trình dịch là
phần mềm có khả năng chuyển dịch mã nguồn của một ngôn
ngữ ban đầu sang dạng mã mới thuộc về ngôn ngữ cấp thấp
hơn.
Ngôn ngữ cấp thấp nhất là một chuỗi các chỉ thị máy tính mà
có thể được thực hiện trực tiếp bởi chính máy tính (thông qua các
theo tác trên vùng nhớ). Trước đây, hầu hết các trình dịch cũ
thường phải thông dịch từ mã nguồn sang bộ mã phụ (các tệp có
dang *.obj), rồi sau đó, mới biên dịch tiếp sang các tập tin thi hành.
Ngày nay, hầu hết các trình dịch đều có khả năng viên dịch mã
nguồn trực tiếp sang thành các tập tin thi hành hay biên dịch sang
các dạng mã khác thấp hơn tuỳ theo yêu cầu của người lập trình.
Điểm khác nhau giữa thông dịch và biên dịch là: Trình thông
dịch sẽ dịch từng câu lệnh một và chương trình đích sẽ không được
lưu lại. Còn trình biên dịch sẽ dịch toàn bộ chương trình, cho ra
chương trình đích được lưu lại trong máy tính rồi mới thực
hiện chương trình.
Một chương trình máy tính có thể được thực thi bằng cách tổ
hợp của việc biên dịch và thông dịch.
47
1.2. Những khái niệm cơ bản về ngôn ngữ Pascal
Pascal là ngôn ngữ lập trình cấp cao do giáo sư Niklaus
Wirth (Trường ĐH Kỹ thuật Zurich, Thuỵ Sỹ) sáng tác và công bố
vào đầu những năm 70, với tên là PASCAL để kỷ niệm nhà toán
học Blaise Pascal (người Pháp). Pascal giúp cho sinh viên cũng như
những người mới học lập trình có được thói quen viết một chương
trình có cấu trúc sáng sủa, rõ ràng, dễ hiểu và dễ đọc cho cả những
người khác.
Pascal là một ngôn ngữ có sự định kiểu mạnh mẽ. Điều đó
có nghĩa là mọi biến và hằng của một kiểu dữ liệu không thể tự do
đem trộn lẫn với các biến và hằng của một kiểu dữ liệu khác.
Pascal là một ngôn ngữ có cấu trúc. Một ngôn ngữ có cấu
trúc khối là ngôn ngữ mà ta có thể tách các thông tin dữ liệu (biến,
hằng....) và các lệnh cần dùng cho một nhiệm vụ xác định thành
những khối riêng, tách ra khỏi phần còn lại của chương trình để
người lập trình có thể giải quyết dần từng phần một, từng khối một
và thậm chí có thể cho nhiều người tham gia lập trình, mỗi người
phụ trách một vài khối. Thông thường các khối ứng với các nhiệm
vụ cụ thể và xác định, được thực hiện bằng các chương trình con
với các biến địa phương và các biến tạm thời của chương trình đó.
Có thể nói tính cấu trúc của Pascal được thể hiện trên 3 mặt:
- Cấu trúc về mặt dữ liệu: từ các dữ liệu đã có ta có thể xây
dựng các cấu trúc dữ liệu phức tạp hơn.
- Cấu trúc về mặt lệnh: từ các lệnh đã có ta có thể nhóm
chúng lại với nhau và đặt giữa hai từ khoá BEGIN và END
thành câu lệnh phức tạp hơn, gọi là lệnh ghép.
- Cấu trúc về mặt chương trình: một chương trình có thể chia
thành các module chương trình độc lập (chương trình con).
Mặc dù Pascal lúc đầu chỉ là một ngôn ngữ để dạy học, song
trong quá trình phát triển, nó đã dần dần phát huy các ưu điểm và
đã trở thành một ngôn ngữ lập trình mạnh, được thương mại hoá rất
nhanh. Từ Pascal do giáo sư Wirth sáng tác ra, tổ chức tiêu chuẩn
hoá quốc tế và rất nhiều hãng đã phát triển thêm và tạo ra các
chương trình dịch ngôn ngữ Pascal với nhiều phần thêm bớt khác
nhau:
- ISO Pascal (được gọi là Pascal chuẩn: International
Standards Organization).
- ANSI Pascal (American National Standard Institut)
48
- Turbo Pascal (TP) của hãng Borland.
- IBM Pascal của hãng MicroSoft
- UCSD Pascal (University of California at San Diego)
....
TP hay còn gọi là Borland pascal là sản phẩm nổi tiếng thế
giới của hãng Borland (Mỹ). Hiện nay nó được sử dụng phổ biến
nhất trên thế giới vì các ưu điểm: tốc độ dịch nhanh, chương trình
dịch pascal được viết rất gọn, các phần mở rộng của nó so với
pascal chuẩn được cải tiến và nâng cao hơn.
1.2.1. Bộ ký tự của Pascal
Một ngôn ngữ bất kỳ (từ ngôn ngữ giao tiếp của con người
tới ngôn ngữ máy tính) đều được xây dựng dựa trên một bộ các chữ
viết (ký tự) và sau đó là tập hợp các từ có nghĩa gọi là từ vựng..
Ngôn ngữ pascal được xây dựng với bộ ký tự sau:
- Bộ 26 chữ cái la ting: 26 chữ cái lớn A, B, C, ...
26 chữ cái nhỏ a, b, c, ...
- Ký tự gạch nối ( _ )
- Bộ số thập phân 0,1,2,3, ..,9
- Các ký hiệu toán học thông dụng +, -, *, /, =, <, >, ( ),....
- Các ký hiệu đặc biệt: ., ;, :, [], ?, %, @, \, !, #, $, '
- Dấu cách (space) được dùng để ngăn cách các từ.
1.2.2. Từ khoá
Từ vựng của Pascal gồm một số từ của riêng Pascal được gọi
là từ khoá (key word). Các từ này người sử dụng phải dùng đúng
với cú pháp. Đó là các từ:
Từ khoá chung: PROGRAM, BEGIN, END, PROCEDURE,
FUNCTION
Từ khoá để khai báo: CONST, VAR, LABEL, TYPE,
ARRAY, STRING, RECORD, ...
Từ khoá của lệnh thử và rẽ nhánh: IF...THEN...ELSE..;
CASE...OF...
Từ khoá của lệnh lặp:
FOR .. TO.. DO và FOR .. DOWNTO .. DO
WHILE .. DO
REPEAT .. UNTIL
Từ khoá điểu khiển: WITH, GOTO
Từ khoá toán tử: AND, OR, NOT, IN, DIV, MOD
Từ khoá NULL: NUL
49
Các từ khoá này có thể viết bằng chữ hoa hoặc chữ thường,
giá trị và ý nghĩa của từ khoá không thay đổi.
1.2.3. Tên
Tên (định danh): là một dãy ký tự được dùng để chỉ tên hằng
số, tên hằng ký tự, tên biến, tên kiểu, tên chương trình con,... Tên
được tạo thành từ các chữ cái và các chữ số song bắt buộc chữ đầu
tiên của tên phải là chữ cái.
Những cách viết sau đây là sai: 1abc, #del, array, del ta;
Số ký tự của tên bị hạn chế: trong Pascal chuẩn là 8 ký tự,
trong TP là 127 ký tự.
Người ta cho phép sử dụng dấu gạch nối dưới trong tên ( _ ).
1.2.4. Tên chuẩn
Một số tên như tên của chương trình con (sin, cos,...) đã
được pascal định nghĩa sẵn được gọi là các tên chuẩn. Sự khác nhau
giữa tên chuẩn và từ khoá là người dùng có thể định nghĩa lại các
tên chuẩn, dùng tên chuẩn vào việc khác nếu muốn, còn từ khoá thì
bị nghiêm cấm dùng vào việc khác trái với quy định.
Một số tên chuẩn của Pascal:
Boolean, Char, Integer, Real, Byte, Text.
False, True, MaxInt.
Abs,Arctan, Chr, Cos, Sin, Eof, Eoln, Exp, Ln, Odd, Ord,
Round, Trunc, Sqr, Sqrt, Pred, Succ.
Read, Readln, Write, Writeln...
1.2.5. Cấu trúc của chƣơng trình viết trên PASCAL
Ta có thể định nghĩa một chương trình máy tính là một dãy
lệnh, một dãy chỉ thị hướng dẫn cho máy tính thực hiện một nhiệm
vụ, một xử lý nào đó trên một tập các dữ liệu, số liệu.
Cấu trúc tổng quát của một chương trình Pascal gồm 3 phần:
Phần tiêu đề của chương trình
Phần khai báo dữ liệu, mô tả kiểu dữ liệu, khai báo
chương trình con
Phần thân chương trình chứa các lệnh để máy tính
thực hiện
Cấu trúc một chương trình viết bằng TP nếu đầy đủ gồm các
phần chính như sau:
PROGRAM TEN_CHUONG_TRINH;
{Lời gọi sử dụng các đơn vị chương trình}
USES CRT, PRINTER;
50
{Phần khai báo dữ liệu, và chương trình con}
LABEL...
CONST...
TYPE...
VAR....
PROCEDURE...
FUNCTION...
{Thân chương trình chính}
BEGIN
....
END.
a. Phần tên (hay tiêu đề) của chƣơng trình
Phần này bao giờ cũng bắt đầu bằng từ khoá
PROGRAM, tiếp theo là tên do ta đặt ra có một ý nghĩa nào
đó đặc trưng cho công việc của chương trình. Cuối cùng, phần
tiêu đề kết thúc bằng dấu chấm phẩy ';'
Phần tiêu đề chiếm một dòng và thậm chí có thể
không có cũng được.
b. Phần khai báo
Phần này có nhiệm vụ mô tả đối tượng bài toán, mô tả
dữ liệu... để chương trình xử lý. Nó có thể chia ra thành 7 kiểu
khai báo với các từ khoá sau:
USES CRT, PRINTER; {Khai báo sử dụng các UNIT}
LABEL ...{Khai báo nhãn}
CONST ... {Khai báo các hằng số, hằng ký tự}
TYPE .... {Mô tả các kiểu dữ liệu mới}
VAR ... {Khai báo các biến}
PROCEDURE....{Khai báo các chương trình con}
FUNCTION... [Khai báo hàm con]
Các khai báo có thể có hoặc không tuỳ theo nhu cầu.
c. Phần thân chƣơng trình Phần này bao giờ cũng nằm gọn giữa hai từ khoá
BEGIN ... END. Sau từ khoá END là dấu chấm để báo kết
thúc chương trình. Phần này bắt buộc phải có đối với mọi
chương trình, nó chứa các lệnh để xử lý các đối tượng, số liệu
đã được mô tả trong phần khai báo.
51
1.2.6. Một vài vấn đề khác: Lời giải thích, dấu chấm phẩy
Lời giải thích (chú giải)
Các lời bình luận, lời giải thích có thể đưa vào bất kỳ
chỗ nào của chương trình để cho chương trình dễ hiểu, dễ đọc
hơn. Lời giải thích được đặt ở giữa hai dấu ngoặc móc { và }
hoặc giữa cụm dấu (* và *).
Dấu chấm phẩy
Sau mỗi câu lệnh đều phải đánh dấu chấm phẩy (;)
1.3. Các kiểu dữ liệu đơn giản chuẩn, các hàm chuẩn
Các kiểu dữ liệu
Một kiểu dữ liệu được định nghĩa là:
- Một tập hợp các giá trị mà một biến thuộc kiểu đó
có thể nhận được.
- Trên đó xác định một số phép toán
Cần nhớ rằng một biến phải gắn liền với một kiểu dữ liệu và
chỉ một mà thôi.
Kiểu logic (Boolean)
Một giá trị thuộc kiểu logic Boolean là một đại lượng
nhận một trong hai giá trị logic: TRUE (đúng) hoặc FALSE
(sai). TRUE và FALSE là tên các giá trị đã được định nghĩa
sẵn. Kiểu Boolean cũng đã định nghĩa sẵn quan hệ thứ tự
FALSE < TRUE.
Các phép toán sau có thể áp dụng cho các giá trị kiểu
Boolean và cho ta kết quả cũng là kiểu Boolean:
Phép AND : phép “và” logic
Phép OR : phép “hoặc” logic
Phép NOT : phép “phủ định” logic
Phép XOR : phép “hoặc loại trừ” logic
Chúng ta có thể tóm tắt quy tắc thực hiện phép AND và OR
như sau:
- Phép AND chỉ cho kết quả là TRUE khi và chỉ khi
hai toán hạng đều là TRUE
- Phép OR chỉ cho kết quả là FALSE khi và chỉ khi
hai toán hạng đều là FALSE
- Phép XOR luôn luôn cho kết quả là TRUE khi hai
toán hạng khác nhau
52
Các phép toán quan hệ
Ký hiệu phép toán Ý nghĩa
<> so sánh khác nhau
= so sánh bằng nhau
>= so sánh lớn hơn hoặc bằng
<= so sánh nhỏ hơn hoặc bằng
> so sánh lớn hơn
< so sánh nhỏ hơn
Kiểu số nguyên
Kiểu số nguyên đã được máy định nghĩa sẵn với từ
khoá INTEGER.
Một giá trị kiểu số nguyên là một phần tử của tập các
số nguyên mà ta có thể biểu diễn được trên máy, nghĩa là nó là
một tập nhỏ của không gian các số nguyên chứ không phải tất
cả mọi số nguyên đều có thể xử lý trên máy tính được. Thông
thường, các số nguyên được biểu diễn bằng hai byte (16 bít).
Do đó phạm vi của nó là từ -32768 (= -215) đến +32767
(=215-1).
a. Các phép tính số học với số nguyên:
Phép cộng và trừ: +, -
Phép nhân: *
Phép chia: / (kết quả là số thực)
Phép chia lấy phần nguyên: từ khoá DIV
Phép chia lấy phần dư: từ khoá MOD
Hàm boolean ODD(n) cho giá trị TRUE nếu n là số
lẻ, FALSE nếu n là số chẵn
Chú ý: Khi thực hiện các phép tính số học đối với số nguyên,
cần hết sức thận trọng xem kết quả của các phép toán đó có
cho kết quả vượt ra khỏi phạm vi biểu diễn số nguyên của máy
không
Ví dụ: 32000 + 800 - 2000 = 29200 (song máy tính sẽ xử lý
sai vì lúc làm phép cộng đã cho kết quả 32800 vượt quá giới
hạn của số nguyên. Máy có thể phát hiện và báo lỗi trường
hợp này)
b. Các phép tính quan hệ đối với số nguyên
53
Các số nguyên có thể so sánh với nhau và với số thực
qua các phép toán quan hệ. Kết quả của phép toán quan hệ là
kiểu boolean (tức là TRUE hoặc FALSE).
Kiểu số thực
Kiểu số thực là tập hợp các số thực có thể biểu diễn
được trong máy tính và được định nghĩa sẵn với từ khoá
REAL.
Các phép toán : +, -, *, /, các phép toán quan hệ.
Chú ý: không tồn tại các phép toán DIV, MOD cho kiểu số
thực
Trong máy tính các số thực được biểu diễn dưới hai dạng:
dạng bình thường và dạng có phần số mũ.
- Dạng thập phân bình thƣờng:
3.14 3.0 -24.123 -0.0005 (lưu ý: dùng dấu chấm ngăn
cách phần nguyên và thập phân)
- Dạng viết có phần mũ: gồm hai phần: phần định trị và phần
mũ viết sau chữ E biểu diễn số mũ cơ số 10.
Ví dụ: 623.12345 = 6.2312345 * 102.
trong máy tính: 6.2312345E+02.
-0.001234 = -1.234 * 10-3
sẽ được viết -1.234E-03.
(Phần định trị và phần mũ đều có thể có dấu đi kèm).
Phạm vi giới hạn của số thực: -1.7-38 đến +1.7E+38.
Chú ý: cách viết sau đây là sai: .5 hoặc 5. (phải viết là 0.5 ,
5.0)
Kiểu ký tự
Kiểu ký tự được định nghĩa trong Pascal với từ khoá
CHAR.
Một hằng ký tự được biểu diễn bằng chữ viết đó nằm
giữa hai dấu nháy đơn:
Ví dụ: 'a' 'A' 'z' '0' '9' '*' '!' .....
Một giá trị kiểu ký tự là một phần tử của một tập hữu
hạn các ký tự được sắp xếp có thứ tự, đó là bộ mã ký tự ASCII
(American Standard Code for Information Interchange).
Các ký tự mã hoá bằng một byte, vì vậy bảng mã ký
tự có thể mã hoá tới 256 ký tự.
Trong bảng mã ASCII, các ký tự từ 0 đến 31 là các ký
tự điều kiển (được dùng để điều khiển các thiết bị ngoại vi,
54
điều khiển các thủ tục trao đổi thông tin....). Phần còn lại trong
bảng mã ASCII bố trí toàn bộ các chữ cái A, B,....các chữ số
0, 1, ... 9, các dấu chấm câu, các ký tự đặc biệt.....
Riêng ký tự 127 (DEL) lại được dùng làm ký tự điều
khiển xoá.
Có hai hàm chuẩn là ORD và CHR cho phép thiết lập
tương quan giữa bộ mã ký tự và một tập con các số tự nhiên.
ORD('c') : cho ta số thứ tự của ký tự 'c' trong bảng mã.
CHR(n) : cho ta ký tự có số thứ tự là n.
Ví dụ: ORD('A') = 65; CHR(65) = 'A'.
Mở rộng kiểu dữ liệu số
Các kiểu số nguyên:
Kiểu Phạm vi biểu diễn Kích thước BYTE
BYTE 0..255 1
SHORTINT 128..127 1
INTEGER 32768..32767 2
WORD 0 .. 65535 2
LONGINT 2147483648 .. 2147483647 4
Các kiểu số thực:
Kiểu Phạm vi biểu diễn Kích thước BYTE
REAL 2.9E-39 .. 1.7E+38 6
SINGLE 1.5E-45 .. 3.4E+38 4
DOUBLE 5.0E-324 .. 1.7E+3.8 8
EXTENDED 1.9E-4951 .. 1.1E+4932 10
1.4. Các hàm chuẩn của Pascal
Các hàm sau đây được định nghĩa sẵn và được sử dụng với
đối số là các số thực hoặc các số nguyên.
ABS(x): cho ta giá trị tuyệt đối của toán hạng x, kiểu kết quả
cùng kiểu với đối số
SRQ(x): cho ta giá trị x2 (kiểu kết quả cùng kiểu với đối số)
* Các hàm sau áp dụng cho đối số nguyên hoặc thực nhưng kết quả
thì luôn luôn là kiểu thực:
SIN(x), COS(x), ARCTAN(x): các hàm lượng giác
LN(x): hàm log2(x).
EXP(x): hàm ex.
SQRT(x): hàm tính căn bậc hai của x
55
SUCC(n): cho số nguyên tiếp theo n: tức là n+1.
PRED(n): cho ta số nguyên trước n: tức n-1.
ODD(n): hàm kiểm tra số chẵn lẻ (True:lẻ ; FALSE: chẵn).
TRUNC(x): cho ta một số là phần nguyên của x, tức là cắt
bỏ đi phần lẻ thập phân của x.
ROUND(x): cho ta một số nguyên là phần nguyên của x
bằng cách quy tròn phần lẻ thập phân của x.
1.5. Khai báo hằng, biến, kiểu, biểu thức, câu lệnh
Tất cả các biến, hằng kiểu dữ liệu trong Pascal đều phải
được khai báo trước khi dùng trong chương trình.
Khai báo hằng
Định nghĩa: Hằng là các đại lượng không thay đổi giá trị.
Có các loại hằng số, hằng ký tự, hằng Boolean.
Khai báo hằng: Các hằng được khai báo sau từ khoá
CONST.
CONST Tên_hằng = giá_trị_của_hằng;
Ví dụ:
CONST
A = 5;
B = TRUE;
C = „z‟;
PI = 3,14;
Khai báo biến
Định nghĩa: Biến là đại lượng có thể thay đổi, dùng để
chứa giá trị của người sử dụng.
Khai báo biến: Các biến được khai báo sau từ khoá VAR
VAR Tên_biến : Kiểu_dữ_liệu_của_biến;
Ví dụ:
VAR
X : Integer;
A1, A2, A3 : Real;
Hoten : String[25];
Y : Boolean;
- Có 2 loại biến:
Biến toàn cục: Khai báo trên Begin, tồn tại trong suốt quá
trình chạy chương trình, và ở đâu cũng sử dụng được.
Biến cục bộ: Chỉ tồn tại trong phạm vi khai báo nó (trong
hàm, trong thủ tục)
56
Kiểu
Ngoài những kiểu dữ liệu đã được Pascal định nghĩa sẵn
như: Integer, Real, Char,…). Pascal còn cho phép người dùng tạo ra
các kiểu dữ liệu mới.
Khai báo biến: Các biến được khai báo sau từ khoá TYPE
Ví dụ:
TYPE
Days = {Monday, …..};
Var
Ngay : Days;
Biểu thức
Biểu thức là một công thức tính toán để có một giá trị
theo một quy tắc toán học nào đó. Một biểu thức bao gồm toán
tử và toán hạng. Toán tử được viết ra bằng dấu phép toán.
Toán hạng có thể là hằng, là hàm, là biến.
Biểu thức số học là biểu thức có giá trị bằng số (thực,
nguyên).
Biểu thức logic (Boolean) là biểu thức có giá trị là
TRUE hoặc FALSE.
Biểu thức quan hệ (Biểu thức Boolean đơn giản) chứa
các toán tử quan hệ (<> , < , > , <= , >= , =).
Ví dụ:
5 + 4 * 5 – 3 * 7 = 4
(100 > 50) AND („A‟ > „B‟) = FALSE
Câu lệnh
Các câu lệnh của chương trình xác định các công việc
mà chương trình phải thực hiện để xử lý các dữ liệu đã được
mô tả và khai báo. Các câu lệnh cách nhau bằng dấu chấm
phẩy (;). Câu lệnh được chia ra làm hai loại: Câu lệnh đơn
giản và câu lệnh có cấu trúc.
Câu lệnh đơn giản: là những lệnh không chứa các lệnh khác
(đó là phép gán, lời gọi chương trình con Procedure (như:
Read, Write, Clrscr,…), lệnh nhảy không điều kiện Goto)
Câu lệnh có cấu trúc: là khối lệnh nằm giữa hai từ khoá
Begin và End; từ 2 lệnh có liên quan là phải để trong cặp
Begin ... End
Câu lệnh gán: Dùng để gán giá trị hay kết quả của một biểu thức
hay nội dung của một biến cho một biến.
<Biến>:=<Giá trị>
57
<Biến>:=<Biến>
<Biến>:=<Biểu thức>
Ví dụ:
Program LenhGan;
Var x, y, z: Integer;
Begin
x := 1;
y := 2;
y:=y+x;
z := x + y;
End.
58
CHƢƠNG 2: CÁC LỆNH CƠ BẢN CÓ CẤU TRÚC ĐỂ
LẬP TRÌNH TRÊN PASCAL
2.1 . Cấu trúc tuần tự
Lệnh gán (Assignment statement) Một trong các lệnh đơn giản và cơ bản nhất của Pascal là
lệnh gán. Mục đích của lệnh này là gán cho một biến đã khai báo
một giá trị nào đó cùng kiểu với biến.
Cách viết:
<Tên_biến> := <biểu thức> ;
Ví dụ: Khi đã khai báo
VAR
c : Char ;
i,j : Integer ;
x, y : Real ;
p, q : Boolean ;
thì ta có thể có các phép gán sau :
c := „A‟ ;
c := Chr(90) ;
i := (35+7)*2 mod 4 ;
i := i div 7 ;
x := 0.5 ;
x := i + 1 ;
q := i > 2*j +1 ;
q := not p ;
* Ý nghĩa: Biến và các phát biểu gán là các khái niệm quan trọng của
một họ các ngôn ngữ lập trình mà Pascal là một đại diện tiêu biểu.
Chúng phản ánh cách thức hoạt động của máy tính hiện nay, đó là:
- Lưu trữ các giá trị khác nhau vào một ô nhớ tại những
thời điểm khác nhau.
- Một quá trình tính toán có thể coi như là một quá
trình làm thay đổi giá trị của một (hay một số) ô nhớ
nào đó, cho đến khi đạt được giá trị cần tìm.
Lệnh ghép (Compound statement)
Một nhóm câu lệnh đơn được đặt giữa 2 chữ BEGIN và
END sẽ tạo thành một câu lệnh ghép.
Trong Pascal ta có thể đặt các lệnh ghép con trong các lệnh
ghép lớn hơn bao ngoài của nó và có thể hiểu tương tự như cấu trúc
ngoặc đơn ( ) trong các biểu thức toán học.
59
* Sơ đồ:
Ở hình minh họa trên ta dễ thấy các nhóm lệnh thành từng
khối (block). Một khối lệnh bắt đầu bằng BEGIN và chấm dứt ở
END;. Trong một khối lệnh cũng có thể có các khối lệnh con nằm
trong nó. Một khối chương trình thường được dùng để nhóm từ 2
lệnh trở lên để tạo thành một <Công việc> của các lệnh có cấu trúc.
2.2. Các cấu trúc rẽ nhánh
2.2.1. Lệnh IF...THEN
IF <biểu thức Boolean> THEN <việc1>;
Nếu biểu thức Boolean có giá trị True thì máy sẽ thực hiện
<việc 1> nếu không thì chuyển sang lệnh tiếp theo.
BiÓu thøc Boolean
ViÖc 1
TRUE FALSE
60
2.2.2. Lệnh IF...THEN...ELSE
IF <biểu thức Boolean> THEN <việc1> ELSE <việc2>;
Nếu biểu thức Boolean có giá trị TRUE thì máy sẽ thực hiện
<việc1> nếu không thực hiện <việc2> và sau đó chuyển sang lệnh
tiếp theo.
Lưu ý: Trước ELSE không bao giờ có dấu chấm phẩy ;
Ví dụ: Để thực hiện phép chia hai số a và b với điều kiện b<>0, ta
viết:
IF b<>0 THEN T:=a/b
ELSE writeln(„Mẫu số = 0 : không chia được!‟);
Ví dụ: Tìm giá trị Max và Min của hai số a, b:
Program tim_max_min;
Var a,b,max,min: integer;
Begin
IF a<b then Begin
Max := b;
Min :=a;
End
ELSE
BEGIN
Max := a;
Min := b;
END;
writeln(„so lon hon trong hai so ‟,max);
writeln(„so nho hon trong hai so ‟,min);
Readln;
End.
BiÓu thøc Boolean
ViÖc 1 ViÖc 2
TRUE FALSE
61
2.2.3. Lệnh CASE...OF
Câu lệnh CASE được dùng trong trường hợp có nhiều sự lựa chọn
Mẫu 1 Mẫu 2
CASE <biến> OF
Hằng1: <việc1>;
Hằng2: <việc2>;
………
HằngN: <việcN>;
END;
CASE <biến> OF
Hằng1: <việc1>;
Hằng2: <việc2>;
………
HằngN: <việcN>;
ELSE <việc N+1>
END;
Trong đó: <biến> không được là biểu thức Boolean như
trong lệnh IF mà nó là biểu thức có các kiểu vô hướng đếm được
(Integer, Char), Không được (Real).
Chú ý rằng lệnh CASE bao giờ cũng kết thúc bằng từ khoá
END.
Ví dụ:
case Ch of
'A'..'Z', 'a'..'z': WriteLn('Letter');
'0'..'9': WriteLn('Digit');
'+', '-', '*', '/': WriteLn('Operator');
else
WriteLn('Special character');
end;
Ví dụ: Tính số ngày của một tháng
VAR songay, thang, nam: integer;
BEGIN
Write („Tháng: ‟); Readln (thang);
Write („Năm: ‟); Readln (nam);
CASE thang OF
4, 6, 9, 11: songay := 30;
2: CASE nam MOD 4 OF
0: songay := 29;
1, 2, 3: songay := 28;
END; {of CASE nam}
1, 3, 5, 7, 8, 10, 12: songay := 31;
END {of CASE thang}
Writeln („Số ngày của tháng ‟,thang,„ năm ‟,nam,„ là : ‟,songay);
62
END.
2.3. Các cấu trúc lặp (các câu lệnh lặp)
2.3.1. Câu lệnh FOR (dạng tiến và dạng lùi)
Cấu trúc:
For <biến>:= <giá trị đầu> to <giá trị cuối> do lệnh;
For <biến>:= <giá trị đầu> downto <giá trị cuối> do lệnh;
Câu lệnh For chỉ thị máy tính thực hiện <lệnh> một số lần
nhất định từ giá trị đầu đến khi vượt qua giá trị cuối. Sau mỗi lần
thực hiện <lệnh> thì biến được tăng lên hoặc giảm đi một đơn vị.
Sơ đồ khối của vòng lặp For ... to ...
Ví dụ: Liệt kê các ký tự trong bảng mã ASCII
Var i:byte;
Begin
For i:=0 to 255 do write(i:6, chr(i):2);
Readln;
End.
Begin
G¸n gi¸ trÞ ban ®Çu cña biÕn ®iÒu khiÓn
i<=giíi h¹n cuèi
Thùc hiÖn khèi lÖnh
Thay ®æi gi¸ trÞ biÕn ®iÒu khiÓn
End
False
True
63
2.3.2. Câu lệnh REPEAT...UNTIL
Câu lệnh lặp Repeat ... Until là lệnh yêu cầu chương trình
lặp lại nhiều lần một hành động cho đến khi thoả m•n một điều kiện
để thoát ra khỏi vòng lặp.
Cấu trúc:
Repeat
<Lệnh 1>;
<Lệnh 2>;
...
Until <biểu thức logic>;
Lệnh Repeat ... Until lặp lại câu lệnh cho tới khi <biểu thức
logic> đúng.
Sơ đồ khối:
Ví dụ: Lặp lại một bài toán:
Var r:Real;
traloi:char;
Begin
Repeat
write(„Cho bán kính: ‟) ; Readln(r);
writeln(„Dien tich hinh tron: ‟,Pi*r*r);
write(„Ban co tiep tuc khong (c/k), nhan k đe thoi‟);
Until Upcase(traloi)=‟K‟;
End.
2.3.3. Câu lệnh WHILE...DO
Cấu trúc:
While <biểu thức logic> do <lệnh>;
Câu lệnh While lặp lại <lệnh> cho tới khi <biểu thức logic>
nhận giá trị sai (false). Bản thân <biểu thức logic> là một bước
kiểm tra khi vào vòng lặp while. Nếu thoả mãn <biểu thức logic>
Begin
Thùc hiÖn khèi lÖnh
BTLG
End
False
True
64
thì lệnh được thực hiện nếu không thoả mãn thì máy sẽ bỏ qua vòng
lặp này. Khác với vòng lặp Repeat ... Until thì các lệnh trong thân
vòng lặp được thực hiện ít nhất một lần.
Ví dụ: Với bài toán trung bình cộng một dãy số ở ví dụ trước có
thể viết theo cấu trúc REPEAT .. UNTIL như sau:
PROGRAM Trung_binh_Day_So ;
VAR n, count : Integer ;
x, sum : real ;
BEGIN
count := 1 ;
sum := 0 ;
Write := (' Nhập n = ') ; readln (n) ;
REPEAT
Write (' Nhập giá trị thứ' , count, 'của x = ') ;
readln(x) ;
sum := sum + x ;
count := count + 1 ;
UNTIL count > n ;
Writeln (' Trung bình là =' , sum/n : 8 :2 ) ;
Readln ;
END.
Begin
G¸n biÕn ®iÒu khiÓn
BTLG
Thùc hiÖn khèi lÖnh
Thay ®æi gi¸ trÞ biÕn ®iÒu khiÓn
End
False
True
65
CHƢƠNG 3: LẬP TRÌNH CẤU TRÚC TRONG PASCAL
(HÀM VÀ THỦ TỤC) Trong Pascal có hai loại chương trình con: Thủ tục
(Procedure) và Hàm (Function)
Sự khác nhau cơ bản và duy nhất của hai loại này là
Function trả lại cho một giá trị kết quả vô hướng thông qua tên của
Function và do đó nó được sử dụng trong một biểu thức. Còn
Procedure không thể viết trong các biểu thức.
3.1. Thủ tục trong Pascal
Thủ tục là một đoạn cấu trúc chương trình được chứa bên
trong chương trình Pascal như là một chương trình con. Thủ tục
được đặt tên và có thể chứa danh sách tham số hình thức (formal
parameters). Các tham số này phải được đặt trong dấu ngoặc đơn ().
Ta có thể truy xuất thủ tục bằng cách gọi tên của thủ tục. Chương
trình sẽ tự động truy xuất thủ tục đúng tên đã gọi và thực hiện các
lệnh chứa trong thủ tục đó. Sau khi thực hiện thủ tục xong, chương
trình sẽ trở lại ngay lập tức sau vị trí câu lệnh gọi thủ tục đó.
Có 2 loại thủ tục:
+ thủ tục không tham số
+ và thủ tục có tham số
3.1.1. Thủ tục không có các tham số hình thức
PROCEDURE < Tên thủ tục > ;
{ Các khai báo hằng, biến, kiểu cục bộ... }
BEGIN
{ ... các lệnh trong nội bộ thủ tục ... }
END ;
Ví dụ: Tìm số lớn nhất trong 3 trị số nguyên
PROGRAM Largest ; (* Xác định số lớn nhất trong 3 trị số
nguyên được nhập vào *)
VAR a, b, c : integer ;
yn : char ;
PROCEDURE maximum ;
VAR max : integer ;
BEGIN
IF a > b THEN max := a
ELSE max := b ;
IF c > max THEN max := c ;
Writeln (' Số lớn nhất là' , max ) ;
END ;
66
BEGIN (* Ðoạn chương trình chính *)
yn := „Y„ ;
WHILE ( upcase(yn) = „Y „) DO
BEGIN
Writeln (' Nhập 3 số nguyên : ') ;
Readln (a, b, c ) ;
maximum; (* Lời gọi thủ tục maximum *)
Write('Tiếp tục nhập 3số mới không(y/n)?');
Readln (yn) ;
END ;
END.
Chú ý:
Trong chương trình trên, thủ tục maximum được khai báo
trước khi nó được truy xuất, các biến a, b, c được gọi nhập vào ở
chương trình chính và biến max được định nghĩa bên trong thủ tục.
Ðiều này cho ta thấy, không phải lúc nào cũng cần thiết khai báo
biến ngay đầu chương trình chính.
3.1.2. Thủ tục có các tham biến hình thức
PROCEDURE < Tên thủ tục > (<danh sách tham số hình thức:
kiểu biến>);
{ Các khai báo hằng, biến, kiểu cục bộ ... }
BEGIN
{ Các lệnh trong nội bộ thủ tục ... }
END ;
Khi viết một thủ tục, nếu có các tham số cần thiết, ta phải
khai báo nó (kiểu, số lượng, tính chất, ...). Các tham số này gọi là
tham số hình thức (formal parameters).
Một thủ tục có thể có 1 hoặc nhiều tham số hình thức. Khi
các tham số hình thức có cùng một kiểu thì ta viết chúng cách nhau
bởi dấu phẩy (,). Trường hợp các kiểu của chúng khác nhau hoặc
giữa khai báo tham số truyền bằng tham biến và truyền bằng tham
trị (sẽ học ở phần sau ) thì ta phải viết cách nhau bằng dấu chấm
phẩy (;).
Ví dụ: Tính giai thừa của một số
PROGRAM Tinh_Giai_thua ;
VAR
n : integer ; gt : real ; {các biến chung}
PROCEDURE giaithua (m : integer );
VAR i : integer ; {i là biến riêng}
67
BEGIN
gt := 1 ;
FOR i := 1 TO m DO gt := gt * i ;
END ;
BEGIN (* Thân chương trình chính *)
Write('Nhập số nguyên n (0 <= n < 33) = ') ;
Readln (n) ;
If n>=0 then
Begin
giaithua (n) ;
Writeln ('Giai thừa của , n, là :' , gt: 10 : 0) ;
End
Else Writeln(' Không tính giai thừa của một số âm!');
Readln;
END.
Trong chương trình trên m là các tham số hình thức của thủ
tục giaithua.
Khi gọi thủ tục giaithua (n) thì tham số thực n được truyền
tương ứng cho tham số hình thức m.
3.2. Các loại biến nhớ trong lập trình cấu trúc
3.2.1. Biến chung: Định nghĩa, tác dụng và phạm vi tác dụng
Biến toàn cục (global variable): Còn được gọi là biến chung,
là biến được khai báo ở đầu chương trình, nó được sử dụng bên
trong chương trình chính và cả bên trong chương trình con. Biến
toàn cục sẽ tồn tại trong suốt quá trình thực hiện chương trình.
3.2.2. Biến riêng: Định nghĩa, tác dụng và phạm vi tác dụng
Biến cục bộ (local variable): Còn được gọi là biến riêng, là
biến được khai báo ở đầu chương trình con, và nó chỉ được sử dụng
bên trong thân chương trình con hoặc bên trong thân chương trình
con khác nằm bên trong nó (các chương trình con lồng nhau). Biến
cục bộ chỉ tồn tại khi chương trình con đang hoạt động, nghĩa là
biến cục bộ sẽ được cấp phát bộ nhớ khi chương trình con được gọi
để thi hành, và nó sẽ được giải phóng ngay sau khi chương trình
con kết thúc.
3.3. Hàm trong Pascal
Hàm là một chương trình con cho ta 1 giá trị kiểu vô hướng.
Hàm tương tự như thủ tục nhưng trả về một giá trị thông qua tên
hàm và lời gọi hàm tham gia trong biểu thức.
Cấu trúc một hàm tự đặt gồm:
68
FUNCTION <Tên hàm> (<Tham số hình thức: kiểu biến>):
<Kiểu kết quả> ;
{ Các khai báo hằng, biến, kiểu cục bộ... }
BEGIN
{ Các khai báo trong nội bộ hàm ... }
END ;
Trong đó:
- Tên hàm là tên tự đặt cần tuân thủ theo nguyên tắc đặt
tên trong Pascal.
- Kiểu kết quả là một kiểu vô hướng, biểu diễn kết quả
giá trị của hàm.
Một hàm có thể có 1 hay nhiều tham số hình thức, khi có
nhiều tham số hình thức cùng một kiểu giá trị thì ta có thể viết
chúng cách nhau bằng dấu phẩy (,). Trường hợp các tham số hình
thức khác kiểu thì ta viết chúng cách nhau bằng dấu chấm phẩy (;).
Trong hàm có thể sử dụng các hằng, kiểu, biến đã được khai
báo trong chương trình chính nhưng ta có thể khai báo thêm các
hằng, kiểu, biến dùng riêng trong nội bộ hàm. Chú ý là phải có một
biến trung gian có cùng kiểu kết quả của hàm để lưu kết quả của
hàm trong quá trình tính toán để cuối cùng ta có 1 lệnh gán giá trị
của biến trung gian cho tên hàm.
Ví dụ:
FUNCTION TINH (x, y : integer ; z : real ) : real ;
Ðây là một hàm số có tên là TINH với 3 tham số hình thức
x, y, z. Kiểu của x và y là kiểu số nguyên integer còn kiểu của z là
kiểu số thực real. Hàm TINH sẽ cho kết quả kiểu số thực real.
Ví dụ:
Bài toán tính giai thừa (factorials)
PROGRAM giaithua ;
VAR x : integer ;
FUNCTION factorial (n : integer) : integer ;
VAR heso, tichso : integer ;
BEGIN
tichso := 1 ;
IF n <= 1 THEN factorial := 1
ELSE BEGIN
FOR heso := 2 TO n DO
tichso := tichso * heso ;
factorial := tichso;
69
END ;
END ;
BEGIN
Write (' Nhập vào một số nguyên dương x = '); Readln (x) ;
Writeln (' Với x = , x , thì giai thừa sẽ là : x ! = ' ,
factorial(x))
Readln;
END.
Ghi chú :
- Khi khai báo kiểu dữ kiệu cho các tham số hình thức
trong thủ tục và hàm, ta cần phải chú ý điểm sau:
- Nếu kiểu dữ liệu của các tham số hình thức là các kiểu
dữ liệu có cấu trúc (kiểu array, string, kiểu record,... ) thì
việc khai báo kiểu dữ liệu cho các tham số hình thức nên
được khai báo theo cách gián tiếp, tức là phải thông qua
từ khóa TYPE.
Ví dụ:
Procedure Xuat1(hoten : string[25]);
Procedure Xuat2(mang:array[1..10] of integer);
Hai chương trình con Xuat1 và Xuat2 đều bị lỗi ở
phần khai báo kiểu dữ liệu cho hai tham số hình thức là
hoten và mang.
Ðể khắc phục lỗi này, ta sẽ khai báo gián tiếp một
kiểu dữ liệu str25 và M10 thông qua từ khóa TYPE như sau:
TYPE
Str25=string[25]; {Str25 là một kiểu chuỗi có độ dài 25}
M10=Array[1..10] of integer;
{M10 là một kiểu dữ kiệu mảng có 10 phần tử nguyên}
Tiếp đến, dùng 2 kiểu dữ liệu mới định nghĩa Str25
và M10 để định kiểu cho các tham số hình thức hoten và
mang như sau:
Procedure Xuat1(hoten : Str25);
Procedure Xuat2(mang: M10);
3.4. Hàm đệ quy
Một chương trình con mà trong quá trình thiết lập, nó sẽ gọi
chính bản thân nó thì chương trình con có tính đệ qui (recursion).
Ví dụ:
Bài toán tính giai thừa (factorials) theo cách đệ qui. Bài toán
này có phần chương trình chính giống như đã có ở ví dụ trước:
70
PROGRAM Giaithua ;
(*Tính giai thừa của số n theo phương pháp đệ qui *)
VAR x : integer ;
FUNCTION factorial (n : integer) : longint ;
BEGIN
IF n <= 1 THEN factorial := 1
ELSE factorial := n * factorial (n -1);
END ;
BEGIN
Write (' Nhập vào một số nguyên dương x = ');
Readln (x) ;
Writeln ;
Writeln (' Kết quả ',x,'! = , factorial(x));
Readln;
END.
Giả sử ta nhập x = 4, thì 4! = factorial(n), với n = 4, ta có
sơ đồ minh họa như sau:
Chú ý:
- Ưu điểm của thuật toán đệ qui là ngắn gọn. Nó có khả
năng định nghĩa một tập hợp rất lớn các đối tượng bằng
một số các câu lệnh hữu hạn. Thuật toán đệ qui có vẻ
thích hợp cho các bài toán mà tự thân cấu trúc dữ liệu
của nó đã được định nghĩa theo lối đệ qui.
- Có một số thuật toán đệ qui sử dụng cho các bài toán đơn
giản có thể được thay thế bằng một thuật toán khác
không tự gọi chúng, sự thay thế đó được gọi là khử đệ
qui.
71
- Trong một số bài toán ta có thể giải theo 2 cách: thuật
toán lặp (xem chương trước) và thuật toán đệ qui. Thông
thường, cách giải theo thuật toán lặp (WHILE .. DO) thì
tốt hơn so với thuật toán đệ qui vì đệ qui đòi hỏi thêm bộ
nhớ và thời gian. Khi đó các thanh ghi được sử dụng cho
lưu trữ và khi quay trở về phải khôi phục lại trạng thái cũ
trong mỗi lần gọi đến chương trình con. Mức độ phức tạp
có thể gia tăng khi trong chương trình con theo thuật toán
đệ qui có chứa những chương trình con khác. Vì vậy, khi
dùng đệ qui ta cần thận trọng, nhất là thuật toán này
thường không cho ta thấy rõ trực tiếp toàn bộ quá trình
giải các bước. Nói chung, chỉ khi naò không thể dùng
thuật toán lặp ta mới nên sử dụng thuật toán đệ qui.
72
CHƢƠNG 4: MẢNG VÀ TẬP HỢP
4.1. Mảng
Mảng là kiểu có cấu trúc dùng để chỉ định một nhóm đối
tượng có cùng một kiểu dữ liệu nào đó. Ta có thể truy nhập đến
từng phần tử của mảng thông qua chỉ số của chúng.
4.1.1. Khai báo mảng
TYPE
MảngT=ARRAY[chỉ_số_đầu..chỉ_số_cuối] OF Kiểu_dữ_liệu;
VAR
A : MảngT;
Hoặc ta có thể viết:
A:ARRAY[chỉ_số_đầu .. chỉ_số_cuối] OF Kiểu_dữ_liệu;
Ví dụ:
TYPE
so = array [1 .. 10] of integer;
chu = array [1 .. 100] of char;
Color = {Red, Blue, Green, White, Black};
VAR
A, B, C : so;
X, Y, Z : chu;
M, N: array[-5 .. 5] of real;
K : array [„A‟ .. „B‟] of integer;
L : array [Color] of boolean;
Chú ý: Khi khai báo mảng, kiểu chỉ dẫn có thể là các ký tự, số
nguyên, kiểu liệt kê do người sử dụng định nghĩa, kiểu boolean.
Kiểu chỉ dẫn không được là kiểu real.
Ví dụ:
Var a,b:Array[1..10] of Integer;
i:Byte;
Begin
For i:=1 to 10 do Readln(a[i]);
(* Nếu muốn trình bày cho dễ hiểu hơn ta viết
như sau:
For i:=1 to 10 do
Begin
writeln(„Vao phan tu thu a[„,i,‟]:‟);
Readln(a[i]);
end; *)
b:=a;
73
For i:=1 to 10 do Writeln(b[i]);
Readln;
End.
4.1.2. Một số thuật toán cơ bản trên mảng
Đọc dữ liệu vào mảng B có n phần tử.
For i := 1 to n do
Begin
Write(„B[„, i,‟ i]= ‟); Readln(B[i]);
End;
Khởi tạo mảng B (integer, Real) có n phần tử .
For i := 1 to n do
Begin
(B[i]) := 0;
End;
Viết dữ liệu từ mảng B có n phần tử ra màn hình.
For i := 1 to n do
Begin
Write(„B[„, i,‟ ]= ‟, B[i]);
End;
Tính toán với dữ liệu kiểu mảng.
Ví dụ 1: Viết chương trình cộng hai mảng một chiều:
Thuật toán:
- Khai báo biến n, i, mảng A, mảng B, mảng kết quả C ;
- Đọc n;
- Đọc mảng A, B
- Tính các phần tử của mảng C theo công thức:
C(i) = A(i) + b(i) (i = 1n)
For i := 1 to n do C[i] := A[i] + b[i];
- Viết mảng kết quả C ra màn hình
Ví dụ 2: Đếm trong 100 lần gõ các ký tự vào bàn phím, số lần xuát
hiện của các ký tự từ „A‟ đến „Z‟ là bao nhiêu.
Var
i: Integer;
ch : Char;
MC: Array[„A‟ .. „Z‟] of Integer; (* mảng đếm*)
Begin
For ch := „A‟ to „Z‟ Do MC[ch] := 0; (* Khởi tạo
mảng đếm*)
74
For i:= 1 to 100 Do (* Đọc 100 ký tự gõ liên tiếp từ
bàn phím*)
Begin
Read(ch);
ch := UpCase(ch);
MC[ch] = MC[ch] + 1;
End;
For ch := „A‟ to „Z‟ Do
if MC[ch] > 0 then
Writeln(„So chu „, ch , „ = „, Mc[ch]:4);
End.
Chú ý: Nếu hai mảng A và B cùng kích thước và
cùng kiểu phần tử thì có thể thực hiện phép so sánh bằng và
khác (A = B; A <> B) song không thể thực hiện phép so sánh
lớn hơn hoặc nhỏ hơn.
Sắp xếp mảng.
Tồn tại rất nhiều thuật toán sắp xếp mảng. Trong phạm vi
chương trình, chúng ta chỉ nghiên cứu hai thuật toán sắp xếp trong
là thuật toán chọn trực tiếp (Selection Sort) và thuật toán sủi bọt
(Buble Sort).
a. Thuật toán chọn trực tiếp:
Thuật toán:
- Coi phần tử đầu tiên là số nhỏ nhất.
- Đem phần tử đầu tiên đó so sánh lần lượt với các số còn
lại trong dãy số. Nếu có phần tử thứ i nào đó nhỏ hơn nó
thì đổi chỗ phần tử ấy cho nó. Như vậy sau khi duyệt
xong dẫy số, phần tử đầu tiên là phần tử nhỏ nhất.
- Lặp lại thuật toán lần lượt với các phần tử thứ hai, thứ 3
vv... Chương trình:
....................................................
For i := 1 to n - 1 do
For j := i +1 to n do
if A[i] >A[j] then
Begin
Tam := A[i];
A[i] := A[j];
A[j] := Tam;
End;
75
end;
............................................
b. Thuật toán Buble Sort
Thuật toán:
- Lần lượt so sánh phần tử thứ i với phần tử thứ i-1 (i= n
1). Nếu phần tử thứ i < phần tử thứ i-1 thì tiến hành đổi
chỗ cho chúng. Sau khi duyệt xong dẫy số, phần tử thứ
nhất sẽ là phần tử nhỏ nhất.
- Lặp lại bước trên với i = n 2. Sau khi duyệt xong dãy
số, phần tử thứ hai sẽ là phần thử nhỏ thứ hai.
- Lặp lại n –1 bước, ta sẽ có được dãy số sắp xếp theo thứ
tự tăng dần
Nhận xét:
Với cách giải quyết vấn đề như vậy, phần tử nhẹ sẽ tử
tử được đổi chỗ lên phía trên tương tự như việc nổi bong
bóng nước do vậy có tên là thuật toán sủi bọt
Chương trình
.....................................
For i := 1 to n - 1 do
For j := n Downto i do
if A[j] < A[j – 1] then (* đổi chỗ A[i] vaf A[j - 1]*)
Begin
Tam := A[j]
A[j] := A[j-1];
A[-1j] := Tam;
End;
.....................................
4.2. Tập hợp
Định nghĩa và khai báo
Một tập hợp bao gồm một số phần tử có cùng kiểu gọi là
kiểu phần tử. Số các phần tử tối đa trong tập hợp là 256, kiểu phần
tử có thể là kiểu vô hướng liệt kê, kiểu miền con hoặc kiểu char.
Khái niệm tập hợp trong ngôn ngữ Pascal gắn liền với tập hợp
trong toán học.
Ta có hai cách khai báo kiểu tập hợp.
Khai báo gián tiếp
Type CHUCAI = SET OF CHAR; {Tập các chữ cái}
CHUSO = SET OF 0..9;
76
NGAYTT = (CHUNHAT, HAI, BA, TU, NAM,
SAU, BAY);
NGAY = SET OF NGAYTT;
Var cc: CHUCAI;
cs: CHUSO;
ng: NGAY;
Khai báo trực tiếp
Var cc: SET OF CHAR;
cs: SET OF 0..9;
ng: SET OF (CHUNHAT, HAI, BA, TU, NAM,
SAU, BAY);
Mô tả tập hợp
Một tập hợp được mô tả bằng cách liệt kê các phần tử của
tập hợp, chúng cách nhau dấu , (phẩy) và được đặt trong cặp dấu []
(ngoặc vuông). Các phần tử có thể là hằng, biến, biểu thức. Cụ thể,
ta xét các tập hợp dưới đây.
[] {Tập hợp rỗng}
[3..8] {Tập hợp chữ số từ 3 đến 8}
[0..50, 60, 70, 80, 90]
[„A‟..‟G‟] {Tập hợp chữ cái từ A đến G}
[i, i+j*2, 10, 12] {i,j phải là biến số nguyên}
Các phép toán trên tập hợp
a. Phép gán
Ta có thể gán giá trị của tập hợp đã được mô tả vào các
biến tập hợp cùng kiểu. Tập rỗng có thể gán cho mọi biến kiểu
tập hợp.Với cách khai báo như trình bày ở trên, ta có thể thực
hiện phép gán như dưới đây.
cc := [„a‟ .. „n‟];
cs := [1..5, 7, 9];
ngay := [];
b. Phép hợp
Hợp của hai tập hợp A và B là một tập hợp ký hiệu A +
B có các phần tử bao gồm tất cả các phần tử của 2 tập hợp. Ta
hãy xem ví dụ dưới đây.
A := [2 .. 9];
B := [7 .. 15];
Khi đó A + B = [2 .. 15];
Lưu ý: A + B = B + A
77
c. Phép giao
Giao của hai tập hợp A và B là một tập hợp ký hiệu A *
B có các phần tử vừa của tập hợp A vừa của tập hợp B. Ta hãy
xem ví dụ dưới đây.
A := [2 .. 9];
B := [7 .. 15];
Khi đó A * B = [7 .. 9];
Lưu ý: A * B = B * A
d. Phép trừ
Hiệu của hai tập hợp A và B là một tập hợp ký hiệu A -
B có các phần tử của tập hợp A mà không có trong tập hợp B.
Ta hãy xem ví dụ dưới đây.
A := [2 .. 9];
B := [7 .. 15];
Khi đó A - B = [2 .. 6];
e. Phép thử
Phép thử IN cho phép ta xem một giá trị nào đó có thuộc
tập hợp hay không. Nếu có cho kết quả là TRUE, ngược lại cho
kết quả là FALSE. Ta hãy xem ví dụ dưới đây.
A := [2 .. 9];
i := 3;
i IN A {cho kết quả là True}
f. Các phép toán so sánh =, <>, <=, >=
Hai tập hợp muốn so sánh với nhau thì chúng phải có
cùng kiểu phần tử. Kết quả của phép so sánh trả về kiểu
Boolean (đúng – sai).
- Phép so sánh = (bằng). Hai tập hợp A và B bằng nhau (A =
B cho kết quả True) khi chúng có các phần tử bằng nhau
từng đôi một (không kể thứ tự các phần tử trong tập hợp).
- Ngược lại với phép so sánh bằng là so sánh khác, tức là các
phần tử A và B không bằng nhau từng đôi một. Nếu A = B
cho kết quả TRUE thì A <> B cho kết quả FALSE và ngược
lại.
- Phép so sánh <= (nhỏ hơn hoặc bằng). A <= B cho kết quả là
True khi mọi phần tử của A đều có trong B.
- Phép so sánh >= (lớn hơn hoặc bằng). A >= B cho kết quả là
True khi mọi phần tử của B đều có trong A.
78
Viết và đọc dữ liệu trên tập hợp
Đối với dữ liệu kiểu tập hợp ta không thể viết ra hoặc đọc
vào bằng các lệnh Read, Readln, Write, Writeln. Tuy nhiên ta có
thể lập trình thực hiện các thao tác này.
Ví dụ sau sẽ nhập vào một tập hợp kiểu Char và in lên màn
hình tập hợp vừa nhập.
Type CHUCAI = SET OF CHAR;
Var cc: CHUCAI;
i, n: Integer;
ch: Char;
Begin
Write(„ Tập hợp có bao nhiêu phần tử? „); Readln(n);
cc := [];
For i := 1 to n do
Begin
Write(„ Phần tử thứ „ ,i, ‟ là: ‟);
Readln(ch);
cc:= cc + [ch];
End;
Writeln(„Các phần tử trong tập hợp bạn vừa nhập‟);
For ch := „A‟ to „z‟ do
If ch IN cc then
Write(ch: 5);
Readln;
End.
79
CHƢƠNG 5: DỮ LIỆU KIỂU XÂU KÝ TỰ
5.1. Khai báo xâu và các phép toán trên xâu
Một xâu ký tự được định nghĩa bằng từ khoá STRING, theo
sau là số ký tự cực đại có thể có của xâu ký tự, và được đặt trong
ngoặc vuông:
STRING [độ_dài_cực_đại];
Ví dụ:
VAR
My_name: String [30];
Line: String [80];
Hàm chuẩn Length(st) cho ta độ dài của xân ký tự st.
Một xâu ký tự rỗng ký hiệu st = „‟. Khi đó length(st) = 0.
Truy nhập vào phần tử của xâu ký tự:
Ta có thể truy nhập vào từng ký tự một của xâu ký tự với tên
biến và chỉ số đặt trong ngoặc vuông như khi truy nhập vào phần tử
của mảng. Chỉ số này có thể chạy từ 1 tới độ dài cực đại của xâu ký
tự.
Ví dụ:
IF My_name[3] = „a‟ then
Writeln („Ký tự thứ 3 của xâu ký tự là : a‟);
Nếu vị trí ký tự đó nằm ngoài độ dài thực của xâu ký tự thì
phẩn tử đó của xâu không có giá trị xác định. Vì vậy khi truy nhập
vào từng phần tử của xâu chữ ta còn cần phải kiểm tra xem vị trí đó
có nằm trong khoảng độ dài thực của xâu hay không.
Ví dụ:
IF length(My_name) >3 then
Writeln(„Ký tự thứ 3 của My_name là: ‟,My_name[3]);
Các thao tác trên xâu ký tự:
Phép cộng xâu: Xâu ký tự có thể được sử dụng như là các
toán hạng trong các biểu thức để ghép xâu ký tự qua dấu
cộng (+).
Ví dụ:
My_name := „Nguyễn‟ + „ Thị‟ + „ Hoa‟;
Cho kết quả: My_name = „Nguyễn Thị Hoa‟
Lưu ý: không cho phép tính trừ, nhân, chia,.. cho xâu ký tự.
So sánh xâu ký tự:
Xâu ký tự có thể được dùng trong các biểu thức quan hệ để
so sánh.
80
- Khi so sánh hai xâu ký tự, các ký tự của hai xâu được so
sánh từng cặp một từ trái qua phải theo giá trị của bảng
m• ASCII.
- Nếu hai xâu có độ dài khác nhau song số ký tự giống
nhau đến độ dài xâu ngắn nhất thì xâu có độ dài ngắn
hơn được coi là bé hơn. Hai xâu ký tự được coi là bằng
nhau nếu như cả về nội dung lẫn độ dài của chúng là
giống nhau.
Ví dụ:
„FILENAME‟ = „FILENAME‟ :cho giá trị TRUE
„FILENAME‟ < „FILENAME‟ :cho giá trị FALSE
„FILENAME‟ < „FILENAME A‟ :cho giá trị TRUE
Viết ra màn hình:
Có thể dùng write(st) và writeln(st) cho một xâu ký tự st
Đọc:
Readln(st) sẽ đọc các ký tự cho xâu st với độ dài thực là số
ký tự gõ vào từ bàn phím.
5.2. Các thủ tục và hàm xử lý xâu
* Hàm Length(st): cho ta độ dài của xâu ký tự st.
* Thủ tục Delete(st, Pos, Num): sẽ xoá bỏ trong xâu ký tự st
một số ký tự Num số, kể từ vị trí Pos.
* Thủ tục Insert(st1, st2, Pos): sẽ xen vào xâu st2 một xâu ký
tự st1 kể từ vị trí Pos
* Thủ tục Str(Value, st): sẽ biến đổi giá trị bằng số nguyên
hoặc thực Value thành một dãy ký tự biểu diễn số đó
* Thủ tục Val(st, Var1, Code): sẽ biến đổi một xâu ký tự st
(biểu diễn một số nguyên hoặc thực) thành một số nguyên hoặc
thực chứa trong Var1. Code là số nguyên để phát hiện lỗi. Nếu
phép biến đổi mà đúng thì Code có giá trị = 0, nếu sai do st không
biểu diễn đúng số nguyên hoặc số thực, Code sẽ nhận giá trị bằng
vị trí của ký tự sai trong xâu chữ st.
Ví dụ:
X là biến thực, st = „123.56‟, Result là biến nguyên
Val(st, X, Result) cho ta X = 123.56 và Result = 0.
Ví dụ:
I là biến nguyên, st = „456‟, Result là biến nguyên
Val(st, I, Result) cho ta I = 456 và Result = 0.
Ví dụ:
I là biến nguyên, st = „456A‟, Result là biến nguyên
81
Val(st, I, Result) cho ta I không xác định và Result = 4.
*Hàm Copy(st, Pos, Size): copy Size ký tự trong st từ vị trí
Pos.
*Hàm ghép concat(st1, st2, …., stN): Sẽ ghép nối tất cả các
xâu ký tự theo thứ tự trên. Nếu tổng số chiều dài của các xâu ký tự
lớn hơn 255 thì máy sẽ báo lỗi. (Có thể thay thế bằng phép +).
*Hàm vị trí Pos(st1, st2): sẽ cho ta vị trí đầu tiên của xâu st1
gặp trong xâu st2. Nếu không tìm thấy Pos có giá trị = 0.
*Truy xuất từng ký tự trong chuỗi
Ta có thể truy xuất từng ký tự trong chuỗi thông qua tên
biến, nó tương tự như việc truy xuất một mảng, dĩ nhiên kiểu của
từng ký tự trong chuỗi là Char. Giã sử ta có biến St là biến kiểu
string thì St[i] (i là một số nguyên thoả 1 <= i <= length(St)) là ký
tự thứ i của chuỗi.
Dưới đây là chương trình cho nhập vào một số nhị phân, in
ra kết quả là số thập phân tương ứng, sử dụng việc truy xuất các ký
tự trong chuỗi nhị phân Bin. HamMu là hàm mũ an (xin xem cách
thiết kế ở chương unit).
Var Bin: String[20];
Dec, i: Integer;
Begin
Write(„ Nhập một số nhị phân: „); Readln(Bin);
Dec := 0;
For i := 1 to length(Bin) do
If Bin[i] = „1‟ Then
Dec := Dec + HamMu( 2, length(Bin)-i );
Write(„Số nhị phân vừa nhập có giá trị là: ‟ , Dec);
Readln;
End.
82
CHƢƠNG 6: DŨ LIỆU KIỂU BẢN GHI VÀ TỆP 6.1. Bản ghi
Để tạo ra một kiểu cấu trúc dữ liệu mới với các phần tử dữ
liệu có kiểu khác nhau nhưng có liên kết với nhau, người ta định
nghĩa ra Bản ghi (Record).
Mô tả Record
TYPE
T = Record
s1: T1;
s2: T2;
......
sn: Tn;
END;
Ví dụ: Một địa chỉ bao gồm các dữ liệu như số nhà, tên phố, thành
phố:
TYPE
Dia_Chi = Record
So_Nha: integer;
Pho: String[20];
Thanh_Pho : String [15];
End;
Như vậy chúng ta có 3 trường là So_Nha, Pho, Thanh_Pho
với kiểu khác nhau và chúng được liên kết lại với nhau.
Ví dụ: Mô tả thời gian DATE ta có 3 trường: Ngày, Tháng và Năm.
TYPE
Date = Record
Ngay : 1..31;
Thang: 1..12;
Nam: integer;
End;
Hoặc
TYPE
Date = Record
Ngay : 1..31;
Thang: (Jan, Feb, Mar, Apr, May, Jun,
Jul, Aug, Sep, Oct, Nov, Dec);
Nam: integer;
End;
83
Ví dụ: Mô tả nhân sự hay phiếu cán bộ của phòng tổ chức, ta phải
dùng các trường Họ Tên, Ngày sinh, Địa Chỉ, Lương.
TYPE
Nhan_Su = Record
Ho_Ten : String [30];
Ngay_Sinh : Record
Ngay: 1..31;
Thang: 1..12;
Nam : integer;
End;
Cho_O : Dia_Chi;
Luong : Real;
End;
Sử dụng Record:
Để thâm nhập vào một trường của Record, ta cần phải dùng
tên biến kiểu Record, sau đó dấu chấm (.) và tên trường của
Record.
Ví dụ:
VAR
Nguoi1, Nguoi2 : Nhan_Su;
Begin
Writeln ('Ho và tên người 1:');
Readln(Nguoi1.Ho_Ten);
Writeln ('Ngay sinh :');
Readln(Nguoi1.Ngay_Sinh.Ngay);
......
End;
Lưu ý là không thể dùng các thao tác sau:
- Viết ra màn hình hoặc đọc từ bàn phím cả một biến kiểu
Record như: Readln(Nguoi1) hoặc Writeln(Nguoi1);
- So sánh các Record bằng các phép toán quan hệ như sau: <,
>, <=, >=. Riêng các phép so sánh <> và = thì có thể dùng
với hai biến có cùng kiểu Record.
- Tất cả các phép toán số học và logic.
Câu lệnh WITH.
Qua ví dụ trên, ta thấy việc thâm nhập vào các trường của
một biến kiểu Record là tương đối phức tạp và có phần tẻ nhạt vì
phải dùng nhiều lần tên biến, cùng với các tên trường.
Để đơn giản cách viết Pascal đưa ra lệnh WITH .. DO ..
84
Ví dụ:
With Nguoi1 Do
Begin
Writeln (' Ho va ten Nguoi 1: ');
Readln (Ho_Ten);
With Ngay_Sinh Do
Begin
Write('Ngay Sinh:');
readln(Ngay);
.....
End;
End;
Như vậy chúng ta còn có thể lồng các chỉ thị WITH .. DO ..
vào với nhau để thâm nhập vào các trường ở sâu trong Record phức
tạp:
Ví dụ:
With A Do
With B Do
Ở đây B là một trường của A.
Ta có thể viết: With A, B Do
6.2. Mảng các bản ghi
Trong thực tế, ta thường phải quản lý một danh sách sinh
viên của một lớp, một danh sách các quyển sách trong thư viện. Vì
thế mảng các bản ghi được dùng rất phổ biến.
Khi khai báo :
VAR
DS : Array[1..50] of KSVIEN;
hoặc :
TYPE
KMang = Array[1..50] of KSVIEN;
VAR
DS: KMang;
thì ta có một mảng DS gồm 50 phần tử DS[1],..., DS[50] cùng kiểu
bản ghi KSVIEN. Mỗi DS[i], i=1,..., 50 là một bản ghi có 5 trường
Hoten, Maso, Toan, Ly, DTB lưu trữ các thông tin về sinh viên thứ
i trong danh sách.
Ðể nhập dữ liệu ( Hoten, Maso, Toan, Ly ) rồi tính Ðiểm
trung bình cho 50 sinh viên này, ta dùng vòng lặp For phối hợp với
câu lệnh WITH :
85
For i:=1 to 50 do
WITH DS[i] DO
Begin
Write(„Nhap ho ten sinh vien thu „,i,‟ : „);
Readln(Hoten);
Write(„Nhap ma so sinh vien thu „,i,‟ : „);
Readln(Maso);
Write(„Nhap điểm Toan, Ly sinh vien thu „,i,‟:„);
Readln(Toan, Ly);
DTB:=(Toan + Ly)/2;
End;
Ðể sắp xếp danh sách sinh viên theo trật tự giảm của DTB
sao cho người có DTB cao thì đứng trước, người có DTB thấp thì
đứng sau, ta có thể áp dụng phương pháp sắp xếp mảng, song chỉ
lấy trường DTB làm tiêu chuẩn so sánh:
For i:=1 to 49 do
For j:=i+1 to 50 do
If DS[i].DTB < DS[j].DTB then
Begin { Ðổi chỗ DS[i] và DS[j] }
Z:=DS[i];
DS[i]:=DS[j];
DS[j]:=Z;
End;
Ở đây Z là biến bản ghi cùng kiểu với các phần tử DS[i].
Khi sắp xếp theo DTB tăng hoặc giảm thì trường DTB được
gọi là "khóa" ( key) sắp xếp.
Một cách tương tự, có thể sắp xếp danh sách sinh viên theo
khóa là điểm Toan, hoặc điểm Ly, hoặc Maso, hoặc theo Hoten.
Ðể in danh sách đã sắp xếp lên màn hình, ta dùng lệnh:
For i:=1 to 50 do WITH DS[i] DO
Writeln( i:2,Hoten:25, Maso:9 , Toan:5:1, Ly:5:1, DTB:5:1);
6.3. Tệp
Khái niệm về tệp:
Tệp hay tệp dữ liệu là một tập hợp các dữ liệu có liên
quan với nhau và có cùng kiểu được nhóm lại với nhau tạo
thành một dãy. Chúng thường được chứa trong một thiết bị
nhớ ngoài của máy tính (đĩa mềm, đĩa cứng, băng từ...) với
một cái tên nào đó.
86
Định nghĩa một kiểu tệp T với các phần tử có kiểu là
KPT (kiểu phần tử) được viết trong phần mô tả kiểu với từ
khoá FILE OF như sau:
TYPE
T = FILE OF KPT;
Tức là: Kiểu_Tệp = FILE OF Kiểu_Phần_Tử;
Sau đó là khai báo một biến tệp (FileVar) trong phần
khai báo biến:
VAR
Biến_tệp: Kiểu_Tệp;
Hoặc khai báo trực tiếp như sau:
VAR
Biến_tệp FILE OF Kiểu_Phần_Tử;
Ví dụ:
TYPE
FileInteger = FILE OF integer;
FileReal = FILE OF real;
FileBoolean = FILE OF boolean;
Nhan_Su = RECORD
Ten : String[30];
Tuoi : byte;
Luong : real;
End;
FNhanSu = FILE OF Nhan_Su;
VAR
F1, F2 : FileInteger;
F3 : FileReal;
FNS : FNhanSu;
F5 : FILE OF Char;
F6 : FILE OF array[1..5] of integer;
F6 là biến tệp được khai báo trực tiếp trong phần Var
với các phần tử là mảng một chiều độ dài mảng là 5.
Kiểu phần tử của tệp có thể là bất kỳ kiểu dữ liệu nào
(kiểu vô hướng, kiểu có cấu trúc như mảng, bản ghi,..) trừ
kiểu tệp (nghĩa là không có kiểu tệp của tệp)
Cấu trúc và phân loại tệp
Các phần tử của tệp không có tên và việc truy nhập
không thể tuỳ tiện được. Các phần tử của tệp được sắp xếp
thành một dãy và ở mỗi thời điểm chương trình chỉ có thể
87
truy nhập vào một phần tử của tệp thông qua giá trị của một
biến đệm. Biến đệm được dùng để đánh dấu vị trí truy nhập
của tệp.
Mỗi tệp đều được kết thúc bằng một dấu hiệu đặc biệt
để báo hiệu hết tệp, hay gọi là EOF(F) (End of file F). Pascal
có một hàm chuẩn EOF, kiểu boolean, với tham số là một
biến tệp để thử xem vị trí truy nhập tệp có nằm ở cuối tệp
hay không, nếu đang ở vị trí cuối tệp thì hàm EOF(F) có giá
trị là TRUE, nếu không thì hàm nhận giá trị FALSE.
Mở tệp mới để lƣu trữ dữ liệu:
Chương trình chỉ có thể lưu trữ dữ liệu vào một tệp
sau khi tệp đã được mở.
* Mở tệp để ghi:
TP dùng 2 cặp thủ tục đi liền nhau theo thứ tự:
ASSIGN (Biến_tệp , Tên_tệp);
REWRITE (Biến_tệp);
Ví dụ:
ASSIGN (FNS , 'NhanSu.Dat');
REWRITE (FNS);
Tên tệp là tên của tệp đặt trong thiết bị nhớ ngoài được đưa
vào dưới dạng là một String.
* Ghi các giá trị vào tệp với thủ tục Write:
Cách viết:
WRITE (Biến_tệp, Các giá trị);
Trong đó, các giá trị có thể là các hằng, các biến, các biểu
thức có cùng kiểu.
Bước cuối cùng là đóng tệp lại bằng thủ tục:
CLOSE(Biến_tệp);
Chú ý: Một tệp có thể dùng làm tham số của chương trình
con (Procedure hoặc Function) với lời khai báo bắt buộc
phải sau chữ Var (tức là tệp được dùng làm tham biến).
Ví dụ:
TYPE
FI = File of Integer;
St = String [30];
Procedure Ghi_Tep(Var F: FI ; Ten : St );
Đọc dữ liệu từ một tệp đã có:
Muốn đọc dữ liệu của một tệp đã có đầu tiên ta phải mở tệp
đó ra:
88
* Mở tệp để đọc:
TP dùng cặp thủ tục sau:
ASSIGN (Biến_Tệp, Tên_tệp);
RESET (Biến_Tệp);
* Đọc dữ liệu từ tệp:
Việc đọc các phần tử từ tệp ra sau khi mở tệp được
thực hiện bằng thủ tục READ:
Cách viết:
READ (Biến_Tệp , Các_biến);
Lưu ý: là trong thủ tục READ ta chỉ có thể đọc giá trị của tệp
để gán giá trị cho các biến và chỉ biến mà thôi (không được
là hằng, hay biểu thức,... như trong thủ tục ghi tệp).
Việc đọc một phần tử của tệp còn cần có một điều
kiện: phải thử xem tệp có còn phần tử không (tức là đã ở
cuối tệp chưa?). Hàm chuẩn EOF sẽ báo cho biết. Do vậy
trước khi đọc tệp cần kiểm tra xem tệp đó đã ở cuối tệp chưa
bằng câu lệnh:
IF not EOF(Biến_Tệp) then READ(Biến_Tệp, X);
Nếu muốn đọc tất cả các phần tử của tệp
WHILE NOT EOF(Biến_Tệp) DO
Begin
READ (Biến_Tệp, X);
....
End;
Việc cuối cùng là đóng tệp lại: CLOSE(Biến_Tệp);
* Tệp với các phần tử của tệp là dữ liệu có cấu trúc:
Vì phần tử của tệp là cả một bản ghi nên để ghi vào
tệp ta phải dùng:
Write (FNS, Nguoi);
chứ không thể ghi riêng rẽ từng thành phần, từng trường
như:
Write (FNS, Nguoi.Ten);
Tệp truy nhập trực tiếp:
Cách viết:
SEEK (Biến_Tệp, No)
trong đó No là số thứ tự của phần tử trong tệp
Cần chú ý là phần tử đầu tiên của tệp được đánh số là 0;
Theo thủ tục này, máy sẽ đặt vị trí con trỏ tệp đến phần tử
thứ No. Sau đó ta chỉ việc dùng thủ tục Read để đọc phần tử
89
đó ra, hoặc Write để ghi giá trị mới vào. Như vậy ta có thể
cập nhật một tệp một cách dễ dàng.
Các thủ tục và hàm xử lý tệp của TP:
* FileSize(Biến_Tệp) : Hàm cho số phần tử của tệp. Hàm
nhận giá trị 0 khi tệp rỗng.
* FilePos(Biến_Tệp) : Hàm cho vị trí tức thời của con trỏ
tệp. Phần tử đầu tiên là số 0.
* Erase(Biến_Tệp) : Thủ tục xoá file trên đĩa.
* Rename(Biến_Tệp, Str) : Thủ tục thay đổi tên tệp với tên
có kiểu String chứa trong biến Str. Lưu ý là tên mới không
được trùng với một tên tệp nào có sẵn trong đĩa.
Tệp văn bản (TEXT File)
Trong Pascal có một kiểu tệp đ• được định nghĩa
trước, đó là tệp văn bản được định nghĩa với từ chuẩn TEXT
Ví dụ:
VAR
F1, F2 : TEXT;
Các phần tử của tệp kiểu TEXT là các ký tự, song
TEXT file khác với FILE OF Char ở chỗ tệp văn bản được
tổ chức thành từng dòng với độ dài mỗi dòng khác nhau nhờ
có thêm các dấu hết dòng (EndOfLine) hay dấu chấm xuống
dòng. Đó là cặp ký tự điều khiển: CR(Carriage Return: Nhảy
về đầu dòng, mã ASCII = 13) và LF (Line Feed : Nhảy
thẳng xuống dòng tiếp theo, mã ASCII = 10).
Ví dụ:
Đoạn văn bản sau:
Hom nay la Chu nhat
12345
Ket thuc
được hiểu là máy sẽ chứa trong tệp văn bản thành một dãy
như sau:
Hom nay la Chu nhat CR LF 12345 CR LF Ket thuc EOF
Việc đọc và ghi tệp văn bản cũng như các tệp tuần tự
ở trên chỉ khác ở chỗ. Tệp văn bản không chấp nhận nhận xử
lý trên các biến có cấu trúc (mảng, bản ghi, file).
Tệp không định kiểu (UnTyped File)
Tệp không định kiểu là một kiểu file đặc biệt, được
định nghĩa ra trong TP và nó là một công cụ mạnh để bạn có
thể khai thác. Đó là tệp khi định nghĩa hay khai báo ra, ta
90
không nói rõ nó chứa gì, không nói rõ bản chất của các dữ
liệu được ghi trong đó.
Cách viết:
VAR
F1 , F2 : FILE;
F1 và F2 ở đây là hai tệp không định kiểu.
Không như các tệp văn bản hay tệp có định kiểu, thủ
tục Reset và Rewrite đối với tệp không định kiểu F1 và F2
còn có thêm một tham số nữa, đó là kích thước của Record.
Ví dụ:
RESET (F1, 1): có nghĩa là chuẩn bị FILE để đọc và
đọ dài của Record = 1byte.
Nếu chỉ ghi RESET(F1): thì máy sẽ coi độ dài Record
là 128 bytes.
Việc ghi và đọc đối với tệp không định kiểu còn dùng
đến hai thủ tục là:
BlockRead và BlockWrite.
Ví dụ:
BlockRead(F1 , Str, SizeOf(Str), RecordRead);
Hàm SizeOf(Str) để lấy kích thước của biến Str.
RecordRead để nhận biết có bao nhiêu Record đã
được đọc từ đĩa ra Str. Nếu tham số này có giá trị = 0 báo
rằng hết dữ liệu để đọc.
Thủ tục BlockWrite(F2, Str, RecordWrite);
RecordWrite là số Record thực sự cần ghi vào đĩa.
91
CHƢƠNG 7: BIẾN CON TRỎ 7.1. Khai báo
Khi khai báo một biến, dù là biến đơn hay biến thuộc kiểu
dữ liệu có cấu trúc mặc nhiên chúng ta đã quy định độ lớn vùng
nhớ dành cho biến.
Ví dụ:
a: Real; biến a cần 6 byte
b: aray[1..100] of Integer; biến mảng b cần 200 byte.
Việc khai báo như trên thường là phỏng đoán dung lượng
cần thiết chứ không thật chính xác. Để tránh lỗi chúng ta thường
khai báo dôi ra gây nên lãng phí bộ nhớ. Việc xác định địa chỉ lưu
trữ biến và cấp phát bộ nhớ được thực hiện khi biên dịch, nghĩa là
các địa chỉ này cũng như dung lượng bộ nhớ cần cấp phát đã được
cố định trước khi thực hiện các thao tác khác. Các đại lượng này
không thay đổi trong suốt quá trình thực hiện chương trình, nói
cách khác đây là các đại lượng tĩnh. Để tiết kiệm bộ nhớ, ngay khi
chương trình đang làm việc người lập trình có thể yêu cầu cấp phát
bộ nhớ cho các biến, điều này được gọi là cấp phát bộ nhớ động.
Cấp phát bộnhớ động được thực hiện thông qua biến con trỏ.
Kiểu con trỏ là một kiểu dữ liệu đặc biệt dùng để biểu diễn
các địa chỉ. Kiểu con trỏ do người lập trình định nghĩa theo cú pháp
sau:
Type
Tên kiểu con trỏ = ^Kiểu dữ liệu;
Tên kiểu con trỏ tuân theo quy định đặt tên của Pascal, Kiểu
dữ liệu của kiểu con trỏ là các kiểu dữ liệu đã định nghĩa trước
trong pascal. ðể một kiểu con trỏ có thể đại diện cho một biến nào
đó thì kiểu dữ liệu viết sau ký tự ^ sẽ phải giống như kiểu dữ liệu
của biến đó, nói cách khác hai kiểu dữ liệu phải tương thích.
Ví dụ 7.1: Khai báo kiểu con trỏ:
Type
Chu = string[20];
CT1 = ^Byte;
CT2 = ^chu;
CT3 = ^Nguoi;
Nguoi = record
Hoten:string[20];
Namsinh: 1900..2100;
End;
92
Ví dụ trên định nghĩa ba kiểu con trỏ, riêng kiểu CT3 cách
định nghĩa có vẻ hơi ngược là định nghĩa kiểu con trỏ trước, định
nghĩa kiểu dữ liệu sau. Thật ra chúng ta cứ nên theo thói quen là
định nghĩa kiểu dữ liệu trước rồi định nghĩa kiểu con trỏ sau, cách
định nghĩa CT3 chẳng qua là muốn giới thiệu để chúng ta biết rằng
Pascal cho phép làm ngược lại, tuy nhiên cần nhớ rằng nếu định
nghĩa kiểu con trỏ trước thì ngay trong phần Type phải định nghĩa
kiểu dữ liệu (không nhất thiết phải liền ngay sau định nghĩa kiểu
con trỏ).
Biến con trỏ
Biến con trỏ cũng như biến mảng, biến kiểu bản ghi hay kiểu
tập hợp có thể khai báo thông qua kiểu con trỏ hoặc khai báo trực
tiếp. Biến con trỏ có định kiểu sẽ trỏ đến một kiểu dữ liệu cụ thể.
Để thuận tiện từ nay chúng ta dùng thuật ngữ "Con trỏ" thay
cho thuật ngữ " Biến con trỏ"
Ví dụ 7.2:
Var
So: ^Integer;
Sinhvien: Ct3;
Hoten: Ct2;
Thutu, Mahoso: ^Word;
Trong ví dụ trên chúng ta đã khai báo ba con trỏ So, Thutu,
Mahoso theo kiểu trực tiếp, hai con trỏ Sinhvien và Hoten khai báo
thông qua kiểu đã định nghĩa trong ví dụ 7.1. Con trỏ So trỏ tới
kiểu dữ liệu số nguyên, con trỏ Sinhvien trỏ tới kiểu dữ liệu bản ghi
còn con trỏ Hoten trỏ tới kiểu dữ liệu chuỗi.
Địa chỉ của các biến động và biến tĩnh sẽ được Pascal lưu trữ
vào biến con trỏ điều này có nghĩa là biến con trỏ không dùng để
lưu trữ các giá trị của biến mà là địa chỉ của biến. Dù kích thước
vùng dữ liệu mà các biến con trỏ trỏ tới khác nhau thế nào thì kích
thước của biến con trỏ cũng vẫn là 4 byte.
Các hàm và thủ tục xử lý biến con trỏ được Pascal lưu trữ
trong Unit System.
Quy ước: Các biến con trỏ gọi là tương thích nếu chúng trỏ
tới cùng một kiểu dữ liệu
93
7.2. Các phép toán
Gán giá trị ban đầu:
Giả sử ct là một biến con trỏ đã được định nghĩa, để đảm bảo
rằng ct chưa trỏ đến bất kỳ một đối tượng nào, nghĩa là ct là một
con trỏ rỗng chúng ta phải gán cho ct giá trị NIL
ct := Nil;
Gán địa chỉ của một đối tượng cho con trỏ:
Giả sử ct là một con trỏ và x là một đối tượng (biến, hàm,
thủ tục), có ba cách gán địa chỉ của đối tượng x cho con trỏ ct:
a. ct := @x;
Trong phép gán trên toán tử @ tác động trên đối tượng x sẽ
gán vào con trỏ ct địa chỉ kiểu Pointer của đối tượng đó.
b. ct := Addr(x);
Hàm Addr() cho địa chỉ của đối tượng x, địa chỉ này thuộc
kiểu Pointer
c. ct := Ptr(segment,offset) ;
Hàm Ptr trong phép gán trên đòi hỏi các tham số segment và
offset phải là giá trị kiểu Word viết trong hệ 16, ví dụ:
ct := Ptr($B800, $0000); đưa con trỏ trỏ tới ô nhớ của vùng
Video Ram
Nhận xét: Hai phép gán @ và Addr() cùng trả về địa chỉ kiểu
pointer nên chúng là tương đương.
Phép gán giữa hai con trỏ
Hai con trỏ tương thích (cùng kiểu) có thể gán giá trị cho
nhau, khi đó chúng cùng trỏ tới một địa chỉ.
Ví dụ 7.3:
Var
ct1: ^Float;
ct2: ^Byte;
ct3: Pointer;
x: string;
Ví dụ trên khai báo ba con trỏ thuộc ba kiểu khác nhau, ct1
là con trỏ thực, ct2 là con trỏ nguyên và ct3 là con trỏ không định
kiểu, x là biến chuỗi. Khi đó các phép gán:
ct3:=@x;
ct2 := ct3;
là hợp lệ vì ct2 và ct3 là tương thích, chúng cùng trỏ đến địa chỉ của
biến x.
Còn phép gán
94
ct1 := ct2;
là không hợp lệ vì hai con trỏ không tương thích.
Phép so sánh hai con trỏ
Chỉ tồn tại phép so sánh = (bằng nhau) và <> (khác nhau)
giữa hai con trỏ nếu chúng tương thích. Kết quả so sánh là một giá
trị Boolean nghĩa là True hoặc False.
Hai con trỏ tương thích gọi là bằng nhau nếu chúng cùng trỏ
tới một đối tượng, ngược lại gọi là khác nhau.
Ví dụ 7.4:
Program contro;
Uses crt;
Var
x,y:real; z:string;
ct1: ^integer; ct2: ^byte; ct3:pointer; ct4,ct5: ^real;
Begin
clrscr;
z:='Ha noi'; x:=5; y:=-123.45;
ct1:=@x; ct2:=@z; ct3:=@z; ct4:=@z; ct5:=@y;
Writeln(ct1=ct2); { không tương thích, máy sẽ báo lỗi}
Writeln(ct1=ct3); {false}
Writeln(ct2=ct3); {true}
writeln(ct4=ct5); {false}
readln;
end.
Ví dụ 7.4 khai báo năm con trỏ, ct1 và ct2 trỏ tới các kiểu
nguyên khác nhau, ct3 là con trỏ không kiểu tức là tương thích với
mọi con trỏ khác, hai con trỏ ct4 và ct5 là cùng kiểu.
Các phép so sánh trong thân chương trình cho thấy một số
điều cần chú ý :
- Phép so sánh ct1=ct2 là không hợp lệ vì hai con trỏ
không tương thích
- Phép so sánh ct1 = ct3 cho kết quả False vì hai con trỏ
tương thích nhưng trỏ tới các địa chỉ khác nhau
- Phép so sánh ct2 = ct3 cho kết quả True vì hai con trỏ là
tương thích và cùng trỏ tới một địa chỉ.
- Phép so sánh ct4 = ct5 cho kết quả False vì hai con trỏ
cùng kiểu nhưng trỏ tới các địa chỉ khác nhau.