Giáo trình Nhập môn tin học - Phần 3: Ngôn ngữ lập trình Pascal 1

1. Giới thiệu chung về ngôn ngữ lập trình:

Từ trước tới nay đã có hàng nghìn ngôn ngữ lập trình khác nhau được thiết kế và sử dụng.

Hàng năm lại có nhiều ngôn ngữ mới ra đời. Các ngôn ngữ được dùng phổ biến có thể kể

đến : Ngôn gữ Ada, Angol, APL, Asembly Basic, C, C++,Cobol, Fortran, Delphi, Java,

Lisp,Pascal,Perl,PHP,Prolog, Python, Ruby Sự phát triển của ngôn ngữ gắn liền với sự

phát triển của tin học và phần cứng. Mỗi loại ngôn ngữ thích hợp với một lĩnh vực và một

số dạng bài toán nhất định. Ví dụ, trong khối kỹ thuật, các ngôn ngữ được sử dụng nhiều là

Algol, Fortran, C++, Basic, Visual Basic, Java, Pascal

Các ngôn ngữ lập trình có thể xây dựng dựa trên “ Lập trình tuyến tính”, “ Lập trình có cấu

trúc” : Pascal; “Lập trình hướng đối tượng” : Java, Delphi,Visual Basic; “Lập trình trên nền

Web”: HTML.

2. Các ưu điểm của Pascal và yêu cầu hệ thống:

- Pascal là do Niklaus Wirth phát triển dựa trên Algol năm 1970, nó là ngôn ngữ lập trình có

cấu trúc. Pascal phù hợp với các dạng bài toán kỹ thuật và dễ diễn tả các sơ đồ thuật toán,

phù hợp cho việc giảng dạy trong các trường phổ thông và đại học.

- Với các phiên bản khác nhau của Pascal nó có thể dùng trong các hệ điều hành DOS,

Window cà cũng có một số hệ điều hành dùng Pascal để viết (như Macintosh).

- Pascal là ngôn ngữ lập trình định kiểu và có trình biên dịch mạnh, có thể giải được các bài

toán đệ qui.

- Tuỳ theo từng phiên bản của Pascal mà có thể chạy trên môi trường DOS hoặc Window

pdf 36 trang kimcuc 7320
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Nhập môn tin học - Phần 3: Ngôn ngữ lập trình Pascal 1", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Nhập môn tin học - Phần 3: Ngôn ngữ lập trình Pascal 1

Giáo trình Nhập môn tin học - Phần 3: Ngôn ngữ lập trình Pascal 1
 TRƯỜNG ĐẠI HỌC XÂY DỰNG 
KHOA CÔNG NGHỆ THÔNG TIN 
------------  ------------ 
GIÁO TRÌNH 
MÔN HỌC: NHẬP MÔN TIN HỌC 
PHẦN III – NGÔN NGỮ LẬP TRÌNH PASCAL -1 
Giảng viên: ĐÀO TĂNG KIỆM 
Bộ môn : TIN HỌC XÂY DỰNG 
Hà nội 2011 
---------- 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 2 
PHẦN 3 
 NGÔN NGỮ LẬP TRÌNH PASCAL 
Chương 1 CÁC KHÁI NIỆM CƠ BẢN 
I. Ngôn ngữ lập trình Pascal: 
1. Giới thiệu chung về ngôn ngữ lập trình: 
Từ trước tới nay đã có hàng nghìn ngôn ngữ lập trình khác nhau được thiết kế và sử dụng. 
Hàng năm lại có nhiều ngôn ngữ mới ra đời. Các ngôn ngữ được dùng phổ biến có thể kể 
đến : Ngôn gữ Ada, Angol, APL, Asembly Basic, C, C++,Cobol, Fortran, Delphi, Java, 
Lisp,Pascal,Perl,PHP,Prolog, Python, Ruby Sự phát triển của ngôn ngữ gắn liền với sự 
phát triển của tin học và phần cứng. Mỗi loại ngôn ngữ thích hợp với một lĩnh vực và một 
số dạng bài toán nhất định. Ví dụ, trong khối kỹ thuật, các ngôn ngữ được sử dụng nhiều là 
Algol, Fortran, C++, Basic, Visual Basic, Java, Pascal  
Các ngôn ngữ lập trình có thể xây dựng dựa trên “ Lập trình tuyến tính”, “ Lập trình có cấu 
trúc” : Pascal; “Lập trình hướng đối tượng” : Java, Delphi,Visual Basic; “Lập trình trên nền 
Web”: HTML. 
2. Các ưu điểm của Pascal và yêu cầu hệ thống: 
- Pascal là do Niklaus Wirth phát triển dựa trên Algol năm 1970, nó là ngôn ngữ lập trình có 
cấu trúc. Pascal phù hợp với các dạng bài toán kỹ thuật và dễ diễn tả các sơ đồ thuật toán, 
phù hợp cho việc giảng dạy trong các trường phổ thông và đại học. 
- Với các phiên bản khác nhau của Pascal nó có thể dùng trong các hệ điều hành DOS, 
Window cà cũng có một số hệ điều hành dùng Pascal để viết (như Macintosh). 
- Pascal là ngôn ngữ lập trình định kiểu và có trình biên dịch mạnh, có thể giải được các bài 
toán đệ qui. 
- Tuỳ theo từng phiên bản của Pascal mà có thể chạy trên môi trường DOS hoặc Window 
 3. Khởi động và giao diện Turbo Pascal: 
 Từ DOS : C:\ > CD TP  
 C:\ TP > CD BIN  
 C:\ TP \ BIN > TURBO  
