- Uses: Từ khoá này dùng để khai báo việc sử dụng Unit (thư viện) cho chương trình - Const: Từ khoá này dùng để khai báo các hằng số sử dụng trong chương trình, khi báo hằng số là vi[r]
(1)Chương
CÁC THÀNH PHẦN CƠ BẢN CỦA NGƠN NGỮ LẬP TRÌNH PASCAL
Pascal ngơn ngữ lập trình bậc cao Niklaus Wirth, giáo sư điện toán trường Đại học kỹ thuật Zurich (Thụy Sĩ) đề xuất năm 1970 Ông lấy tên Pascal để kỷ niệm nhà toán học nhà triết học người Pháp tiếng Blaise Pascal
1 Các tập tin cần thiết lập trình với Turbo Pascal
Để lập trình với Turbo Pascal, tối thiểu cần file sau: TURBO.EXE: Dùng để soạn thảo dịch chương trình
TURBO.TPL: Thư viện chứa đơn vị chuẩn để chạy với TURBO.EXE Ngồi ra, muốn lập trình đồ hoạ phải cần thêm tập tin:
GRAPH.TPU: Thư viện đồ hoạ
*.BGI: Các file điều khiển loại hình tương ứng dùng đồ hoạ *.CHR: Các file chứa font chữ đồ họa
2 Các bước lập chương trình Pascal Bước 1: Soạn thảo chương trình
Bước 2: Dịch chương trình (nhấn phím F9), có lỗi phải sửa lỗi Bước 3: Chạy chương trình (nhấn phím Ctrl + F9)
3 Cấu trúc chung chương trình Pascal Program <Tên_Chương_Trình>; Uses Crt; {Khai báo thư viện hàm}
Const <Hằng> = <Giá Trị>; {Khai báo hằng}
Var <Biến 1>,<Biến 2> : <Kiểu Dữ Liệu>; {Khai báo biến} Begin
Clrscr; { Lệnh xóa hình kết }
Write(‘<Yêu cầu nhập liệu>’); Readln(<Biến>); { Nếu cần} {Xử lĩ kết quả}
Writeln(‘<Thông báo kết quả>’,<kết quả>); { Nếu cần} Readln; {Giữ hình kết quả}
End
Giải thích cấu trúc khai báo trên:
Nếu có phần khai báo cần cho chương trình phải tn theo thứ tự trên, ví dụ: phần khai báo thư viện (USES) đặt sau phần khai báo số (CONST) sau (VAR) sau phần khai báo phải có dấu ‘;’
- Program: Từ khoá dùng để khai báo tên chương trình Tên chương trình phải tuân theo quy tắc:
+ Khơng có ký tự trống xen + Không đặt số ký tự
+ Trong phần tên không chứa ký tự đặt biệt như: ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘^’, ‘&’, ‘* ’, ‘(‘, ‘)’, ‘-‘, ‘+’, ‘/’, ‘\’, ‘.’, ’,’,.v.v
+ Kết thúc phải có dấu ‘;’ + Phần khơng có
- Uses: Từ khoá dùng để khai báo việc sử dụng Unit (thư viện) cho chương trình - Const: Từ khoá dùng để khai báo số sử dụng chương trình, báo số việc cố định vài giá trị chương trình thơng qua tên hằng, ví dụ cách khai báo hằng:
- Var: Từ khoá dùng để khai báo biến số sử dụng chương trình Biến số các giá trị thay đổi suốt q trình chạy chương trình Khái niệm biến số quan trọng việc lập trình (khái niệm trình bày kỹ 3) Một ví dụ cách khai báo biến:
(2)Ghi chú:
- Thứ tự khai báo điều bắt buộc, ta phải nắm thứ tự cho dù số khái niệm ta chưa biết Trong chương trình Pascal, để tạo lời thích, ta sử dụng cặp dấu { } (* *) lồng câu thích vào bên
- Trên dịng viết nhiều câu lệnh Các lệnh cách dấu chầm phẩy
Ví dụ :
Program GioiThieu; Begin
Writeln ( ‘Truong THCS Luong Tam‘ );
Write ( ‘Ap – Luong Tam – Long My – Hau Giang‘ ); End
4 Các thao tác soạn thảo chương trình - F2: Lưu chương trình soạn thảo - F3: Tạo file mở file cũ - F9: Dịch thử chương trình để kiểm tra lỗi - Ctrl - F9: Chạy chương trình
- Alt - F5: Xem kết chạy chương trình
- Alt - X: Thốt khỏi hình soạn thảo chương trình Pascal Insert: Chuyển qua lại chế độ đè chế độ chèn Home: Đưa trỏ đầu dòng
End: Đưa trỏ cuối dòng
Page Up: Đưa trỏ lên trang hình Page Down: Đưa trỏ xuống trang hình Del: Xố ký tự vị trí trỏ
Back Space (): Xóa ký tự bên trái trỏ Ctrl-PgUp: Đưa trỏ đầu văn Ctrl-PgDn: Đưa trỏ cuối văn Ctrl-Y: Xóa dịng vị trí trỏ
5 Các thành phần phần khai báo chương trình a Từ khóa
Các từ khố từ dùng để khai báo, đặt tên cho đối tượng Pascal, ta đặt tên cho đối tượng đó, khơng đặt trùng tên với từ khố
Bảng từ khố ngơn ngữ Pascal gồm:
and, array, begin, case, const, div, do, downto, else, end, file, for, function, goto, if, in, label, mod, nil, not, object, of, or, procedure, program, record, repeat, set, string, then, to, type, unit, until, uses, var, while, with
Turbo Pascal không phân biệt ký tự thường hoa Ví dụ, cách viết sau có ý nghĩa như nhau: Begin, BEGIN, begin, beGIN, bEGIN,
b Tên (định danh)
Tên (định danh) dãy ký tự dùng để đặt tên cho hằng, biến, kiểu, tên chương trình Khi đặt tên, ta phải ý số điểm sau:
Không đặt trùng tên với từ khoá
Ký tự tên không bắt đầu ký tự đặc biệt chữ số Không đặt tên với ký tự space, ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘^’,‘&’, ‘* ’, ‘(‘, ‘)’, ‘-‘, ‘+’, ‘/’, ‘\’, ‘.’, ’,’,.v.v
c Hằng
(3)Ví dụ: CONST Max = 100;
Name = 'Tran Van Hung'; Continue = FALSE; d Biến
- Biến đại lượng mà giá trị thay đổi trình thực chương trình - Cú pháp khai báo: VAR <Tên biế n>,<Tên biế n 2>, : <Kiể u liệ u>;
Ví dụ:
VAR x, y: Real; {Khai báo hai biến x, y có kiểu Real}
a, b: Integer; {Khai báo hai biến a, b có kiểu integer} 6 Các thành phần phần thân chương trình
a Biểu thức: Biểu thức (expression) cơng thức tính tốn mà bao gồm phép toán, hằng, biến, hàm dấu ngoặc đơn
Ví dụ: (x +sin(y))/(5-2*x) biểu thức số học
(x+4)*2 = (8+y) biểu thức logic
Trong biểu thức, thứ tự ưu tiên phép toán liệt kê theo thứ tự sau: Dấu ngoặc ( )
Phép toán ngơi (NOT, -) Phép tốn *, /, DIV, MOD, AND Phép toán +, -, OR, XOR
Phép toán so sánh =, <, >, <=, >=, <>, IN
Chú ý: Một hăng, biến, hàm xem biểu thức, biểu thức đơn giản b Câu lệnh
Câu lệnh đơn giản
- Câu lệnh gán (:=): <Tên biến>:=<Biểu thức>;
- Các lệnh xuất nhập liệu: READ/READLN, WRITE/WRITELN Câu lệnh có cấu trúc
- Câu lệnh ghép: BEGIN END;
- Các cấu trúc điều khiển: IF , CASE , FOR , REPEAT , WHILE
Lệnh xuất liệu: Để xuất liệu hình, ta sử dụng ba dạng sau: (1) WRITE(<tham số 1> [, <tham số 2>, ]);
(2) WRITELN(<tham số 1> [, <tham số 2>, ]); (3) WRITELN;
Các thủ tục có chức sau:
(1) Sau xuất giá trị tham số hình trỏ khơng xuống dịng (2) Sau xuất giá trị tham số hình trỏ xuống đầu dịng (3) Xuất hình dịng trống
Các tham số hằng, biến, biểu thức Nếu có nhiều tham số câu lệnh tham số phải phân cách dấu phẩy
Nhập liệu: Để nhập liệu từ bàn phím vào biến có kiểu liệu chuẩn (trừ biến kiểu BOOLEAN), ta sử dụng cú pháp sau đây:
READLN(<biến 1> [,<biến 2>, ,<biến n>]);
(4)Chương
CÁC KIỂU DỮ LIỆU CƠ BẢN I KIỂU LOGIC
- Kiểu logic kiểu biểu diễn hai trạng thái (True) sai (False) Từ khoá để khai báo cho kiểu logic BOOLEAN
- Các phép toán: phép so sánh (=, <, >) phép toán logic: AND, OR, XOR, NOT Trong Pascal, so sánh giá trị boolean ta tuân theo qui tắc: FALSE < TRUE Giả sử A B hai giá trị kiểu Boolean Kết phép toán thể qua bảng đây:
A B A AND B A OR B A XOR B NOT A
TRUE TRUE TRUE TRUE FALSE FALSE
TRUE FALSE FALSE TRUE TRUE FALSE
FALSE TRUE FALSE TRUE TRUE TRUE
FALSE FALSE FALSE FALSE FALSE TRUE
Ví dụ:
Var Co : Boolean; Co := True;
II KIỂU SỐ NGUYÊN a Các kiểu số nguyên
Tên kiểu Phạm vi Dung lượng
Shortint -128 127 byte
Byte 255 byte
Integer -32768 32767 2 byte
Word 65535 byte
LongInt -2147483648 2147483647 4 byte b Sử dụng hàm Random(n) để lấy số ngẫu nhiên:
Hàm Random(n) trả giá trị nguyên mà máy lấy ngẫu nhiên có giá trị từ đến n Trong đó, n số kiểu Word tức khoản từ 65535 Trước sử dụng hàm Random ta phải gọi thủ tục Randomize để khởi tạo tạo số ngẫu nhiên
Ví dụ:
Var so : Integer; …
Randomize
so := Random(1000);
c Các phép toán kiểu số nguyên
Các phép toán số học: +, -, *, / (phép chia cho kết số thực) Phép chia lấy phần nguyên: DIV (Ví dụ : 34 DIV = 6)
Phép chia lấy số dư: MOD (Ví dụ: 34 MOD = 4) III KIỂU SỐ THỰC
a Các kiểu số thực
Tên kiểu Phạm vi Dung lượng
Single 1.510-45 3.410+38 4 byte
(5)Chú ý:
- Trên kiểu số thực khơng tồn phép tốn DIV MOD
- Biến số thực nhận giá trị nguyên Nhưng biến số nguyên không nhận giá trị thực
c Các hàm số học sử dụng cho kiểu số nguyên số thực:
SQR(x): Trả x2
SQRT(x): Trả bậc hai x (x0)
ABS(x): Trả |x|
SIN(x): Trả sin(x) theo radian
COS(x): Trả cos(x) theo radian
ARCTAN(x): Trả arctang(x) theo radian
LN(x): Trả ln(x)
EXP(x): Trả ex
TRUNC(x): Trả số nguyên gần với x bé x
INT(x): Trả phần nguyên x
FRAC(x): Trả phần thập phân x ROUND(x): Làm tròn số nguyên x
PRED(n): Trả giá trị đứng trước n SUCC(n): Trả giá trị đứng sau n
ODD(n): Cho giá trị TRUE n số lẻ INC(n): Tăng n thêm đơn vị (n:=n+1) DEC(n): Giảm n đơn vị (n:=n-1) IV KIỂU KÍ TỰ
- Tên kiểu: Char (Kích thước: byte)
- Để biểu diễn ký tự, ta sử dụng số cách sau đây: Đặt ký tự cặp dấu nháy đơn
Ví dụ kt:='A'; Chuso:= '0';
Dùng hàm CHR(n) (trong n mã ASCII ký tự cần biểu diễn, bảng mã ASCII có 255 kí tự ) Ví dụ CHR(65) biễu diễn ký tự 'A'
* Các phép toán: =, >, >=, <, <=,<> * Các hàm kiểu ký tự:
- UPCASE(ch): Trả ký tự in hoa tương ứng với ký tự ch Ví dụ: UPCASE('a') = 'A' - ORD(ch): Trả số thứ tự bảng mã ASCII ký tự ch Ví dụ ORD('A')=65
- CHR(n): Trả ký tự tương ứng bảng mã ASCII có số thứ tự n Ví dụ: CHR(65)='A' - PRED(ch): cho ký tự đứng trước ký tự ch Ví dụ: PRED('B')='A'
- SUCC(ch): cho ký tự đứng sau ký tự ch Ví dụ: SUCC('A')='B' V KIỂU XÂU KÍ TỰ
- Tên kiểu: String
- Là kiểu liệu chứa giá trị nhóm ký tự ký tự, kể chuỗi rỗng Độ dài tối đa biến kiểu String 255, tức chứa tối đa dãy gồm 255 ký tự
Cú pháp khai báo:
Var Biến1, Biến2, Biếnn: String; (1) Var Biến1, Biến2, Biếnn: String [30]; (2)
Cách khai báo (1) cho phép biến HoTen nhận tối đa 255 ký tự Cách (2) cho phép biến HoTen nhận tối đa 30 ký tự
(6)Chương
CÁC CÂU LỆNH CÓ CẤU TRÚC I LỆNH GHÉP:
Lệnh ghép nhóm câu lệnh đặt hai từ khoá BEGIN END Lệnh ghép thực cách thực câu lệnh nằm BEGIN END
Cú pháp: Begin
<câu lệnh 1>; <câu lệnh 2>;
<câu lệnh n>; End;
Sau <câu lệnh n> có dấu ‘;‘ không Lệnh ghép dạng câu lệnh Ví dụ:
Begin
temp := x; x := y; y := temp; End;
Chú ý: Sau từ khóa END có dấu ‘;‘ hay khơng tùy thuộc vào lệnh cấu trúc ta được học
II CÂU LỆNH LỰA CHỌN (RẼ NHÁNH) 1 Lệnh IF
Cú pháp:
Dạng thiếu: IF <Điều kiện> THEN <Câu lệnh>
Dạng đủ: IF < Điều kiện> THEN < Câu lệnh 1> ELSE < Câu lệnh 2>;
Giải thích lệnh: Khi gặp lệnh máy kiểm tra < Điều kiện> biểu thức có giá trị TRUE (tức điều kiện đặt ra) máy thực <câu lệnh1> ngược lại, tức <biểu thức logic> có giá trị FALSE <câu lệnh 2> thực Trường hợp câu lệnh khơng có phần ELSE <biểu thức logic> có giá trị FALSE <câu lệnh> không thực máy chuyển đến câu lệnh kế sau lệnh IF
Chú ý: Trước từ khóa ELSE khơng đựơc có dấu ‘;‘ Trường hợp có câu lệnh ghép đựơc đặt kế trước ELSE từ khố END trước ELSE khơng đặt dấu ‘;‘
Ví dụ 1: Chương trình nhập từ bàn phím số ngun a, b Kiểm tra cho biết số lớn
Var a, b : Integer; Begin
Write( ‘ Nhap so a: ‘ ); Readln(a); Write( ‘ Nhap so b: ‘ ); Readln(b);
If a > b then Write( ‘ So lon hon la ‘, a) { vị trí khơng đặt dấu; } Else Write( ‘ So lon hon la ‘, b);
Readln; End
Ví dụ 2: Viết chương trình kiểm tra ba số a, b, c nhập từ bàn phím, số lớn
Var a, b, c, max : Integer; Begin
Write( ‘ Nhap so a: ‘ ); Readln(a); Write( ‘ Nhap so b: ‘ ); Readln(b); Write( ‘ Nhap so c: ‘ ); Readln(c); Max := a;
(7)Write( ‘ So lon hon la ‘, max); Readln;
End
2 Lệnh CASE Cú pháp:
Dạng Dạng
CASE B OF Hằng 1: S1;
Hằng 2: S2;
Hằng n: Sn;
END;
CASE B OF Hằng 1: S1;
Hằng 2: S2;
Hằng: Sn;
ELSE Sn+1;
END; Trong đó:
B: Biểu thức kiểu vô hướng đếm kiểu nguyên, kiểu logic, kiểu ký tự, kiểu liệt kê
Hằng i: giá trị hằng, giá trị (phân cách dấu phẩy) đoạn (dùng hai dấu chấm để phân cách giá trị đầu giá trị cuối) Giá trị biểu thức giá trị tập i (i=1¸n) phải có kiểu
Khi gặp lệnh CASE, chương trình kiểm tra:
- Nếu giá trị biểu thức B nằm tập Hằng i máy thực lệnh Si tương ứng
- Ngược lại:
+ Đối với dạng 1: Khơng làm + Đối với dạng 2: thực lệnh Sn+1
Ví dụ: Viết chương trình nhập vào điểm kiểm tra từ bàn phím in kết xếp loại: loại Yếu (dưới điểm), loại Trung bình (5, điểm), loại Khá (7, điểm), loại Giỏi (9, 10 điểm)
Var Diem : Byte; Begin
Write( ‘ Nhap diem : ’); Readln(Diem);
Case Diem of
0 : Write( ‘ Xep loai yeu ‘ );
5 : Write( ‘ Xep loai Trung binh ‘ ); : Write( ‘ Xep loai Kha ‘ ); 10: Write( ‘ Xep loai Gioi ‘ ); Else
Write( ‘ Diem nhap sai ‘ ); End;
Readln; End
III CÂU LỆNH LẶP
Trường hợp để giải tốn mà ta cần phải lặp lặp lại công việc ta cần đến lệnh lặp Số bước lặp xác định khơng xác định Trong ngơn ngữ Pascal có ba câu lệnh lặp FOR, REPEAT, WHILE Nếu số vịng lặp xác định ta sử dụng lệnh FOR cịn vịng lặp khơng xác định ta sử dụng lệnh REPEAT WHILE Tất loại lệnh lặp phải có điểm dừng, cho dù loại xác định hay khơng xác định
1 Vòng lặp xác định (For) a Dạng tiến:
(8)<Biến> cấu trúc FOR gọi biến điều khiển Kiểu biến điều khiển kiểu số nguyên,
<giá trin Min>, <giá trị max> phải kiểu vô hướng đếm (số nguyên, kí tự…) Giải thích hoạt động lệnh FOR dạng tiến:
B1: Đầu tiên, Biến nhận giá trị biểu_ thức1
B2: Máy kiểm tra Biến có nhỏ biểu_ thức2 hay không tức xét điều kiện (Biến <= Biểu_ thức2) ?
B3: Nếu điều kiện sai máy khỏi vịng lặp FOR để thực lệnh sau vịng lặp FOR Nếu điều kiện <Lệnh> thực hiện, sau đó, Biến tăng giá trị quay trở lại bước (2)
Lưu ý: Số lần lặp tính cơng thưc : <giá trị Max> - <giá trin Min> + b Dạng lùi:
Cú pháp: FOR <Biến> := <giá trin Max> DOWNTO <giá trin Min> DO <Câu lệnh> Giải thích hoạt động lệnh FOR dạng lùi:
B1: Đầu tiên, Biến nhận giá trị biểu thức1
B2: Máy kiểm tra Biến có lớn biểu thức2 hay không tức xét điều kiện (Biến >= Biểu_ thức2) ?
B3: Nếu điều kiện sai máy khỏi vịng lặp FOR để thực lệnh sau vòng lặp FOR Nếu điều kiện <Lệnh> thực hiện, sau đó, Biến giảm giá trị quay trở lại bước (2)
Lưu ý
- Không thay đổi giá trị biến điều khiển lệnh vòng lặp FOR Điều làm cho vịng lặp khơng có lối dân đến treomáy
- Các Biểu thức1 Biểu hức2 ước lượng trước vào vịng lặp, số vịng lặp khơng bị thay đổi Ta lợi dụng tính tăng giảm biến điều khiển để gán giá trị cho biến thực cơng việc có tính chất tăng giảm
2 Vịng lặp khơng xác định
Dạng REPEAT Dạng WHILE
Repeat S; Until B;
While B Do S;
Ý nghĩa: Dạng REPEAT: Lặp lại công việc S biểu thức B=TRUE dừng Dạng WHILE: Trong biểu thức B=TRUE tiếp tục thực công việc S a Câu lệnh REPEAT
Cú pháp: REPEAT
<Lệnh 1>; <Lệnh 2>; <Lệnh n>;
UNTIL < Biểu thức logic >;
Giải thích hoạt động lệnh REPEAT:
Đầu tiên, thực lệnh <Lệnh 1>, <Lệnh 2>, , <Lệnh n>, sau kiểm tra < Biểu thức logic > Nếu < Biểu thức logic > nhận giá trị FALSE lại quay lên đầu vịng lặp thực tiếp <Lệnh 1>, <Lệnh 2>, , <Lệnh n> Nếu <Biểu thức logic > nhận giá trị TRUE thì máy khỏi vịng lặp Như vậy, lệnh nằm REPEAT UNTIL thực lần
Chú ý:
- Các lệnh nằm REPEAT UNTIL khơng có từ khố Begin End
- Trong vịng lặp phải có lệnh làm thay đổi giá trị biến <Biểu thức logic> nhằm làm dừng vòng lặp, khơng vịng lặp chạy khơng ngừng dẫn đến treo máy
(9)Uses CRT;
Var Password : String[6]; Begin
Repeat
Write( ‘ Xin hay nhap mat khau : ‘ ); Readln(Password);
Until Password = ‘ttthcn’;
Write( ‘ Ban da nhap dung mat khau ! ‘ ); Delay(1000);
Readln; End
Giải thích lệnh: Delay(1000): Thủ tục Delay(n) thủ tục Unit CRT tức dừng khoản thời gian 1000 xung nhịp máy, vậy, tùy theo tốc độ máy mà có khoản thời gian thực dừng lại khác
b Câu lệnh While: Cú pháp:
WHILE < Biểu thức logic > DO < Lệnh >;
Giải thích lệnh: Gặp lệnh trước tiên máy kiểm tra < Biểu thức logic >, có giá trị TRUE thực < Lệnh > sau quay lại kiểm tra < Biểu thức logic > trình tiếp tục Nếu < Biểu thức logic > nhận giá trị FALSE máy khỏi vịng lặp Như lệnh WHILE dùng để lặp lặp lại công việc điều kiện thỏa mãn
Ghi chú: Nếu từ vào vòng lặp mà thấy điều kiện không thỏa mãn, máy tự động mà khơng thực < Lệnh > bên vịng lặp
Ví dụ: Chương trình tìm ước số chung lớn hai số nguyên Var a, b, r : Integer; tl : Char;
Begin Repeat
Write( ‘ Nhap hai so a va b : ‘ ); Readln(a, b);
While b <> Begin
r := a mod b; a := b; b := r; End;
Writeln( ‘ Uoc so chung lon nhat la ‘ , a ); Write( ‘ Ban tim USCLN nua khong (C/K) ? ); Readln(tl);
(10)Chương
DỮ LIỆU KIỂU MẢNG (ARRAY) I KHÁI NIỆM
Mảng (Array) kiểu liệu có cấu trúc bao gồm số cố định thành phần có kiểu, có tên chung Các thành phần mảng truy xuất thông qua số
Ví dụ: Mảng A gồm năm phần tử: A[1]=7, A[2]=9, A[3]=0, A[4]= -2, A[5]=3:
Công dụng mảng dùng để lưu trữ dãy số liệu có tính chất Ví dụ: điểm kiểm tra mơn học học sinh, giá trị dãy số nhập từ bàn phím
II KHAI BÁO MẢNG 1 Mảng Một chiều
a Khai báo mảng chiều: Var
Tên_ biến_ mảng : ARRAY [1 n] OF Kiểu phần Tử; Trong đó:
- Kiểu phần tử kiểu liệu phần tử mảng (Integer, real, string, …) - n danh sách số để truy cập đến thành phần mảng
Ví dụ:
Var ch : Array[0 25] of Char; Th : Array[-2 4] of Real; b Truy cập câc phần tử mảng:
Việc truy nhập vào phần tử biến mảng thực hiệnh qua tên biến mảng, theo sau giá trị số đặt dấu [ ]
Ví dụ: Ch[2] := ’B’; Th[1] := 12.5; c Ví dụ :
Nhập n số thực từ bàn phím vào mảng, tính trung bình cộng số Uses CRT;
Var i,n : Integer; s : Real;
a : Array[1 100] of Real; Begin
ClrScr;
Write( ‘ Ban muon nhap bao nhieu PT cho mang : ‘ ); Readln(n); For i := to n
Begin
Write( ‘A[ ‘ , i , ‘ ]= ’ ); Readln(a[i]);
End; s := 0;
For i := to n s := s + a[i];
Write( ‘ Trung binh cong cua day so = ‘ , s / n : : ); Readln;
End
2 Mảng Hai Chiều a Khai báo
Việc khai báo mảng hai chiều giống mảng chiều, có điều khác có hai tập số viết cách dấu ‘,’
Ví dụ: Var
(11)b Truy cập câc phần tử mảng:
Số phần tử mảng số thực B x = (phần tử), đặt nhớ theo thứ tự sau:
B[1, 1] B[1, 2] B[1 ,3] B[2, 1] B[2, 2] B[2 ,3] B[3, 1] B[3, 2] B[3 ,3]
Chú ý: Mảng hai chiều cịn gọi ma trận Trong ví dụ trên, B ma trận cấp 3x Trong mảng hai chiều, số sau truy cập nhanh số trước Để truy cập đến phần tử hàng thứ i, cột thứ j mảng hai chiều B ta dùng cách viết: B[ i ][ j ] B[ i , j ]
c Ví dụ:
Nhập ma trận m hàng, n cột từ bàn phím Tính in hình tổng cột tổng hàng
Var
n, m, i, j : Integer; sum : Real;
a : Array[1 30, 30] of Real;Begin BEGIN
Write( ‘ Ban muon nhap ma tran bao nhieu hang va cot ? ‘ ); Readln( m, n ); For i := to m
For j := to n Begin
Write( ' PT thu [ ' , i , ' , ‘ , j, ‘ ] = ' ); Readln( a[ i, j ] );
End;
For j := to n Begin
sum := 0;
For i := to m Sum := sum + a[ i, j ]; Write( ‘ Tong cot ‘ , j ,’ = ‘ , sum : : ); End;
For i := to m Begin
sum := 0;
For j := to n Sum := sum + a[ i, j ]; Write( ‘ Tong hang ‘ , i ,’ = ‘ , sum : : ); End;
(12)Chương
XÂU KÝ TỰ (STRING) I KHAI BÁO KIỂU STRING
Xâu (String) kiểu liệu có cấu trúc dùng để xử lý xâu ký tự Kiểu String có nhiều điểm tương tự kiểu mảng (Array) có điểm khác là: số ký tự biến kiểu xâu thay đổi cịn số phần tử kiểu mảng ln cố định
Cú pháp: VAR Tên biến : STRING[Max];
Trong Max số ký tự tối đa chứa chuỗi (Max [0,255]) Nếu khơng có khai báo [Max] số ký tự mặ mặc định chuỗi 255
Ví dụ: Var Name : String[50];
St : String; {St có tối đa 255 ký tự} II TRUY XUẤT DỮ LIỆU KIỂU STRING
Muốn in xâu ký tự ta dùng lệnh Write(St) Writeln(St)
Lệnh Readln(St) đọc ký tự cho xâu St với độ dài thực số ký tự gõ vào từ bàn phím Nếu ta gõ < Enter > ln mà khơng nhập cho ký tự St xâu rỗng
Ví dụ:
Var ten, st1, st2 : String[40]; Begin
Write( ‘ Vui long nhap ten cua ban: ‘ ); Readln(ten);
Writeln( ‘ Hello ‘, ten, ‘ ! ‘ ); st1 := ‘ Turbo Pascal ‘;
st2 := ‘ Borland’’s product is ‘ + st1; Writeln(st2);
Readln; End
Lưu ý: Để truy xuất đến ký tự thứ k xâu ký tự, ta sử dụng cú pháp sau: Tênbiến[k] Ví dụ: st1[4] ’b’
III CÁC PHÉP TOÁN TRÊN XÂU KÝ TỰ 1 Phép gán:
Biến := Biểu_thức;
Đại lượng bên phải lệnh phải đặt hai dấu nháy đơn xâu dạng Ta sử dụng dấu cộng (+) để ghép xâu gán Ví dụ:
HoTen:= ‘Huynh Ngoc‘ + ‘ Nhan‘; 2 Phép nối String:
Ký hiệu dấu +
Ví dụ: ‘Turbo’ + ‘ Pascal‘ = ‘Turbo Pascal‘ 3 Các phép toán so sánh:
Khi so sánh hai xâu, ký tự hai xâu so sánh cặp từ trái qua phải theo giá trị bảng mã ASCII
Ví dụ: Nếu so sánh:
‘ABC’ = ‘ABC’ có giá trị True ‘ABC’ = ‘AB’ có giá trị False ‘ABCD’ < ‘ABED’ có giá trị True ‘ABC’ > ‘AD’ có giá trị False
IV CÁC THỦ TỤC VÀ HÀM VẾ XÂU KÝ TỰ 1 Các thủ tục:
a Delete(St , Pos, Num):
Trong đó: - St (String): Biến kiểu String - Pos (Position): Biến kiểu nguyên - Num (Number): Biến kiểu nguyên
(13)Delete(St, 2, ); ð làm cho St = ‘AFG’ Delete(St, 2, 10); ð làm cho St = ‘A’
Delete(St, 9, 3); ð làm cho St = ‘ABCDEFG’ b Insert(St2, St1, Pos):
Trong đó: - St2 St1: Biến kiểu String - Pos: Biến kiểu nguyên
Công dụng: Thủ tục dùng để chèn xâu St2 vào xâu St1 vị trí Pos Ví dụ:
Nếu St := ‘ABCD’ sau lệnh Insert(‘TFG’, St, 3) ta nhận St := ‘ABTFGCD’ Trường hợp Pos vượt chiều dài St1 St2 nối vào St1 Ví dụ: St = ‘ABCD’ , lệnh Insert(‘TFG’, ST, 9); làm cho St = ‘ABCDTFG’
c Str(Value, St):
Trong đó: - Value: Là biểu thức nguyên hay thực có ghi dạng in - St: Biến kiểu String
Công dụng: Thủ tục dùng để đổi giá trị số Value thành kiểu xâu gán cho St Ví dụ:
i := 123;
Str(i:5, St); { ta St = ‘ 1234’ có ký tự } x :=123.5678901;
Str(x:10:5, St); { ta St = ‘ 123.56789’ } d Val(St, Var, Code):
Trong đó: - St: Biểu thức kiểu String - Var: Là biến kiểu nguyên hay thực - Code: Biến kiểu nguyên
Công dụng: Thủ tục đổi xâu chữ St (biểu diên dạng số nguyên hay thực) thành số gán cho biến Var Code biến nguyên dùng để phát lỗi: phép biến đổi Code có giá trị 0, sai St không biểu diễn số ngun hay thực Code có giá trị vị trí ký tự sai xâu St
Giả sử: St := ‘234’ , i e hai biến nguyên Val(St, i, e); { cho ta i = 234 e = }
Nếu St := ‘21x’ Val(St, i, e) {cho ta i không xác định e=3, tức ký tự thứ ba gây lỗi}
2 Các hàm: a Length(St):
Cho ta độ dài biểu thức xâu ký tự St Ví dụ: với St = ‘’ABCDEFG’ Length(St) trả về giá trị
b Copy(St, Pos, Num):
Trong đó: - St: Biểu thức kiểu xâu ký tư - Pos,Num: Biểu thức kiểu nguyên
Hàm trả cho ta xâu từ xâu St, hàm bắt đầu chép từ vị trí Pos chép Num ký tự Ví dụ: St = ‘ABCDEF’ lệnh Copy(St, 3, 2) = ‘CD’ Copy(St,4, 10) cho ta ‘DEF’
Ghi chú:
- Nếu Pos + Num > Length(St) hàm trả ký tự xâu St - Nếu Pos > Length(St) hàm Copy trả cho ta xâu rỗng c Concat(St1, St2, , Stn):
Hàm dùng để ghép tất xâu ký tự St1, St2, ,Stn thành xâu theo thứ tự đối số cung cấp cho hàm
Ghi chú:
- Số lượng đối hàm Concat phải >=
- Nếu tổng số chiều dài xâu > 255 máy báo lỗi
- Có thể dùng phép cộng (+) để ghép xâu ký tự Ví dụ: St :=Concat(St1,St2 +’N’); d Pos(St1, St2):
(14)Hàm trả số nguyên biểu diễn vị trí St1 gặp xâu St2 Nếu khơng tìm thấy Pos =
(15)Chương KIỂU TẬP HỢP I ĐỊNH NGHĨA
Dữ liệu kiểu tập hợp tập hợp liệu thuộc kiểu vô hướng đếm Một kiểu tập hợp khai báo theo dạng sau:
SET OF Kiểu_cơ_sở; Ví dụ:
Type Chu_so = Set of 9; Chu_hoa = Set of ‘A’ ‘Z’; Var So : Chu_so;
Chu : Chu_hoa;
Mau : Set of (Xanh, Vang, Tim); Chú ý:
- Các giá trị đưa vào tập hợp cần có số thứ tự khoản từ đến 255
- Như vậy, với khai báo:Type Tap_so = Set of 10 256; Kết dịch máy thông báo lỗi: Set base type out of range
- Một liệu kiểu tập hợp có dạng phần tử nằm hai dấu ngoặc [ ] Ví dụ: [‘A’, ’E’ ], [3,5 9];
- Tập hợp rỗng ký hiệu [ ]
- Biến tập hợp cho phép có từ đến 256 phần tử - Có thể thực phép gán kiểu tập hợp Ví dụ: So := [0, 4, 9];
Chu := [ ]; {Tập hợp rông} Mau := [Vang, Tim]; II CÁC PHÉP TỐN a Phép tốn quan hệ:
Phép toán = cho giá trị True hai tập hợp Phép toán < > cho giá trị True hai tập hợp khác Phép toán <= (A <= B) cho giá trị True A tập B Phép toán >= (A >= B) cho giá trị True B tập A
Chú ý: Khơng có phép tốn < > cho kiểu tập hợp Để kiểm tra tập hợp A có thật nằm trong B hay khơng ta dùng câu lệnh: If (A< > B) and (A<=B) then Write( ‘A la tap that su cua B ‘);
b Phép toán IN:
Phép toán IN dùng để xem xét phần tử có nằm tập hợp khơng ?
Nếu phần tử có tập hợp phép toán trả giá trị True, ngược lại cho giá trị False Ví dụ:
‘C’ In [‘A’, ’C’, ‘D’] cho kết True.‘E’ In [‘A’, ’C’, ‘D’] cho kết False c Phép toán hợp, giao, hiệu:
A + B hợp A B: tập hợp phần tử thuộc A thuộc B A * B giao A B: tập hợp phần tử thuộc A thuộc B A - B hiệu A B: tập hợp phần tử thuộc A khơng thuộc B Ví dụ: A := [1, 3, 9];
B := [9, 2, 5]; Vậy: A * B có giá trị [9]
A - B có giá trị [1, 3] III CÁC VÍ DỤ
Ví dụ: Viết chương trình nhập vào chữ Xét xem chữ nguyên âm hay phụ âm
Var ChuCai, NguyenAm : Set of Char; Ch : char;
Begin
ChuCai := [‘A’ ’Z’, ‘a’ ‘z’];
(16)Repeat
Write( ‘ Nhap mot chu cai de kiem tra: ‘ ); Readln(Ch); Until Ch IN ChuCai;
If Upcase(Ch) IN NguyenAm then Writeln(Ch, ‘ la nguyen am ’ ) Else Writeln(Ch, ‘ la phu am ‘);
(17)Chương
DỮ LIỆU KIỂU FILE TEXT (TỆP) I KHAI BÁO
Trong Pascal có kiểu tệp định nghĩa trước, tệp văn định nghĩa với tên chuẩn Text Thành phần sở tệp kiểu Text ký tự Tuy nhiên, văn được cấu trúc thành dịng, mơi dịng kết thúc dấu hiệu EOLN (End Of Line) Như vậy, muốn đọc in dịng tệp văn sử dụng dạng Text Tệp văn kế tthúc dấu End Of File, cụ thể với Turbo Pascal Ctrl-Z (^Z) có mã ASCII = 26
Cú pháp: Var <Biến text>: Text; Ví dụ: Var f, g: text;
II CÁC THAO TÁC TRÊN TỆP a Ghi vào tệp văn bản:
Ta ghi giá trị kiểu Integer, Real, Boolean,String vào tệp văn lệnh Write Writeln Có ba dạng viết:
Write(FileVar, Item1, Item2, ,ItemN); (1) Writeln(FileVar, Item1, Item2, ,ItemN); (2) Write(FileVar); (3)
Lệnh (1): Viết giá trị Item1, Item2, ,ItemN hằng, biểu thức hay biến có kiểu đơn giản như: Nguyên, Thực, Ký tự, Chuôi, Logic vào biến tệp FileVar
Lệnh (2): Tương tự (1) có thêm dấu hiệu hết dịng vào tệp sau viết hết giá trị Item1, Item2, ,ItemN
Lệnh (3): thực việc đưa thêm dấu hiệu hết dòng vào tệp Ghi chú: Từ câu lệnh (2) ta chuyển sang viết sau:
Begin
Write(FileVar, Item1);
Write(FileVar, Item2); Writeln(FileVar); End;
Cấu trúc để mở ghi tệp là: Assign(<Biến text>,’<Nơi lưu tệp>’); Rewrite(<Biến text>);
…
Write(<Biến text>,<Giá trị>); …
Close((<Biến text>);
Ví dụ 1: Tạo tệp chứa số nguyên từ đến 100 với tên tệp đĩa ‘’Nguyen.txt’ Program TaoTepSoNguyen;
Var i: Integer; F: File Of Integer; Begin
Assign(F,’Nguyen.txt’); ReWrite(F);
For i:= to 100 Write(F,i);
Close(F); End
Ví dụ 2: Ghi bảng chữ vào file có tên “Chucai.txt” lưu thư mục gốc ổ đĩa D Program bangchucai;
Uses Crt;
Var F: Text;
(18)Clrscr;
Assign(F, ’D:\ChuCai.txt’); {Gán tệp Chucai.txt cho biến F} ReWrite(F); {Mở tệp Chucai.txt – chưa có phần tử nào}
For ch:= ’a’ to ‘z’ Write(F, ch,’ ‘); {Ghi giá trị biến Ch và khoảng trắng vào file F }
Close(F); {Sau ghi xong đóng File F} Readln;
End
3 Đọc liệu từ tệp có
Ta đọc ký tự từ tệp văn mà cịn đọc lại số ngun, thực, logic từ tệp văn thông qua thủ tục:
Read(FileVar, Var1, Var2, ,VarN); (1)
Readln(FileVar, Var1, Var2, ,VarN); (2) Readln(FileVar); (3)
Trong đó, Var1, Var2, ,VarN biến thuộc kiểu ký tự, nguyên, thực, logic, chuỗi Lệnh (1) đọc nội dung hay nhiều phần tử mà khơng chuyển cửa sổ tệp xuống dịng Lệnh (2) đọc lệnh (1) di chuyển cửa sổ tệp sang đầu dòng sau đọc các biến tương ứng Lệnh (3) đưa cửa sổ tệp sang đầu dòng mà khơng đọc Cấu trúc để đọc liệu từ tệp có sau:
Assign(<Biến text>,’<Nơi lưu tệp>’); Reset(<Biến text>); While not EOF(<Biến text>)
Begin
Read(<Biến Tệp>,<Biến lưu giá trị>);
{Xử lí biến lưu giá trị theo yêu cầu đề bài} End;
Close((<Biến text>);
Ví dụ 1: Giả sử tồn tệp có tên Nguyen.txt chứa số kiểu Byte có ba phần tử Thực đọc giá trị thứ thứ ba tệp gán cho hai biến A, B tương ứng
Program DocSo; Var A, B: Byte; F: File Of Byte; Begin
Assign(F,’Nguyen.txt’); Reset(F);
Read(F,A); {đọc phần tử thứ tệp biến A} Read(F,B); {đọc phần tử thứ hai tệp biến B} Read(F,B); {đọc phần tử thứ hai tệp biến B} {lúc B không giữ giá trị thứ hai nữa}
Close(F); End
Ví dụ 2: Đọc tất phần tử tệp chứa số có Integer ghi hình giá trị số cuối ghi só phần tử tệp
Program DocTepSo; Uses CRT;
Var i, d: Integer; F: Text;
tenfile: String; Begin
ClrScr;
Write(‘Tep can doc la gi ? ’); Readln(tenfile); {Nhập tên File cần đọc}
(19)Reset(F); {Đưa trỏ đầu File chuẩn bị đọc} SoPT:= 0;
While Not EOF(F) Do Begin
Read(F,i); {Đọc phần tử file F bỏ vào biến i} Write(i,’ ‘); d:=d+1;
End;
Close(F); {Đóng File}
Write(‘So phan tu cua tep ’, tenfile,’ la ‘,d); Readln
End
III CÁC HÀM VÀ THỦ TỤC XỬ LÍ TỆP 1 Hàm EOF(Var F: Text): Boolean
Hàm trả giá trị False cửa sổ tệp chưa đến cuối tệp, ngược lại, cho giá trị True Hàm thường sử dụng để kiểm tra xem đọc hết tệp văn chưa
Ví dụ: While not EOF(F) Do 2 Hàm EOLN(Var F: Text): Boolean
Hàm trả giá trị False cửa sổ tệp chưa đến điểm cuối dòng cuối tệp, ngược lại, cho giá trị True Hàm thường sử dụng để kiểm tra xem đọc đến cuối dịng chưa Ví dụ:
While not EOLN(F) Do 3 Thủ tục thêm dòng:
Cú pháp: Append(Var F: Text);
Lệnh Append mở tệp văn để ghi bổ sung dòng, định vị cửa sổ tệp vào cuối tệp Lần sử dụng với thủ tục Write hay Writeln thêm văn vào cuối tệp
Ví dụ: Chương trình sau thêm hai dòng vào cuối tệp VanBan.txt Var F: Text;
Begin
Assign(F,’Vanban.txt’); Append(F);Writeln(F,’Day la dong thu nhat them vao.’);
Writeln(F,’Day la dong thu hai them vao.’); Close(F);
(20)Chương
CHƯƠNG TRÌNH CON I KHÁI NIỆM
Trong lập trình thường gặp đoạn chương trình lặp lặp lại nhiều lần chỗ khác Để tránh rườm rà đoạn chương trình thay chương trình tương ứng Khi cần, ta cần gọi tên chương trình
Lý thứ hai để xây dựng chương trình con: Một vấn đề lớn phức tạp tương ứng với chương trình lớn dài Do việc sửa chữa chương trình khó khăn Ta phân tích thành vấn đề nhỏ hơn, để dễ kiểm tra, sau ghép lại thành chương trình lớn
II PROCEDURE FUNCTION (Thủ tục Hàm) Trong Pascal có hal loại CTC :
- PROCEDURE (thủ tục) - FUNCTION (hàm)
Sự khác hai loại CTC FUNCTION trả lại giá trị kết vơ hướng thơng qua tên function sử dụng biến, biểu thức Cịn PROCEDURE khơng trả lại kết thơng qua tên biểu thức nên procedure viết biểu thức
III CẤU TRÚC CỦA CHƯƠNG TRÌNH CON 1 Function (hàm)
PROGRAM <TÊN CHƯƠNG TRÌNH CHÍNH>; USES CRT;
VAR <BIẾN CỦA CHƯƠNG TRÌNH CHÍNH>: <KIỂU DỮ LIỆU>;
Function <tên hàm>(<đối số>:<kiểu liệu>):<kiểu liệu của hàm>;
Var <biến ct con>:<kiểu liệu>; Kq:<kiểu liệu hàm>; Begin
<Thân chương trình con>;
<tên hàm>:=kq; {lấy giá trị cho hàm} End;
BEGIN CLRSCR;
<THÂN CHƯƠNG TRÌNH CHÍNH>;
<BIẾN>:= <tên hàm>(đối số); {Gọi hàm} READLN;
END
2 Procedure (Thủ tục)
PROGRAM <TÊN CHƯƠNG TRÌNH CHÍNH>; USES CRT;
VAR <BIẾN CỦA CHƯƠNG TRÌNH CHÍNH>: <KIỂU DỮ LIỆU>; procedure <tên thủ tục>(Var <đối số>:<kiểu liệu>); Var <biến thủ tục>:<kiểu liệu>;
Begin
<Thân thủ tục>; End;
BEGIN CLRSCR;
<THÂN CHƯƠNG TRÌNH CHÍNH>;
<tên thủ tục>(đối số); {Gọi thủ tục} READLN;
END
(21)- Tham trị (value parameter) - Tham biến (variable parameter)
VD : PROCEDURE Thidu(i,j:integer; VAR x,y:real); Tham trị : i,j
Tham biến : x,y
Sự khác tham trị tham biến :
- Tham trị hằng, biến, biểu thức Cịn tham biến biến
- Nếu tham trị biến giá trị khơng thay đổi sau CTC thực Còn tham biến thay đổi giá trị CTC có lệnh làm thay đổi giá trị
VD :
* Hàm SIN (X)
Trong X tham trị ta viết - KQ := SIN (1); X=1
- KQ := SIN (Y*2); X=Y*2 - KQ := SIN (X); X=X
Và sau thực giá trị X không thay đổi * Hàm DEC (X)
Trong X tham biến, ta viết - DEC (X); X biến kiểu nguyên
Không thể viết - DEC (5); X - DEC (Y*2); X biểu thức
Sau gọi hàm giá trị X thay đổi (giảm 1) V FUNCTION VÀ CÁCH LỰA CHỌN
Trong FUNCTION bắt buộc phải có lệnh gán giá trị cho tên hàm Tên_hàm := <biểu thức>
Chúng ta nên dùng FUNCTION đồng thời thoả điều kiện sau : - Nếu ta muốn nhận lại kết
- Kết phải kiểu vơ hướng
Cịn khơng thoả mãn nên dùng PROCEDURE VD : CTC tính bình phương số
FUNCTION Binh_Phuong (X:real):real; BEGIN
Binh_Phuong := X*X; END;
Nếu dùng procedure
PROCEDUR Binh_Phuong (X:Real; VAR kq:real); BEGIN
kq := X*X; END;
Khi kiểm tra xem tổng bình phương a b có c khơng : - Nếu FUNCTION ta viết :
IF Binh_Phuong(a)+Binh_Phuong(b) = Binh_phuong(c) THEN - Nếu PROCEDURE ta viết
Binh_Phuong (a,kqa); Binh_Phuong (b,kqb); Binh_Phuong (c,kqc); IF kqa+kqb=kqc THEN
Rõ ràng cách dùng FUNCTION có lợi
(22)Là biến khai báo chương trình Các biến có tác dụng nơi chương trình
Biến cục
Là biến khai báo chương trình Các biến có tác dụng chương trình Khi chương trình kết thúc, biến tác dụng theo 3 Chú ý
Nếu CTC có khai báo biến (hằng) trùng với tên biến (hằng) chương trình chương trình ưu tiên xử lý biến (hằng) chương trình Và khỏi chương trình Giá trị biến chương trình giữ nguyên giá trị trước gọi CTC
VD : CONST I=5; PROCEDURE THU; VAR I : INTEGER; BEGIN
I := 6;Writeln(I); END;
BEGIN
Writeln(I);THU;Writeln(I); END
Trên hình xuất Giá trị biến toàn cục Giá trị biến địa phương Giá trị biến toàn cục
VII TÍNH ĐỆ QUY CỦA CHƯƠNG TRÌNH CON
Trong PROCEDURE FUNCTION có lời gọi Tính chất gọi đệ quy VD : Tính N! qua định nghĩa N! = 1.2.3 (n-1).n
định nghĩa theo đệ quy N! = N=0
N! = (n-1)!.n N>=1 Khi hàm GIAI_THUA định nghĩa sau FUNCTION GIAI_THUA (n:integer):integer; BEGIN