Thông thường một khối tương ứng với một nhiệm vụ cụ thể, xác định, được thực hiện bằng các chương trình convới các biến địa phương và các biến tạm thời của chươngtrình con đó.. Điểm khác
Trang 1§ 1 Các bước giải bài toán trên máy tính điện tử
1.1 Các bước để giải bài toán trên máy tính điện tử
Bài toán ở đây cần được hiểu theo nghĩa rộng như mộtnhiệm vụ xử lý thông tin nào đó Để giải một bài toán trên máytính cần thực hiện các bước công việc sau đây:
1 Xác định rõ nội dung của bài toán: Đây là bước đầu
tiên của quá trình giải bài toán trên máy tính Trong bước côngviệc này, phải xác định mục đích giải bài toán, xác định các dữliệu ban đầu cần cho việc giải bài toán, các thông tin kết quảthu được sau khi giải bài toán Bước công việc này rất quantrọng vì nó ảnh hưởng đến tất cả các công việc tiếp theo
2 Mô hình hoá bài toán: Nếu bài toán có nội dung toán
học thì phải biểu diễn bài toán đã xác định ở bước 1 dướidạng một mô hình toán học Cụ thể hơn là phải biểu diễn cácquan hệ giữa thông tin kết quả với các dữ liệu ban đầu dướidạng các công thức hay phương trình toán học có như vậymới có thể dùng máy tính để giải được
3 Chọn phương pháp giải: Bước này phải trả lời được
ba câu hỏi: Bài toán có thể giải được không? Nếu giải được thìtheo phương pháp nào? Phương pháp nào là tốt nhất?
4 Viết thuật giải: Trên cơ sở phương pháp đã chọn ở
bước 3, tiến hành viết thuật toán giải bài toán Đây là bướccông việc rất khó khăn Một bài toán có thể được giải theonhiều thuật toán khác nhau Một thuật toán hợp lý sẽ giúp choviệc lập trình trở nên dễ dàng hơn Nhìn chung thuật toán giảibài toán ảnh hưởng rất nhiều đến kết quả và hiệu quả của bàitoán Thuật toán có thể được trình bây dưới dạng sơ đồ khối.Điều đó làm cho thuật toán rõ ràng, dễ hiểu và dễ đọc
5 Lập chương trình: Căn cứ vào thuật toán đã viết ở
bước 4 mà tiến hành lập chương trình giải bài toán Cần chọnngôn ngữ lập trình phù hợp với loại bài toán và khả năng củamáy tính được sử dụng
6 Thử nghiệm chương trình: Bước công việc này là phải
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 2chạy thử chương trình đã lập để phát hiện và khắc phục cáclỗi Đối với các chương trình lớn và phức tạp, việc mắc lỗitrong quá trình lập chương trình là khó có thể tránh khỏi Cầnchuẩn bị các bộ dữ liệu khác nhau với các kết quả đã biếttrước để chạy thử Chương trình có thể không gây lỗi hoặccho kết quả đúng đối với bộ dữ liệu này nhưng lại mắc lỗi hoặccho kết quả sai đối với bộ dữ liệu khác Vì vậy, càng thử đượcvới nhiều bộ dữ liệu khác nhau thì càng tốt Cần chú ý đến các
bộ dữ liệu đặc biệt Có thể chia các lỗi thành ba loại: Lỗi ngữpháp, lỗi ngữ nghĩa và lỗi thuật toán Lỗi ngữ pháp là lỗi dokhai báo sai, các lệnh dùng không đúng quy định của ngônngữ Những lỗi này thường dễ phát hiện ngay khi tiến hànhdịch chương trình ra ngôn ngữ máy để thực hiện Lỗi ngữnghĩa thường phát hiện ra khi thực hiện chương trình, ví dụnhư chia cho 0 Lỗi thuật toán thường khó phát hiện, có thể docông thức tính toán sai, chu trình lặp vô hạn Người lập trìnhthường phải tự mình phát hiện các lỗi trong thuật toán
7 Giải bài toán: Dùng chương trình đã thử nghiệm để giải
bài toán với dữ liệu thực tế
8 Phân tích đánh giá và sử dụng kết quả: Các thông tin
kết quả do máy tính cung cấp cần được phân tích, đánh giá,kiểm tra và nếu thấy hợp lý thì sử dụng
9 Viết tài liệu hướng dẫn: Nếu chương trình được viết
cho nhiều người dùng thì cần viết tài liệu hướng dẫn sử dụngchương trình để cung cấp cho người dùng cùng với các bảndịch chương trình nguồn ra ngôn ngữ máy
1.2.Sự ra đời và phát triển của PASCAL
PASCAL là ngôn ngữ lập trình cấp cao do giáo sư N KlausWith (Trưòng đại học Zurich, Thuỵ Sĩ) phát minh ra vào đầunhững năm 1970 Ông đặt tên ngôn ngữ này là PASCAL để kỷniệm nhà toán học người Pháp thế kỉ 17 là Blaise Pascal Lúcđầu PASCAL được sáng tác nhằm mục đích dạy môn lập trìnhcho sinh viên trong các trường đại học PASCAL giúp chosinh viên cũng như những người mới học lập trình có đượcthói quen viết một chương trình có cấu trúc sáng sủa, rõ ràng,
dễ đọc và dễ hiểu cho cả những người khác Trước khiPASCAL ra đời các sinh viên học lập trình bằng FORTRAN, là
Trang 3một ngôn ngữ lâu đời nhất và là ngôn ngữ không có cấu trúc.Giáo sư With thấy rằng có thể tránh được rất nhiều lỗi khi lậptrình bằng một ngôn ngữ có cấu trúc khối và có sự kiểm tra kĩlưỡng sự tương thích giữa các kiểu dữ liệu.
PASCAL là một ngôn ngữ có đị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ệukhác Ví dụ cả hai vế của lệnh gán phải có cùng một kiểu, trừtrường hợp vế trái là biến thực (Real) còn vế phải là một giá trịnguyên (Integer) Việc qui định kiểu một cách chặt chẽ nhưvậy bắt buộc người lập trình luôn luôn phải viết các biểu thứcgồm các dữ liệu tương thích về kiểu
PASCAL là một ngôn ngữ có cấu trúc, với một số đặc điểmtương tự ngôn ngữ ALGOL và ngôn ngữ C Đặc điểm của mộtngôn ngữ có cấu trúc là có thể tách các dữ liệu (biến, hằng, )
và các lệnh liên quan đến một công việc nhất định thành mộtkhối riêng, tách khỏi phần còn lại của chương trình để ngườilập trình có thể giải quyết riêng từng phần một, từng khối một
và nhiều người có thể tham gia lập trình, mỗi người phụ tráchmột khối Thông thường một khối tương ứng với một nhiệm vụ
cụ thể, xác định, được thực hiện bằng các chương trình convới các biến địa phương và các biến tạm thời của chươngtrình con đó Bằng cách này có thể viết các chương trình consao cho các sự kiện xảy ra trong đó không ảnh hưởng đến cácphần khác của chương trình nằm ngoài chương trình con này.Lúc đầu PASCAL chủ yếu được dùng để dạy học Trongquá trình phát triển, PASCAL đã thể hiện các ưu điểm củamình, trở thành một ngôn ngữ lập trình mạnh, được thươngmại hoá nhanh chóng Từ PASCAL do giáo sư With sáng tạo
ra, tổ chức tiêu chuẩn hoá quốc tế và các hãng đã phát triểnthêm, và đã tạo ra nhiều chương trình dịch PASCAL khácnhau, phổ biến hơn cả là:
- ISO PASCAL (PASCAL chuẩn, ISO:International Standard Organization)
- ANSI PASCAL (American National Standard Institute)
- TURBO PASCAL (Của hãng Borland)
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 4- IBM PASCAL (Của hãng MicroSoft).
- UCSD PASCAL (University of California at San Diego).1.3.Giới thiệu Turbo PASCAL
Turbo PASCAL là sản phẩm của hãng Borland (Mỹ) Hiệnnay Turbo PASCAL là ngôn ngữ lập trình được sử dụng rộngrãi nhất so với các loại PASCAL khác cũng như so với cácngôn ngữ khác vì các ưu điểm của nó: Tốc độ dịch nhanh,chương trình dịch ngắn gọn, các phần mở rộng của nó so vớiPASCAL chuẩn đáp ứng được các yêu cầu của người sử dụng
và Turbo PASCAL không ngừng được cải tiến, phát triển Chođến nay đã có các phiên bản sau đây:
- Turbo PASCAL 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 (1990) và 7.0(1992)
Turbo PASCAL bao gồm nhiều tệp, trong đó có 2 tệp quantrọng nhất, bắt buộc phải có là TURBO.EXE và TURBO.TPL.Hai tệp này có thể được chứa gọn trên một đĩa mềm TệpTURBO.EXE chứa một hệ soạn thảo (dùng để soạn thảochương trình PASCAL) và một chương trình dịch (dùng đểdịch chương trình PASCAL ra ngôn ngữ máy) TệpTURBO.TPL là một thư viện, chứa các hàm, các thủ tục và cácđơn vị chương trình chuẩn (có sẵn) của PASCAL
Ngoài ra, nếu muốn sử dụng các chức năng đồ họa củaTurbo PASCAL thì cần có thêm các tệp sau đây:
- GRAPH.PTU tệp chứa các lệnh, hàm, biến kiểu dữ liệuliên quan đến đồ hoạ
- EGAVGA.BGI tệp chứa các chương trình điều khiển mànhình các kiểu VGA hoặc CGA;
- SANS.CHR, GOTH.CHR các tệp chứa các kiểu chữ(fonts) khác nhau dùng trong chế độ đồ họa
Khi được cài đặt vào máy, các tệp của Turbo PASCALthường được đặt trong thư mục TURBO Thư mục này gồmcác thư mục con như sau:
BIN Chứa các tệp TURBO.EXE,
TURBO.TPL…
UNIT Chứa các đơn vị chương trình *.TPU
SOURCE Chứa các chương trình nguồn lớn làm
Trang 5ví dụ.
EXAMPL
ES Chứa các ví dụ để trình diễn
DOC Chứa các tệp tài liệu
BGI Chứa các tệp dùng trong chế độ đồ
hoạ
Tuy nhiên, tuỳ theo ý muốn của người sử dụng, các thưmục con đó có thể có các tên khác
§ 2 Bộ chữ viết, từ khoá, tên trong PASCAL
2.1.Bộ chữ viết dùng trong PASCAL
Mỗi loại ngôn ngữ, ngôn ngữ của con người cũng nhưngôn ngữ của máy tính điện tử đều có bộ chữ viết riêng củamình Trong PASCAL bộ chữ viết gồm có:
a Các chữ cái của bảng chữ cái tiếng Anh
- Các chữ cái viết thường từ a đến z.
- Các chữ cái viết hoa từ A đến Z.
* Dấu nhân hay dấu
sao
> Dấu lớn hơn
/ Dấu chia hay gạch
% Dấu phần trăm [ Dấu ngoặc vuông mở
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 6? Dấu hỏi ] Dấu ngoặc vuông đóng
cáchMỗi chữ cái, chữ số hoặc kí hiệu đặc biệt được gọi là một kí
tự Turbo PASCAL không phân biệt chữ hoa và chữ thườngtrong các tên, nhưng có phân biệt chữ hoa và chữ thườngtrong các hằng kiểu ký tự và các hằng kiểu dãy ký tự
Khi viết chương trình PASCAL, một số dấu phép tính đượcviết bằng hai kí tự:
:= Dấu phép gán Dấu các toán tử quan hệ:
>= Dấu không nhỏ
hơn2.2.Từ khoá (Keyword)
Từ khoá là những từ tiếng Anh, mỗi từ có ý nghĩa nhất định trong Turbo PASCAL
ý nghĩa của các từ khoá sẽ lần lượt được nghiên cứu trongcác phần sau Khi sử dụng các từ khoá phải viết đúng chính tả
và sử dụng đúng ý nghĩa của nó Tên của người sử dụngkhông được trùng với các từ khoá
Trong Turbo PASCAL có các từ khoá sau đây:
• Từ khoá chung: Program, Unit, Begin, End, Procedure,
Function.
• Từ khoá khai báo: Const, Var, Type, Label, Array, Uses,
File, record, object, set, string.
• Từ khoá của lệnh rẽ nhánh: If then else, case of
• Từ khoá của lệnh chu trình: For to do, For downto do,
while do, repeat until.
• Từ khoá điều khiển: with, goto
• Từ khoá toán tử: And, or, not, div, mod
• Từ khoá Nul: Nul
Khi trình bầy qui cách các lệnh, các từ khoá sẽ được viếtbằng các chữ hoa, còn khi viết trong chương trình có thể viết
Trang 7hoa hoặc viết thường.
2.3.Tên (Define)
Tên là thành phần rất quan trọng của PASCAL Nó được dùng để chỉ các đối tượng khác nhau trong chương trình như các hằng, các biến, các nhãn, các hàm, các thủ tục Tên là một dãy kí tự, bao gồm chữ cái, chữ số và dấu gạch nối Tên phải bắt đầu bằng chữ cái và không được chứa dấu khoảng trống (space)
Trong Turbo PASCAL 7.0 tên có thể có độ dài tùy ý, nhưngchỉ có 63 ký tự đầu tiên là có ý nghĩa Tên không được trùngvới từ khóa có thể viết bằng chữ hoa và chữ thường, hoặc lẫnlộn cả chữ hoa và chữ thường PASCAL không phân biệt chữhoa và chữ thường trong các tên
Ví dụ:
- Các tên sau đây dùng đúng:
GIAIPHUONGTRINH, GiaiPhuongTrinh, Delta,
HO_VA_TEN, A1, A2, DIA_CHI, LOP, ADDRESS
- Các tên sau đây dùng sai:
#LOP Bắt đầu bằng kí hiệu
Ví dụ: tên GIAIPHUONGTRINH
có thể đặt là: GIAI_PHUONG_TRINH hoặc
GiaiPhuongTrinh
Chú ý: có thể dùng dấu gạch nối (_) để đặt tên như trong
các ví dụ nêu trên, nhưng không được dùng dấu trừ (-)
Trong Turbo PASCAL có một số tên đã được định nghĩatrước (Predefined Identifier), gọi là các tên chuẩn Người dùngcần phải sử dụng những tên này theo ý nghĩa đã gán chochúng Tuy nhiên, nếu muốn có thể thay đổi ý nghĩa của cáctên chuẩn Đối với các từ khoá thì không thể làm như thế
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 8Một số tên chuẩn thường được dùng trong Turbo PASCAL
Abs boolean Char Integer Real Byte
Text False True Arctan Read Readln Write Writeln Sqr Sqrt
Số lượng các tên chuẩn phụ thuộc vào từng bản củaTurbo PASCAL Đối với từng tên chuẩn sẽ có giải thích kĩcàng về ý nghĩa, cách viết và cách sử dụng trong chươngtrình
2.4.Dấu chấm phẩy
Dấu chấm phẩy ";" không thể thiếu được trong PASCAL, nó
được dùng để ngăn cách các câu lệnh Không nên hiểu đây làdấu kết thúc lệnh
2.5 Lời giải thích (Comment)
Lời giải thích dùng để giải thích cho chương trình thêm rõràng và dễ hiểu khi người sử dụng nghiên cứu lại chươngtrình Khi thực hiện, máy sẽ bỏ qua những phần giải thích này.Lời giải thích là dãy ký tự bất kỳ được đặt trong cặp dấu ngoặcmóc mở { và ngoặc móc đóng } hoặc trong cụm dấu ( * và *)
Chú ý: Nếu lời giải thích mở bằng cặp dấu (* thì phải đóng
bằng cặp dấu *), nếu mở bằng dấu ngoặc móc mở { thì phảiđóng bằng dấu ngoặc móc đóng } Không thể mở bằng cặpdấu (* và đóng lại bằng dấu ngoặc móc đóng } và ngược lại
§ 3 Cấu trúc một chương trình PASCAL
Cấu trúc của một chương trình PASCAL thường gồm có 3phần sau:
3.1.Phần tên chương trình
Trang 9Phần này dùng để đặt tên cho chương trình PASCAL Nóbắt đầu bằng từ khoá PROGRAM, tiếp theo là một tên màngười dùng đặt cho chương trình và phải kết thúc bằng dấuchấm phẩy (;) Phần tên chương trình cho phép người dùngphân biệt chương trình này với chương trình khác Chươngtrình dịch PASCAL không quan tâm đến phần này có haykhông Phần tên chương trình không bắt buộc phải có trongmột chương trình PASCAL.
Ví dụ: Phần tên chương trình có thể có dạng
PROGRAM SAPXEP;
PROGRAM TAOTEPSN;
PROGRAM GiaiPhuongTrinhBac2;
Chú ý: Không nên nhầm lẫn tên chương trình trong phần
này với tên tệp chứa chương trình PASCAL
3.2.Phần khai báo
Phần này có nhiệm vụ mô tả các đối tượng của bài toán,
mô tả dữ liệu, các biến, các hằng, chương trình con Tất cảcác tên (trừ các tên chuẩn) được sử dụng trong chươngtrình đều phải được khai báo Trong quá trình dịch chươngtrình nguồn ra chương trình đích, nếu phát hiện một tên chưađược khai báo, trên màn hình sẽ xuất hiện thông báo lỗi vàquá trình dịch bị dừng lại
Một chương trình PASCAL có thể gồm các mục khai báosau:
- Khai báo các đơn vị chương trình UNIT (USES).
- Khai báo các hằng (CONST).
- Khai báo các nhãn (LABEL).
- Khai báo các kiểu dữ liệu (TYPE).
- Khai báo các biến (VAR).
- Khai báo các thủ tục (PROCEDURE).
- Khai báo các hàm (FUNCTION).
Bao nhiêu mục khai báo được sử dụng là tuỳ theo yêu cầucủa từng chương trình cụ thể và tuỳ ý muốn của người dùng
a.Khái niệm hằng và biến
Hằng (Constant) là một giá trị không đổi trong suốt quá trình thực hiện chương trình Tên hằng là tên được đặt theo quy ước để đại diện cho một giá trị không thể thay
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 10Biến (Variable) là một giá trị thay đổi trong quá trình thực hiện chương trình Tên biến là tên được đặt theo quy ước để đại diện cho một giá trị có thể thay đổi.
b.Khai báo hằng
Thông thường, mỗi khi muốn sử dụng một hằng, người sửdụng viết luôn hằng đó Ngoài cách đó ra, có thể đặt tên chohằng đó và khi sử dụng hằng ấy chỉ cần gọi nó ra Nhìn bềngoài, tên hằng giống như tên biến Điểm khác nhau cơ bảngiữa hằng và biến là với biến trong chương trình có thể thayđổi giá trị của biến có tên đó bằng nhiều cách, còn đối vớihằng thì không thể thay đổi giá trị đã gán cho tên hằng đó.Mục khai báo hằng dùng để đặt tên cho các hằng được bắtđầu bằng từ khoá CONST, tiếp theo là các lệnh khai báohằng
c Khai báo biến
Tất cả các biến sử dụng trong chương trình đều phải được
Trang 11khai báo trong mục khai báo biến Mục khai báo biến bắt đầubằng từ khoá VAR, sau đó là các lệnh khai báo biến
Quy cách:
VAR
<Tên biến>: <Kiểu dữ liệu của biến>;
Nếu có nhiều biến có cùng kiểu dữ liệu thì các tên cáchnhau bằng dấu phẩy (,) sau đó là dấu hai chấm (:), rồi đến kiểu
dữ liệu Nếu có nhiều lệnh khai báo biến thì các lệnh cáchnhau bằng dấu chấm phẩy (;)
Lệnh khai báo biến tạo ra các biến có tên và kiểu tươngứng
Kiểu dữ liệu có thể là một trong các từ khoá: INTEGER,
REAL, BOOLEAN, CHAR, STRING tương ứng với dữ liệu kiểu
nguyên, kiểu thực, kiểu lô gíc và kiểu ký tự Bốn kiểu dữ liệutrên được gọi là kiểu đơn giản chuẩn Từ khoá STRING xácđịnh dữ liệu kiểu dãy kí tự (còn gọi là kiểu dòng ký tự hoặckiểu dãy ký tự)
Trang 12Phuong Thanh!'); Lệnh này có tác dụng hiện trên màn hình
dòng thông báo:
Chao ban Phan Thi Phuong Thanh!
Như vậy một chương trình PASCAL thường có cấu trúcnhư sau:
PROGRAM Ten_chuong_trinh;
USES Khai báo các UNIT;
CONST Khai báo các hằng;
LABEL Khai báo các nhãn;
TYPE Khai báo các kiểu dữ liệu;
VAR Khai báo các biến;
PROCEDURE Khai báo các thủ tục;
FUNCTION Khai báo các hàm;
BEGIN
<Các câu lệnh của PASCAL>
END.
§ 4 Các bước thực hiện một chương trình PASCAL
Muốn chạy một chương trình PASCAL để giải một bài toáncần thực hiện một số bước công việc Các bước công việc đólà: khởi động PASCAL, soạn thảo chương trình, dịch chươngtrình, chạy chương trình, thoát khỏi PASCAL
4.1.Khởi động Turbo PASCAL
Giả sử các tệp của Turbo PASCAL để trong thư mụcTURBO của thư mục gốc của ổ đĩa C Để khởi động TurboPASCAL, từ dấu nhắc của DOS chuyển về thư mục TURBOlàm thư mục hiện thời rồi gọi:
TURBO ↵
PASCAL sẽ được máy tính điện tử nạp từ đĩa vào bộ nhớ.Khi Turbo PASCAL đã được nạp đúng vào bộ nhớ, màn hình
có dạng như hinh vẽ 3.1
Trang 13Dòng phía trên của màn hình là dòng thực đơn của TurboPASCAL Phía dưới của màn hình là dòng thông tin hướngdẫn Phần giữa màn hình để trống, dành chỗ cho soạn thảochương trình Bắt đầu từ đây có thể soạn thảo chương trìnhnguồn.
4.2.Bảng chọn lệnh
Muốn mở một tệp, ghi hay chạy một chương trình Dùngbảng chọn lệnh tương ứng để thực hiện
Sau đây là một số bảng chọn dọc của PASCAL
• Nhắp tổ hợp phím ALT + Chữ cái đầu F: Đưa ra bảng
Một số bảng chọn đưa ra như sau:
Gi¸o tr×nh Tin häc §¹i c¬ng
Hình 3.1 M n hình PASCAL à
Trang 14New Bắt đầu một tệp mới có tên là
NONAME000.PAS Open F3 Mở tệp đang có trên đĩa hay tệp mới trong
một cửa sổ mới Save F2 Cất một tệp trong bộ nhớ vào đĩa
save As Cất một tệp ( trong bộ nhớ) vào đĩa với tên
mới Change dir Đổi thư mục hiện thời
Print In nội dung tệp ra máy in
Print setup Cài đặt máy in
DOS shell Thoát khỏi PASCAL tạm thời về DOS Từ
DOS về PASCAL bằng lệnh EXIT eXit Alt+X Kết thúc PASCAL về DOS
SEARCH
Find Tìm kiếm đoạn văn bản trong cửa sổ
Edit Replace Tìm kiếm đoạn văn bản trong cửa sổ
Edit và thay thế bằng một đoạn mới Search again Lặp lại quá trình tìm kiếm vừa thực
hiện
Go To line number Đưa con trỏ đến vị trí dòng
Show last compilier error Xem lại lỗi biên dịch sau cùng
Find error Di chuyển con trỏ đến vị trí báo lỗi
runtime Find procedure Di chuyển con trỏ đến vị trí Procedure
hay Function được chỉ ra để sửa
EDIT
Undo Alt+BkSp Huỷ bỏ thao tác vừa thực hiện trước đó Redo Huỷ bỏ thao tác Undo trước đó, lấy lại
lệnh vừa huỷ Cut Shift + Del Cắt vùng đã đánh dấu vào bộ đệm Copy Ctrl + Ins Copy vùng đã đánh dấu vào bộ đệm Paste Shift + Ins Dán nội dung bộ đệm vào vị trí hiện thời
của con trỏ Clear Ctr + Del Xóa vùng đã đánh dấu
Show Clipboard Xem nội dung bên trong bộ đệm
RUN
Trang 15Run Ctr + F9 Biên dịch và chạy một chương trình đang
soạn thảo trong cửa sổ Edit Step Over F8 Biên dịch và thực hiên từng bước chương
trình đang soạn thảo trong cửa sổ EDIT thực hiện xong một lệnh tiếp tục bằng bấm phím F8, không thực hiện từng lệnh trong chương trình con
Trace Into F7 Biên dịch và thực hiên từng bước chương
trình đang soạn thảo trong cửa sổ Edit, thực hiện xong một lệnh tiếp tục bằng bấm phím F7
Go to cursor F4 Biên dịch và thực hiên chương trình bắt
dầu từ đầu đến dòng lệnh mà con trỏ đang đứng
Program reset Ctr+ F2 Dừng thao tác sửa chữa, xóa bộ nhớ
Parameters Định các tham số trên dòng lệnh cần
chuyển cho chương trình
4.3.Dịch chương trình
Chương trình viết trong ngôn ngữ PASCAL được gọi làchương trình nguồn Tệp chứa chương trình này có phần mởrộng là “.PAS ” Máy tính không thể thực hiện được chươngtrình này để giải bài toán mà phải dịch chương trình ra ngônngữ máy thì mới thực hiện được Chương trình trong ngônngữ máy được gọi là chương trình đích Tệp này có phần mởrộng là “.EXE ” Việc dịch chương trình nguồn ra chương trìnhđích được thực hiện bởi chương trình dịch PASCAL
Khi bấm Alt+F9 lúc đó chương trình dịch của Turbo
PASCAL sẽ dịch (compile) chương trình nguồn sang chươngtrình đích Trong quá trình dịch máy sẽ kiểm tra cú pháp củachương trình nguồn Nếu phát hiện lỗi máy sẽ thông báo lỗinày và con trỏ được đặt vào vị trí có lỗi, quá trình dịch chấmdứt, chương trình nguồn lại xuất hiện trên màn hình để ngườidùng có thể sửa chữa Nếu quá trình dịch được hoàn thành tốt
không có lỗi, trên màn hình sẽ xuất hiện thông báo “Compile
successful: Press any key“ có nghĩa là quá trình dịch
chương trình đã hoàn thành
Thông thường chương trình đích được để trong RAM Tuynhiên, có thể ghi chương trình đích lên đĩa để sau này chạytrực tiếp trong môi trường DOS
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 164.4.Thực hiện chương trình
Để thực hiện một chương trình PASCAL
• Nhắp tổ hợp phím Ctrl+F9 Khi đó máy kiểm tra xem đã
có chương trình đích chưa Nếu có chương trình đích thì máy
sẽ thực hiện chương trình đó để giải bài toán Nếu chưa cóchương trình đích thì máy sẽ dịch chương trình nguồn rachương trình đích, rồi mới thực hiện
• Nhắp tổ hợp phím Alt+F5 để xem kết quả bài toán Xem
xong nhắp phím bất kỳ để trở về màn hình soạn thảo
4.5.Thoát khỏi Turbo PASCAL
Để kết thúc Turbo PASCAL cần thoát khỏi nó bằng các thaotác:
• Nhắp tổ hợp phím Alt + F
• Chọn Exit
• Chọn Y hoặc N tùy thuộc vào việc có muốn ghi các thay
đổi vào tệp hay không
Trên đây đã mô tả ngắn gọn cách soạn thảo và chạy mộtchương trình trong Turbo PASCAL
§ 5 Một số kiểu dữ liệu thường dùng
5.1.Khái niệm kiểu dữ liệu
Các dữ liệu do máy tính xử lý có nhiều đặc điểm khác nhau.Căn cứ vào các đặc điểm đó mà ta phân chia dữ liệu thànhcác kiểu khác nhau
Kiểu dữ liệu (Data Types) là sự qui định về cấu trúc, miền giá trị mà một biến thuộc kiểu đó có thể nhận được
và tập hợp các phép toán xác định trên miền giá trị đó.
Trong PASCAL mỗi hằng, mỗi biến đều phải thuộc về mộtkiểu dữ liệu nhất định PASCAL đòi hỏi chặt chẽ về kiểu của
dữ liệu trong chương trình, không được phép xáo trộn các dữliệu có kiểu khác nhau, nó cũng xây dựng các kiểu dữ liệuchuẩn cùng những phép toán, hàm tác động lên dữ liệu đó Vìvậy nó được gọi là ngôn ngữ lập trình có "tính kiểu" cao
Trang 17Trong PASCAL có thể xử lý các kiểu dữ liệu sau:
1 Kiểu vô hướng (còn gọi là kiểu đơn giản).
1.1 + Kiểu đơn giản chuẩn (SIMPLE STANDARD TYPE).
1.1.1 _ Kiểu lô gic (BOOLEAN).
1.1.2 _ Kiểu số nguyên (INTEGER).
1.1.3 _ Kiểu số thực (REAL).
1.1.4 _ Kiểu ký tự (CHAR).
1.2 + Kiểu vô hướng do người lập trình tự định nghĩa.
1.2.1 _ Kiểu khoảng con (SUB-RANGE).
1.2.2 _ Kiểu liệt kê (ENUMERATED).
2 Kiểu dữ liệu có cấu trúc (STRUCTURED TYPE).
2.1 + Kiểu mảng (ARRAY).
2.2 + Kiểu tập (SET).
2.3 + Kiểu bản ghi (RECORD).
2.4 + Kiểu tệp (FILE).
3 Kiểu dãy ký tự (STRING TYPE).
4 Kiểu con trỏ (POINTER TYPE).
Cần nhớ rằng một biến hoặc một hằng chỉ liên quan đếnmột kiểu và chỉ một kiểu dữ liệu mà thôi
Kiểu vô hướng, hay kiểu đơn giản (còn gọi là kiểu cơ sở)
là kiểu dữ liệu gồm một tập các giá trị được sắp xếp theothứ tự tuyến tính Dưới đây sẽ xem xét 5 kiểu dữ liệu hayđược sử dụng nhất trong đó có 4 kiểu dữ liệu đơn giản chuẩnBoolean, Integer, Real, Char và kiểu String Các kiểu dữ liệukhác sẽ lần lượt được nghiên cứu
5.2.Kiểu dữ liệu lô gic (Boolean)
a.Khái niệm kiểu dữ liệu lô gic
Dữ liệu kiểu lô gic (gọi tắt là kiểu lô gic) chỉ nhận các giá trị lô gic TRUE (đúng) và FALSE (sai) Kiểu lô gic được định nghĩa sẵn bằng từ khoá BOOLEAN.
Biến lô gic là biến chỉ nhận các giá trị lô gic Từ khoáBOOLEAN được dùng để khai báo các biến lô gic Trong kiểu
lô gic cũng có định nghĩa sẵn quan hệ thứ tự: FALSE <
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 18b.Các phép toán đối với dữ liệu kiểu lô gic
Các phép toán sau đây được áp dụng cho dữ liệu kiểu lôgic:
AND và
OR hoặc
NOT phủ định hay ĐảO
XOR hoặc triệt tiêu hay cộng mô dun 2
Bảng qui tắc thực hiện các phép toán lô gic và các kết quảtương ứng
P Q NOT P P AND Q P OR Q P XOR Q
Bảng qui tắc thực hiện các phép toán lôgíc.
Ví dụ: Giả sử 2 biến DangVien và GioiTinh là 2 biến lô
gic Để khai báo 2 biến này viết như sau:
VAR
GioiTinh,DangVien: Boolean;
Do đã xác định quan hệ thứ tự giữa các giá trị lô gic, nên
có thể sử dụng các phép toán quan hệ đối với dữ liệu lô gic.5.3.Kiểu dữ liệu số nguyên (Integer)
a.Khái niệm kiểu dữ liệu số nguyên
Dữ liệu kiểu số nguyên (gọi tắt là kiểu nguyên) là tập hợp các số nguyên nằm trong khoảng từ -32768 đến +
32767 Kiểu số nguyên được định nghĩa sẵn bằng từ khoá INTEGER.
Biến nguyên là biến nhận các giá trị nguyên Từ khoáINTEGER được dùng để khai báo biến nguyên
Ví dụ 1: Hai biến I, J là hai biến nguyên Để khai báo 2
biến này, cần viết như sau:
VAR
I,J: Integer;
Khi đã khai báo như vậy thì các biến I, J có thể nhận giá trị
là một số nguyên nằm trong khoảng từ -32768 đến 32767
Trang 19b.Các phép toán số học đối với dữ liệu kiểu
DIV Chia nguyên
MOD Lấy phần dư của phép chia
• Khi thực hiện các phép tính số học trên các số nguyêncần đặc biệt chú ý xem kết quả có vượt quá miền giá trị chophép của dữ liệu kiểu nguyên hay không
Ví dụ: Nếu a, b là các biến nguyên Integer thì hai lệnh sau:
a:= 80; b:= (a * 1245) DIV 200 cho kết quả sai (vì 99600vượt quá miền giá trị của dữ liệu kiểu nguyên)
c.Các phép toán quan hệ đối với dữ liệu kiểu nguyên
Các phép toán quan hệ: = (bằng), <> (khác), > (lớn hơn), <(nhỏ hơn), >= (không nhỏ hơn), <= (không lớn hơn) đều có thể
áp dụng cho các dữ liệu kiểu nguyên và được thực hiện theoqui tắc thông thường, kết quả các phép toán quan hệ với dữliệu kiểu nguyên cho giá trị là kiểu lô gic
5.4.Kiểu dữ liệu số thực (Real)
a.Khái niệm kiểu dữ liệu số thực
Dữ liệu kiểu số thực (gọi tắt là kiểu thực) là tập hợp các
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 20số thực có thể biểu diễn trong máy tính Kiểu số thực được định nghĩa sẵn bằng từ khoá REAL.
Một giá trị kiểu thực là một số thực nằm trong khoảng màmáy tính điện tử có thể xử lí được Giới hạn này phụ thuộcvào từng máy tính và từng chương trình Trong Turbo
PASCAL giới hạn là ± 2.9E -39 ÷ ± 1.7E+38.
Biến thực là biến nhận các giá trị thực Từ khoá REALđược dùng để khai báo biến thực
Trong chương trình Pascal số thực có thể được viết dướihai dạng dấu phẩy tĩnh và dấu phẩy động
b.Số thực dấu phẩy tĩnh
Số thực dấu phẩy tĩnh là số thực có phần nguyên và phần lẻ Dấu chấm (.) được dùng để ngăn chia phần nguyên với phần lẻ của số Tận cùng bên trái, nếu là số
âm phải có dấu trừ (-), nếu số dương có thể có hoặc không có dấu cộng (+).
Ví dụ: về các số thực dấu phẩy động.
3.14E+00
(3.14)
6.321E+02(632.1)
-12.21E-02 0.1221.)
(-Ví dụ: Hai biến S, Tong là 2 biến thực Để mô tả viết như
áp dụng cho dữ liệu kiểu thực
Trang 215.5.Các hàm chuẩn cho dữ liệu kiểu nguyên và thực
ROUND(X
Cho số nguyên bằng cách làmtròn X
FRAC(X) T T Lấy phần lẻ của X
INT(X) T T Lấy phần nguyên của X bằng cách loại bỏ phần phânABS(X) N,T N,T Cho giá trị tuyệt đối
EXP(X) N,T T Cho hàm mũ (EXPonential) cơ
số e của X
SQRT(X) N,T T Cho căn bậc 2 (SQuare RooT)
của X
Chú ý: Các kí hiệu N là kiểu nguyên, T là kiểu thực, L là kiểu
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 22a.Khái niệm kiểu dữ liệu ký tự
Dữ liệu kiểu ký tự (gọi tắt là kiểu ký tự) là một ký tự có trong tập hợp các ký tự của bảng mã ASCII Kiểu ký tự được định nghĩa sẵn bằng từ khoá CHAR.
Trong bảng mã ACCII, các ký tự được sắp xếp theo trật tựnhất định
Ví dụ: 'A'<'B' Các số thứ tự (mã ACCII) của các ký tự
Chú ý: khi viết các giá trị ký tự thì nó phải được đặt trong
cặp dấu nháy đơn
Ví dụ: 'A', 'B', '0'
Giữa các ký tự thì ký tự đứng trước nhỏ hơn ký tự đứngsau, chữ viết hoa nhỏ hơn chữ viết thường cùng chữ đó, chữcái lớn hơn chữ số
Ví dụ: 'A' < 'B'; 'B' < 'C', 'a' < 'b'; 'b' < 'c', '9'<'A',
b.Các hàm chuẩn dùng cho các dữ liệu kiểu ký tự Tên hàm
Kiểu
dữ liệu vào
Kiểu
dữ liệu ra
Tác dụng
Cho ký tự đứng trước ký tự
Ch trong bảng mã ASCII(PREDecessor)
Cho ký tự đứng sau ký tự
Ch trong bảng mã ASCII(SUCCessor)
ORD(Ch) KT N Cho số thứ tự (ORDinal) của
Trang 23ký tự Ch trong bảng mãASCII).
Cho ký tự (Character) có sốthứ tự là N (tức mã ASCII làN)
UPCASE(C
Cho ký tự Ch từ chữ thườngsang chữ hoa
Ví dụ:
PRED('B')⇒ 'A' SUCC('X') ⇒'Y'
ORD('A') ⇒ 65 CHR(65) ⇒ 'A'
UPCASE('a') ⇒ 'A'
5.7.Kiểu dữ liệu dãy ký tự (String)
a.Khái niệm kiểu dữ liệu dãy ký tự
Dữ liệu kiểu dãy ký tự (gọi tắt là kiểu dãy ký tự) là một dãy ký tự có trong tập hợp các kí tự của bảng mã ASCII được đặt trong cặp dấu nháy đơn Kiểu dãy ký tự được định nghĩa bằng từ khoá STRING.
Biến kiểu dãy ký tự là biến nhận các giá trị là dãy các ký tự,biến kiểu dãy ký tự được khai báo bằng từ khoá STRING
Ví dụ: Biến HOVATEN là biến kiểu dãy ký tự Để khai báo
HOVATEN:= 'BUI DIEU LINH';
LOP:= 'Tai chinh B khoa 39 - Ngan hang';
b.Phép toán đối với dữ liệu kiểu dãy ký tự
Đối với các dữ liệu kiểu dãy ký tự chỉ có một phép tính duynhất là phép ghép được ký hiệu bằng dấu cộng (+) Phép tínhnày tạo nên một dòng ký tự bằng cách ghép hai dãy ký tự chotrước với nhau
Ví dụ:
'TURBO'+' PASCAL' = 'TURBO PASCAL'.
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 24c.So sánh hai dãy kí tự
Khi so sánh hai dãy ký tự, máy sẽ so sánh từng cặp ký tựvới nhau kể từ trái qua phải theo tiêu chuẩn sau
• Hai dãy ký tự bằng nhau nếu có độ dài như nhau và nộidung giống hệt nhau
• Dãy đứng trước trong từ điển nhỏ hơn dãy đứng sautrong từ điển
• Dãy ngắn hơn nhỏ hơn dãy dài hơn
• Chữ viết hoa nhỏ hơn chữ viết thường cùng chữ đó
• Chữ cái lớn hơn chữ số
• Các dấu khoảng trống trước sau đều được tính
Kiểu dữ liệu này sẽ được nghiên cứu kỹ hơn trong chươngsau
§ 6 Biểu thức (Expression)
6.1.Khái niệm biểu thức
Biểu thức là một số toán hạng (Operand) được kết hợp với nhau bởi một số phép toán (Operator) để xác định một giá trị nhất định Toán hạng có thể là một hằng, một biến hoặc một hàm Phép toán được viết ra bằng dấu phép
Biểu thức trong PASCAL được chia thành biểu thức số học,biểu thức lô gic và biểu thức dãy ký tự
• Biểu thức số học là biểu thức có kết quả là một giá trị sốnguyên hoặc một giá trị số thực
• Biểu thức lô gic là biểu thức có kết quả là một giá trị lôgic
Trang 25• Biểu thức dãy ký tự là biểu thức có kết quả là một giá trịdãy ký tự.
DIV chia nguyên
MOD Lấy phần dư của phép chia nguyên
b.Các phép toán lô gic
OR hoặc
NOT phủ định hay ĐảO
XOR hoặc triệt tiêu hay cộng mô Đun 2
ký tự
d.Phép toán ghép dãy ký tự
Đối với các dữ liệu kiểu dãy ký tự thì chỉ có một phép toángọi là phép toán ghép, ký hiệu bằng dấu cộng (+)
6.3.Thứ tự thực hiện phép toán trong biểu thức
Khi xác định giá trị các biểu thức, các phép toán đượcthực hiện theo thứ tự ưu tiên sau đây:
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 261 Các phép toán trong dấu ngoặc.
2 NOT, - (Đổi dấu).
3 *, /, DIV, MOD, AND.
Ví dụ 2: Biểu thức lô gic có thứ tự thực hiện như sau:
• (100> 7) And ('B'<'A') ⇒ True And False ⇒False
Trong PASCAL có 2 loại thủ tục:
• Thủ tục chuẩn (Precifined Procedure) là những thủ tục
có sẵn trong PASCAL Có thể sử dụng các thủ tục này màkhông phải khai báo
• Thủ tục "người sử dụng" do người sử dụng tạo ra Muốn
sử dụng loại thủ tục này phải khai báo nó Vấn đề này đượcnghiên cứu ở chương sau
Muốn sử dụng thủ tục ở đâu, thì tại đó phải viết lệnh gọi thủtục Lệnh gọi thủ tục bao gồm tên thủ tục và danh sách cáctham số thực sự
Cần phân biệt lời gọi thủ tục và lời gọi hàm, cả hai đều làcác chương trình con nhưng lời gọi hàm không phải là một câulệnh vì bản thân hàm trả về một giá trị, giá trị này phải đi vớimột lệnh gán hoặc nó là tham số của một lệnh khác hay trongmột biểu thức
Trang 27Ví dụ:
Không thể viết ORẮÁ) mà phải viết là Ch:=ORD('Á) hayWRITELN(ORD('Á))
7.1.Thủ tục xuất dữ liệu ra màn hình (Write)
Thủ tục Write dùng để đưa ra các giá trị của các biểu thứcthuộc các kiểu khác nhaụ
Qui cách:
WRITE(<Biểu thức 1, Biểu thức 2, , Biểu thức n>);
ở đây các biểu thức i (i=1, 2, ,n) là tên các biểu thức cầnđưa ra có thể là tên hằng, tên hàm, tên biến hoặc một hằng,một hàm, một biểu thức Kiểu của chúng có thể là lô gic, sốnguyên, số thực, kí tự hoặc kiểu dãy kí tự
Theo thủ tục này, giá trị của các biểu thức 1, 2, ,n sẽđược xác định trước sau đó mới được đưa ra trên tệp chuẩn,thường là màn hình
Theo thủ tục Write(I,T) trên màn hình xuất hiện giá trị của
I và giá trị của T, lần lượt hết giá trị này đến giá trị khác Cáchđưa ra như vậy được gọi là đưa ra không có qui cách
7.2.Thủ tục xuất dữ liệu ra màn hình (Writeln)
Thủ tục Writeln có tác dụng hoàn toàn giống thủ tục Write,chỉ có một điểm khác là sau khi đưa ra giá trị của biểu thứccuối cùng trong danh sách, thủ tục Writeln tự động đưa con trỏxuống dòng dướị
Trang 28Thủ tục Writeln không tham số sẽ đưa ra một dòng trống.7.3.Đưa ra màn hình có qui cách
Màn hình thông dụng nhất hiện nay của máy tính đượcphân thành 25 dòng và 80 cột, tại một thời điểm màn hình cómột vị trí làm việc thể hiện dưới dạng một điểm sáng nhấpnháy gọi là con trỏ màn hình
Bình thường khi đưa ra một biểu thức nào đấy, nếu khôngxác định rõ, nó sẽ được đưa ra dưới dạng không có quy cách
• Nếu kiểu số nguyên được đưa ra với số chỗ đúng bằng
số chữ số nó cần có kể cả dấu (nếu dấu dương thì bỏ trống)
kể từ vị trí bên trái
• Nếu kiểu số thực thì sẽ đưa ra (nếu dấu dương thì bỏtrống) một số phần nguyên, một dấu chấm thập phân, mườichữ số phần phân, chữ E để biểu diễn số mũ, dấu của phần
mũ, hai chữ số biểu diễn phần mũ, chỗ nào không có giá trị cụthể thì điền số 0 vào kể từ vị trí bên trái
• Nếu kiểu ký tự, kiểu lô gic hay kiểu dãy ký tự thì viết ramột cách bình thường kể từ vị trí bên trái, mỗi ký tự chiếm một
vị trí
Trong trường hợp muốn dành cho các giá trị được đưa ramột số vị trí nhất định, dùng thủ tục đưa ra có qui cách Để
mô tả các qui cách, dùng các phương pháp sau đây
a.Đưa ra có qui cách dữ liệu kiểu ký tự
Qui cách:
<Biểu thức kiểu Ch>:n
Lúc này, giá trị của biểu thức kiểu ký tự Ch được đưa ra ở
vị trí tận cùng bên phải của trường có độ rộng n kí tự; n -1 vịtrí phía trái của trường sẽ chứa dấu khoảng trống hay dấucách (space), n là biểu thức kiểu nguyên
Ví dụ: Ta có
Writeln('123456789');
Writeln('A'); {Đưa ra khong quy cach}
Writeln('B':8); {Đưa ra có quy cach}
Khi thực hiện các lệnh này màn hình sẽ như sau:
123456789
Trang 29Lúc này, Biểu thức dãy kiểu kí tự St được đưa ra bắt đầu
từ phải sang trái Dòng ký tự này luôn luôn chiếm một trườnggồm n vị trí Nếu St có ít hơn n ký tự thì n-length(St) dấu cách được đặt trước <Biểu thức St>; ở đây length(St) là độ dài của dãy ký tự St, n là biểu thức kiểu nguyên
Trước dãy ký tự 'Ha' ở dòng thứ ba có 23 dấu cách
c.Đưa ra có qui cách dữ liệu kiểu lô gic
Qui cách:
<Biểu thức kiểu BL>:n
Lúc này, tuỳ theo giá trị của biểu thức kiểu lô gic BL, từ
FALSE hoặc TRUE được đưa ra phía phải của trường gồm n
vị trí Phần thừa ra phía trái của trường (nếu có) sẽ chứa dấu
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 30cách (space), n là biểu thức kiểu nguyên.
Writeln(OK); {Dua ra khong quy cach}
Writeln(OK:8); {Dua ra co quy cach}
<Biểu thức kiểu IN>:n
Tác dụng: Giá trị của biểu thức kiểu nguyên IN được đưa ra
kể từ phải sang trái của trường gồm n vị trí Phần thừa ra phíatrái của trường (nếu có) sẽ chứa dấu cách (space), n là biểuthức kiểu nguyên
Writeln(I); {Dua ra khong quy cach}
Writeln(J:8); {Dua ra co quy cach}
Trang 31e.Đưa ra có qui cách dữ liệu kiểu thực
Qui cách 1:
<Biểu thức kiểu RE>:n
Lúc này, giá trị của biểu thức kiểu số thực RE được đưa ra
dưới dạng dấu phẩy động, từ phải qua trái của một trường có
độ rộng n vị trí.
Qui cách 2:
<Biểu thức kiểu RE>:n:m
Lúc này, giá trị của biểu thức kiểu số thực RE được đưa ra
dưới dạng dấu phẩy tĩnh, từ phải sang trái của trường gồm n
vị trí Giá trị của RE có m chữ số ở phần lẻ Phần thừa raphía trái của trường (nếu có) sẽ chứa dấu cách (space), m, n
là các giá trị của biểu thức kiểu nguyên
Writeln(R); {Dua ra khong quy cach}
Writeln(R:12:6); {Dua ra co quy cach}
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 32Lst và dấu phẩy vào trước các biểu thức cần in nhưng ở đầuchương trình cần phải có khai báo sử dụng máy in
a.Thủ tục GoToXY(X,Y)
Là thủ tục đặt con trỏ vào vị trí có tọa độ X, Y trên màn hình.Tọa độ X là tọa độ cột tính từ 1 đến 80 Tọa độ Y là tọa độdòng tính từ 1 đến 25
c.Thủ tục ClrEol (Clear End Of Line)
Thủ tục này xóa các ký tự nằm bên phải con trỏ màn hình(Cursor)
d.Thủ tục TextColor (Color)
Thủ tục này thiết lập màu cho văn bản Mầu là một sốnguyên có thể nhận giá trị từ 0 trở đi Tùy loại màn hình mà sốlớn nhất gán cho mầu có thể thay đổi Cũng có thể gán cho
Trang 33mầu tên các hằng số mầu đã được định nghĩa sẵn như sau:
0 Black 4 Red 8 DarkGray 12 Lightred
1 Blue 5 Magenta 9 LightBlue 13
15 White e.Thủ tục TextBackGround (Color)
Thủ tục này xác định mầu nền của văn bản
Ví dụ: In trên màn hình các dãy ký tự PASCAL, dãy đầu tiên
bắt đầu từ tọa độ X=10, Y = 2 với các màu đỏ, xanh lá cây,xanh blue và đen tương ứng
Trang 34Ví dụ: In dãy ký tự "PASCAL" trên màn hình ; trong đó các
ký tự P và L sáng bình thường; còn các ký tự "ASCA" sángyếu Các lệnh có dạng như sau:
NormVideo;Write('P');
LowVideo;Write('ASCA');
NormVideo;Write('L');
g.Hàm WhereX và hàm WhereY
Hàm WhereX cho tọa độ X của con trỏ màn hình
Hàm WhereY cho tọa độ Y của con trỏ màn hình
7.6.Thủ tục vào dữ liệu (Read)
Thủ tục này dùng để nhập các dữ liệu vào máy
Qui cách:
READ(<Tên biến 1, Tên biến 2, , Tên biến n>);
Theo thủ tục này, giá trị của Biến 1, Biến 2, Biến n sẽđược đọc vào từ tệp chuẩn Input, thường là từ bàn phím Các
dữ liệu nhập vào ứng với các dữ liệu của Biến 1, Biến 2 được ngăn cách nhau bằng dấu cách (Space)
• Đối với biến kiểu kí tự, thủ tục Read đọc một kí tự vào
và gán cho biến
• Đối với các biến kiểu dãy kí tự, thủ tục Read lần lượtđọc các kí tự và gán cho biến cho đến khi nội dung biến đạtđến độ dài tối đa (được xác định khi khai báo biến) hoặc đếnkhi gặp dấu kết thúc dòng hay kết thúc tệp
• Đối với biến kiểu số (nguyên hoặc thực) thủ tục Read
sẽ đọc vào một dãy kí tự tuân theo qui tắc biểu diễn hằng
số Các kí tự trống (space), kí tự định cột (TAB), CR hoặc LFđứng trước dãy này đều bị bỏ qua Dãy ký tự cần được ngăncách với phần tử tiếp theo bằng dấu cách (space), hoặc kí tựTAB
Nếu nhập vào dữ liệu không tuân theo những qui tắc đã
Trang 35nêu sẽ xuất hiện thông báo lỗi vào-ra Nếu tuân theo đầy đủcác quy tắc thì dãy ký tự biểu diễn giá trị số sẽ được biến đổithành giá trị số kiểu tương ứng với biến và gán cho biến.Khi thực hiện thủ tục READ, PASCAL sẽ yêu cầu nhập giátrị thật cho các biến Trường hợp đặc biệt: Khi vừa bắt đầu thủtục READ đã nhận ngay được dấu kết thúc dòng hoặc dấu kếtthúc cột thì không có giá trị nào được gán cho biến; có nghĩa
là biến vẫn giữ nguyên giá trị cũ Nếu nhấn ENTER thì máy sẽchờ cho đến khi nhận được giá trị mới tiếp tục
Chú ý: Khi nhập dữ liệu cho các biến, phải nhập các dữ liệu
tương ứng với kiểu dữ liệu của các biến Việc làm này haynhầm lẫn nên thường tách các dữ liệu có kiểu khác nhauthành các câu lệnh nhập khác nhau
Thủ tục Write trong ví dụ này cho hiện dòng thông báo
"Nhập vao hai gia tri luong, no" để hướng dẫn việc nhập dữliệu Thủ tục Read(Luong,No) đọc giá trị hai biến Luong, No từbàn phím
7.7.Thủ tục vào dữ liệu (Readln)
Thủ tục Readln hoàn toàn giống thủ tục Read, chỉ có mộtđiểm khác là sau khi đọc xong biến cuối cùng thì thủ tụcReadln bỏ qua phần còn lại của dòng
Qui cách:
READLN(<Tên biến 1, Tên biến 2, , Tên biến n>);
Sau khi thực hiện xong thủ tục Readln, thủ tục Read hoặcReadln tiếp theo sẽ bắt đầu đọc từ đầu dòng sau
Thủ tục Readln có thể không có tham số
Qui cách:
READLN;
Trong trường hợp này, phần còn lại của dòng sẽ bị bỏ qua
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 36Khi nhập dữ liệu từ bàn phím, thủ tục Readln không tham số
sẽ đưa con trỏ xuống đầu dòng tiếp theo của màn hình
READLN(<Tên biến 1, Tên biến 2, , Tên biến n>);
Ví dụ : Sau đây là một chương trình Pascal đơn giản có sửdụng các qui cách trong thủ tục Writeln và Read
số thực, mỗi số gồm 8 vị trí trong đó có 2 chữ số phần phân
Trang 37sau thực hiện sau Đây là quá trình tính toán thẳng, các lệnhkhông nhiều và bài toán không phức tạp.
8.1 Lệnh gán (Assignment)
Lệnh gán là lệnh cơ bản nhất trong các lệnh của PASCAL
Nó được dùng để tính giá trị một biểu thức và gán giá trị biểuthức đó cho một biến
Qui cách:
<Tên biến>:= <Biểu thức>;
ở đây dấu ":=" được gọi là dấu gán.
Theo lệnh này, máy sẽ tính giá trị của biểu thức ở bên phảidấu gán sau đó gán cho biến ở bên trái Lệnh có thể áp dụngcho các biến thuộc kiểu bất kì trừ kiểu tệp Giá trị của biểuthức phải cùng kiểu giá trị của biến, trừ trường hợp biểu thức
Trong ví dụ trên thì lệnh gán thứ nhất gán giá trị 1 cho biến
I Trong trường hợp này biểu thức phía phải dấu gán có dạngđơn giản nhất, chỉ gồm một hằng số nguyên Lệnh gán thứ haitính giá trị trung bình cộng của ba biến Toan, Ly, Hoa rồi gángiá trị đó cho biến TB Lệnh gán thứ 3 lấy giá trị của J cộngthêm 1 rồi gán giá trị vừa tìm được cho biến J Có nghĩa làlệnh này làm cho giá trị của biến J được tăng thêm 1
8.2 Câu lệnh ghép (Compound Statement)
Câu lệnh ghép (còn gọi là lệnh phức hợp - CompoundStatement) được sử dụng trong trường hợp nếu muốn thựchiện nhiều lệnh tại vị trí mà Pascal chỉ cho phép viết một câulệnh
Trang 38Câu lệnh ghép gồm một số tuỳ ý các lệnh đơn giản đặtgiữa hai từ khoá Begin và End, lệnh này cách lệnh kia mộtdấu chấm phẩy (;) Các lệnh trong câu lệnh ghép sẽ đượcthực hiện lần lượt theo thứ tự viết chúng.
Câu lệnh ghép trong ví dụ này gồm 3 lệnh gán nằm giữa hai
từ khoá begin và end Các lệnh đó làm nhiệm vụ đổi hai giá trịcho 2 biến A1 và A2 Biến Atg (a trung gian) được dùng làmbiến trung gian
8.3 Một số ví dụ
Ví dụ 1 Cho biết họ tên một sinh viên và điểm thi 3 môn
toán, lý, hóa của người sinh viên này Hãy viết chương trình đểnhập số liệu vào, tính và in điểm thi trung bình của sinh viênđó
Trang 39Quá trình giải bài toán được minh hoạ theo thuật toán tronghình 3.2
Chương trình giải bài toán như sau:
Write('Nhap ten Sinh Vien ');Readln(TenSV);
Write('Nhap diem toan ly, hoa ');
Readln(Toan, Ly, Hoa);
Ví dụ 2 Cho biết tên một công nhân và tiền lương, tiền
thưởng, tiền nợ của người công nhân này Hãy viết chương
Gi¸o tr×nh Tin häc §¹i c¬ng
Trang 40trình tính và in số tiền được lĩnh của người công nhân đó.Quá trình giải bài toán được minh hoạ trong hình 3.3.
Chương trình giải bài toán như sau:
Khi thực hiện chương trình này, máy
yêu cầu nhập tên công nhân và tiền
lương, tiền thưởng, tiền nợ của người
công nhân này Sau đó máy tính số tiền
được lĩnh, rồi in tên công nhân và số
tiền được lĩnh đó
Hai chương trình trên tuy đơn giản,
nhưng rất điển hình, vì chúng có đủ 3 phần của một chươngtrình PASCAL (phần đặt tên, phần khai báo, phần thân chươngtrình), và chúng thực hiện 4 công việc thường có của mộtchương trình là: Nhập dữ liệu, tính toán, in kết quả và dừng
§ 9 Lập trình phân nhánh
Trong quá trình giải nhiều bài toán, thường xảy ra trườnghợp việc lựa chọn hướng đi này hay hướng đi khác phụ thuộcvào điều kiện của đầu bài hoặc phụ thuộc vào kết quả tínhtoán được Quá trình tính toán có đặc điểm như vậy được gọi
là quá trình tính toán có phân nhánh Chương trình có chứaquá trình tính toán phân nhánh được gọi là chương trình phânnhánh
Turbo PASCAL có một số câu lệnh chuyên dùng để lập cácchương trình phân nhánh, như lệnh IF THEN , lệnh GOTO,