LẬP TRÌNH VỚI PASCAL

Trần Phước Tuấn tranphuoctuan.khoatoan.dhsp@gmail.com

Nội dung

1. Một vài ví dụ làm quen 2. Giải thích chương trình 3. Cấu trúc chương trình 4. Các lệnh cơ bản 5. Kiểu dữ liệu, biến 6. Nhập xuất dữ liệu 7. Câu lệnh, khối lệnh 8. Câu lệnh rẽ nhánh 9. Câu lệnh lặp 10. Thủ tục, hàm 11. Kỹ thuật đệ quy 12. Kiểu bảng ghi, tập hợp, miền con 13. Mảng, chuỗi 14. Làm việc với tập tin 15. Thư viện đồ họa trong pascal

1

Chương trình Borland Pascal 7.0

Ấn Alt+F để vào menu File - Mở tập tin có sẵn: F3 - Đóng tập tin hiện tại: Alt+F3 - Mở tệp mới: Alt+F  New (File  New) - Lưu tệp vào đĩa: F2 -Lưu tập tin với một tên khác: Save as… -Lưu tất cả các tập tin đang mở: Save all - Đổi thư mục mặc định: Change dir … - Về DOS tạm thời: DOS shell - Thoát khỏi Borland Pascal 7.0: Alt+X (Exit)

Chương trình Borland Pascal 7.0

Tập tin cùng tên, có đuôi exe được tạo ra cùng thư mục

2

Ctrl + F9: Biên dịch và thực thi chương trình. Ctrl + F9 Alt + F5: Xem màn hình kết quả. Alt + F5 Alt + F9: Biên dịch chương trình Alt + F9

Ví dụ mở đầu

1. Ví dụ 1:

* Source code ( mã nguồn)

Begin Writeln(‘Hello world’); End.

(Ctr + F9: biên dịch và thực thi chương trình) * Kết xuất màn hình: Hello world!

(Alt + F5 để xem màn hình kết xuất)

* Thêm vào lệnh: Readln; sau writeln(‘ Hello world’); * Biên dịch và chạy là để xem kết quả.

Ví dụ mở đầu

2. Ví dụ 2:

* Source code

Var a,b,c :integer; begin

a:=7; b:=5; c:= a + b; writeln(a,’ + ‘,b,’ = ‘,c); readln; end.

* Kết xuất màn hình

7 + 5 = 12

3

Ví dụ mở đầu

3. Ví dụ 3:

* Source code

Uses crt; Var a,b,c:integer; Begin

Clrscr; {lệnh xóa màn hình} Writeln(‘Day la chuong trinh tinh tong hai so’); Write(‘Nhap a: ‘); Readln(a); Write(‘Nhap b: ‘): Readln(b); c:= a + b; writeln(‘tong cua ‘,a,’ va ‘,b,’ la ‘,c); readln;

end.

* Kết xuất màn hình

{Người dùng nhập} {Người dùng nhập}

Day la chuong trinh tinh tong hai so Nhap a: 15  Nhap b: 17 Tong cua 15 va 17 la 32

Cấu trúc một chương trình pascal

