Để nhập dữ liệu từ bàn phím vào các biến có kiểu dữ liệu chuẩn trừ các biến kiểu BOOLEAN, ta sử dụng cú pháp sau đây: READLN [,,...,]; Chú ý: Khi gặp câu lệnh READLN; không có tham số, c[r]
Trang 1LỜI MỞ ĐẦU
Theo khung trình Giáo và " #$ Ngôn ' ()* trình Pascal
là * / quan 1 trong 1 * / Tin 1 # các 2 ngành Khoa 1
4 nhiên, 67 89 là ngành Công 9 Thông tin
% < 6* = yêu / 1 )* 1 sinh, sinh viên 8? 6/ làm quen !? công
!9 -)* trình, chúng tôi 6A biên ,# 8 Giáo Trình Bài )* Pascal < giúp cho sinh viên
có tài -9 1 )*$ rèn ->9 2 D -)* trình, # E !' F cho các môn
1 G* theo trong trình 6" # :H nhân Công 9 Thông tin
Giáo trình bai J K E bài )* L 6 6G * = #*; Các bài )* này 6M
biên ,# N4 trên khung trình N#> môn Tin 1 # ; Bên # 6B$
chúng tôi O 8P sung ,2 bài )* N4 trên ,Q ,2 ) toán R !? các K
trúc N' -9 6M Q < nâng cao S D$ * pháp -)* trình cho sinh viên
% dung giáo trình 6M chia thành 10 ; Trong U 6E có * /
tóm F lý >G$ * / bài )* W và 2 cùng là * / bài )* 4 6Y 8# 61 4 mình
Y tra ' G = và kinh 9 6A 1; Trong * / bài )* W$ 62 !? ' bài
!G trình cài 67;
Xin chân thành
Chúng tôi hy !1 ,? ) 6M ' ý G 6B góp, phê bình 8# 61 !E
dung, K -M và hình = trình bày 6Y giáo trình này ngày hoàn 9 ;
Trang 2Chương 1 CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ LẬP TRÌNH PASCAL
Pascal là
# 1 S ) Zurich ` > abc 6E dK D 1970 Ông -K> tên Pascal 6Y h 9 nhà
toán
1 Các )* tin / G khi -)* trình !? Turbo Pascal
Y -)* trình 6M !? Turbo Pascal, 2 Y / 2 file sau:
TURBO.EXE: Dùng 6Y ,# và Nn trình
TURBO.TPL: !9 = các 6 !n R 6Y #> !? TURBO.EXE
Ngoài ra, 2 -)* trình 6J # thì * / thêm các )* tin:
GRAPH.TPU: !9 6J #;
*.BGI: Các file 6E Y các -# màn hình = khi dùng 6J #;
*.CHR: Các file = các font ' 6J 1;
2 Các 8? 8 khi -)* trình Pascal
1: a# trình.
2: n trình ` K phím F9), G có -U thì * ,H -U;
3: : #> trình ` K phím Ctrl-F9).
3 :K trúc chung trình Pascal
{ tiêu "# }
PROGRAM 5x x y { khai báo }
USES ;
CONST .;
TYPE ;
VAR .;
PROCEDURE .;
FUNCTION ;
{ thân ) trình } BEGIN
END
Ví N 1: : trình Pascal 6 K
BEGIN
Write(‘Hello World!’);
END
Trang 3Ví N 2:
Program Vidu2;
Const PI=3.14;
Var R,S:Real;
Begin
S:=R*R*PI; u9 tích hình tròn}
Writeln(‘Dien tich hinh tron = ‘, S:0:2); { In ra màn hình } Readln;
End
4
F2: ( trình 6 ,# vào 6b;
F3: wQ file ? 7 file 6A J # trên 6b 6Y ,# ;
Alt-F3: B file 6 ,# ;
Alt-F5: Xem G 0 #> trình
F8: : #> L câu -9 trong trình
Alt-X: Thoát Turbo Pascal
-sa2 = 4 file 6 Q n >Y qua -# ' các file 6 Q;
F10: Vào 9 2 Menu Pascal
5 Các thao tác 8 khi ,# trình
5.1 Các phím thông 01
Insert: : >Y qua -# ' G 6 6C và G 6 chèn
Home: con !E 6/ dòng
End: con !E 2 dòng
Page Up: con lên trang màn hình
Page Down: con d2 trang màn hình
Del: Xoá ký 4 ngay # !n trí con ;
Back Space (): Xóa ký 4 bên trái con ;
Ctrl-PgUp: con !E 6/ !D 8;
Ctrl-PgDn: con !E 2 !D 8;
Ctrl-Y: Xóa dòng # !n trí con ;
5.2 Các thao tác trên $2 3 %4
: 1 2 !D 8 Shift + <Các phím >
Ctrl-KY: Xoá 2 !D 8 6 1
Ctrl-Insert: 2 !D 8 6 1 vào Clipboard
Shift-Insert: Dán 2 !D L Clipboard d2 !n trí con ;
6 Các thành * / 8 ngôn ' Pascal
Trang 46.1 6 khóa
L khoá là các L mà Pascal dành riêng 6Y * ! cho 6q nó `: #
BEGIN, END, IF, WHILE, )
Chú ý: : Turbo Pascal 7.0 > lên, các 6 khoá trong ) trình ;@ "A B C
khác màu 3 các 6 khác.
6.2 Tên E"C danh)
n danh là dãy ký 4 dùng 6Y 67 tên cho các <$ 8G$ Y$ tên trình
con Khi 67 tên, ta * chú ý ,2 6Y sau:
Không 6M 67 trùng tên !? L khoá
Ký 4 6/ tiên tên không 6M 8F 6/ 8Q các ký 4 67 89 7 ' ,2;
Không 6M 67 tên !? ký 4 space,các phép toán
Ví N : Các tên !G sau là sai
1XYZ Sai vì 8F 6/ 8< ' ,2;
#LONG Sai vì 8F 6/ 8< ký 4 67 89;
KY TU Sai vì có F (space)
LAP-TRINH Sai vì NK L (-) là phép toán
6.3 GH H -IJ (;)
K K * R> 6M dùng 6Y D cách ' các câu -9 ; Không nên Y NK K
* R> là NK G thúc câu -9 ;
Ví N :
FOR i:=1 TO 10 DO Write(i);
Trong câu -9 trên, -9 Write(i) 6M 4 9 10 -/; %G Y NK K * R> là
G thúc câu -9 thì -9 Write(i) \ 4 9 1 -/;
6.4 L 4 thích
Các
cho
thích 6M 67 ' hai NK # { và } 7 ' NK (* và *)
Ví N :
Var a,b,c:Real; {Khai báo %N}
Delta := b*b – 4*a*c; (* Tính delta "B 4 -) trình %P 2 *)
1 3 Q 6 Turbo Pascal
Trang 52 % )* vào 6# trình sau:
Uses Crt;
Begin
Writeln(‘***********************************************************’);
Writeln(‘* CHUONG TRINH PASCAL DAU TIEN CUA TOI *’);
Writeln(‘* Oi! Tuyet voi! *);
Writeln(‘***********************************************************’); Readln; End 3 n và #> trình trên 4 ( trình vào 6b !? tên BAI1.PAS 5 Thoát Pascal 6 3 Q 6 -# Turbo Pascal 7 wQ file BAI1.PAS 8 Chèn thêm vào dòng: CLRSCR; vào sau dòng BEGIN 9 n và #> H trình 10 ( trình vào 6b; 11 Thoát Pascal 12 G trình in ra màn hình các hình sau: * ******** *******
*** ** ** ** **
** ** ** ** **
** ** ******** * *
********* ** ** **
** ** ** ** ** **
** ** ******** ********
Trang 6: 2
CÁC KIỂU DỮ LIỆU CƠ BẢN KHAI BÁO HẰNG, BIẾN, KIỂU, BIỂU THỨC VÀ CÂU LỆNH
I CÁC 3pj (pj : %
1 3Y logic
- L khóa: BOOLEAN
- E giá n (TRUE, FALSE)
- Các phép toán: phép so sánh (=, <, >) và các phép toán logic: AND, OR, XOR,
NOT
Trong Pascal, khi so sánh các giá n boolean ta tuân theo qui F FALSE < TRUE
,H A và B là hai giá n Y Boolean 3G 0 các phép toán 6M Y 9
qua 8 N? 6I>
2 3Y ,2 nguyên
2.1 Các $B ;2 nguyên
LongInt -2147483648 2147483647 4 byte
2.2 Các phép toán trên $B ;2 nguyên
2.2.1 Các phép toán ;2 R
+, -, *, / (phép chia cho ra G 0 là ,2 4c;
Phép chia -K> * / nguyên: DIV (Ví N : 34 DIV 5 = 6)
Phép chia -K> ,2 N MOD (Ví N 34 MOD 5 = 4)
2.2.2 Các phép toán ST lý bit:
Trang 7Trên các Y ShortInt, Integer, Byte, Word có các phép toán:
NOT, AND, OR, XOR
SHL (phép Nn trái): a SHL n a 2n
SHR (phép Nn * c a SHR n a DIV 2n
3 3Y ,2 4
3.1 Các $B ;2 U
:
Single 1.510-45 3.410+38 4 byte Real 2.910-39 1.710+38 6 byte Double 5.010-324 1.710+308 8 byte Extended 3.410-4932 1.110+4932 10 byte
Chú ý: Các Y ,2 4 Single, Double và Extended yêu / * ,H N chung !? 8
6J dH lý ,2 7 * biên dich trình !? \ n {$N+} 6Y liên G 8 -)* ,2;
3.2 Các phép toán trên $B ;2 UR +, -, *, /
Chú ý: Trên $B ;2 U không V W các phép toán DIV và MOD.
3.3 Các hàm ;2 ;T 01 cho $B ;2 nguyên và ;2 UR
SQRT(x): !E D 8) hai x (x0)
ARCTAN(x): !E arctang(x) theo radian
TRUNC(x): !E ,2 nguyên / !? x K bé x
FRAC(x): !E * / )* phân x
ROUND(x): Làm tròn ,2 nguyên x
PRED(n): !E giá n 6= ? n
SUCC(n): !E giá n 6= sau n
Trang 8ODD(n): Cho giá n TRUE G n là ,2 -;
INC(n): D n thêm 1 6 !n (n:=n+1)
DEC(n): n 6 1 6 !n (n:=n-1)
4 3Y ký 4
- L khoá: CHAR
- Kích ? 1 byte
- Y 8Y N ký 4$ ta có Y ,H N trong ,2 các cách sau 6I>
7 ký 4 trong 7* NK nháy 6; Ví N 'A', '0'
Dùng hàm CHR(n) (trong 6B n là mã ASCII ký 4 / 8Y Nc; Ví N CHR(65)
8 N ký 4 'A'
Dùng ký 9 #n (trong 6B n là mã ASCII ký 4 / 8Y Nc; Ví N #65
- Các phép toán: =, >, >=, <, <=,<>
* Các hàm trên Y ký 4
- UPCASE(ch): !E ký 4 in hoa = !? ký 4 ch Ví N UPCASE('a') = 'A'
- ORD(ch): !E ,2 = 4 trong 8 mã ASCII ký 4 ch Ví N ORD('A')=65
- CHR(n): !E ký 4 = trong 8 mã ASCII có ,2 = 4 là n Ví N
CHR(65)='A'
- PRED(ch): cho ký 4 6= ? ký 4 ch Ví N PRED('B')='A'
- SUCC(ch): cho ký 4 6= sau ký 4 ch Ví N SUCC('A')='B'
II KHAI BÁO
-
- Cú pháp:
CONST <Tên < = <Giá n y
7
CONST <Tên < = Y = < y
Ví N :
Name = 'Tran Van Hung';
Continue = FALSE;
Logic = ODD(5); {Logic =TRUE}
Chú ý:
ORD
III KHAI BÁO p%
- G là 6# -M mà giá n nó có Y thay 6P trong quá trình 4 9
trình
Trang 9- Cú pháp:
VAR <Tên 8G $5 8G 2>, ] : 3Y N' -9 y
Ví N :
VAR x, y: Real; {Khai báo hai 8G x, y có Y là Real}
a, b: Integer; {Khai báo hai 8G a, b có Y integer}
Chú ý: Ta có B 36 khai báo %N? 36 gán giá C $> " cho %N %^ cách ;T 01 cú
pháp sau:
CONST <Tên 8G 3Y = <Giá n y
Ví N :
CONST x:integer = 5;
? khai báo 8G x trên, trong trình giá n 8G x có Y thay 6P; `E này
không 6@ G chúng ta khai báo x là <c;
IV
- Ngoài các Y N' -9 do Turbo Pascal cung K*$ ta có Y 6n b các Y N' -9 ?
N4 trên các Y N' -9 6A có
- Cú pháp:
TYPE <Tên Y = <Mô Y y
VAR <Tên 8G 5 Y y
Ví N :
TYPE Sothuc = Real;
Tuoi = 1 100;
ThuNgay = (Hai,Ba,Tu, Nam, Sau, Bay, CN)
tt : Tuoi;
Day: ThuNgay;
V
Y = (expression) là công = tính toán mà trong 6B bao J các phép toán, các
<$ các 8G$ các hàm và các NK 7 6;
Ví N : (x +sin(y))/(5-2*x) 8Y = ,2 1
Trong 8Y =$ = 4 tiên các phép toán 6M -9 kê theo = 4 sau:
K 7 ()
Phép toán ngôi (NOT, -)
Phép toán *, /, DIV, MOD, AND
Phép toán +, -, OR, XOR
Phép toán so sánh =, <, >, <=, >=, <>, IN
VI CÂU
Trang 106.1 Câu -9 6
- Câu <_ gán (:=): <Tên 8G ~Y = y
- Các -9 dK )* N' -9 READ/READLN, WRITE/WRITELN
-
6.2 Câu -9 có K trúc
- Câu -9 ghép: BEGIN END;
- Các K trúc 6E Y IF , CASE , FOR , REPEAT , WHILE
6.3 Các -9 dK )* N' -9
6.3.1 L_ SH 0a <_
Y dK N' -9 ra màn hình, ta ,H N ba N# sau:
(1) WRITE(<tham ,2 1> [, <tham ,2 2>, ]);
(2) WRITELN(<tham ,2 1> [, <tham ,2 2>, ]);
(3) WRITELN;
Các trên có = D sau:
(1) Sau khi dK giá n các tham ,2 ra màn hình thì con không d2 dòng
(2) Sau khi dK giá n các tham ,2 ra màn hình thì con d2 6/ dòng G* theo
(3)ZK ra màn hình dòng 2;
Các tham ,2 có Y là các <$ 8G$ 8Y =; %G có E tham ,2 trong câu -9
thì các tham ,2 * 6M phân cách nhau 8Q NK * R>;
Khi ,H N -9 WRITE/WRITELN, ta có hai cách !G không qui cách và có qui
cách:
- :N không qui cách: N' -9 dK ra ,£ 6M canh -E Q phía bên trái %G N' -9 là ,2 4
thì ,£ 6M in ra N? N# 8Y N khoa 1;
Ví N :
WRITELN(x); WRITE(sin(3*x));
- :N có qui cách: N' -9 dK ra ,£ 6M canh -E Q phía bên * ;
Ví N :
WRITELN(x:5); WRITE(sin(13*x):5:2);
Câu -9 3G 0 trên màn hình Writeln('Hello');
Writeln('Hello':10);
Writeln(500);
Writeln(500:5);
Writeln(123.457)
Writeln(123.45:8:2)
Hello Hello 500 500 1.2345700000E+02 123.46
6.3.2 cP- 0a <_
Trang 11Y )* N' -9 L bàn phím vào các 8G có Y N' -9 R `L các 8G Y
BOOLEAN), ta ,H N cú pháp sau 6I>
km(%`8G 1> $8G ] $;;;$8G n>]);
Chú ý: Khi d- câu <_ READLN; (không có tham ;2F? ) trình ;@ 06 <W
;T 01 H phím ENTER WJ N-,
6.4 Các hàm và
Hàm KEYPRESSED: Hàm !E giá n TRUE G có phím 8K 6M
K$ G không hàm cho giá n là FALSE
Hàm READKEY: Hàm có = D 61 ký 4 L 8 69 bàn phím
GOTOXY(X,Y:Integer): Di >Y con 6G X dòng Y
CLRSCR: Xoá màn hình và 6 con !E góc trên bên trái màn hình
CLREOL: Xóa các ký 4 L !n trí con 6G G dòng
DELLINE: Xoá dòng # !n trí con và NJ các dòng Q phía N? lên
TEXTCOLOR(color:Byte): G -)* màu cho các ký 4; Trong 6B color
[0,15]
TEXTBACKGROUND(color:Byte): G -)* màu E cho màn hình
Bài )* 2.1: G trình )* vào 6 dài hai # tam giác và góc ' hai #
6B$ sau 6B tính và in ra màn hình N9 tích tam giác
Ý >:
Công = tính N9 tích tam giác: S = sin( ) !? a,b là 6 dài 2 # và là góc ¤*
2
1a b
' 2 # a và b
Bài )* 2.2: G trình tính n x, x>0
Ý >:
Ta có: n x = x n =
1
x n
e ln
1
Bài )* 2.3: G trình )* vào 2 ,2 a, b Sau 6B hoán 6P giá n 2 ,2 6B
a/ Cho phép dùng 8G trung gian
b/ Không 6M phép dùng 8G trung gian
Bài )* 2.4: G trình )* vào các ,2 nguyên: a, b, x, y, sau 6B in ra màn hình
G 0 các 8Y = sau:
Trang 12a/ x y b/ c/ xy , x>0 d/ e
x
y
2
( )( )
( )
r
h a
4 2 3
2 9 1
|asin ( )2 x x|
Bài )* 2.5: G trình tính ,9 tích tam giác theo công = sau:
S = p p a p b p c( )( )( ) !? p = (a+b+c)1
2
Trang 13Chương 3 CÁC CÂU LỆNH CÓ CẤU TRÚC
I CÂU
1.1 (9 IF
Cú pháp:
(1) IF B THEN S;
(2) IF B THEN S1 ELSE S2;
a 6J 4 9
Chú ý: Khi ;T 01 câu <_ IF thì "] 6 khoá ELSE không "A có 0H H -IJ
(;).
1.2 (9 CASE
Cú pháp:
CASE B OF
Const 1: S1; Const 2: S2;
Const n: Sn; END;
CASE B OF
Const 1: S1; Const 2: S2;
Const n: Sn; ELSE Sn+1;
END;
Trong 6B
B: Y = Y vô ? 6G 6M Y nguyên, Y logic, Y ký 4$ Y
-9 kê
(2)
B
-S1
S2
(1)
B
-S
Trang 14
Const i:
NK * R>c 7 các 6# < (dùng hai NK K 6Y phân cách ' giá n 6/ và
giá n 2c;
Giá n 8Y = và giá n )* < i (i=1¸n) * có cùng Y;
Khi 7* -9 CASE, trình ,£ Y tra:
- %G giá n 8Y = B < trong )* < const i thì máy ,£ 4 9 -9 Si
=;
- %M -#
+ 2 !? N# 1: Không làm gì ;
+ 2 !? N# 2: 4 9 -9 Sn+1
II CÂU
2.1 Vòng -7* xác 6n
Có hai N# sau:
GW N
FOR 8G 6G. ~ n Min> TO <giá n Max> DO S;
GW lùi
FOR 8G 6G. ~ n Max> DOWNTO <giá n Min> DO S;
a 6J 4 9 vòng -7* FOR:
Chú ý: Khi ,H N câu -9 -7* FOR / chú ý các 6Y sau:
Không nên k _ thay "l giá C m %N "N bên trong vòng <d- FOR vì làm
3PJ có B ;@ không $B soát "A %N "N,
Dạng tiến
G 6G.~w
G 6G.~wd
+
-Thoát
S;
p%:`G 6G.cy
Dạng lùi
G 6G.~wd
G 6G. ~wd
+
-Thoát
S;
m:`G 6G.cy
...LAP-TRINH Sai NK L (-) phép tốn
6.3 GH H - IJ (;)
K K * R> 6M dùng 6Y D cách '' câu -9 ; Không nên Y NK K
* R> NK G thúc câu -9 ;... TO 10 DO Write(i);
Trong câu -9 trên, -9 Write(i) 6M 4 9 10 -/ ; %G Y NK K * R>
G thúc câu -9 -9 Write(i) \ 4 9 -/ ;
6.4 L 4 thích... ) Zurich ` > abc 6E dK D 1970 Ông -K> tên Pascal 6Y h 9 nhà
toán
1 Các )* tin / G -) * trình !? Turbo Pascal
Y -) * trình 6M !? Turbo Pascal, 2 Y