Trên màn hình xuất hiện màn hình soạn thảo của Turbo Pascal. Bạn có thể bắt đầu gõ 
chương trình . 
 Từ WINDOWS có thể bằng nhiều cách : 
 Chọn và nhấn vào biểu tượng của PASCAL trên màn hình (nếu có) 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 3 
 Nhấn Start Run Browse mở hộp hội thoại, từ Look in tìm thư mục và tệp chứa 
Turbo Pascal ( Turbo.exe ) nhấn OPEN sẽ hiện màn hình Pascal (nền xanh): 
II. Các thành phần cơ bản của ngôn ngữ: 
1. Ký hiệu cơ sở của Pascal 
 Bộ ký tự : 
- Các chữ : 26 chữ cái từ A-W không phân biệt chữ hoa và chữ thường. 
- Số từ 0-9 
- Các dấu : . , ’ ( ) / [, ], *, và một số ký tự đặc biệt. Không được sử dụng các ký hiệu 
toán học và vật lý như Ω, ∆, ∂, ∑  Trong đó: dấu phẩy (,) dùng để nhăn cách các 
thành phần trong danh sách; Dấu chấm (.) ngăn phân nguyên- thập phân; dấu nhát 
đơn (’ ..’) giới hạn hằng xâu ký tự; Dấu ngoặc tròn ( ( ..) ) chứa các biểu thức, đối số 
của hàm ; dấu bằng (=) phép so sánh; dấu chấm phẩy (;) dùng ngăn cách các câu; dấu 
ngoặc vuông ( [ ] ) giới hạn chỉ số của mảng. 
- Dấu của phép tình số học : + - / * Div Mod 
- Dấu của phép tình so sánh: > ,= , , IN 
- Dấu của phép tính xâu : + và các phép so sánh 
- Dấu các phép tính Logic : Not, And, Or, Xor 
 Từ khóa (Keyword): do ngôn ngữ qui định, là các từ mà người sử dụng không được 
dùng với mục đích khác. Pascal ưu tiên cao nhất là cho các từ này. Trong chương 
trình nếu viết đúng ngữ pháp từ khoá có màu trắng. Từ khoá chia thành 3 nhóm: 
- Các từ chung: PROGRAM, BEGIN, END, PROCEDURE, FUNCTON 
- Các từ khai báo: LABEL,CONST,TYPE,VAR, FILE, RECORD 
- Các lệnh điều khiển: GOTO, IF THEN ELSE, CASE OF, FOR TO DO, WHILE DO, 
REPEAT UNTIL, . . . 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 4 
 Từ chuẩn: là các từ mà Pascal đặt tên sẵn nhưng người sử dụng có thể thay đổi được, 
như: READ, WRITE, INTEGER, REAL  
 Tên (Identifier): Mọi đại lượng sử dụng trong chương trình Pascal (hằng, biến, kiểu, 
hàm, tên chương trình ) đều phải đặt tên để chương trình có thể nhận dạng được. 
Tên do người sử dụng tự đặt, tuỳ từng phiên bản của Pascal mà qui định về tên là 
khác nhau.Với Turbo 7.0 trở lên, tên có độ dài tuỳ ý, có thể đến 127 ký tự, nhưng chỉ 
có 40 ký tự đầu là có nghĩa (phân biệt sự khác nhau giữa các tên). Thông thường tên 
đặt ngắn và viết tắt cho nghĩa của các hàm, biến, kiểu cho dễ nhận dạng. 
 Dấu chấm phẩy và lời giải thích: 
- Kết thức mọi câu lệnh của Pascal là dấu ; Có thể viết nhiều lệnh trên một dòng và ngăn 
cách nhau bằng dấu ;. Sau các từ khai báo như Var, Type, ConstBegin không có dấu ; 
- Trong chương trình, người sử dụng có thể đưa vào một số dòng giải thích cho từng 
phần của chương trình, hoặc giải thích cho các biến, quá trình thực hiện , những dòng 
này chỉ hiện trong listing chương trình, không có tác dụng với trình dịch và quá trình 
thực hiện. Những dòng này được đặt trong cặp ngoặc { } hoặc {* *} và sẽ hiện màu 
ghi nhạt để nhận biết. Khi gặp những dòng này chương trình bỏ qua phần biên dịch và 
thực hiện. 
2. Hằng và biến: 
 Hằng là một đại lượng có giá trị không đổi trong các lần thực hiện chương trình. 
Hằng có thể sử dụng qua một tên và được gán giá trị cụ thể. Các tên của hằng tham 
gia trong chương trình sẽ tự động được gán giá trị đã khai báo. Khi cần thay đổi giá 
trị của hằng, chỉ cần thay trong phần khai báo, chương trình sẽ tự động cập nhật. 
 Biến là một đại lượng có giá trị thay đổi trong mỗi lần thực hiện chương trình. Biến 
có thể là biến đơn (m,i), biến mảng (A[i], B[i,j]), biến bản ghi (DS[i].HT)Tất cả 
các biến dùng trong chương trình đều phải đặt tên (khác nhau) và phải khai báo. Tên 
biến dùng để xác lập quan hệ giữa biến, địa chỉ bộ nhớ lưu giữ biến. 
3. Toán tử và biểu thức: 
 Toán tử là dấu các phép tính của các phép toán số học, quan hệ, logic, xâu, dùng để 
kết nối các hằng, biến, hàm thành các biểu thức phức tạp. 
 Biểu thức là một thành phần hầu như có mặt trong mọi chương trình. Nó có thể là 