Program vidu;)

 Tiêu đề của chương trình (Program  Phần khai báo

 Khai báo thư viện (Uses crt;)  Hằng, biến (Const, Var),  Mô tả kiểu dữ liệu mới (Type)  Khai báo chương trình con (Procedure,

Function)

 Phần thân chương trình

 Chứa các lệnh để máy tính thực hiện  Các câu lệnh nằm giữa:

begin begin

;

end. end.

4

Kiểu dữ liệu

 Kiểu dữ liệu là một bộ T trong đó

 Tập A: tập tất các các giá trị mà kiểu dữ liệu

T có thể lưu trữ được.

 Tập B: tập tất cả các phép toán có thể thao

tác trên kiểu T.  Ví dụ: kiểu integer

 Tập A: các giá trị nguyên [-32768,32767]  Tập B: các phép toán: +, -, *, /, div, mod, >,

<, >=, <=, <>, …

Kiểu dữ liệu – Kiểu số nguyên

Tên kiểểu u Tên ki PhPhạạm vi gm vi gíía tra trịị SSốố bytebyte

ShortInt -128 .. 127 1

Byte 0..255 1

Integer -32768 .. 32767 2

Word 0 .. 65535 2

5

LongInt -2147483648 .. 2147483647 4

Kiểu dữ liệu – Kiểu số nguyên

Ký hiệu Ý nghĩa Ví dụ

x=y = bằng nhau

<> khác nhau x<>y

x

x<=y <= nhỏ hơn hoặc bằng

> lớn hơn x>y

>= lớn hơn hoặc bằng x>=y

y=x+z; +,- Cộng, trừ

*,/ Nhân, chia y=x*z;

div,mod Chia lấy thương, chia lấy dư y=y div 2; y=y mod 2;

Kiểu dữ liệu – Kiểu số nguyên

NOT 1 = 0 1 AND 1=1 1 OR 1=1 1 XOR 1=0

NOT 0 = 1 1 AND 0=0 1 OR 0=1 1 XOR 0=1

0 AND 1=0 0 OR 1=1 0 XOR 1=1

6

0 AND 0=0 0 OR 0=0 0 XOR 0=0

Kiểu dữ liệu – Kiểu số nguyên

 N SHR k : dịch các bít của số nguyên N sang phải đi k bít.  N SHL k : dịch các bít của số nguyên N sang trái đi k bít.  Có thể chứng minh được : N SHR k = N div 2k N SHL k = N * 2k

 Ví dụ:

120 shr 4 = 7, vì :

120 shr 4 = 120 div 24 = 120 div 16 = 7.

120 shl 3 = 960, vì :

120 shl 3 = 120 * 23 = 120 * 8 = 960.  Hai phép toán SHR và SHL được dùng khi muốn tăng tốc độ tính

toán trên các số nguyên.

Kiểu dữ liệu – char

KTKT

MÃMÃ

KTKT

KTKT

MÃMÃ

KTKT

MÃMÃ

MÃMÃ

A 65 a 97 N 78 n 110

B 66 b 98 O 79 o 111

C 67 c 99 P 80 p 112

D 68 d 100 Q 81 q 113

E 69 f 101 R 82 r 114

F 70 e 102 S 83 s 115

G 71 g 103 T 84 t 116

H 72 h 104 U 85 u 117

I 73 i 105 V 86 v 118

J 74 j 106 W 87 w 119

K 75 k 107 X 88 x 120

L 76 l 108 Y 89 y 121

M 77 m 109 Z 90 z 122

7

Mã chữ thường = Mã chữ hoa tương ứng + 32 Thường :=Chr(Ord(Hoa)+32)

Kiểu dữ liệu – char

KT

‘ ’ 32

Khoảng trắng ‘0’ 48

‘1’ 49

‘2’ 50

‘3’ 51

‘4’ 52

‘5’ 53

‘6’ 54

‘7’ 55 Mã của ký tự số i = số i + 48 (với 0<=i<=9) ‘8’ 56

‘9’ 57

Kiểu dữ liệu – char

 Hàm PRED(ch): cho ký tự đứng ngay trước ch trong bảng mã.

Ví dụ: Pred(‘B’) = ‘A’

 Hàm SUCC(ch): cho ký tự đứng ngay sau ch trong bảng mã.

Ví dụ: Succ(‘A’) có giá trị là ‘B’.

 Hàm UpCase(ch): đổi ký tự ch thành chữ hoa. Ví dụ:

Upcase( ‘a’ ) = ‘A’, Upcase( ‘b’ ) = ‘B’, Upcase( ‘A’ ) = ‘A’ .

 Hàm ORD(ch) : cho mã của ký tự ch. Ví dụ: Ord (‘A’) = 65, Ord (‘a’) = 97 .

 Hàm CHR(k): k nguyên, 0<=k<=255, cho ký tự có mã bằng k.

Ví dụ:

Chr (65)= ‘A’ Chr (97)= ‘a’ Chr(32) là ký tự trắng.

8

Kiểu dữ liệu – boolean

A not A

1. A and B là đúng khi và chỉ khi True False

False True

A và B đồng thời đúng. (Do đó chỉ cần một trong hai biến A hoặc B sai thì A and B sẽ sai). 2. A or B là sai khi và chỉ khi A A B A and B A or B A xor B

True True True True False

True False False True True và B đồng thời sai. (Do đó chỉ cần một trong hai biến A hoặc B đúng thì A or B sẽ đúng). 3. A xor B là đúng khi và chỉ khi False True False True True A khác B.

False False False False False

Kiểu dữ liệu – string

PhPhéép top toáánn

GiGiảải thi thííchch

+

Phép cộng (nối 2 chuỗi) kq:=‘Borland ’ + ‘Pascal.’ Thì kq nhận giá trị: ‘Borland Pascal.’

>,<,>=,<=,=,<>

‘Anh’ < ‘an’ là đúng vì ‘A’ < ‘a’ ‘Thong’ > ‘Tha’ là đúng vì ‘o’ > ‘a’

str(,)

Thủ tục đổi một số sang một chuỗi. VD: str(10.2,chuoi); Trong đó chuoi là biến kiểu string

length()

Hàm cho biết độ dài của chuỗi Giá trị trả về là số nguyên.

9

Xem thêm tài liệu về các hàm, thủ tục liên quan đến chuỗi: delete, insert, strcat, strcopy, …

Kiểu dữ liệu – string

 Biến nhận giá trị là các hằng chuỗi gọi là biến kiểu

chuỗi.

 Có thể khai báo hai biến chuỗi như sau:

Var

Xem thêm phần khai báo biến

Ho_ten : string[20]; st : string;

 Khi đó Ho_ten là biến chuỗi có thể chứa tối đa 20 ký tự, còn biến chuỗi st có thể chứa tối đa 255 ký tự, và ta có thể gán :

Ho_ten := ‘Nguyen Van An’; st :=‘Viet chuong trinh bang ngon ngu Pascal’;

Biến

 Biến dùng để lưu trữ dữ liệu đưa từ bên ngoài vào bên trong chương trình để có thể truy xuất, xử lý và xuất ra lại.

 Một biến bất kỳ phải thuộc một kiểu dữ liệu nào đó điều này giúp cho ngôn ngữ biết các phép toán có thể thực hiện trên biến này. Được thể hiện ở việc khai báo biến.

10

Biến – Khai báo

 Cú pháp

var : ;  Danh sách biến: gồm một hoặc nhiều tên biến

cách nhau bởi dấu phẩy (,,)

 Kiểu dữ liệu: là một trong các kiểu dữ liệu chuẩn

của TP

 Sau từ khóa VAR, có thể khai báo nhiều danh sách biến khác nhau với cấu trúc: : ;

 Ví dụ

var a,b,c:real;

x,y,z:integer; hoten: string;

Biến – Nguyên tắc đặt tên

 Không đặt tên biến trùng với các từ khóa  Tên biến không chứa khoảng trống và các ký tự đặt biệt như: +,-,…,(,),?,.,…  Tên biến không bắt đầu bằng số, tên

biến phải được bắt đầu bằng ký tự chữ hoặc dấu gạch chân.

 Theo sau ký tự đầu tiên có thể là các ký

tự chữ, số hoặc dấu gạch chân.

11

Biến - Lời khuyên về cách đặt tên

 Không nên viết hoa tất cả các ký tự.  Không nên bắt đầu bằng dấu gạch chân.  Tránh viết tắt quá nhiều dẫn đến tên biến tối

nghĩa.

 Nên đặt tên biến có tên gợi nhớ đến kiểu dữ

liệu và ý nghĩa lưu trữ của nó.

var

VVíí ddụụ

s_nameStudent: string; r_markEnglish: real;

Biến – ví dụ về đặt tên biến

VVíí ddụụ vvềề tên bi

tên biếến không h

n không hợợp lp lệệ

 3a_1 (ký tự đầu là số)  num-odd (sử dụng dấu gạch ngang-dấu trừ)  Real (đặt tên trùng với từ khóa)  del ta (có khoảng trắng)  f(x) (có dấu ngoặc tròn)

VVíí ddụụ vvềề tên bi

tên biếến hn hợợp lp lệệ

 iNumber  Ho_Ten

12

Nhập xuất dữ liệu

 writewrite: lệnh xuất ra màn hình  writeln

writeln: lệnh xuất ra màn hình đồng thời xuống dòng

 writewrite (); (các biến cách nhau bởi dấu ,) writeln();

 writeln  Ví dụ:

 Writeln(‘Hello World!’);  Writeln(a,’+’,b,’=‘,a+b);

Nhập xuất dữ liệu

 readln

 readln

readln: dừng chương trình lại đợi cho đến khi người dùng bấm enter  readln () : nhập giá trị cho các biến.

 Ví dụ:

 Readln(a,b,c);  Readln(z);

13

Câu lệnh gán

 KhKháái ni

i niệệmm: Là một trong những câu lệnh cơ bản nhất của một ngôn ngữ lập trình bất kì nói chung

 CCúú phpháápp: :=;  ChChứức năng

c năng: tính giá trị của và ghi giá trị đó vào vùng nhớ của biến có tên ở vế trái dấu :=:=, nghĩa là gán giá trị cho biến.

 VVíí ddụụ:

x1 := (-b+sqrt(b*b-4*a*c))/(2*a); x2 := -b/a-x1; i := i+1;

Phép toán

14

Biểu thức

Thứ tự ưu tiên

15

Thứ tự ưu tiên – Quy tắc

 Quy tQuy tắắc 1c 1: các phép toán nào có ưu tiên

cao hơn sẽ được tính trước.

 Quy tQuy tắắc 2c 2: trong các phép toán có cùng thứ tự ưu tiên thì sự tính toán sẽ được thực hiện từ trái sang phải.

 Quy tQuy tắắc 3c 3: phần trong ngoặc từ trong ra ngoài được tính toán để trở thành một giá trị đơn.

Câu lệnh, khối lệnh

 Câu l

Câu lệệnhnh  Câu lệnh là một tác vụ có nhiệm vụ xác định một công việc

mà máy tính phải thực hiện để xử lý các dữ liệu đã được mô tả và khai báo.

 Có hai loại câu lệnh:  LLệệnh đơn gi

 LLệệnh cnh cóó ccấấu tru trúúcc:If … then … else …;While … do …, for …

nh đơn giảảnn: Read(a);Readln(b);Write, Writeln; RESET, REWRITE, ASSIGN; gọi hàm, thủ tục, …

 KhKhốối li lệệnhnh

to/downto … do …;repeat … until …, …

begin và endend.

 Là câu một hay nhiều câu lệnh đặt giữa begin  Ví dụ: Begin Begin

x:=x+2; i:=i+1;

EndEnd;

16

Câu lệnh rẽ nhánh

 Câu lệnh if  Công dụng  Cú pháp  Bài tập

 Câu lệnh case … of … [else …] end;

 Công dụng  Cú pháp  Bài tập

Câu lệnh rẽ nhánh - if

 Công d

Công dụụngng: Sử dụng giải quyết những trường hợp liên quan đến việc giải bài toán có sự biện luận, phân chia trường hợp.

 CCúú phpháápp

BTLOGIC>) then

