Quathời gian sử dụng, Pascal ngày càng được đông đảo người dùng đánh giá cao, và trởthành một trong các ngôn ngữ lập trình phổ biến nhất hiện nay.. Đặc biệt khi phảithay đổi hay sửa chữa
Trang 1PHẦN I NGÔN NGỮ LẬP TRÌNH PASCAL (PHẦN CĂN BẢN)
Chương 1
CÁC YẾU TỐ CƠ SỞ CỦA NGÔN NGỮ PASCAL
1.1 Giới thiệu ngôn ngữ PASCAL
PASCAL là ngôn ngữ lập trình bậc cao được giáo sư Niklaus Wirth ở trường đạihọc Kỹ thuật Zurich (Thụy sĩ) thiết kế và công bố vào năm 1971 Ông đặt tên cho ngônngữ của mình là Pascal để tưởng nhớ nhà toán học nổi tiếng người Pháp ở thế kỷ 17:Blaise Pascal, người đã sáng chế ra chiếc máy tính cơ khí đầu tiên của nhân loại Quathời gian sử dụng, Pascal ngày càng được đông đảo người dùng đánh giá cao, và trởthành một trong các ngôn ngữ lập trình phổ biến nhất hiện nay
Thành công của ngôn ngữ Pascal là ở chỗ: nó là ngôn ngữ đầu tiên đưa ra và thể hiệnđược khái niệm lập trình có cấu trúc Ý tưởng về một chương trình có cấu trúc xuất phát
từ suy nghĩ cho rằng có thể chia một bài toán lớn, phức tạp thành nhiều bài toán nhỏ, đơngiản hơn Nếu mỗi bài toán nhỏ được giải quyết bằng một chương trình con, thì khi liênkết các chương trình con này lại sẽ tạo nên một chương trình lớn giải quyết được bài toánban đầu
Bằng cách chia một chương trình thành các chương trình con như vậy, người lậptrình có thể lập trình để giải quyết riêng lẻ từng phần một, từng khối một, hoặc có thể tổchức để nhiều người cùng tham gia, mỗi người phụ trách một vài khối Đặc biệt khi phảithay đổi hay sửa chữa trong một khối thì điều đó sẽ ít ảnh hưởng đến các khối khác.Tính cấu trúc của ngôn ngữ Pascal còn thể hiện trong việc tổ chức các câu lệnh và tổchức dữ liệu Từ các lệnh đã có, người lập trình có thể nhóm chúng lại với nhau và đặtgiữa hai từ khóa Begin và End tạo thành một câu lệnh mới phức tạp hơn gọi là câu lệnhghép Đến lượt mình, hai hay nhiều lệnh ghép lại có thể được nhóm lại để tạo thành mộtcâu lệnh ghép phức tạp hơn nữa,.v.v Tương tự như thế, ngôn ngữ Pascal cũng cho phépxây dựng các kiểu dữ liệu phức tạp hơn từ các kiểu dữ liệu đã có
Pascal là một ngôn ngữ không chỉ chặt chẽ về mặt cú pháp mà còn chặt chẽ về mặt
dữ liệu Mỗi biến, mỗi hằng tham gia trong chương trình luôn có một kiểu dữ liệu xácđịnh và chỉ nhận những giá trị có cùng kiểu dữ liệu với nó Điều này buộc người lập trìnhphải nắm chắc cú pháp và luôn chú ý đến tính tương thích của các biểu thức về mặt kiểu
dữ liệu Chính vì thế, lập trình bằng ngôn ngữ Pascal là một cơ hội tốt không chỉ rènluyện tư duy mà còn rèn luyện tính cẩn thận và chính xác
1.2 Các thành phần cơ bản của ngôn ngữ PASCAL
Con người thể hiện tư duy của mình bằng ngôn ngữ, khởi đầu là ngôn ngữ nói vàsau đó là ngôn ngữ viết Mỗi dân tộc dùng một số ký tự khác nhau cho ngôn ngữ viết củamình, điều này cũng không ngoại lệ với các ngôn ngữ lập trình Ngôn ngữ Pascal cũng cómột bộ ký tự và những quy tắc riêng để hình thành nên các từ khóa, tên chuẩn và các câulệnh của mình
1.2.1 Bộ ký tự cơ bản
Bộ ký tự của Pascal chủ yếu giống như bộ ký tự ASCII, chúng gồm các nhóm sau:
- Nhóm 26 chữ cái in: A, B, C, Z
Trang 2- Dấu gạch nối _ (cần phân biệt với dấu trừ -)
Dấu gạch nối thường dùng để phân cách giữa các từ cho dễ đọc Pascal không cho phép viết dấu trừ (‘-‘) giữa các từ
Ví dụ: giai_phương_trinh_bac_hai là cách viết đúng
Giai-phương-trinh-bac-hai là cách viết sai
1.2.2 Từ khóa (key word)
Từ các ký tự, ngôn ngữ Pascal đã xây dựng một số từ khóa và tên chuẩn để sử dụngkhi lập trình
- Từ khóa chung:
Program, Begin, End, Procedure, Function
- Từ khóa khai báo:
Const, Var, Label, Type, Array, Record, Set, File Of, String
- Từ khóa dùng trong các cấu trúc lập trình:
If Then Else , Case Of , For To Do , For Downto Do , While Do ,Repeat Until
- Từ khóa điều khiển:
With, Goto, Break, Halt, Exit
- Từ khóa tên các toán tử:
Not, And, Or, Xor, In, Div, Mod
Chú ý:
Các từ khóa và tên chuẩn có thể viết dưới dạng chữ hoa hay chữ thường hay xen kẽ chữ hoa với chữ thường đều được
1.2.3 Tên (identifier)
Tên là một dãy các ký tự dùng để đặt cho hằng, biến, chương trình, nhãn, hoặc kiểu
dữ liệu mới Tên này do người lập trình tự đặt và phải đảm bảo đúng quy tắc:
- Tên chỉ gồm chữ số, chữ cái và dấu gạch nối (gạch dưới ‘ _ ’)
- Không bắt đầu bởi một chữ số
- Không trùng với từ khóa
- Chiều dài của tên tối đa là 127 ký tự
- Thông thường tên nên đặt ngắn gọn và có tính gợi nhớ
Pascal định nghĩa một số tên chuẩn như tên một số chương trình con, tên kiểu dữliệu: Char, Boolean, Integer, Real, Byte, Text, Read, Readln, Write, Writeln, Abs, Cos,Sin, Sqrt, Exp, Ord, Round, Trunc, Pres, Succ,
Sự khác nhau giữa từ khóa và tên chuẩn là: Người lập trình có thể định nghĩa lại tênchuẩn, dùng tên chuẩn vào các mục đích khác khi cần, còn từ khóa thì không được phépthay đổi và dù có cố ý cũng không thể dùng nó với những ý nghĩa khác với quy định màPascal đã thiết kế
2 Phần khai báo:
Trang 3Có tất cả 7 tham số phải khai báo, tuy nhiên tùy từng chương trình mà chúng ta dùngloại nào thì khai báo loại đó, thứ tự các khai báo là:
- USES (Crt, Graph, khai báo sử dụng các đơn vị chương trình chuẩn)
- LABLE (khai báo nhãn)
- CONST (khai báo hằng)
- TYPE (mô tả kiểu dữ liệu mới)
- VAR (khai báo biến)
- PROCEDURE (khai báo các thủ tục)
- FUNCTION (khai báo các hàm)
PROGRAM Tên chương trình;
USES Tên đơn vị chương trình chuẩn;
LABLE (khai báo nhãn);
CONST (khai báo hằng);
TYPE (mô tả kiểu dữ liệu mới);
VAR (khai báo biến);
PROCEDURE Tên thủ tục;
Begin Thân chương trình con;
End;
FUNCTION Tên hàm;
Begin Thân chương trình con;
End;
BEGIN Thân chương trình chính;
END
BÀI TẬP
1 Nêu ý nghĩa của dấu cách, dấu gạch dưới, dấu chấm phẩy
2 Tên dùng để làm gì? Quy định về cách đặt tên
3 Cho ví dụ về một số từ khoá điều khiển
4 Cho biết ý nghĩa của từ khóa và tên chuẩn, nêu sự khác giữa chúng
5 Viết cấu trúc tổng thể của một chương trình
Trang 4Chương 2
KIỂU DỮ LIỆU, HẰNG, BIẾN, BIỂU THỨC, CÂU LỆNH
2.1 Các kiểu dữ liệu và phép toán
Trong Pascal, ngôn ngữ lập trình cấu trúc nên có thể chia các kiểu dữ liệu thành baloại là:
2.1.1 Kiểu số nguyên
2.1.1.1 Khái niệm: Kiểu nguyên là một kiểu số hữu hạn và đếm được có miền giá trị
phụ thuộc vào số byte được cấp phát
2.1.1.2 Các kiểu số nguyên
ShortInt -128 127 1 1 bit chứa dấu, 7 bit chứa giá trị
Integer -32768 32767 2 1 bit chứa dấu, 15 bit chứa giá trị
Có cấu trúc
Chuẩn
Do người dùng định nghĩa
Mô tả sẵn
Do người dùng định nghĩa
Logic (boolean)
Ký tự (char)Nguyên (integer)Thực (real)
Liệt kê (enumerate)Đoạn con (sub range)
Xâu ký tự (string)Mảng (array)Tập hợp (set of)Bản ghi (record)Tệp (file)
Ngăn xếp (stack)Hàng đợi (queue)Danh sách (list)Cây (tree)
…
…
Trang 5Phép toán Trong toán học Trong Pascal
Các phép toán số
học với số nguyên + (cộng), - (trừ), x (nhân), div (chianguyên), mod (lấy phần dư) +, -, *, div, mod
2.1.2 Kiểu số thực
2.1.2.1 Kiểu Real và các kiểu mở rộng
Kiểu Real là kiểu số thực thông dụng nhất dùng để biểu diễn các số thực x có trị tuyệtđối |x| nằm trong khoảng từ 2.9*10-39 đến 1.7*10+38 Nếu |x| > 1.7*10+38 thì không biểudiễn x trong máy được, còn nếu | x| < 2.9*10-39 thì x được coi là bằng 0
Có hai cách biểu diễn các số thực:
- Cách 1 (Biểu diễn dưới dạng dấu phẩy tỉnh): Viết bình thường, trong đó dấu phẩythập phân được thay bằng dấu chấm thập phân, ví dụ như: 18.6 có nghĩa là 18,6
- Cách 2 (Biểu diễn dưới dạng dấu phẩy động):
1.257E+01 (có giá trị = 1.257*101 = 12.57 )
1257.0E-02 (có giá trị = 1257*10-2 = 12.57 )
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ị, đượcviết theo cách 1, phần đứng sau E gọi là phần bậc, gồm dấu cộ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 2còn gọi là số có dấu chấm thập phân di động hay số dạng khoa học (Scientific)
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.
2.1.2.3 Các hàm và thủ tục có đối số nguyên hoặc thực
- Thủ tục Inc(i,h): Thủ tục này có chức năng tương đương với câu lệnh gán i:=i+h,với i, h là các số nguyên và kết quả trả lại có kiểu nguyên
- Thủ tục Dec(i,h): Thủ tục này có chức năng tương đương với câu lệnh gán i:=i-h,với i, h là các số nguyên và kết quả trả lại có kiểu nguyên
Trong 2 thủ tục trên nếu chỉ có mỗi tham số i thì ngầm định là h bằng 1 (viết Inc(i) thay cho Inc(i,1); Dec(i) thay cho Dec(i,1))
- Hàm Abs(x): tính trị tuyệt đối của x Kiểu dữ liệu của kết qủa cùng kiểu với đối số.Nếu x nguyên thì Abs(x) cũng nguyên, nếu x là số thực thì Abs(x) cũng là số thực
- Hàm Sqr(x): tính bình phương của x Kiểu dữ liệu của kết qủa cùng kiểu với đối số
- Trong các hàm dưới đây, đối số x có thể là nguyên hay thực, nhưng giá trị trả vềluôn luôn là kiểu thực:
Trang 6Hàm Sqrt(x): tính căn bậc 2 của x (x >= 0), kết quả trả lại là một số thực
Hàm Exp(x): tính e mũ x, kết quả trả lại là một số thực
Hàm Ln(x): tính lnx, (x > 0), kết quả trả lại là một số thực
Các hàm Sin(x), Cos(x), và Arctan(x): tính sinx, cosx và arctgx
- Hàm Int(x) : cho số thực bằng phần nguyên của x
Ví dụ 2.1: Int(12.55) = 12.0
- Hàm Frac(x) : cho số thực bằng phần lẻ của x
Ví dụ 2.2: Frac(12.55) = 0.55
- Hai hàm đặc biệt dưới đây cho kết qủa là số nguyên:
- Hàm Trunc(x): cho số nguyên là phần nguyên của x
Ví dụ 2.3: Trunc(-2.98) = -2
- Hàm Round(x): cho số nguyên bằng cách làm tròn x
Ví dụ 2.4: Round(-2.98) = -3
Chú ý: Hàm Int(x) và hàm Trunc(x) cùng cho phần nguyên của x, chúng chỉ khác nhau
về kiểu dữ liệu của giá trị trả về: Int(4.5)= 4.0 còn Trunc(4.5) = 4 (viết 4 thì hiểu đó là
số nguyên, còn viết 4.0 thì hiểu đó là số thực)
- Hàm UpCase(ch): đổi ký tự ch thành chữ hoa tương ứng
Ví dụ 2.7: Upcase( ‘a’ ) = ‘A’
- Hàm Ord(ch) : cho mã của ký tự ch
Ví dụ 2.8: Ord (‘A’) = 65, Ord (‘a’) = 97
- Hàm Chr(k) : đối số k nguyên, 0<= k<= 255, cho ký tự có mã bằng k
2.1.4 Kiểu Lôgic (Boolean)
2.1.4.1 Kiểu lôgic: Là kiểu dữ liệu chỉ nhận một trong hai hai giá trị True (đúng) hoặc
False (sai) Về quan hệ thứ tự thì False < True (tên các giá trị của kiểu dữ liệu này không
phân biệt chữ hoa hay chữ thường)
2.1.4.2 Các phép toán: Các phép toán lôgic gồm có: not, and, or và xor Nếu A và B là
hai biểu thức lôgic thì not A, A and B, A or B và A xor B cũng là những biểu thức lôgic
có kết qủa được cho ở bảng dưới đây:
Trang 7Nếu trong một biểu thức lôgic có nhiều phép toán lôgic thì thứ tự thực hiện các phép toánlôgic là như sau: not tính trước, kế đến and, sau cùng là or, xor
Ví dụ 2.10: sau khi thực hiện lệnh:
A:=not (2*3=5) or (‘A’<‘B’) and not (4/2=2) xor (Sqrt(2) >1);
thì giá trị của A= False, thật vậy :
Not (2*3=5) or (‘A’<‘B’) and not (4/2=2) xor (Sqrt(2) >1)
= True or True and False xor True
= True or False xor True
= True xor True
= False
Biến chỉ nhận giá trị là True hoặc False gọi là biến kiểu lôgic Khi khai báo biến kiểulôgic ta dùng tên chuẩn Boolean
2.1.4 Các kiểu dữ liệu tự định nghĩa
2.1.4.1 Kiểu liệt kê: Là kiểu dữ liệu do người lập trình tự đặt tên Các thành phần của
kiểu dữ liệu này được lấy ra từ các kiểu dữ liệu chuẩn bằng cách liệt kê các giá trị củakiểu dữ liệu Danh sách các giá trị này được đặt trong dấu ngoặc đơn và được mô tả bằngmột tên kiểu trong phần định nghĩa (TYPE)
2.1.4.2 Kiểu đoạn con:
Là kiểu dữ liệu được ứng dụng khi một biến chỉ được nhận các giá trị trong một khoảng(xác định bởi cận trên và cận dưới)
2.1.5 Hằng, biến, biểu thức, câu lệnh gán
2.1.5.1 Khái niệm về biến và hằng
Mỗi kiểu dữ liệu có một tập các giá trị tương ứng Các giá trị của kiểu nguyên haykiểu thực là các số, như 40 hay 5.72, các giá trị của kiểu ký tự là các ký tự như ‘A’ hay
‘a’, còn kiểu lôgic thì chỉ có hai giá trị là True và False,
Quá trình xử lý trong máy tính đòi hỏi mỗi giá trị phải được lưu trữ ở một ô nhớ nào
đó trong bộ nhớ của máy, và ô nhớ này được đặt một cái tên để gọi Khi đó mọi việc tínhtoán hay xử lý liên quan đến mỗi giá trị được thực hiện gián tiếp thông qua tên của ô nhớchứa giá trị đó Ví dụ, nếu số 5.72 được lưu trong ô nhớ có tên là x, thì biểu thức 5.72*2
Trang 8có thể được viết là x*2 Việc dùng tên x dễ nhớ và tiện hơn nhiều so với việc dùng vànhớ số 5.72.
Như vậy, khi một ô nhớ được đặt tên thì tên này đồng nhất với giá trị của nó Trongmột chương trình, mỗi ô nhớ có một tên duy nhất nhưng giá trị của nó thì có thể thay đổihoặc không Nếu giá trị của ô nhớ có thể thay đổi được thì ô nhớ này là một biến, tên của
ô nhớ là tên biến, ngược lại, nếu giá trị của ô nhớ không thể thay đổi, thì ô nhớ là mộthằng, tên của ô nhớ là tên hằng
Các biến và hằng tham gia trong chương trình đều phải được khai báo Việc khai báo
có tác dụng báo trước cho máy dành sẵn các ô nhớ thích hợp trong bộ nhớ để sẵn sàngchứa dữ liệu
2.1.5.2 Khai báo biến
Khai báo biến:
Var <Danh sách biến> : <Kiểu dữ liệu> ;
18 + 1 + 2 + 2 = 23 (byte)
Chú ý: Khi sử dụng biến nào trong chương trình thì phải đặc biệt lưu ý đến phạm vi giá
trị của nó.Ví dụ: Sử dụng biến kiểu Byte để biểu diễn số học sinh của 1 lớp ; sử dụng biến kiểu Word để biểu diễn số học sinh của toàn trường; sử dụng biến kiểu LongInt để biểu diễn giá trị tổng của các số nguyên,
Const <Tên hằng> = <Giá trị của hằng>;
Trong đó: <Tên hằng> là do người lập trình đặt theo đúng quy tắc của một tên
Trang 9Trong 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, MaxInt Hằng Pi có giá trị bằng số pi, còn MaxInt có giá trị 32767, là số Integerlớn nhất Chẳng hạn, có thể dùng các lệnh sau:
Writeln(‘Dien tich hinh tron ban kinh 5 la: ‘ , Pi*5*5:8:3);
Writeln(‘So Integer lon nhat = ‘ , MaxInt);
2.1.5.4 Biểu thức
Biểu thức 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 nhaubở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.Khi các phép toán trong biểu thức được thực hiện thì ta nhận được một giá trị gọi là kếtqủa của biểu thức Kiểu dữ liệu của kết qủa gọi là kiểu dữ liệu của biểu thức
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 chotrong bảng dưới đây
1 biểu thức trong ngoặc đơn ( )
3 Not, - (phép lấy dấu âm)
4 * , /, Div, Mod, And
5 +, - (trừ), Or, Xor
6 =, <>, <, <=, >, >=, InViệc tính toán một biểu thức dựa theo hai quy tắc:
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 tiênlớn thì được tính sau
Quy tắc 2: Đối với các phép toán đứng liền nhau và có cùng cấp ưu tiên, thì phéptoán nào đứng trước được tính trước
Ví dụ 2.15:
+ Tính biểu thức số học :
(4+5)*2 div 7 + sin(pi/6) = 9 * 2 div 7 + 0.5 = 18 div 7 + 0.5 = 2 + 0.5
+ Tính biểu thức lôgic :
( 2 > 4 div 2) or Not ( 49.25 + 2 < 50) = (2 > 2) or Not ( 51.25 < 50)
= False or Not False = False or True = True
2.1.5.5 Câu lệnh
Các câu lệnh được viết ở phần thân của chương trình, câu lệnh bao gồm các câu lệnh đơnhoặc câu lệnh ghép Câu lệnh ghép là tập hợp các câu lệnh đơn đặt giữa hai từ khóa
‘Begin’ và ‘End;’ Câu lệnh nhằm thực hiện một công việc nào đó mà người lập trình đặt
ra cho máy xử lý Việc bố trí mỗi câu lệnh trên một dòng hay nhiều câu lệnh trên mộtdòng là tùy cách trang trí của người lập trình miễn là các câu lệnh phải đặt cách nhau bởidấu phân cách “;” Việc thực hiện các câu lệnh đơn trong câu lệnh ghép hoặc thực hiệncác câu lệnh ghép là theo tuần tự, lệnh nào viết trước thì thực hiện trước
Như vậy ta đã biết là cuối mỗi câu lệnh bao giờ cũng có dấu ‘;’, riêng câu lệnh đứng ngay trước từ khóa ‘End’ có thể không cần có dấu ‘;’.
2.1.5.6 Câu lệnh gán
Lệnh gán là một trong những lệnh hay dùng nhất trong ngôn ngữ lập trình PASCAL
Trang 104) x:=x+1; {Tăng giá trị của biến x lên 1 đơn vị ≈ thủ tục Inc(x)}
5) y:=y-1; {Giảm giá trị của biến y xuống 1 đơn vị ≈ thủ tục Dec(y)}
6) x:=x+y+z;
7) y:=y+z-x;
8) z:=x+y-z;
Giải thích ý nghĩa khi thực hiện các câu lệnh:
Câu lệnh 1, 2, 3: Thực hiện gán giá trị 1, 2, 3 cho các biến tương ứng là x, y, z (giá
trị của x là 1, giá trị của y là 2, giá trị của z là 3).
Câu lệnh 4: Thực hiện tính giá trị biểu thức bên phải dấu gán được giá trị 2, lấy giá trị
đó gán cho biến x (giá trị của x là 2)
Câu lệnh 5: Thực hiện tính giá trị biểu thức bên phải dấu gán được giá trị 1, lấy giá trị
đó gán cho biến y (giá trị của y là 1)
Câu lệnh 6: Thực hiện tính giá trị biểu thức bên phải dấu gán được giá trị 6, lấy giá trị
đó gán cho biến x (giá trị của x là 6)
Câu lệnh 7: Thực hiện tính giá trị biểu thức bên phải dấu gán được giá trị -2, lấy giá
trị đó gán cho biến y (giá trị của y là -2)
Câu lệnh 8: Thực hiện tính giá trị biểu thức bên phải dấu gán được giá trị 1, lấy giá trị
đó gán cho biến z (giá trị của z là 1)
Trả lời: Sau khi thực hiện các câu lệnh gán trên thì giá trị của x là 6,giá trị của y là -2,giá trị của z là 1
Chú ý:
- Khi gán giá trị phải đảm bảo tính tương thích giữa kiểu dữ liệu và giá trị gán, ví
dụ khai báo biến x kiểu Integer thì không thể gán nó cho giá trị 6.5.
- Trong câu lệnh gán có một ngoại lệ đó là biến kiểu thực có thể nhận giá trị
nguyên.
BÀI TẬP
1 Tên các kiểu dữ liệu đã giới thiệu trong chương này có thể thay đổi với ý nghĩakhác đi hay không?
2 Tại sao bảng mã ASCII lại chỉ có 256 ký tự
3 Sự giống nhau và khác nhau giữa hai kiểu dữ liệu Integer và Word
4 Một lớp học sinh có không quá 50 học sinh, nên dùng kiểu dữ liệu nào để đánh sốthứ tự
5 Để gán các giá trị 6, 2.5, ‘A’ lần lượt cho các biến x, y, z thì các biến x, y, z phảithuộc kiểu dữ liệu nào? Viết các câu lệnh gan
6 Có thể gán các ký tự ‘ă’, ‘â’, ‘ô’, ‘ê’, ‘ư’ cho một biến kiểu Char được hay không?
7 Có những biểu thức loại gì? Biểu thức có phải là một câu lệnh hay không?
8 Có thể gán giá trị mới cho một hằng đã khai báo hay không?
Trang 11Chương 3
THỦ TỤC NHẬP, XUẤT DỮ LIỆU
Nhập dữ liệu có nghĩa là gán cho các hằng, biến những giá trị phù hợp nào đó Xuất
dữ liệu nghĩa là viết ra màn hình hoặc máy in những số liệu đang lưu trữ trong các biến.Khi xuất dữ liệu ra màn hình cần phải biết màn hình máy vi tính hiện nay ở chế độ ngầmđịnh được chia thành 25 dòng và 80 cột Trong chế độ đồ họa màn hình chia thành một
ma trận điểm, với màn hình VGA số điểm theo chiều ngang thường là 640 và theo chiềuđứng là 480 Với những màn hình độ phân giải cao tỷ lệ này có thể là 800/600 hoặc1024/768
3.1 Nhập dữ liệu
Các đại lượng thường phải nhập dữ liệu là hằng, biến Có hai cách nhập dữ liệu lànhập trực tiếp bằng lệnh gán ( :=) và nhập bằng cách gõ số liệu từ bàn phím Có hai thủtục chuẩn của Turbo Pascal để nhập dữ liệu vào từ bàn phím : Read( ) và Readln( )
Ví dụ 3.1: Để nhập dữ liệu cho ba biến a, b, c ta dùng thủ tục Read(a,b,c) Khi thựchiện thủ tục này ta tiến hành như sau : [Gõ giá trị của a] [gõ dấu cách] [gõ giá trị của b][gõ dấu cách] [gõ giá trị của c] [ấn phím Enter]
Chú ý :
- Các biến sử dụng trong thủ tục Read( ) có thể thuộc các kiểu dữ liệu khác nhau do đó khi gõ dữ liệu từ bàn phím cần gõ đúng kiểu dữ liệu.
- Thủ tục Read( ) không thể nhập dữ liệu cho Hằng hoặc Biểu thức.
Thủ tục Readln( ) cũng dùng để nhập dữ liệu như thủ tục Read( ), sự khác nhaugiữa hai thủ tục này là: Với thủ tục Read( ) (của các Version nhỏ hơn 7.0) sau khi ấnphím Enter để kết thúc nhập dữ liệu thì con trỏ màn hình không chuyển xuống dòngdưới, còn với thủ tục Readln( ) con trỏ màn hình sẽ chuyển xuống dòng tiếp theo RiêngVersion 7.0 thì hai thủ tục Read( ) và Readln( ) là như nhau
Trường hợp đặc biệt của thủ tục Readln( ) là thủ tục Readln (không có tham số).Chức năng của thủ tục này là dừng màn hình chờ ấn phím Enter (hay sử dụng trongtrường hợp dừng màn hình để xem kết quả)
3.1.2 Thủ tục Readkey và Keypessed
Trong quá trình nhập dữ liệu cũng như xây dựng chương trình, người ta hay dùnghai thủ tục đặc biệt của Turbo Pascal là Readkey (đọc một ký tự từ bàn phím) vàKeypessed (bấm một phím nào đó trên bàn phím)
Cú pháp của thủ tục Readkey như sau: <Tên biến> := Readkey ;
Khi gặp thủ tục này, máy sẽ chờ ta gõ một ký tự từ bàn phím Ký tự gõ vào sẽ đượcgán cho biến có tên ở bên trái dấu gán ‘:=’ Biến đó thuộc kiểu dữ liệu Char
Trong các chương trình, thủ tục Readkey thường được dùng để trả lời câu hỏi có
‘Y’ hoặc không ‘N’ Căn cứ phím gõ vào máy sẽ quyết định công việc tiếp theo.
Trang 12Thủ tục KeyPressed thường được dùng làm điều kiện trong một câu lệnh Gặp thủtục này máy sẽ chờ cho đến khi một phím bất kỳ được gõ.
Hai thủ tục Readln và Keypessed đều được dùng để giữ màn hình lại cho ta quan sát, sự khác biệt giữa chúng là khi xem xong để tiếp tục công việc với Readln ta cần gõ phím Enter còn với KeyPressed ta gõ một phím bất kỳ.
tự cần phải đặt chúng trong cặp dấu nháy đơn ‘ ’
Sự khác nhau giữa ba thủ tục trên là:
Write( ): sau khi viết xong giá trị cuối cùng, con trỏ màn hình vẫn nằm nguyên tại
Các ký tự khi viết ra màn hình phải đặt trong dấu ngoặc đơn, nếu không có các lệnh
gì khác liên quan đến vị trí con trỏ màn hình thì các ký tự được viết bắt đầu từ vị trí hiệntại của con trỏ màn hình và chiếm một khoảng rộng đúng bằng số ký tự được viết ra mànhình
Nếu trước khi viết, trong chương trình có lệnh Clrscr (xóa sạch màn hình) thì các
ký tự sẽ được viết ra bắt đầu tại vị trí có tọa độ (1,1) trên màn hình, còn nếu trước đó làlệnh Writeln( ) hoặc Writeln thì các ký tự sẽ được viết bắt đầu ở đầu dòng mới
Sử dụng cách viết có quy cách có nghĩa là quy định độ dài chuỗi ký tự sẽ viết ra thì
ký tự cuối cùng của chuỗi sẽ được căn theo lề phải trong phạm vi độ rộng quy định
Trang 133.2.1.3 Viết các số ra màn hình
Cách viết các số nguyên và số thực ra màn hình là khác nhau
- Trường hợp không định kiểu: Với các số nguyên, máy sẽ viết ra đầy đủ sốchữ số kể cả dấu bắt đầu từ vị trí hiện thời của con trỏ màn hình Với các số thực, máy sẽdành 18 vị trí để viết mỗi số theo quy định sau: 2 vị trí đầu để trống, tiếp đến một số phầnnguyên, dấu chấm phân cách, 10 vị trí phần thập phân, chữ E biểu hiện phần mũ, dấu của
Trang 143.2.2 Đưa dữ liệu ra máy in
Pascal quy định máy in là LST, việc quản lý máy in đã được chuẩn hóa và cài đặttrong Unit Printer
Để đưa dữ liệu ra máy in trước hết phải gọi Unit Printer bởi lệnh Uses Printer; sau
đó sử dụng lệnh in theo cú pháp sau đây: Write(LST,tên biến/giá trị); hoặcWriteln(LST,tên biến/giá trị);
1. Các thủ tục Read( ), Readln( ), Readln khác nhau thế nào?
2. Nêu sự giống nhau, khác nhau giữa hai thủ tục Write( ), Writeln( )
Trang 153. Nêu chức năng của các thủ tục Readkey, Keypessed Hai thủ tục Keypessed vàReadln giống nhau và khác nhau thể nào?
4. Có những cách nào để viết các số nguyên, số thực ra màn hình
5. Trong các câu lệnh viết dữ liệu ra màn hình và đưa dữ liệu ra máy in có gì giốngnhau và khác nhau?
Chương 4
CÁC CÂU LỆNH CÓ CẤU TRÚC4.1 Câu lệnh rẽ nhánh
If <Điều kiện> Then <Công việc 1>
Else <Công việc 2>
Sự thực hiện câu lệnh rẽ nhánh dạng khuyết như sau: Kiểm tra <Điều kiện>, nếu
<Điều kiện> đúng thì thực hiện <Công việc>
Sự thực hiện câu lệnh rẽ nhánh dạng đủ như sau: Kiểm tra <Điều kiện>, nếu <Điềukiện> đúng thì thực hiện <Công việc 1>, nếu <Điều kiện> sai thì thực hiện <Công việc2>
4.3 Câu lệnh lặp có số lần lặp định trước
4.3.1 Cấu trúc câu lệnh:
Câu lệnh lặp có số lần lặp định trước có hai dạng với cấu trúc như sau:
Trường hợp tiến: For <Biến đếm>:=<Giá trị đầu> To <Giá trị cuối> Do <Công việc>Trường hợp lùi: For <Biến đếm>:=<Giá trị cuối> Downto <Giá trị đầu> Do <Công việc>
4.3.2 Lưu đồ hoạt động:
SaiĐúng
Công việc
Công việc 2Công việc 1
Trang 16Trường hợp tiến: Trường hợp lùi:
<Biến đếm> là biến có giá trị thuộc một đoạn số liên tục kiểu nguyên (có một số trườnghợp đặc biệt khác ta sẽ đề cập sau)
Until <Điều kiện>
While <Điều kiện> Do Begin
Công việc
Điều kiện
Sai
ĐúngBiến đếm<=Giá trị cuối
Công việcBiến đếm:=Giá trị cuối
Giảm biến đếm xuống 1 đơn vị
Biến đếm>=Giá trị đầuSai
ĐúngCông việcBiến đếm:=Giá trị đầu
Tăng biến đếm lên 1 đơn vị
Biến đếm <=Giá trị cuối
ĐúngSai
Công việcĐiều kiện