một hằng, một biến, hoặc kết hợp giữa hằng, biến, hàm mẫu và các toán tử. Pascal có 
4 loại biểu thức: biểu thức số học, biểu thúc so sánh (quan hệ), biểu thức xâu, biểu 
thức logic. Tùy từng loại biểu thức mà kết quả của nó có thể là một giá trị số, xâu 
hoặc nhận một trong hai giá trị logic đúng (True) và sai (False). 
4. Hàm mẫu và thủ tục: 
 Hàm mẫu: là những modul chương trình, đã được viết sẵn, được dịch và cài đặt trong 
thư viện của chương trình. Khi sử dụng người dùng chỉ việc gọi nó ra qua tên hàm và 
đưa vào các đối số (đặt trong cặp ngoặc tròn) theo qui định của chương trình. Sau khi 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 5 
tính toán, chương trình trả lại kết quả tại vị trí của hàm mẫu. Hàm mẫu có thể được 
gọi riêng hoặc là một thành phần trong biểu thức. Mỗi loại biểu thức lại có một số 
hàm mẫu khác nhau. 
 Thủ tục: cũng giống như hàm mẫu, nó cũng dùng để thực hiện một nhiệm vụ nào đó, 
được Pascal viết sẵn hoặc người sử dụng tự tạo và sau đó có thể được sử dụng nhiều 
lần qua tên và các tham số (không bắt buộc). 
5. Các lệnh: 
Lệnh là một trong các thành phần quan trọng tạo nên chương trình. Lệnh dùng để xác 
định các công việc mà chương trình cần thực hiện. Lệnh trong Pascal phần thành 2 nhóm: 
Lệnh đơn giản và lệnh có cấu trúc. Lệnh thực hiện và lệnh không thực hiện. 
Lệnh đơn giản là lệnh không chứa lệnh khác : lệnh gán, các lệnh nhập, xuất dữ liệu, lời 
gọi thủ tục, chương trình con. 
Lệnh có cấu trúc là lệnh có chứa các lệnh khác trong đó: các lệnh điều khiển, chu 
trình 
Lệnh không thực hiện: là các lệnh khai báo, không thực hiện gì, không có kết quả. 
Lệnh thực hiện: là các lệnh thực hiện một hoặc nhiều thao tác nào đó theo yêu cầu của 
chương trình. 
6. Cấu trúc chung của chương trình Pascal: 
Nói chung chương trình Pascal có 3 phần: 
 Phần tiêu đề : khai báo tên của chương trình chính hoặc chương trình con (không bắt 
buộc): PROGRAM Tên_CT_chính ; PROCEDURE Tên_CT_Con ; . 
 Phần khai báo: tuỳ từng chương trình cụ thể mà có thể có phần này và số lượng 
nhiều ít khác nhau, theo một trật tự nhất định (Label,Const, Type, Var, Procedure). 
Mọi hàm, biến, kiểu sử dụng trong chương trình đều phải báo theo những qui định 
của chương trình (xem chương 2). 
 Phần thân chương trình: Mọi chương trình đều phải có phần thân, bắt đầu bằng 
BEGIN và kết thúc bằng END. Trong thân chương trình thông thường có 3 mảng 
chính : 
- Nhập các dữ liệu ban đầu 
- Tính toán, xử lý các yêu của bài toán 
- Xuất, in kết quả ra màn hình, giấy in, ghi vào tệp trên đĩa. 
Ngoài ra có thể thêm các dòng chú giải. 
Ví dụ: 
Program Chuong_trinh_con_sap_xep_ma_tran; 
{ Phan khai bao } 
 Type k1=array[1..15,1..15] of real; 
 var n,m,i,j,k:integer; 
 a:k1; 
 c:real; 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 6 
 Procedure NhapDL ( Var n,m:integer;Var A:k1); 
 begin 
 write('n,m=?'); 
 readln(n,m); 
 for i:=1 to n do 
 for j:=1 to m do 
 begin 
 write('A[',i,',',j,']=?'); 
 readln(a[i,j]); 
 end 
 end; 
 . . . . 
 { Phan than chuong trinh } 
 BEGIN 
 { Cac loi goi chuong trinh con } 
 NhapDL(n,m,A); 
 Xuly(n,m,A); 
 InKetqua (n,m,A); 
 readln 
 END. 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 7 
Chương 2 CÁC KIỂU DỮ LIỆU VÀ CÁCH KHAI BÁO – BIỂU THỨC 
I. Các kiểu dữ liệu 
1. Khái niệm: Mỗi đại lượng tính toán trong chương trình đều có 3 đặc trưng : tên- kiểu 
dữ liệu và giá trị. Pascal là ngôn ngữ lập trình có định kiểu mạnh. Kiểu dữ liệu xác định 
cách ghi, nhận và xử lý dữ liệu trong máy. Dữ liệu có 2 loại: Dữ liệu chuẩn (không có cấu 
trúc) và Dữ liệu có cấu trúc. 
 Dữ liệu chuẩn là DL không thể phân nhỏ ra thành các bộ phận, nó là dữ liệu nguyên 
thủy hay vô hướng. 
 Dữ liệu có cấu trúc là DL được lập ra từ DL nguyên thủy theo một cách nào đó, có 
cấu trúc phức tạp hơn. Khi dùng DL này, người lập trình phải mô tả trước cấu trúc để 
chương trình có cách xử lý riêng. 
 Ngoài ra Pascal còn có kiểu dữ liệu con trỏ là loại DL có cấu trúc thay đổi trong quá 
trình xử lý. 
2. Sơ đồ cấu trúc các kiểu dữ liệu: 
 Kiểu chuẩn (Nguyên – Thực –Logic -Ký tự) 
 Kiểu vô hướng 
 Kiểu tự tạo - Miền con (Subrange) 
 – Liệt kê ( Enumerated) 
 Kiểu có cấu trúc - Kiểu mảng (Array) 
 - Kiểu tập hợp (Set) 
 - Kiểu bản ghi (Record) 
 - Kiểu tệp (File) 
 Kiểu xâu (String) 
 Kiểu con trỏ động (Pointer) 