//thực hiện khi đđúúngng

if (

[[else

]]

// thực hiện khi saisai

 Lưu ý

Lưu ý: : TrưTrướớc else không c

c else không cóó ddấấu chu chấấm phm phẩẩy (y (;;))

17

Câu lệnh rẽ nhánh - if

true

false

Biểu thức Logic (true/false)

Câu lệnh Khối lệnh Câu lệnh Khối lệnh

Câu lệnh rẽ nhánh - if

MMộột st sốố bbàài ti tậậpp

1. Nhập a, b, c. Tìm max. Phát triển nhiều số 2. Giải phương trình ax+b=0 3. Giải phương trình ax2+bx+c=0 4. Giải hệ phương trình:

a1x+b1y=c1 a2x+b2y=c2

5. Nhập vào điểm trung bình, hãy xếp loại học tập 6. Tính tiền điện (nhập vào số kw) 7. Dạng tam giác (nhập a, b,c ) 8. Nhập vào 1 tháng, cho biết tháng này thuộc quý mấy?

18

Câu lệnh rẽ nhánh – case … of

Câu lệnh rẽ nhánh – case … of

 Công d

Công dụụngng: Sử dụng giải quyết những trường hợp liên quan đến việc giải bài toán có sự biện luận, phân chia nhiều trường hợp.

 CCúú phpháápp

DiDiễễn gin giảảii CASECASE c> OFOF

: ; : ; ........... So sánh giá trị của c> với từng giá trị trong : • Nếu có một giá trị nào bằng thì thực hiện: : ; ELSEELSE ; • Ngược lại thì thực hiện: END; END;

Hãy so sánh if với case … of …

19

Câu lệnh rẽ nhánh – case … of

MMộột st sốố bbàài ti tậậpp

1. Viết chương trình nhập vào tháng, in ra

tháng đó có bao nhiêu ngày

2. Viết chương trình nhập vào 2 số x, y và 1 trong 4 toán tử +, -, *, /. Sau đó thực hiện phép tính (nếu y = 0 thì thông báo không chia được)

Câu lệnh lặp – Tổng quan

while(

repeat

) do

nh>; nh, khốối li lệệnh>;

c câu lệệnh>; nh>;

); until(

FOR := TO DO

nh>; nh, khốối li lệệnh>;

c câu lệệnh>; nh>;

HoHoặặc:c:

:

) then goto ;

