So với nhiều sản phẩm Pascal của nhiều tổ chức và hãng khác nhau xuấtbản, Turbo Pascal đã tỏ ra có nhiều u điểm nhất và hiện nay đợc xem nh là mộttrong những ngôn ngữ lập trình cấp cao p
Trang 1ngôn ngữ lập trình pascal Chơng 5 Giới thiệu chung về ngôn ngữ Pascal
* Ngữ pháp, ngữ nghĩa đơn giản và có tính logic.
* Cấu trúc chơng trình rõ ràng, dễ hiểu (thể hiện t duy lập trình cấu trúc).
* Dễ sửa chữa và cải tiến.
Trong quá trình phát triển, Pascal đã phát huy đợc u điểm của mình và tỏ rahơn hẳn nhiều ngôn ngữ cấp cao khác Pascal đã trở thành một ngôn ngữ mạnh
đợc ứng dụng trong nhiều lĩnh vực khác nhau Các tổ chức và công ty chuyên
về máy tính dựa trên Pascal chuẩn đã phát triển thêm và tạo ra các ch ơng trìnhdịch ngôn ngữ Pascal với nhiều phần thêm bớt khác nhau
Ví dụ :
- TURBO PASCAL của hãng Borland (Mỹ).
- QUICK PASCAL của hãng Microsoft
- UCSD PASCAL (University of California at San Diego).
- ANSI PASCAL (American National Standard Institut).
So với nhiều sản phẩm Pascal của nhiều tổ chức và hãng khác nhau xuấtbản, Turbo Pascal đã tỏ ra có nhiều u điểm nhất và hiện nay đợc xem nh là mộttrong những ngôn ngữ lập trình cấp cao phổ biến nhất trên thế giới đợc sử dụngtrong lĩnh vực giảng dạy và lập trình chuyên nghiệp
Chỉ trong vòng mấy năm Turbo Pascal đợc cải tiến qua nhiều phiên bản :1.0, 2.0, 3.0, 4.0, 5.0, 5.5 (1989), 6.0 (1990), 7.0 (1992)
Để dánh giá những đóng góp quan trọng trong lĩnh vực Tin học, đặc biệt là
sự ra đời của Pascal, Hội Tin học Mỹ (ACM) đã trao giải thởng quốc tế về Tinhọc mang tên Turning cho N Wirth
Trang 25.1.2 Các tập tin chính của Turbo Pascal : Các tập tin của phần mềm
Turbo Pascal đợc chứa trên nhiều đĩa mềm (đĩa cài đặt) Tuy nhiên để chạy đợc
Turbo Pascal thông thờng chỉ cần sử dụng các tập tin chủ yếu sau :
TURBO.EXE : T rình soạn thảo và biên dịch.
TURBO.TPL : Tập tin th viện, lu các đơn vị chuẩn để chạy với TURBO.EXE
(TPL : Turbo Pascal Library).
Với hai tập tin trên chúng ta có thể bắt đầu viết đợc chơng trình bằng ngônngữ Turbo Pascal Sau đó, muốn sử dụng đồ hoạ thì thêm các tập tin sau :
GRAPH.TPU : Tập tin th viện chơng trình đồ hoạ
*.CHR : Các tập tin các phông chữ trong chế độ đồ hoạ
*.BGI : Các trình điều khiển card màn hình trong chế độ đồ hoạ
Nếu muốn xem hớng dẫn sử dụng Turbo Pascal thì cần có thêm tập tin
TURBO.HLP.
5.2 Các khái niệm cơ bản của Turbo Pascal.
5.2.1 Bộ ký tự cơ bản : Turbo Pascal đợc xây dựng từ bộ ký tự cơ bản sau :
- Các chữ cái : 26 chữ hoa (A, B, C, , Z) và 26 chữ thờng (a, b, c, , z)
- Các chữ số thập phân : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- Các dấu toán học thông dụng : + - * / = < > ( )
- Dấu gạch nối _ (khác với dấu trừ).
- Các ký hiệu đặc biệt : , ; ! ? : ' " { } [ ] % @ & # $ ^
Lu ý : Các chữ ả rập (, , ) không thuộc bộ ký tự của Turbo Pascal
5.2.2 Từ khoá (key word) : Trong Turbo Pascal có một số từ cho sẵn, cóngữ nghĩa đã đợc xác định và tuân theo một cấu trúc ngữ pháp nhất định gọi là
từ khoá Ngời lập trình không đợc đặt một tên mới (tên biến, tên hằng, tên thủ
tục, ) trùng với một trong các từ khoá Sau đây là danh sách một số từ khoá
của Turbo Pascal :
Từ khoá chung : PROGRAM, BEGIN, END, PROCEDURE, FUNCTION
Từ khoá để khai báo : CONST, VAR, TYPE, ARRAY, STRING, RECORD,SET, FILE OF, LABEL
Từ khoá của lệnh lựa chọn : IF THEN ELSE, CASE OF
Từ khoá của lệnh lặp : FOR TO DO, FOR DOWNTO DO,WHILE DO, REPEAT UNTIL
Trang 3 Từ khoá điều khiển : WITH, GOTO, EXIT.
Từ khoá toán tử : AND, OR, NOT, IN, DIV, MOD
Chú ý : Turbo Pascal không phân biệt ký tự in thờng (lower case char) hay in
hoa (upper case char) Chẳng hạn, các cách viết sau có ý nghĩa hoàn toàn nh
nhau : BEGIN, begin, Begin, beGIN,
5.2.3 Tên (identifier) : Tên là một dãy ký tự đợc tạo thành từ các chữ cái,
chữ số và dấu nối (_) dùng để đặt tên cho các đại lợng trong chơng trình nh tênhằng, tên kiểu dữ liệu, tên biến, tên mảng, tên hàm, tên chơng trình,
Kí tự đầu tiên của tên không đợc là chữ số
Chiều dài của tên tối đa là 127 ký tự
5.2.4 Tên chuẩn : Trong Turbo Pascal có một số tên đã đợc đặt sẵn rồi, gọi
là tên chuẩn Sau đây là một số tên chuẩn :
Tên hằng chuẩn : FALSE, TRUE, MAXINT,
Tên kiểu chuẩn : BOOLEAN, CHAR, INTEGER, WORD, REAL, BYTE,
Tên hàm chuẩn : ABS, ARCTAN, CHR, COS, SIN, EXP, LN, SQR, SQRT,
Tên thủ tục chuẩn : READ, READLN, WRITE, WRITELN,
Trang 4Mặc dù ngời lập trình có thể đặt một tên mới trùng với một trong các tênchuẩn, tuy nhiên để khỏi nhầm lẫn, chúng ta nên tránh điều này.
5.3 Cấu trúc tổng quát của một chơng trình Turbo Pascal.
Một chơng trình Turbo Pascal đầy đủ gồm ba phần sau :
USES ; {khai báo sử dụng các Unit}
TYPE ; {khai báo 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 là thủ tục}
FUNCTION ; {khai báo các chơng trình con là hàm}
(* Phần thân chơng trình chứa các lệnh để máy tính thực hiện *)
Trang 5 Trong cấu trúc tổng quát của chơng trình Turbo Pascal :
- Phần 1 : Chiếm một dòng và có thể có hay không.
- Phần 2 : Tuỳ theo chơng trình cụ thể mà các khai báo có thể có hay không và
có thể lặp lại một số lần.
- Phần 3 : Bắt buộc phải có đối với mọi chơng trình.
Lời giải thích : Turbo Pascal cho phép ngời lập trình có thể đa vào văn bản
chơng trình các lời bình luận, giải thích, ghi chú để làm cho chơng trình dễ
đọc, dễ hiểu hơn mà không ảnh hởng đến sự thực hiện của chơng trình Cáclời giải thích đợc đặt giữa hai dấu { } hoặc giữa hai cụm dấu (* *) và có thểviết trên một dòng hay nhiều dòng
Dấu chấm phẩy ( ; ) : Dấu chấm phẩy dùng để ngăn cách các câu lệnh của
Turbo Pascal (không phải là dấu kết thúc lệnh) Nếu dấu chấm phẩy đứng
ngay trớc từ khoá END có thể bỏ Chẳng hạn, có thể viết :
Begin
Write('Turbo Pascal');
Readln
End
Câu lệnh : Một chơng trình gồm các câu lệnh, mỗi câu lệnh thực hiện một
công việc nào đó Trên một dòng có thể viết một hoặc nhiều câu lệnh Mộtlệnh, nếu dài, thì có thể viết trên hai hay nhiều dòng, chẳng hạn :
Writeln('Phơng trình có hai nghiệm là : x1 = ', x1:8:2,
' và x2 = ', x2:8:2);
5.4 Các bớc để chạy một chơng trình Turbo Pascal.
5.4.1 Ví dụ 1 : Tạo lập và cho thực hiện chơng trình in ra màn hình hai dòngthông báo :
TURBO PASCAL 7.0 XIN CHAO CAC BAN YEU THICH TIN HOC
-Các bớc thực hiện :
B
ớc 1 : Khởi động Turbo Pascal (cho thực hiện tập tin chơng trình TURBO.EXE) bằng lệnh TURBO Khi đó màn hình làm việc của TurboPascal xuất hiện Dòng trên cùng màn hình là bảng chọn chính :
Ghi chú : ở đây trình bày đối với Turbo Pascal 6.0 Ngời đọc có thể tự suy ra đối với
Turbo Pascal 5.5 hay 7.0 vì về cơ bản chúng giống với phiên bản 6.0
B
ớc 2 : Đặt tên cho tập tin chơng trình sẽ soạn
Gõ Alt-F để chọn mục File trong bảng chọn chính, sẽ xuất hiện bảng chọn dọc :
Trong bảng này chọn New Tiếp đến gõ tên tập tin (không cần
gõ phần mở rộng) vào trong khung vừa hiện ra, ví dụ :
Trang 6Tập tin VIDU1.PAS sẽ đợc lu trong thực mục hiện hành Nếumuốn tập tin VIDU1.PAS đợc lu trên đĩa A thì khi nhập tên tậptin ta gõ thêm tên ổ đĩa ở đằng trớc, ví dụ :
Writeln(' - TURBO PASCAL 7.0 -’);
Writeln(' XIN CHAO CAC BAN YEU THICH TIN HOC’)
End.
Ghi chú : Muốn ghi văn bản chơng trình vào đĩa thì chọn lệnh File/ Save hoặc gõ F2.
Nếu muốn ghi tập tin với tên khác hay ghi vào th mục khác với th mục lúc đầu thì chọn
lệnh File/ Save as, sau đó nhập vào tên tập tin mới cùng đờng dẫn và gõ Enter.
B
ớc 4 : Biên dịch và thực hiện chơng trình
Gõ Ctrl-F9 Khi dịch máy sẽ kiểm tra ngữ pháp của từng lệnh, gặp lệnh saihoặc nhập sai máy dừng lại, trên mà hình có thông báo nguyên nhân sai của lỗi,Ngời lập trình phải tự mình sửa lỗi, rồi gõ Ctrl-F9 để chạy tiếp Lặp lại quátrình này cho đến khi sửa hết lỗi
Ghi chú :
Nếu sau khi chạy, máy không báo lỗi nhng lại cho kết quả sai thì ta phải tự tìm lỗivì đây là lỗi logic, lỗi về thuật toán máy không phát hiện đợc Chẳng hạn, khi giảiphơng trình bậc hai ta gán nhầm giá trị cho biệt số : delta := b*b - 2*a*c
Sau khi biên dịch và thực hiện chơng trình xong mà không thấy kết quả chơng
trình trên màn hình thì gõ Alt-F5 để hiện kết quả, xem xong gõ phím bất kỳ để
trở lại màn hình ban đầu
Nếu chơng trình chạy đúng thì gõ F2 để lu nó lên đĩa lần cuối Bây giờ có thể lặp
lại từ bớc 2 để soạn một chơng trình mới
Khi chơng trình đã chạy thông suốt, muốn dịch chơng trình ra tập tin trên đĩa cóphần mở rộng EXE để sau này có thể chạy độc lập không phải vào môi trờng củaTurbo Pascal, thì thực hiện bớc 5 và bớc 6
B
ớc 5 : Gõ Alt-C (chọn mục Compile), trên màn hình xuất hiện bảng chọn dọcCompile, trong bảng chọn này, chọn Destination là Disk để kết quả dịch chơngtrình đợc ghi ra đĩa, rồi gõ Alt-F9 để dịch chơng trình Khi xuất hiện thông báo
“Compile Successful : Press any key” thì dịch xong Nếu có lỗi máy cũng dừnglại và thông báo nguyên nhân lỗi trên màn hình
B
ớc 6 : Thoát tạm thời khỏi môi trờng Turbo Pascal để chạy chơng trình đã
dịch thành công : gõ Alt-F để vào bảng chọn dọc File, trong bảng chọn này,chọn Dos Shell Sau đó cho chạy tập tin chơng trình có đuôi EXE đã dịch Chạyxong chơng trình, trở lại Turbo Pascal bằng lệnh EXIT ()
B
ớc 7 : Thoát khỏi hẵn Turbo Pascal : gõ Alt-X.
Mở xem hoặc hiệu chỉnh một chơng trình cũ : Trờng hợp muốn mở xem
hoặc hiệu chỉnh một chơng trình đã có trên đĩa, hãy chọn lệnh File/ Open hoặc gõ
Trang 7phím F3, trong khung có tiêu đề là Name, gõ vào *.PAS (hoặc A:*.PAS nếutập tin nằm trên đĩa A), một danh sách các tập tin có phần mở rộng PAS sẽ hiện ratrong khung phía dới cho ta chọn Dùng các phím mũi tên để di chuyển và đặtthanh sáng vào tên muốn chọn rồi gõ Enter Nội dung tập tin này sẽ đợc đa lênmàn hình cho chúng ta xem, sửa, chạy thử,
5.4.2 Ví dụ 2 : Viết chơng trình tính chu vi, diện tích hình tròn với bán kính
5.5 Các thao tác soạn thảo cơ bản với Turbo Pascal.
Phím lệnh soạn thảo thông dụng
Xóa kí tự ngay tại vị trí con trỏ Del
Xóa một dòng tại vị trí con trỏ Ctrl-Y
Xóa từ con trỏ đến cuối dòng Ctrl-Q Y
Chuyển con trỏ sang cửa sổ mới Alt - số hiệu cửa sổ
Trang 8Câu hỏi - Bài tập [5.1] Tập ký tự cơ bản của ngôn ngữ Turbo Pascal.
[5.2] Từ khoá là gì ? Tại sao nên học thuộc các từ khoá của Turbo Pascal [5.3] Phân biệt sự khác nhau giữa từ khoá và tên chuẩn.
[5.4] Tên là gì ? Các tên sau đây tên nào không đúng trong Turbo Pascal ? Tại
sao ?
Alpha1, ket-qua, 26B, $2
[5.5] Trình bày cấu trúc đầy đủ của một chơng trình viết bằng Turbo Pascal.
Trong cấu trúc đó phần nào bắt buộc phải có, phần nào không bắt buộcphải có
Trang 9Chơng 6 Các kiểu dữ liệu đơn giản
6.1 Kiểu dữ liệu trong ngôn ngữ lập trình.
Một kiểu dữ liệu (data type) là một sự qui định về cấu trúc, miền trị của dữ
liệu và tập các phép toán tác động lên miền trị đó
Một ngôn ngữ lập trình chỉ chấp nhận và xử lý những dữ liệu tuân theo sựqui định về kiểu của ngôn ngữ lập trình đó Trong một ngôn ngữ lập trình, một
dũ liệu bao giờ cũng thuộc về một kiểu dữ liệu nhất định
Các kiểu dữ liệu trong Turbo Pascal đợc chia ra thành hai loại chính :
- Kiểu dữ liệu đơn giản (simple type).
- Kiểu dữ liệu có cấu trúc (tructure type)
Tổng quan phân loại các kiểu dữ liệu trong Turbo Pascal
Chú ý :
Riêng chuỗi ký tự (STRING) là một kiểu dữ liệu đặc biệt, vừa có tính đơngiản vừa có tính cấu trúc Mỗi chuỗi có thể xem là một giá trị, nhng cũng cóthể xem là một mảng các giá trị kiểu ký tự Vì vậy, việc sử dụng chuỗi cũng
có hai mức khác nhau : mức đơn giản và mức có cấu trúc
Các kiểu có dấu (*) gọi là kiểu vô hớng đếm đợc (hay có thứ tự).
Dới đây sẽ lần lợt trình bày 5 kiểu dữ liệu đơn giản thông dụng : kiểu logic,kiểu nguyên, kiểu thực, kiểu ký tự và chuỗi
6.2 Các kiểu dữ liệu đơn giản.
6.2.1 Kiểu logic (boolean type) :
- Chỉ có hai giá trị đợc biểu thị qua hai hằng chuẩn là TRUE (đúng),FALSE (sai)
- Một giá trị logic đợc lu trử trong 1 byte
- Quy ớc : FALSE < TRUE
- Các phép toán : NOT, AND, OR và XOR Kết quả của các phép toán này đợc thể hiện qua bảng sau :
9
Kiểu đoạn con (*) Kiểu liệt kê (*)
Kiểu logic (*) Kiểu nguyên (*) Kiểu thực Kiểu ký tự (*)
Kiểu có cấu trúc
Kiểu đơn giản
Kiểu đơn giản
Chuẩn
Do ng ời lập trình
định nghĩa
Kiểu mảng Kiểu tập hợp Kiểu bản ghi Kiểu tập tin
True
False
FalseTrue
TrueTrue
TrueFalse
TrueFalse
TrueTrue
FalseTrue
Trang 10(A và B là hai giá trị kiểu logic)
Ví dụ 1 : Kết quả của các tính toán sau sẽ cho giá trị logic :
Delta > 0, A <> 0, (Delta > 0) and (A <> 0)
Chú ý : trớc và sau các từ khoá AND, OR, NOT, XOR chỉ có dấu cách.
6.2.2 Kiểu số nguyên :
Kiểu số nguyên thuộc tập Z Có 5 kiểu số nguyên : Integer, Byte, Word,
ShortInt và LongInt Dới đây là bảng chi tiết về tên gọi, phạm vi giá trị và
số byte dùng để lu trữ trong bộ nhớ của từng kiểu :
ShortInt
ByteIntegerWordLongInt
-128 1270 255-32768 327670 65535-2147483648 2147483647
11224
Các phép tính số học trên số nguyên :
Phép cộng và trừ : Ký hiệu + và - nh thờng lệ.
Phép nhân : Ký hiệu bằng dấu * Chẳng hạn : 3*2 cho kết quả là 6.
Phép chia (lấy kết quả là số thực) : Ký hiệu bằng dấu / Chẳng hạn : 5/2
cho kết quả là 2.5
Phép chia lấy phần nguyên : Ký hiệu bằng từ khoá DIV Chẳng hạn :
5 DIV 2 cho kết quả là 2; 3 DIV 4 cho kết quả là 0
Phép lấy phần d nguyên của phép chia : Ký hiệu bằng từ khoá MOD.
Chẳng hạn : 5 MOD 2 cho kết quả là 1; 10 MOD 4 cho kết quả là 2
- Dấu + hay - ( nếu có) phải đặt ngay trớc chữ số đầu tiên.
- Không đợc sử dụng dấu chấm thập phân.
Khi thực hiện các phép tính trên số nguyên, cần hết sức thận trọng xem cácphép toán đó có cho kết quả vợt quá phạm vi biểu diễn của số nguyênkhông Chẳng hạn, với a và b là dữ liệu Integer, khi đó hai câu lệnh sau :
Trang 11a := 80;
b := (a*1245) Div 200;
cho kết quả sai, vì a*1245 = 99600 vợt quá phạm vi của Integer
Ví dụ 2 : Nhập một số tiền N đồng, đổi xem đợc bao nhiêu tờ 10 đồng, bao
nhiêu tờ 5 đồng, bao nhiêu tờ 1 đồng sao cho tổng số tờ là ít nhất Chẳng hạn :
N = 67 đ đổi đợc 6 tờ 10 đ + 1 tờ 5 đ + 2 tờ 1 đ
Cách tính nh sau :
Số tờ 10 đ = 67 div 10 = 6; Số tiền d = 67 mod 10 = 7
Số tờ 5 đ = (Số tiền d) div 5 = 7 div 5 = 1
Số tờ 1 đ = (Số tiền d) mod 5 = 7 mod 5 = 2
đây là bảng chi tiết về phạm vi giá trị và số byte dùng để lu trữ trong bộ nhớcủa từng kiểu :
RealSingleDouble
Chú ý : Turbo Pascal thờng chỉ làm việc với một kiểu Real Muốn dùng 4
kiểu thực còn lại, phải chuyển sang mode 8087 bằng cách viết chỉ thị{$N+} ở ngay đầu chơng trình
Cách viết một số thực : Có hai cách biểu diễn các số thực :
Trang 12Cách 1 : Viết nh một số thực bình thờng trong toán học, trong đó dấu phẩy
thập phân đợc thay bằng dấu chấm thập phân Chẳng hạn : 2.12; 4.0; 125.09; +235.55
-Cách 2 : Viết số dới dạng khoa học
2.345E+1 (có giá trị là 2.345*10 1 = 23.45)
123.456E-4 (có giá trị là 123.456*10 -4 = 0.0123456)
-52.4E2 (có giá trị là -52.4*10 2 = -5240.0)
Trong dạng này, số gồm có hai phần : phần đứng trớc E gọi là phần
định trị, đợc viết theo cách 1; phần đứng sau E gọi là phần bậc, gồm dấucộng hoặc trừ, tiếp đến là một số nguyên
Số viết theo cách 1 còn gọi là số có dấu chấm thập phân cố định, sốviết theo cách 2 còn gọi là số có dấu chấm thập phân di động hay số dạngkhoa học
Các phép toán trên số thực : cộng (+), trừ (-), nhân (*) và chia (/) Khi mộttrong các số hạng tham gia tính toán là kiểu thực thì kết quả của phép toáncũng là một số thực
Lu ý : Phép toán DIV và MOD không dùng cho các số thực.
Các hàm số học dùng cho số nguyên và số thực :
Tên hàm Kiểu của
đối số
Kiểu của kết quả
nếu có Trunc(4.86) = 4; Trunc(-3.2) =-3
Round(x) : cho số nguyên gần x nhất.
FRED
Pred(n) = n-1.
kết quả FALSE nếu ngợc lại
6.2.4 Kiểu ký tự (character type) :
Các ký tự dùng trong máy tính đợc liệt kê đầy đủ trong bảng mã ASCII gồm
256 ký tự khác nhau và đợc đánh số thứ tự từ 0 đến 255 Số thứ tự của mỗi
ký tự còn gọi là mã ASCII của ký tự đó Dới đây là một phần của bảng mãASCII :
Trang 13Mã ASCII Ký tự
73243484965669798134
BellSpace (ký tự trắng)
+01ABab
Lu ý : Các ký tự có mã từ 0 đến 31 gọi là các ký tự điều khiển, không in ra đợc,
đợc dùng để điều khiển các thiết bị ngoại vi Chẳng hạn, ký tự có mã là 7 (bell)
dùng để tạo một tiếng kêu bip; ký tự có mã 13 dùng để chuyển con trỏ mànhình xuống đầu dòng dới,
Mỗi ký tự trong bảng mã ASCII gọi là một hằng ký tự, chiếm độ dài 1 byte,
và khi viết trong Turbo Pascal phải đợc đặt trong cặp nháy đơn, chẳng hạn:
’A’, ’2’, ’$’,
Phép toán : Chỉ có phép toán so sánh Ký tự có mã nhỏ hơn thì nhỏ hơn Tức
là : ‘0’ < ‘1’ < < ‘A’ < ‘B’ < < ‘a’ < ‘b’ <
Các hàm liên quan đến ký tự :
Hàm UPCASE(ch) : Đổi ký tự ch thành ký tự hoa Chẳng hạn :
UpCase(’a’) = ’A’; UpCase(’B’) = ’B’
Hàm PRED(ch) : Cho ký tự đứng ngay trớc ký tự ch trong bảng mã.
- Lệnh Write(Chr(242)) : in ra ký tự
- Lệnh Write(Chr(240)) : in ra ký tự
- Lệnh Write(Chr(7)) hay Write(#7) : phát ra một tiếng bip
Turbo Pascal cho phép viết gọn Chr(k) thành #k nếu k là hằng số Chẳnghạn, các lệnh sau đều in lên màn hình ký tự A : Write(’A’); Write(#65);Write(Chr(65))
Turbo Pascal không có hàm đổi ký tự hoa ra ký tự thờng, nhng có thể làmviệc này nhờ công thức sau :
Ký tự thờng := Chr(Ord(ký tự hoa) + 32)
Trang 146.2.5 Kiểu chuỗi ký tự (string type) : Một dãy ký tự đặt trong cặp nháy
đơn gọi là một hằng chuỗi Dới đây là hai hằng chuỗi :
’Ho va ten’ : gồm 9 ký tự
’TURBO PASCAL’: gồm 12 ký tự
Số ký tự của chuỗi không quá 255 Chuỗi không có ký tự nào cả gọi làchuỗi rỗng
Dữ liệu kiểu chuỗi sẽ đợc trình bày chi tiết hơn ở các chơng sau
Câu hỏi - Bài tập [6.1] Kiểu dữ liệu là gì ?
[6.2] Trình bày các kiểu dữ liệu đơn giản của Turbo Pascal.
[6.3] Trong Turbo Pascal có thể biểu diễn đợc bao nhiêu ký tự khác nhau [6.4] Khi cần tính các số nguyên có giá trị từ 0 đến 245 ta nên dùng dữ liệu
có đúng hay không ? tại sao ? Nếu sai, hãy viết lại cho đúng
[6.6] Các dữ liệu sau thuộc kiểu dữ liệu đơn giản chuẩn nào ?
e) Int(12.5) f) 4 >=5 g) Round(12.4) h) 15/3
[6.7] Trong các phép toán dới đây phép nào có thể thực hiện đợc trong Turbo
Pacal và kết quả của phép toán thuộc kiểu dữ liệu nào ? Trong trờng hợpkhông thực hiện đợc hãy giải thích tại sao ?
[6.9] Viết chơng trình nhập vào từ bàn phím họ tên, năm sinh của một học
sinh và đa các dữ liệu đó ra màn hình
[6.10] Viết chơng trình tính diện tích mặt cầu và thể tích của hình cầu Biết bán
kính R nhập vào từ bàn phím
Trang 15Chơng 7 Hằng, biến, kiểu, biểu thức, câu lệnh, lệnh gán
7.1 Hằng.
7.1.1 Khái niệm về hằng (constant) : Hằng là đại lợng có giá trị khôngthay đổi trong suốt quá trình thực hiện chơng trình
7.1.2 Cách khai báo hằng :
trong đó Tên_hằng là tự đặt, theo đúng quy tắc của một tên, còn giá_trịcó thể
là một hằng hoặc một biểu thức mà các toán hạng đều là hằng
Lu ý : Turbo Pascal có sẵn một số hằng chuẩn cho phép sử dụng mà không phải
khai báo nh : Pi (có giá trị bằng số ), MaxInt (có giá trị bằng 32767, là số
Integer lớn nhất) Chẳng hạn, có thể dùng lệnh sau :
Writeln(‘Diện tích hình tròn bán kính r = 5 là : ’,pi*5*5:8:3);
Chúng ta dùng các tên hằng để chơng trình đợc rõ ràng và dễ sửa đổi
7.2 Biến.
7.2.1 Khái niệm về biến (variable) : Biến là đại lợng có giá trị thay đổi
đ-ợc trong chơng trình Mỗi biến phải thuộc về một kiểu dữ liệu nhất định và phải
đợc khai báo trớc Việc khai báo có tác dụng báo cho máy dành sẵn các ô nhớthích hợp trong bộ nhớ để sẵn sàng chứa dữ liệu
7.2.2 Cách khai báo biến :
trong đó Danh_sách_tên_biến là một dãy tên biến đợc đặt cách nhau bởi dấuphẩy
Trang 16 Biến ten ở ví dụ trên chứa một dãy không quá 7 ký tự Ta nói biến ten có độ
dài 7 byte Biến String khai báo tối đa là String[255]
Một biến String đợc cấp một số byte bằng độ dài của nó cộng thêm 1 Byte đầutiên dùng để ghi số ký tự đang đợc lu trữ, mỗi byte còn lại chứa một ký tự
Có thể vừa khai báo vừa khởi đầu (gán giá trị) cho các biến theo cách sau :
Const
x = 25.0;
y : Real = -5.23;
Ho_ten : String[25] = ‘Le Hung’;
Chú ý phân biệt x và y : x là hằng thực, y là biến thực Trong chơng trình có thể thay đổi giá trị của y nhng không thể thay đổi giá trị của x.
7.3 Định nghĩa kiểu dữ liệu.
Ngoài các kiểu dữ liệu đã đợc định nghĩa sẵn nh : Real, Integer, Byte, Char,Boolean, Turbo Pascal còn cho phép ta định nghĩa các kiểu dữ liệu khác từcác kiểu căn bản đã có sẵn theo quy tắc xây dựng của Turbo Pascal Kiểu dữliệu mới đợc định nghĩa bởi từ khoá TYPE nh sau :
Sau đó có thể khai báo các biến thuộc kiểu dữ liệu mới này
Ví dụ 3 :
Type songuyen = Integer;
tuoi_tho = 1 100; {miền giá trị của tuoi_tho từ 1 đến 100}
color = (Red, Blue, Green);
Sau đó ta có quyền sử dụng các kiểu trên để khai báo, chẳng hạn :
Var i, j : songuyen;
tuoi : tuoi_tho; mau : color;
TYPE
tên_kiểu = mô_tả_ kiểu;
Trang 177.4 Biểu thức.
7.4.1 Định nghĩa : Biểu thức (expression) là một công thức gồm có một hay nhiều thành phần đợc kết nối với nhau bởi các phép toán Mỗi thành phần (hay
toán hạng) có thể là hằng, là biến hay là hàm Kiểu dữ liệu của biểu thức là
kiểu của kết quả sau khi tính biểu thức
Ví dụ 4 :
3*5 div 2 + 7 mod 4 : biểu thức nguyên, có kết qủa là 10
('A' <> 'a') And (5-2=3) : biểu thức logic, có kết quả là True
5 + sin(pi/2) : biểu thức thực, có kết quả là 6.0
Chú ý : Các thành phần trong biểu thức cần phải có kiểu dữ liệu phù hợp để cho
các phép toán thực hiện đợc, nếu không máy sẽ báo lỗi Chẳng hạn, biểu thức :
2 + chr(67) là sai vì ta không thể cộng một số nguyên với một ký tự
7.4.2 Thứ tự u tiên : Một biểu thức có thể chứa nhiều phép toán Thứ tự thực hiện các phép toán đợc cho trong bảng dới đây :
NOT, - (phép lấy dấu âm)
*, /, DIV, MOD, AND
+, - (trừ), OR, XOR
=, <>, <, <=, >, >=, INKhi tính một biểu thức có hai quy tắc về thứ tự u tiên nh sau :
Quy tắc 1 : Phép toán có cấp u tiên nhỏ thì đợc tính trớc, phép toán có cấp u
(5 + 2 > 4) and not (true or (5 - 3 = 8)) : biểu thức logic, cho kết quả false
-b + sqrt(delta)/2*a : cho kết quả là b delta a
Lệnh
đơn giản
Lời gọi ch ơng trình con
Xử lý tập tin (Reset, Rewrite, Assign, )
Lệnh phức (Begin End) Lệnh lựa chọn (If , Case )
Trang 18Các câu lệnh phải đợc ngăn cách nhau bởi dấu chấm phẩy (;) và không bắtbuộc phải viết mỗi câu lệnh trên một dòng Vấn đề là chúng ta phải trình bàychơng trình sao cho đẹp, rõ ràng, thể hiện đợc thuật toán.
7.6 Lệnh gán.
Lệnh gán (assignment statement) dùng để gán giá trị của một biểu thức cho
một biến đã khai báo
Cú pháp của lệnh gán :
ý nghĩa : Đầu tiên máy tính trị của biểu_thứcvế phải, sau đó gán giá trị tính
đ-ợc cho tên_biến ở vế trái
Chú ý :
Vế trái của phép gán chỉ và chỉ có thể là một biến mà thôi Chẳng hạn, viết
x + y := 7 là sai vì vế trái là một biểu thức chứ không phải là một biến
Kiểu của biểu thức phải trùng với kiểu của biến, trừ trờng hợp một biến thực
Câu hỏi - Bài tập
[7.1] Hằng, biến là gì ? Viết các khai báo hằng và biến sau :
a) hằng số c = 100.
b) x, y là các biến thực.
c) i là biến nhận các giá trị nguyên trong khoảng từ -32768 đến 32767 d) kt, traloi là các biến ký tự.
e) hoten là biến chuỗi ký tự.
[7.2] Hãy viết các biểu thức sau ra Turbo Pascal :
a)
2
y x
y x
) 1 ( 9
) 6 5 2 )(
x x a
;
c)
2 3
cos sin
; d) x log (x2 2 ) e x
2 3
Trang 19a) Exp(x*ln(y)); b) Sqrt(a+Sqrt(sqr(b)+sqr(c))).
[7.5] Có bao nhiêu loại câu lệnh trong Turbo Pascal ? Lệnh gán là loại câu
lệnh nào và dùng để làm gì ?
[7.6] Giả thiết có các khai báo sau :
Var x, y, z : Real; i, j : Byte; k : Word; c : Char; b : Boolean;
Hãy xem các giá trị dới đây có thể gán cho các biến nào ;
a) 12.45; b) -5; c) 1e-5; d) 65532; e) ‘1996’f) ‘&’; g) sqrt(4); h) sqr(15); i) -32770; k) ‘CINTA’
[7.7] Hãy xác định giá trị của các biến sau khi thực hiện các lệnh gán sau :
x := (4+5)*2 div 7 + sin(pi/6);
L := (2 > 4 div 2) or Not (49.25 + 2 < 50);
[7.8] Cho biết kết quả và kiểu dữ liệu của các biểu thức sau :
a) 3 + 5.0 ; b) 6/3 + 2 div 3 ;
c) (10*((45 mod 3)+12))/6 ; d) (5<=3) and (not true and (12 div 3 <=1))
[7.9] Viết chơng trình nhập số thực x từ bàn phím; sau đó tính và in các giá trị
của y và z lên màn hình theo công thức :
2
3 2
trong đó bt_1, bt_2, , bt_n là các biểu thức cần phải xuất giá trị ra màn hình.
Trong trờng hợp đơn giản, mỗi biểu thức này có thể là một biến, một hằng, haymột hàm
Dạng (1) : xuất ra màn hình giá trị các biểu thức tại vị trí hiện thời của contrỏ trên màn hình theo thứ tự viết trong , và sau lệnh này con trỏ ở vị trí saugiá trị của bt_n
Dạng (2) : xuất ra màn hình giá trị các biểu thức tại vị trí hiện thời của contrỏ trên màn hình theo thứ tự viết trong câu lệnh, và sau đó đa con trỏ về đầudòng mới
Chú ý : Lệnh WRITELN {không có tham số}sẽ không xuất gì cả, mà chỉ đa con
Trang 20Kết quả trên màn hình sau khi chạy chơng trình :
Chú ý : Có hai dạng viết trong thủ tục WRITE và WRITELN là viết không quy
cách và viết có quy cách Chúng sẽ đợc xét cụ thể với từng kiểu dữ liệu qua các
Kết quả trên màn hình sau khi chạy chơng trình :
Vậy cách viết không quy cách sẽ căn lề theo bên trái
Ví dụ 3 :
Đây là kết quả của phép nhân A với B : 8*****
1.2345600000E+02 {số thực dơng đợc viết ra với trình tự sau : 1 dấu cách, 1 số
-3.1400000000E+00 phần nguyên, dấu chấm, 10 chỗ phần thập phân, chữ E, dấu
5.0000000000E+01 của phần mũ, 2 số biểu diễn giá trị phần mũ}
D {các ký tự in bình thờng, 1 ký tự chiếm 1 chỗ}
TRUE {kiểu boolean đợc viết ra chữ TRUE hay FALSE}
200
Trang 21Program Vidu_3 ; {dạng viết có quy cách}
Kết quả trên màn hình sau khi chạy chơng trình :
Vậy cách viết không quy cách sẽ căn lề theo bên phải
Chú ý : Vì dấu nháy đơn (’) để đánh dấu ký tự, do đó khi muốn xuất nó ra màn
hình, ta viết 2 lần dấu nháy đơn Chẳng hạn, lệnh Write(’Don’’t forget me !’); sẽxuất ra màn hình : Don’t forget me !
8.1.2 Xuất dữ liệu ra máy in : Để xuất dữ liệu ra máy in, ta dùng các lệnhWRITE, WRITELN với tham số LST vào trớc danh sách các tham số Vì biếnLST đợc khai báo trong Unit Printer, vì vậy cần khai báo Unit này ở đầu chơngtrình sau từ khoá USES
Kết quả sẽ in ra giấy nội dung sau : x = 12 và y = 3.6
8.1.3 Một số hàm, thủ tục trình bày màn hình trong Turbo Pascal
Trang 22 GOTOXY(X,Y) : Thủ tục di chuyển con trỏ đến vị trí dòng Y cột X Các cột
đợc đánh số từ 1 đến 80, các dòng đợc đánh số từ 1 đến 25
CLRSCR (Clear Screen) : Thủ tục xoá toàn bộ màn hình và đa con trỏ về
dòng 1 và cột 1 của màn hình
CLREOL (Clear End Of Line) : Thủ tục xoá các ký tự từ vị trí con trỏ đến
hết dòng Sau khi thực hiện xong, con trỏ đứng ngay vị trí trớc khi gọi thủtục
DELLINE : Thủ tục xoá dòng con trỏ đang đứng và dịch các dòng dới lên
một dòng
WINDOW(x1,y1,x2,y2) : Thủ tục thiết lập một cửa sổ hoạt động giới hạn từ
điểm (x1,y1) đến (x2,y2) Các toạ độ phải tính lại theo quy tắc :
Hoành độ mới = Hoành độ cũ -x1 + 1
Tung độ mới = Tung độ cũ -y1 + 1
Chẳng hạn, muốn di chuyển con trỏ đến dòng 8 cột 10 trên màn hình saukhi đã thực hiện lệnh Window(5,7,75,15); ta phải viết GotoXY(6,2).
WHEREX : Hàm cho giá trị có kiểu byte cho biết con trỏ đang ở cột nào
WHEREY : Hàm cho giá trị có kiểu byte cho biết con trỏ đang ở dòng nào.
Chú ý : Muốn sử dụng các hàm và thủ tục trên phải khai báo : USES CRT;
GotoXY(x-2,y+2); Write(’BAN HAY DEN VOI’);
GotoXY(x,y+3); Write(’TURBO PASCAL’);
BAN HAY DEN VOI TURBO PASCAL 7.0
Trang 23Hoặc gõ : 5 5.4 3 (có ít nhất một dấu cách giữa hai số)
Hoặc gõ từng số và Enter nh dới đây :
5
5.4
4
Trong cả hai trờng hợp ta đều đợc : a = 5; b = 5.4; n = 3
Ngoài cách dùng một lệnh Readln(a, b, n), ta cũng có thể nhập riêng cho từngbiến bằng ba lệnh sau :
Readln(a);
Readln(b);
Readln(n);
8.2.2 Nhập dữ liệu kiểu ký tự hay chuỗi : Ta dùng lệnh :
Ví dụ 7 : Cho khai báo :
Var Ho_ten : String[18];