3. Cách khai báo các kiểu dữ liệu: 
 Khai báo trực tiếp: đối với các dữ liệu vô hướng, hoặc kiểu của dữ liệu đã xác định, 
có thể khai báo trực tiếp theo dạng : Danh sách dữ liệu : kiểu dữ liệu; 
Ví dụ : Var 
 I, m : integer; T: real; 
 A : aray [1 .. 20 ] of real; 
 Khai báo gián tiếp: cách khai báo này có thể áp dụng cho mọi loại dữ liệu đã xác 
định kiểu hoặc chưa xác định kiểu. Dùng cách này, bước đầu là mô tả kiểu cho DL 
(tạo kiểu mới) bằng từ khóa Type, sau đó khai báo. 
Ví dụ: Type 
 CS = integer ; 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 8 
 VT= aray [1.. 20] of real; 
 Var m,i : CS ; 
 A, B : VT; 
II. Các dữ liệu đơn giản chuẩn (vô hướng) – Khai báo 
1. Dữ liệu nguyên: 
 Là kiểu để biểu diễn một miền số nguyên. Giá trị tối đa của nó phụ thuộc vào phạm 
vi của máy. Số nguyên có thể dùng cho các hằng, biến, hàm, kiểu. 
 Số nguyên có thể dùng trong các phép tính số học ( +, -, *, div, mod), các phép tính 
so sánh (>, =, ). 
 Dữ liệu nguyên có thể khai báo qua từ khóa INTEGER, BYTE, LONGIN, WORD 
Để khai báo các giá trị tối đa các chiều của mảng, chỉ số phần tử mảng, biến điều khiển chu 
trình phải là số nguyên. 
 Cách khai báo : Danh sách dữ liệu: Integer ; 
 Ví dụ: m , i, sl :Integer ; 
2. Dữ liệu thực: 
 Là kiểu để biểu diễn một số thập phân có 2 dạng: 
- Dạng thông thường: dùng dấu chấm thay cho dấu phẩy thập phân. Ví dụ: 3168.72 
- Dạng khoa học: dùng lũy thừa cơ số 10 có dạng E± n1n2 . Ví dụ: 0.1267E+03 
 Số thực có thể dùng trong các phép tính số học ( +, -, *, / ), các phép tính so sánh (>, 
=, ), các thành phần của hàm mẫu số như SIN, COS, ABS, SQRT  
 Dữ liệu nguyên có thể khai báo qua từ khóa REAL, SINGLE, DOUBLE, EXTENDED 
 Cách khai báo : Danh sách dữ liệu: Real ; 
 Ví dụ: a,b, tong : Real ; 
3. Ký tự: 
 Là kiểu nhận một ký tự bất kỳ trong số 256 ký tự của bảng mã ASCII, nó có thể là 
chữ, dấu hoặc một ký hiệu đặc biệt. 
 Kiểu ký tự có thể tham gia các phép tính cộng (ghép) hoặc các phép tính so sánh (>, 
=, ) hoặc các hàm mẫu của ký tự như PRED, SUCC, CHR  
 Cách khai báo : Danh sách dữ liệu: Char ; 
 Ví dụ: nhan, hoi : Char; 
4. Kiểu miền con: 
 Là kiểu dùng để xác định một khoảng giá trị mà dữ liệu có thể nhận. Miền con là 
kiểu đếm được có giới hạn trên và giới hạn dưới, các giá trị tiếp theo trong miền theo 
một trật tự tự nhiên. 
 Cách khai báo: kiểu miền con cũng có thể khai báo trực tiếp hoặc gián tiếp có dạng 
Tên kiểu = Hằng cận dưới . . Hằng cận trên 
 Ví dụ: Type thang = 1 .. 12 ; max = 1.. 100 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 9 
Var A: array [ max] of real; 
 TD,TC : thang; 
5. Kiểu liệt kê: 
 Là một tập hợp hữu hạn các giá trị đặt trong cặp ngoặc tròn, được sắp xếp theo một 
thứ tự tùy ý ngăn cách nhau bởi dấu phẩy. 
 Cách khai báo: kiểu liệt kê cũng có thể khai báo trực tiếp hoặc gián tiếp có dạng 
Tên kiểu = (Giá trị1, giá trị2,. . . giá trị n); 
 Ví dụ: Type Caukien = ( tuong, cot, dam,san, panen ) 
Var Btong, Thep: caukien ; 
6. Kiểu xâu ký tự (String): 
 Xâu là một dãy ký tự có độ dài tối đa là 255 ký tự ( theo bảng mã ASCII). Xâu có thể 
dùng để chứa các tiêu đề, lời nhắc (hằng xâu); chứa các dữ liệu chữ, số, dấu  như 
họ tên, địa chỉ, Xâu có thể là hằng, biến (đơn,mảng). 
 Khai báo xâu dùng từ khóa STRING . 
 Cách khai báo: Danh sách dữ liệu: String [n] ; trong đó n là độ dài của xâu 
 Ví dụ Ten:= ‘ Dai hoc xay dung’ ; 
Var HT : array [1 .. 10 ] of string [30] ; 
III. Các kiểu dữ liệu có cấu trúc – Cách khai báo 
1. Khái niệm : Trong Turbo Pascal có 6 kiểu dữ liệu có cấu trúc: Array, Set, Record, 
File, String, Pointer. Muốn làm việc với các dữ liệu này, trước tiên phải khai báo tường 
minh chúng, một số loại có thể khai báo trực tiếp như Array, String, còn một số khác phải 
khai báo gián tiếp (mô tả cấu trúc – mô tả kiểu của dữ liệu trước khi khai báo chúng qua 
từ khóa Type). 
2. Khai báo - mô tả kiểu: 
 Để mô tả một kiểu dữ liệu mới do người lập trình tự tạo dùng từ khóa TYPE có cấu 