DO

FOR := DOWNTO nh>; nh, khốối li lệệnh>;

20

Câu lệnh lặp – Diễn giải

TrongKhi(

LặpLại

) làm nh>; nh, khốối li lệệnh>;

c câu lệệnh>; ; Cho đến khi( );

cho := lên đến làm nh>; nh, khốối li lệệnh>;

HoHoặặc:c:

: c câu lệệnh>; ; Nếu (

) thì nhảyđến ;

cho := xuống làm nh>; nh, khốối li lệệnh>;

Hãy phân biệt – so sánh các loại vòng lặp

nh S = 1+2+……+n+n

Hãy tHãy tíính S = 1+2+

Câu lệnh lặp – Ví dụ

i:=1;s:=0; repeat

i:=1;s:=0; while (i<=ni<=n) do

begin

s:=s+i; i:=i+1; i:=i+1;

s:=s+i; i:=i+1; i:=i+1;

until(i>ni>n);

end;

{Phải khai báo nhãn}

s=0; for i:=1 to nn do s:=s+i;

i:=1;s:=0; mocmoc: s:=s+i; i:=i+1; i:=i+1; if (i<=ni<=n) then

goto mocmoc;

21

1.

Viết hàm, thủ tục: 1.

2.

3.

Câu lệnh lặp Bài tập

4.

Truyền vào ký tự và số n. In ra n ký tự đó In hcn các dấu * có kích thước m*n In hcn rỗng các dấu * có kích thước m*n In tam giác cân các dấu * có chiều cao h In tam giác rỗng các dấu * có chiều cao h

2.

5. Tính các tổng sau: 1. S = 1 + 2 + … + n 2. S = 2 + 4 + … + 2.n (tổng các số chẵn <=n) 3. S = 12+22+ … + n2 4. S = 1.2+2.3+ … + n.(n+1) 5. S = 1/2 + 2/3 + … n/(n+1)

3. Viết hàm, thủ tục:

1. Nhập n số, tính tổng. 2. Nhập n số, tìm max Tính số hạng thứ n của dãy fibonaci (f0=f1=1, fn=fn-1+fn-2) Tìm UCLN, BCNN của hai số a,b ( Bảng ghi Phân số)

In ra các ước số dương thực sự của n (n=6 thì các ước số là 1,2,3) Tổng các ước số dương thực sự của n Tổng các số chẵn <=n

4. 5. 6. Rút gọn phân số 7. 8. 9. 10. T = n! 11. Kiểm tra n có phải là số nguyên tố hay không 12. Kiểm tra n có phải là số chính phương hay không 13. Phân tích n thành tích các thừa số nguyên tố

Hàm – Tổng quan

 Hàm sqrt(x) cho căn hai của x.

 Tên hàm là sqrt  Tham số x là số nguyên hay số thực  Giá trị hàm kiểu thực  Ví dụ sqrt(4)=2.0

 Nhớ lại các hàm trong toán học để có sự liên hệ với môn học  Khi nói đến hàm ta quan tâm đến 3 yếu tố

 TTậập ngu