trúc như sau: 
 TYPE 
 Tên kiểu = Mô tả cấu trúc 
 Ví dụ: Type 
 Thang = [1..12] ; 
 VT = array [1.. 50] of Real ; 
 Hoso = Record 
 HT : string [25] ; 
 NS: integer; 
 LT : array [1.. 30 ] of real ; 
 End; 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 10 
3. Kiểu mảng (Array): 
 Khái niệm: 
-  ... ận giá trị “sai” . 
 Các lưu ý : 
- Khi sử dụng lệnh While Do cho các thuật toán chu trình phải chú ý, trong câu lệnh 
chưa có các bước gán giá trị đầu và tăng biến điều khiển. Do vậy chúng ta phải tự bổ 
sung nếu cần. Bước nhẩy của biến điều khiển là bất kỳ. 
- Nếu Miền tác động có 1 lệnh thì viết ngay sau Do, nếu có từ 2 lệnh trở lên thì các 
lệnh này phải đặt trong khối Begin End; 
- Khôngcó dấu ; sau Do 
- Các lệnh có thể lồng nhau, tuy nhiên các vòng lặp không được cắt nhau. 
- Vòng lặp trong có thể kết thức trước khi giá trị của biến điều khiển nhận giá trị “sai” 
và chuyển ra vòng lặp ngoài, tuy nhiên không thể chuyển từ vòng lặp ngoài vào vòng 
lặp trong. 
- Lệnh While Do là loại lệnh kiểm tra trước,thực hiện sau, do vậy có thể không có 
vòng lặp nào được thực hiện. 
 Ví dụ: - Các ví dụ minh hoạ cho câu lệnh: 
+ WHILE i <= n DO T:= T + i / X[i] ; 
+ WHILE Hoi = ‘C’ DO 
 Begin 
 Write (‘Nhap du lieu ‘); 
 Readln ( SV [i]. Hoten, SV [i] . Diem); 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 28 
 Readln (Hoi) ; 
 End; 
+ i:= 1 ; 
 WHILE i <= n DO 
Begin 
 Write (’ A[ ’ , i , ’ ] = ’); Readln ( A[i] ); 
 T:=T + A[i] ; i := i+ 1 
End; 
3. Câu lệnh lặp với điều kiện kiểm tra sau - REPEAT (REPEAT UNTIL) 
 Khái niệm: Lệnh Repeat Until dùng cho cả 2 dạng bài toán lặp với số lần lặp đã xác 
định và không xác định. 
 Cấu trúc lệnh : 
Repeat Until ; 
 Giải thích các đại lượng : 
- Biểu thức điều kiện là biểu thức so sánh hoặc Logic, kết quả của nó chỉ nhận một trong 
2 giá trị đúng hoặc sai. 
- Miền tác động của lệnh (Các lệnh lặp nằm giữa Repeat và Until) có thể là 1 hoặc nhiều 
lệnh, các lệnh này sẽ được thực hiện khi điều kiện là sai. 
 Cách thực hiện của lệnh: Khi gặp lệnh, chương trình thực hiện ít nhất một lần các 
lệnh trong miền tác động (giữa Repeat tới Until), sau đó kiểm tra giá trị của BTĐK, 
các lệnh sẽ được thực hiện lặp lại khi giá trị của biểu thức điều kiện là “sai” và sẽ 
dừng thực hiện ngay khi giá trị của BTĐK nhận giá trị “đúng” . 
 Các lưu ý : 
- Khi sử dụng lệnh Repeat .. Until cho các thuật toán chu trình phải chú ý, trong câu 
lệnh chưa có các bước gán giá trị đầu và tăng biến điều khiển. Do vậy chúng ta phải 
tự bổ sung nếu cần. Bước nhẩy của biến điều khiển có thể là bất kỳ. 
- Miền tác động của lệnh không phải đặt trong khối Begin End; 
- Các lệnh có thể lồng nhau, tuy nhiên các vòng lặp không được cắt nhau. 
- Vòng lặp trong có thể kết thúc trước khi giá trị của biểu thức điều kiện nhận giá trị 
“đúng” và chuyển ra vòng lặp ngoài, tuy nhiên không thể chuyển từ vòng lặp ngoài 
vào vòng lặp trong. 
- Lệnh Repeat Until là loại lệnh thực hiện trước, kiểm tra sau, do vậy các lệnh lặp sẽ 
thực hiện ít nhất 1 lần. 
 Ví dụ: - Các ví dụ minh hoạ cho câu lệnh: 
+ REPEAT 
 T:= T + i / X[i] 
 Until i > n ; 
+ REPEAT 
 Write (‘Nhap du lieu, Ho ten ‘); 
 Readln ( SV[i] . Hoten); 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 29 
 Readln (Hoi) ; 
 Until Hoi = ‘K’; 
+ i:= 1 ; 
 Repeat 
 Write (’ A[ ’ , i , ’ ] = ’); Readln ( A[i] ); 
 T:=T + A[i] ; i := i+ 1 