p nguồồnn) (ttậập ngu (ttậập đp đííchch)

p nguồồnn  Tập xác định, miền xác định.  Đối với tin học thì đây là thông tin đ

thông tin đầầu vu vààoo

 TTậập đp đííchch

 Tập giá trị, miền giá trị.  Đối với tin học thì đây là thông tin đ

Người sử dụng hàm quan tâm

thông tin đầầu rau ra

 Quy tQuy tắắc cc củủa ha hààmm

thông tin đầu vào

22

Người viết hàm quan tâm  Để xác định 1 phần tử thuộc Tập nguồn  1 phần tử thuộc Tập đích  Trong tin học thì đó là những câu lệnh nhằm xác định thông tin đầu ra từ

Hàm – Ví dụ hàm có sẵn

 Hàm sqrt(x): cho căn hai của x. Tên hàm là sqrt, tham số x là nguyên hay thực còn gía trị hàm kiểu thực, ví dụ sqrt(4)=2.0.  Hàm chr(k): cho ký tự có mã là k. Tên hàm là chr, tham số k kiểu

nguyên còn gía trị hàm kiểu ký tự, ví dụ chr(65)=‘A’.

 Hàm odd(k): cho True hay False tùy theo k là lẻ hay chẵn. Tên

hàm là odd, tham số k kiểu nguyên và gía trị hàm kiểu lôgic, ví dụ odd(4)=False.

 Hàm copy( st, k, n): cho chuỗi con gồm n ký tự của st tính từ vị

trí k. Tên hàm là copy, có ba tham số là st kiểu chuỗi, k và n kiểu nguyên, và gía trị hàm kiểu chuỗi, ví dụ copy(‘ABCD’, 2, 3) = ‘BCD’.

 Hàm readkey: không có tham số, gía trị hàm kiểu ký tự, hàm

nhận một ký tự được gõ từ bàn phím.

Hàm – Ví dụ hàm có sẵn

23

Hàm – Hàm tự viết

Hàm – Cú pháp

function (ds tham số) : kiểu_giá_trị; const ... type ... var ... begin begin

{Các lệnh của hàm} :=;

end; end;

24

Kiểu dữ liệu của kết qủa của hàm không th không thểể là mảng (array), bản ghi (record), tập hợp (set) hay tập tin (file).

Thủ tục

 Giống như hàm, thủ tục cũng là một chương trình con, m luôn trảả song thủ tục khác hàm ở chỗ: nếu như hhààm luôn tr t thông qua tên hààmm ththìì ththủủ ttụục c vvềề mmộột gt gíía tra trịị duy nh duy nhấất thông qua tên h llạại không tr i không trảả vvềề mmộột gi

t giáá trtrịị nnààoo.

 Ví dụ:

 Thủ tục readln(x, y, z) có nhiệm vụ nhập các gía trị từ bàn

phím cho các biến x, y, z.

 Thủ tục write(x, y, z) in gía trị của x, y, z .  Thủ tục gotoxy(x, y) định vị con trỏ vào toạ độ cột x, dòng y

trên màn hình.

 Thủ tục clrscr thì chỉ đơn giản là xóa màn hình .v.v. .

 Như vậy thủ tục có thể không có tham số hoặc có từ

một đến nhiều tham số.

Thủ tục – Cú pháp

ds tham sốố>>););

procedure (c>(<

{Các lệnh của thủ tục }

end; end;

Hãy so sáánh cnh cúú phphááp cp củủa tha thủủ ttụục vc vàà hhààmm Hãy so s

25

Thủ tục

Thủ tục, hàm - Truyền tham số

 Truyền tham số trị

 Khái niệm  Tác dụng của nó đến biến sau khi ra khỏi

chương trình con.  Truyền tham số biến

 Khái niệm  Tác dụng của nó đến biến sau khi ra khỏi

chương trình con

26

Thủ tục và hàm có một tên gọi chung là chương trình con

Thủ tục, hàm – Truyền tham số

 TruyTruyềền tham s

n tham sốố trtrịị - khkháái ni

i niệệmm

chương trình con, các tham số không c khóa varvar phía trước được gọi là tham s

 Trong phần khai báo tham số hình thức của không cóó từ tham sốố trtrịị  Trong lời gọi chương trình con các tham số trị thực sự có thể là bibiếếnn, hhằằngng hay bibiểểu u ththứứcc.  Ví dụ:

 x:=max(a,b,5); y:=max(a+1,4,5); …  Xem lại các ví dụ về thủ tục và hàm trong các

phần trước.

Thủ tục, hàm – Truyền tham số

 TruyTruyềền tham s

n tham sốố trtrịị - ttáác dc dụụngng

 Tham số trị hình thức được cấp một ô nhớ riêng khi chương trình con được gọi và bị xóa bỏ khi chương trình con chạy xong.

 Giá trị của biến, hằng, biểu thức được copy

copy cho tham số của chương trình con (tham số này có thể xem như là biến cục bộ trong chương trình con). Không lààm thay đ

i giáá trtrịị ccủủa tham s

m thay đổổi gi

 Không l  Ví dụ:

a tham sốố ththựực sc sựự function add(x:integer):integer; Begin

var m,y:integer; begin

m:=4; y:=add(m); writeln(‘m = ‘,m,’, y = ‘,y);

x=x+5; add:=x; End;

end.

m: tham số thực sự x: tham số hình thức

27

m = 4, y = 9 KKếết xut xuấất mt mààn hn hììnhnh

Thủ tục, hàm – Truyền tham số

 TruyTruyềền tham s

n tham sốố bibiếếnn – KhKháái ni

i niệệmm

 Trong khai báo ở đầu của chương trình con, các tham số hình thức có từ khóa VarVar đứng trước gọi là tham s

tham sốố bibiếếnn.

tham sốố không thểể

 Trong lời gọi chương trình con các tham s bibiếến thn thựựcc ssựự chchỉỉ ccóó ththểể là bibiếếnn, không th là hhằằngng hay bibiểểu thu thứứcc.

 Ví dụ:

HoanVi(3, 4); {Sai vì 3 và 4 là các hằng} HoanVi(a+1, b);{Sai vì a+1 là một biểu thức} HoanVi(a,b); {Đúng}

Thủ tục, hàm – Truyền tham số

 TruyTruyềền tham s

n tham sốố bibiếếnn – TTáác dc dụụngng

 Tham số hình thức theo kiểu truyền tham số này không được

cấp phát vùng nhớ.

 Khi gọi chương trình con thì tham số hình thức sẽ là một alias

(biệt danh) khác của biến là tham số thực.  Trong hàm nếu có sự tác động làm thay đ

thay đổổi gi

tham sốố hhìình th

nh thứứcc ththìì cũng chính là thay đ

i giáá trtrịị của biến thay đổổii biến là tham tham

là tham s ssốố ththựựcc.

 Ví dụ:

var m,y:integer; begin

function add(var x:integer):integer; Begin

m:=4; y:=add(m); writeln(‘m = ‘,m,’, y = ‘,y);

end.

x=x+5; add:=x; End;

m: tham số thực sự x: tham số hình thức

28

m = 9, y = 9 KKếết xut xuấất mt mààn hn hììnhnh

Thủ tục, hàm – Lưu ý

 Kiểu dữ liệu của tham số trong hàm và thủ tục thì không hạn chế. Nhưng nếu là kiểu tự xây dựng thì phải được định nghĩa trước bằng từ khóa type.

 Kiểu dữ liệu của kết qủa của hàm có thể là các kiểu đơn giản, chuỗi, hay con trỏ. Nếu là kiểu liệt kê, đoạn con thì phải định nghĩa trước thông qua từ khóa type

 Kiểu dữ liệu của kết qủa của hàm không th

không thểể là mảng (array), bản ghi (record), tập hợp (set) hay tập tin (file).

Phạm vi của biến

1. Phạm vi tác dụng hay tầm tác dụng của biến (hay hằng, kiểu dữ liệu, chương trình con) là khu vực mà trong đó nó có thể sử dụng được.

29

2. Ngoài khu vực đó nó bị xem là chưa khai báo

Kiểu bảng ghi (record)

 Giải lại bài HPT  Phân số  Quản lý học sinh  Đơn thức, đa thức một biết

(mảng đơn thức)

 Điểm, đoạn thẳng, tam giác  Số phức

Mảng

 Mảng một chiều  Nhập, Xuất  Sắp Xếp  Đảo ngược  Mảng hai chiều  Nhập, Xuất  Sắp xếp  Ma trận

 tổng, hiệu, tích,  tính định thức,  chuyển vị

30

Kiểu miền con

Tập hợp (set of)

31

Nhập xuất với tập tin văn bản

32