Until i > n ; 
- Ví dụ sử dụng cả 3 lệnh chu trình: Cho một véc tơ A có n phần tử. Viết chương trình 
tạo ra 2 véc tơ mới từ A là véc tơ B chỉ chứa các phần tử dương và véc tơ C chỉ chứa 
các phần tử âm. 
Program Tach_vec_to; 
Var i,j,k, n: integer; 
 A, B, C : array [1..10] of real; 
 BEGIN 
 Write (' Nhap so phan tu n= '); 
 Readln (n); 
 i:=1; { Nhap du lieu mang A – su dung Repeat } 
 Repeat 
 Write (' Nhap gia tri cua phan tu thu A[ ', i, ' ] : ' ); 
 Readln (a[i]); 
 i:= i+ 1 
 Until i >n ; 
{ Tach vec to – Su dung While Do } 
i:=1; j:= 1 ; k:= 1; 
 While i<= n Do 
 Begin 
 If a[i] > 0 Then 
 Begin 
 J:= j + 1; 
 B [j] := A[i] 
 End 
 Else If a[i] <0 Then 
 Begin 
 k := k + 1 ; 
 C [k] := A [i] 
 End; 
 i:= i+ 1 ; 
 End; 
{ In ket qua - Su dung For } 
 If j 0 Then 
 Begin Writeln ( ’ Cac phan tu cua vec to B’ ); 
 For i:= 1 to J Do Write (B [i] :6:1); 
 Writeln; 
 End 
 Else Writeln ( ’ Khong co phan tu duong trong vec to A ’ ); 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 30 
 If k 0 Then 
 Begin Writeln ( ’ Cac phan tu cua vec to B’ ); 
 For i:= 1 to k Do Write (C [i] :6:1); 
 Writeln; 
 End 
 Else Writeln ( ’ Khong co phan tu am trong vec to A ’ ); 
Readln 
END. 
IV. Dữ liệu kiểu bản ghi (Record) và ứng dụng: 
1. Khái niệm: Khác với một số dữ liệu đã biết ở các phần trước như mảng, tập hợp là 
các phần tử phải cùng kiểu, Bản ghi là cách đơn giản để kết hợp nhiều dữ liệu có các 
kiểu khác nhau thành một kiểu mới do người dùng tự định nghĩa. 
Đặc điểm của dữ liệu bản ghi : 
- Mỗi bản ghi có một tên chung và mỗi mục dữ liệu trong BG được gọi là một trường 
(field). Mỗi trường có thể có kiểu bất kỳ. 
- Mỗi bản ghi có thể có nhiều trường, trong các trường lại có thể có trường con. 
- Bản ghi có thể có cấu trúc không đổi hoặc thay đổi. 
- Các bản ghi có thể lồng nhau (trong các trường lại là một bản ghi khác). 
- Trước khi làm việc với dữ liệu bản ghi, chúng ta phải khai báo chúng. 
2. Khai báo dữ liệu kiểu bản ghi: 
Khai báo trực tiếp Khai báo gián tiếp 
Var 
 Tên_bản_ghi : Record 
 Tên_trường_1: Kiểu; 
 Tên_trường_2: Kiểu; 
 . . . . . . 
 Tên_trường_n: Kiểu; 
 End; 
Type 
 Tên_bản_ghi = Record 
 Tên_trường_1: Kiểu; 
 Tên_trường_2: Kiểu; 
 . . . . . 
 Tên_trường_n: Kiểu; 
 End; 
Var Danh_sách_biến_BG : Kiểu_bản_ghi; 
 Trong đó: tên của bản ghi và tên trường tuân theo qui định đặt tên của Pascal. Kiểu phải 
là một trong các kiểu vô hướng, mảng hoặc một kiểu mới đã khai báo trước đó. 
 - Minh họa: + Tạo và khai báo 1 bản ghi để lưu trữ dữ liệu cho từng cán bộ trong một 
cơ quan bao gồm các thông tin: Họ tên, Địa chỉ, năm sinh, lương, giới tính, tình trạng gia 
đình: 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 31 
Type 
 TTHS = Record 
 Ho_ten : string [ 25]; 
 D_chi : string [ 40 ]; 
 N_sinh: integer; 
 Luong : real ; 
 G_tinh : Char ; 
 TTGD : integer 
 End ; 
+ Để lưu trữ dữ liệu cho cả cơ quan có m người, dùng một mảng Ho_so, trong đó mỗi 
phần tử của mảng là một record có cấu trúc TTHS và khai báo mảng qua Var như sau: 
 Var Ho_so : Array [1.. m] of TTHS ; ( m là hằng số) 
3. Truy nhập dữ liệu bản ghi: 
Để truy nhập bản ghi cũng sử dụng các lệnh Read, Write và các lệnh chu trình. Muốn 
nhập hoặc xuất dữ liệu bản ghi, phải làm việc với từng trường thông qua các biến bản 
ghi. Cấu trúc lệnh như sau: 
 Read[ln] ( Biến_bản_ghi. Trường1. trường1_1); 
 Write[ln] ( Biến_bản_ghi. Trường1. trường1_1); 
Biến bản ghi có thể là biến đơn hoặc biến mảng. 
- Nhập dữ liệu cho từng cán bộ vào mảng hồ sơ của cơ quan khai báo ở trên như sau: 
 For i:= 1 to m Do 
 Begin 
 Writeln ( ’ Dua vao Ho ten, Dia chi  cua can bo thu’ , i , ’: ’ ); 
 Readln (Ho_so [i] . Ho_ten, Ho_so[i] . D_chi ); 
 End; 
- In lên màn hình danh sách cán bộ gồm Họ tên, Năm sinh, Lương của cả cơ quan : 
 For i:= 1 to m Do 
 Writeln(Ho_so [i].Ho_ten :25, Ho_so[i].N_sinh :6, Ho_so[i].Luong :8:2); 
4. Tính toán, xử lý dữ liệu bản ghi: 
Để tính toán, xử lý các dữ liệu bản ghi, có thể dùng tất cả các lệnh của Pascal như các 
lệnh điều khiển, lệnh chu trình, lệnh gán  
Tuy nhiên trong các câu lệnh với kiểu bản ghi thường xuyên phải nhắc lại tên của biến, 
tên trường làm câu lệnh dài, rườm rà Trong Pascal có thể dùng câu lệnh With để khắc 
phục điều này. Khi sử dụng With thì các tham số không cần xuất hiện 
trong các câu lệnh đựoc phủ trong miền With. 
Cấu trúc của lệnh With 
 WITH Tên_biến_bản_ghi . Tên_trường . [tên_trường . . .] DO 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 32 
Viết lại các câu lệnh trên dùng With 
For i:= 1 to m Do With Ho_so[i] Do 
 Writeln (Ho_ten: 25,N_sinh: 6, Luong: 8:2); 
5. Ví dụ: 
 Các ví dụ minh hoạ cho câu lệnh: 
 Khai báo gián tiếp bản ghi đơn Khai báo bản ghi kép 
Type 
 SV = Record 
 HT : string [15]; 
 D : array [ 1.. 50 ] of real ; 
 TB : real; 
 PL : Char; 
 End ; 
 VT = array [1..60] of SV ; 
Var 
 DS1,DS2 : VT ; 
Type 
 HT = Record 
 Ho : String [15] ; 
 Dem : String [10] ; 
 Ten : String [15] ; 
 End; 
 SV = Record 
 Hoten : HT; 
 D : array [ 1.. 50 ] of real ; 
 TB : real; 
 PL : Char; 
 End ; 
Var DS : array [1..60] of SV; 
 Các bài tập ví dụ: 
- Bài tập 1: Cho một lớp học sinh, biết mã số SV, tên và điểm thi 3 môn của mỗi sinh viên. 
Viết chương trình (cấu trúc dữ liệu kiểu bản ghi) tính điểm trung bình của từng người và 
sắp xếp lại danh sách theo điểm trung bình tăng dần . 
Program Vi_du_Ban_ghi_Sapxep; 
type sinhvien = record 
 masv:string[10]; 
 tensv: string[30]; 
 dt,dl,dh,dtb:real; 
 end; 
var 
 temp:sinhvien; 
 sv:array[1..100] of sinhvien; 
 n, i, j: integer; 
BEGIN 
 {Nhap du lieu n sinh vien} 
 write('Nhap so sinh vien:'); 
 readln(n); 
 for i:=1 to n do 
 begin 
 writeln('Nhap thong tin cua sv thu ' , i); 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 33 
 write('Ma sv:'); readln(sv[i].masv); 
 write('Ten sv:'); readln(sv[i].tensv); 
 write('Diem toan:'); readln(sv[i].dt); 
 write('Diem ly:'); readln(sv[i].dl); 
 write('Diem hoa:'); readln(sv[i].dh); 
 sv[i].dtb := (sv[i].dt+sv[i].dl+sv[i].dh)/3; 
 end; 
 {in ra danh sach sinh vien vua nhap} 
 writeln; 
 writeln(' Danh sach sinh vien vua nhap'); 
 writeln(' STT ','Masv':5,'Tensv':10,' DT DL DH DTB'); 
 for i:=1 to n do 
 writeln(i:4, sv[i].masv:5, sv[i].tensv:10, sv[i].dt:6:1, sv[i].dl:6:1, sv[i].dh:6:1, 
sv[i].dtb:6:1); 
 {sap xep danh sach sinh vien theo diem trung binh tang dan} 
 for i:= 1 to n do 
 for j:=i+1 to n do 
 if (sv[i].dtb >sv[j].dtb) then 
 begin 
 temp:=sv[i]; 
 sv[i]:=sv[j]; 
 sv[j]:=temp; 
 end; 
 {in ket qua sau danh sach sinh vien sau khi sap xep} 
 writeln; 
 writeln(' Danh sach sinh vien sap theo thu tu dtb tang dan'); 
 writeln(' STT ','Masv':5,'Tensv':10,' DT DL DH DTB'); 
 for i:=1 to n do 
 writeln(i:4, sv[i].masv:5, sv[i].tensv:10, sv[i].dt:6:1, sv[i].dl:6:1, sv[i].dh:6:1, 
sv[i].dtb:6:1); 
readln; 
END. 
- Bài tập 2 : Cho một lớp học sinh có n người, biết mã số SV, tên và điểm thi m môn của 
mỗi sinh viên. Viết chương trình (cấu trúc dữ liệu kiểu bản ghi) tính điểm trung bình của 
từng người và tách danh sách lớp thành 3 danh sách: những SV có DTB nhỏ hơn 5 từ 5-
7,và DTB >8. 
Program Ban_ghi_Tao_danh_sach; 
 type sv=record 
 ms:integer; 
 ht:string[25]; 
 d:array[1..20] of real; 
 dtb:real 
 end; 
 var n,m,n1,n2,n3,i,j,k:integer; 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 34 
 ds,ds1,ds2,ds3:array[1..30] of sv; 
 ttsv:sv; 
 t:real; 
 BEGIN 
 Write ( ' Nhap so nguoi n, somon m= '); readln(n,m); 
 for i:=1 to n do 
 begin 
 write ( 'ms[',i,']=? ' ); readln(ds[i].ms); 
 write ( 'ht[',i,']=? ' ); readln(ds[i].ht); 
 for j:=1 to m do 
 begin 
 write('d[',j,']=? '); readln(ds[i].d[j]); 
 end 
 end; 
 { Tinh diem trung binh cho tung nguoi } 
 for i:=1 to n do 
 begin 
 t:=0; 
 for j:=1 to m do t:=t+(ds[i].d[j]); 
 ds[i].dtb:=t/m 
 end; 
 { Lap cac danh sach } 
 n1:=0; n2:=0; n3:=0; 
 for i:=1 to n do if ds[i].dtb<5 then 
 begin 
 n1:=n1+1; 
 ds1[n1]:=ds[i] 
 end else if ds[i].dtb<8 then 
 begin 
 n2:=n2+1; 
 ds2[n2]:=ds[i] 
 end else 
 begin 
 n3:=n3+1; 
 ds3[n3]:=ds[i] 
 end; 
 writeln; 
 { In ket qua ra man hinh } 
 If n1 0 then 
 begin 
 writeln('1. DS SINH VIEN CO DTB<5:'); 
 for i:=1 to n1 do writeln(ds1[i].ms:5,ds1[i].ht:15,ds1[i].dtb:10:1); 
 end; 
 writeln; 
 if n20 then 
 begin 
 writeln('2. DS SINH VIEN CO DTB: 5-7:'); 
 for i:=1 to n2 do writeln(ds2[i].ms:5,ds2[i].ht:15,ds2[i].dtb:10:1); 
 end; 
 writeln; 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 35 
 if n30 then 
 begin 
 writeln('3. DS SINH VIEN CO DTB: 8-10:'); 
 for i:=1 to n3 do writeln(ds3[i].ms:5,ds3[i].ht:15,ds3[i].dtb:10:1); 
 end; 
 writeln; 
 readln 
 END. 
4. Bài tập tự làm - Viết chương trình Pascal cho các bài tập sau: 
 4.1. Nhập từ bàn phím 3 số nguyên a, b, c. Tìm giá trị Max - Min của chúng. 
 4.2. Viết chương trình tính tổng của dãy số: 1+2+...+n (Với n được nhập vào từ 
bàn phím, n>=1). Viết bằng 3 lệnh chu trình khác nhau – So sánh – Nhận xét . 
 4.3. Viết chương trình tính tổng các số chẵn trong khoảng từ 1- n . 
 4.4. Viết chương trình tính tổng các số chẵn và chia hết cho 3 trong khoảng từ 1->n, 
với n được nhập từ bàn phím. 
 4.5. Viết chương trình tính tổng S = 1 + 1/2 + 1/3 + 1/4 +.....+1/n. Với n là số nguyên 
và chẵn. 
 4.6. Viết chương trình tính tổng S = 1 + 1/x + 1/x2 + 1/x3 +.....+1/xn. Với n được nhập 
từ bàn phím. 
 4.7. Cho một mảng X (nguyên) có m phần tử. Hãy tách mảng X thành 2 mảng Y chứa 
các phần tử chẵn của X và mảng Z chứa các phần tử chia hết cho 2. 
 4.8. Cho dữ liệu của một lớp học sinh có m người. Biết các thông tin Họ tên, Mã số 
sinh viên, điểm trung bình cả năm của mỗi người. Tìm số người có điểm trung bình >B. Lập 
2 danh sách cho những người có điểm trung bình từ 5..7 và từ 8..10. 
 4.9. Cho một dãy số (mảng 1 chiều) các số thực. Tìm số lớn nhất, bé nhất trong dãy số 
đó. Sắp xếp dãy số theo chiều tăng dần của các giá trị. 
 4.10. Cho một mảng X có m phần tử, một mảng Y có n phần tử. Hãy tạo ra mảng Z có 
m+n phần tử được ghép từ 2 mảng X, Y. Tính tổng các phần tử >A của mảng Z và tích các 
phần tử<B của Z. So sánh tổng và tích. 
 4.11. Cho dữ liệu của một lớp học sinh có m người. Biết các thông tin Họ tên, Mã số 
sinh viên, điểm các môn của n môn mỗi người. 
- Tìm điểm trung bình n môn của mỗi người. In lên màn hình Tên, Mã số, Điểm trung bình 
từng người cả lớp. 
- Lập danh sách những người có điểm trung bình các môn >8 . 
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm 
Bộ môn Tin học Xây dựng 36 
- Sắp xếp lại danh sách lớp theo điểm trung bình giảm dần. 
 4.12. Cho một ma trận A vuông (mảng 2 chiều) có m hàng, m cột. 
- Tính trung bình cộng của cả ma trận. 
- Tính tổng các phần tử nằm phía trên đường chéo chính. 
- Tìm giá trị lớn nhất của các phần tử nằm phía dưới đường chéo chính. 
 4.13. Cho dữ liệu của một phường dân cư có m người. Biết các thông tin Tên chủ hộ, 
Địa chỉ, Tổng số nước tiêu thụ (m3) mỗi tháng của mỗi nhà trong 12 tháng. 
- Nhập các thông tin của từng hộ và In lên màn hình (Tên CH., Địa chỉ ,Tháng 1 ..Tháng 12) 
- Tìm số lượng nước tiêu thụ trung bình cả phường trong năm. 
- Tìm tổng số nước tiêu thụ traong 12 tháng của từng hộ. 
- Lập danh sách những hộ có lượng tiêu thu nước > X m3 
 4.14. Cho một ma trận B (mảng 2 chiều) có m hàng, n cột. 
- Tìm giá trị nhỏ nhất của B 
- Xoá đi hàng và cột chứa giá trị nhỏ nhất đầu tiên (Xét theo hàng) của ma trận (Ma trận chỉ 
còn m-1 hàng và n-1 cột). 

File đính kèm:

  • pdfgiao_trinh_nhap_mon_tin_hoc_phan_3_ngon_ngu_lap_trinh_pascal.pdf