Nên ch y Borland Pascal... Ch n th Program và đánh check nh hình sau... Pg Down Page Down Xu ng m t trang màn hình... KY TU Sai vì có kho ng tr ng space... Chèn thêm vào dòng: CLRSCR;
Trang 1Giáo trình
Ch biên: Phan V n D ng
Hi u đính và b sung:
Bình nh, 6-2014
Trang 2M C L C
M C L C 2
L I M U 5
Ch ng 1 6
GI I THI U NGÔN NG L P TRÌNH PASCAL 6
VÀ BORLAND PASCAL 7.0 6
I.1 GI I THI U NGÔN NG PASCAL 6
I.1.1 Ngôn ng Pascal 6
I.1.2 Turbo Pascal 6
I.2 S D NG PASCAL 7.0 7
I.2.1 Cài đ t và s d ng Borland Pascal 7.0 7
I.2.2 Kh i đ ng Turbo Pascal 7
I.2.3 Các thao tác th ng s d ng trên Turbo Pascal 8
Ch ng 2 10
CÁC THÀNH PH N C B N C A 10
NGÔN NG L P TRÌNH PASCAL 10
II.1 CÁC T P TIN C N THI T KHI L P TRÌNH V I TURBO PASCAL 10
II.2 CÁC B C C B N KHI L P M T CH NG TRÌNH PASCAL 10
II.3 C U TRÚC CHUNG C A M T CH NG TRÌNH PASCAL 10
II.4 CÁC THÀNH PH N C B N C A NGÔN NG PASCAL 11
II.4.1 T khóa – B ch vi t – Tên 11
II.4.2 Ki u d li u 12
II.4.3 Bi n – H ng s 15
II.4.4 Bi u th c – d u ch m ph u – L i gi i thích 16
II.4.5 Câu l nh 16
BÀI T P TH C HÀNH 20
LÀM QUEN V I PASCAL 20
BÀI T P M U 20
BÀI T P T GI I 22
Ch ng 3 24
CÁC CÂU L NH CÓ C U TRÚC 24
III.1 L NH C U TRÚC R NHÁNH 24
III.1.1 D ng Không y 24
III.1.2 D ng y 24
III.2 L NH C U TRÚC L A CH N 25
III.3 CÁC L NH VÒNG L P 26
III.3.1 Vòng l p xác đ nh 26
III.3.2 Vòng l p không xác đ nh 27
III.3.3 S khác nhau gi a vòng l p WHILE … DO và REPEATE … UNTIL và FOR TO DO 29
BÀI T P TH C HÀNH 30
BÀI T P M U 30
BÀI T P T GI I 36
Ch ng 4 39
CH NG TRÌNH CON: TH T C VÀ HÀM 39
IV.1 KHÁI NI M V CH NG TRÌNH CON 39
Trang 3IV.2 HÀM (FUNCTION) 39
IV.3 TH T C (PROCEDURE) 42
IV.4 BI N TOÀN C C VÀ BI N A PH NG 43
IV.5 V N XÂY D NG CH NG TRÌNH CON VÀ TRUY N THAM S 44 IV.6 TÍNH QUY C A CH NG TRÌNH CON 45
IV.6.1 Khái ni m đ quy 45
IV.6.2 Ch ng trình con đ quy 45
IV.6.3 C u trúc c a m t ch ng trình con đ quy 46
IV.6.4 Ph ng pháp thi t k gi i thu t đ quy 46
IV.7 T O TH VI N (UNIT) 46
IV.7.1 Khái ni m v Unit 46
IV.7.2 Thi t l p Unit 48
BÀI T P TH C HÀNH 51
BÀI T P M U 51
BÀI T P T GI I 54
Ch ng 5 56
D LI U KI U M NG (ARRAY) 56
V.1 KHÁI NI M 56
V.2 M NG M T CHI U 56
V.2.1 Khai báo 56
V.2.2 Truy xu t các ph n t c a m ng 57
V.3 M NG NHI U CHI U 57
V.3.1 Khai báo 57
V.3.2 Truy xu t các ph n t c a m ng 58
V.4 M T S GI I THU T S P X P TRÊN M NG 59
V.4.1 Gi i thu t Select Sort (l a ch n) 59
V.4.2 Bubble sort (n i b ) 60
V.4.3 M t s thu t toán khác 61
BÀI T P TH C HÀNH 62
Ch ng 6 76
XÂU KÝ T (STRING) 76
VI.1 KHAI BÁO KI U STRING 76
VI.2 TRUY XU T D LI U KI U STRING 76
VI.3 CÁC PHÉP TOÁN, TH T C VÀ HÀM TRÊN XÂU KÝ T 76
VI.3.1 Các phép toán trên xây ký t 76
VI.3.2 Các th t c và hàm trên xây ký t 76
BÀI T P TH C HÀNH 79
BÀI T P M U 79
BÀI T P T GI I 85
Ch ng 7 87
KI U B N GHI (RECORD) 87
VII.1 KHAI BÁO D LI U KI U RECORD 87
VII.2 XU T NH P D LI U KI U RECORD 87
VII.2.1 Truy nh p tr c ti p: 87
VII.2.2 S d ng câu l nh WITH 87
VII.2.3 Gán bi n Record: 87
Trang 4BÀI T P TH C HÀNH 88
BÀI T P M U 88
BÀI T P T GI I 92
Ch ng 8 94
D LI U KI U CON TR 94
VIII.1 KHAI BÁO 94
VIII.2 LÀM VI C V I BI N NG 94
VIII.2.1 C p phát vùng nh 94
VIII2.2 Gi i phóng vùng nh 95
VIII.3 DANH SÁCH NG 95
VIII.3.1 Khái ni m 95
VIII.3.2 Khai báo 95
VIII.3.3 Các thao tác th ng g p trên danh sách liên k t đ n 95
BÀI T P TH C HÀNH 98
BÀI T P M U 98
BÀI T P T GI I 111
TÀI LI U THAM KH O 116
Trang 5L I M U
Theo khung ch ng trình c a B Giáo D c và ào T o, Ngôn ng L p trình Pascal là m t ph n quan tr ng trong h c ph n Tin h c i c ng thu c các kh i ngành Khoa h c T nhiên, đ c bi t là ngành Công ngh Thông tin
Nh m đáp ng yêu c u h c t p c a h c sinh, sinh viên b c đ u làm quen v i công
vi c l p trình, chúng tôi đã biên so n b Giáo Trình Bài t p Pascal nh m giúp cho
H c sinh Sinh viên có m t tài li u h c t p, rèn luy n t t kh n ng l p trình, t o n n
t ng v ng ch c cho các môn h c ti p theo trong ch ng trình đào t o C nhân Công ngh Thông tin
Giáo trình bao g m r t nhi u bài t p t đ n gi n đ n ph c t p Các bài t p này đ c
biên so n d a trên khung ch ng trình gi ng d y môn Ngôn ng L p trình (MH11)
Bên c ch đó, chúng tôi c ng b sung m t s bài t p d a trên c s m t s thu t toán chu n v i các c u trúc d li u đ c m r ng nh m nâng cao k n ng, ph ng pháp l p trình cho H c sinh Sinh viên
N i dung c a giáo trình đ c chia thành 8 ch ng Trong m i ch ng đ u có ph n tóm t t lý thuy t, ph n bài t p m u và cu i cùng là ph n bài t p t gi i đ b n đ c t mình ki m tra nh ng ki n th c và kinh nghi m đã h c Trong ph n bài t p m u, đ i
v i nh ng bài t p khó ho c có thu t toán ph c t p, chúng tôi th ng nêu ra ý t ng và
gi i thu t tr c khi vi t ch ng trình cài đ t
Xin chân thành c m n các đ ng nghi p T Công ngh Thông tin Tr ng Cao
ng Ngh C i n – Xây D ng & Nông Lâm Trung B đã giúp đ , đóng góp ý ki n
đ hoàn ch nh n i dung giáo trình này
Chúng tôi hy v ng s m nh n đ c nh ng ý ki n đóng góp, phê bình c a b n đ c v
n i dung, ch t l ng và hình th c trình bày đ giáo trình này ngày m t hoàn thi n h n Bình nh, Tháng 06 N m 2014
CÁC TÁC GI
Trang 6Ch ng 1
GI I THI U NGÔN NG L P TRÌNH PASCAL
VÀ BORLAND PASCAL 7.0 I.1 GI I THI U NGÔN NG PASCAL
I.1.1 Ngôn ng Pascal
Pascal là m t ngôn ng l p trình b c cao do 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 và nhà tri t h c ng i Pháp n i ti ng Blaise Pascal
Pascal là m t ngôn ng l p trình có c u trúc th hi n trên 3 ph ng di n:
- V m t d li u: Ngoài các ki u d li u đ n gi n còn có các ki u d li u có c u trúc Ta có th xây d ng các ki u d li u ph c t p t các ki u d li u đã có
- V m t câu l nh: T các câu l nh đ n gi n và l nh có c u trúc ta có th xây
d ng các câu l nh h p thành
- V m t ch ng trình: M t ch ng trình có th chia làm nhi u ch ng trình con
I.1.2 Turbo Pascal
Khi m i ra đ i, Standart Pascal là m t ngôn ng đ n gi n, dùng đ gi ng
d y và h c t p, d n d n các u đi m c a nó đ c phát huy và tr thành m t ngôn
ng m nh T Pascal chu n ban đ u, đã đ c nhi u công ty ph n m m c i ti n
v i nhi u thêm b t khác nhau
TURBO PASCAL là s n ph m c a hãng Borland đ c dùng r t ph bi n trên th gi i vì nh ng u đi m c a nó nh : t c đ nhanh, các c i ti n so v i Pascal chu n phù h p v i yêu c u ng i dùng
TURBO PASCAL 4.0 tr đi có c i ti n r t quan tr ng là đ a khái ni m Unit đ có th d ch s n các Module trên đ a, làm cho vi c l p trình tr nên ng n
g n, d dàng, ch ng trình vi t d hi u h n
T phiên b n 5.5 (ra đ i n m 1989) tr đi, Turbo Pascal có m t ki u d
li u hoàn toàn m i là ki u Object cho phép đ a các mã l nh xen k v i d li u Ngoài ra nó còn th vi n đ ho r t phong phú v i nhi u tính n ng m nh, ngôn
ng l p trình c p cao Delphi c ng s d ng cú pháp t ng t nh Turbo Pascal
Turbo Pascal 7.0 là phiên b n cu i cùng c a Borland Sau phiên b n này hãng Borland chuy n sang Pascal For Windows trong m t th i gian ng n r i s n
xu t DELPHI Turbo Pascal 7.0 h tr m nh m l p trình h ng đ i t ng nh ng
có nh c đi m là b l i “Devide by zero” trên t t c các máy có xung nh p l n
h n 300 MHz Gi i quy t v n đ này có hai ph ng án:
1 C p nh t file TURBO.TPL trong th m c \BP\BIN
2 S d ng Free Pascal
Ngoài ra c ng nên l u ý là Turbo Pascal ch y ch đ th c (real mode) nên khi
ch y trên n n Windows XP nó hay kh i đ ng l i máy Nên ch y Borland Pascal
Trang 7Khi đó Windows s t o m t môi tr ng DOS gi l p và ch y ch đ đa nhi m
ti n l i h n
I.2 S D NG PASCAL 7.0
I.2.1 Cài đ t và s d ng Borland Pascal 7.0
Gói cài đ t Borland Pascal th ng đ c đ t trong th m c BP70 M
th m c này và ch y file cài đ t INSTALL.EXE Làm theo các h ng
d n trong quá trình cài đ t Thông th ng sau khi cài đ t xong, ch ng
trình s đ c đ t trong C:\BP Hãy vào C:\BP\BIN đ c p nh t l i file
Turbo.tpl (Chép đè file cùng tên trong th m c \BP70\Huongdan\ lên file này) Thay
vì ch y TURBO PASCAL (File th c thi: BP\BIN\Turbo.exe) hãy t o Shorcut và ch y
BORLAND PASCAL (File th c thi: BP\BIN\BP.exe) Các thao tác s d ng trên
Borland Pascal hoàn toàn gi ng v i các thao tác trên Turbo Pascal nói d i đây
I.2.2 Kh i đ ng Turbo Pascal
N u máy tính chúng ta đã cài đ t Turbo Pascal trên đ a, ta có th kh i đ ng chúng
nh sau (N u máy tính ch a có, chúng ta ph i cài đ t Turbo Pascal sau đó m i th c thi
đ c)
+ T MS-DOS: m b o r ng th m c hi n hành đúng v trí cài đ t (ho c dùng
l nh PATH) Turbo Pascal Ta đánh vào TURBO r i Enter
+ T Windows: Ta nên gi l p MS-DOS Mode cho t p tin TURBO.EXE ho c
Shortcut c a nó, n u không m i khi ta th c thi TURBO PASCAL ch ng trình
s thoát kh i Windows, tr v MS-DOS Sau khi thoát Turbo Pascal ta ph i đánh
l nh EXIT đ kh i đ ng l i Windows Cách gi l p nh sau:
Nh p chu t ph i lên t p tin TURBO.EXE ho c Shortcut c a nó, ch n Properties
Ch n th Program và đánh check nh hình sau
Click vào đây và
ch n nh hình d i
Trang 8Ch n OK trên các h p tho i, sau đó kh i đ ng Turbo Pascal, màn hình so n th o sau khi kh i đ ng TURBO PASCAL nh d i đây xu t hi n
I.2.3 Các thao tác th ng s d ng trên Turbo Pascal
Pg Up Page Up Lên m t trang màn hình
Pg Down Page Down Xu ng m t trang màn hình
Del Delete Xoá ký t t i v trí con tr
Back BackSpace Xoá ký t tr c con tr
Insert Insert Thay đ i ch đ vi t xen hay vi t ch ng
Các thao tác trên kh i v n b n Ctrl + PgUp a con tr v đ u v n b n
Trang 9+ Copy kh i vào clipboard: CTRL+ Ins (phím Insert)
+ Dán kh i (đã copy vào clipboard) vào v trí m i: SHIFT+ Ins
Ctrl + F4 Ki m tra giá tr bi n khi ch y ch ng
trình
Trang 10Ch ng 2
C ÁC THÀNH PH N C B N C A NGÔN NG L P TRÌNH PASCAL II.1 CÁC T P TIN C N THI T KHI L P TRÌNH V I TURBO PASCAL
l p trình đ c v i Turbo Pascal, t i thi u c n 2 file sau:
• TURBO.EXE: Dùng đ so n th o và d ch ch ng trình
• TURBO.TPL: Th vi n ch a các đ n v chu n đ ch y v i TURBO.EXE Ngoài ra, mu n l p trình đ ho thì ph i c n thêm các t p tin:
• GRAPH.TPU: Th vi n đ ho
• *.BGI: Các file đi u khi n các lo i màn hình t ng ng khi dùng đ ho
• *.CHR: Các file ch a các font ch đ h a
II.2 CÁC B C C B N KHI L P M T 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), n u có l i thì ph i s a l i
B c 3: Ch y ch ng trình (nh n phím Ctrl-F9)
II.3 C U TRÚC CHUNG C A M T CH NG TRÌNH PASCAL
{ Ph n tiêu đ }
PROGRAM Tên_ch ng_trình;
{ Ph n khai báo }
USES ;
CONST .;
TYPE ;
VAR .;
PROCEDURE .;
FUNCTION ;
{ Ph n thân ch ng trình } BEGIN
END
Ví d 1: Ch ng trình Pascal đ n gi n nh t
BEGIN
Write(‘Hello World!’);
END
Ví d 2:
Program Vidu2;
Const PI=3.14;
Trang 11II.4 CÁC THÀNH PH N C B N C A NGÔN NG PASCAL
II.4.1 T khóa – B ch vi t – Tên
If Implementation
In Inline Interface Interrupt Label
Mod Nil Not Object
Of
Or Packed Procedure Program Record Repeat Set Shl
Shr String Then
To Type Unit Until Uses Var Virtual While With Xor
Chú ý: V i Turbo Pascal 7.0 tr lên, các t khoá trong ch ng trình s đ c hi n
Trang 12- Các ký hi u toán h c: +, -, *, /, =, <, >, (, )
- Các ký hi u đ c bi t: , : ; [ ] ? % @ \ | ! # $ { }
- D u kho ng cách (kho ng tr ng – Space)
II.4.1.3 Tên (đ nh danh)
nh danh là m t dãy ký t dùng đ đ t tên cho các h ng, bi n, ki u, tên ch ng trình con Khi đ t tên, ta ph i chú ý m t s đi m sau:
• Không đ c đ t trùng tên v i t khoá
• Ký t đ u tiên c a tên không đ c b t đ u b i các ký t đ c bi t ho c ch s
• Không đ c đ t tên v i ký t space, các phép toán
Ví d : Các tên vi t nh sau là sai
1XYZ Sai vì b t đ u b ng ch s
#LONG Sai vì b t đ u b ng ký t đ c bi t
FOR Sai vì trùng v i t khoá
KY TU Sai vì có kho ng tr ng (space)
LAP-TRINH Sai vì d u tr (-) là phép toán
- Ki u chu n là ki u Pascal đ nh ngh a s n D i đây là danh sách các ki u d
li u chu n cùng v i mi n giá tr và kích th c mà m i ki u chi m trong b nh
11 Extended 10 byte 3.4E-4932 1.1E+4932
Trang 13Trong đó 7 ki u đ u g i là ki u đ m đ c (ordinal type), còn các ki u sau là không
đ m đ c
- Ki u do ng i l p trình đ nh ngh a thông qua vi c khai báo ki u Cú pháp:
Ví d : TYPE NguyenDuong = 1 MaxInt;
− Tr S nguyên, s th c Gi ng đ i s 10 - 9 1
* Nhân S nguyên, s th c Gi ng đ i s 10*9 90
/ Chia S nguyên, s th c S th c 10 / 4 2.5 Div Chia l y ph n nguyên S nguyên S nguyên 10 div 3 3 Mod Chia l y ph n d S nguyên S nguyên 10 mod 3 1
b) M t S Hàm s h c s d ng cho ki u s nguyên và s th c
D i đây là m t s hàm đ c Pascal thi t k s n Ng i s d ng có th g i và s
d ng chúng mà không c n ph i khai báo unit qua câu khai báo USES
COS(x) Hàm l ng giác S nguyên, s th c S th c Cos(PI) 1
ARCTAN(x) Hàm l ng giác S nguyên, s th c S th c Arctan(1)
4π
SUCC(x) Succ(x) x + 1 S nguyên S nguyên
PRED(x) Pred(x) x −1 S nguyên S nguyên
ROUND(x) Làm tròn S th c S nguyên Round(8.6) 9 TRUNC(x) Làm tròn S th c S nguyên Trunc(8.6) 8 INC(x) T ng 1 đ n v S nguyên S nguyên Inc(5) 6
DEC(x) Gi m 1 đ n v S nguyên S nguyên Dec(5) 4
ODD(x) TRUE n u x s l S nguyên Logic Odd(5) True
TYPE <Tên ki u> = <Ki u>;
[<Tên ki u> = <Ki u>;]
Trang 14c) M t s hàm trên ki u ký t
Hàm Ý ngh a Ki u đ i s Ki u tr v Ví d
UPCASE(ch) In hoa Ký t (char) Gi ng đ i s UPCASE(‘a’) A SUCC(cg) Succ(x) x + 1 Ký t (char) Gi ng đ i s Succ(‘B’) C PRED(ch) Pred(x) x −1 Ký t (char) Gi ng đ i s PRED(‘B’) A ORD(x) L y mã ASCII Ký t S nguyên Ord(‘a’) 97 CHR(x) ký t mã ASCII S nguyên Ký t Chr(65) ‘A’
d) Các phép toán logic
Các phép toán logic, toán h ng c a nó ph i là m t ki u Boolean Toán h ng c ng
nh các k t qu c a phép toán ch nh n 1 trong 2 giá tr : ho c là TRUE ho c là FALSE (không có giá tr khác)
Các toán t logic tác đ ng lên ki u Boolean, cho k t qu là ki u Boolean AND (và),
OR (ho c), XOR, NOT (ph đ nh) Sau đây là b ng chân tr c a các toán t này
Trang 15Còn có hai phép toán bit n a là SHIFT LEFT và SHIFT RIGHT, l n l t đ c kí
hi u là SHL và SHR Phép toán SHL làm đ y các bit lên m t s v trí v bên trái và thêm các giá tr 0 vào các bit t n cùng bên ph i Cú pháp:
<Bi u th c nguyên> SHL <s bit>
Ví d :
X 0 0 0 0 1 0 1 0
X SHL 1 0 0 0 1 0 1 0 0 { y v bên trái 1 bit}
X SHL 2 0 0 1 0 1 0 0 0 { y v bên trái 2 bit}
V y (10 SHL 1) cho k t qu 20 (10 SHL 2) cho k t qu 40
Ch ng trình qu n lý bi n thông qua tên bi n và m i bi n t ng ng v i m t ki u
d n (help) đ i v i m i Unit đ bi t trong Unit có các h ng nào đã đ c đ nh ngh a
- H ng s do ng i dùng đ nh ngh a thông qua vi c khai báo Cú pháp:
VAR <Tên bi n> ,[< Tên bi n>]: <Ki u>;
[ <Tên bi n>,[< Tên bi n>]: <Ki u>;]
Trang 16• Phép toán m t ngôi (NOT, -)
• Phép toán *, /, DIV, MOD, AND
• Phép toán +, -, OR, XOR
FOR i:=1 TO 10 DO Write(i);
Trong câu l nh trên, l nh Write(i) đ c th c hi n 10 l n N u hi u d u ch m ph y
là k t thúc câu l nh thì l nh Write(i) ch th c hi n 1 l n
II.4.4 3 L i gi i thích
Các l i bàn lu n, l i chú thích có th đ a vào b t k ch nào trong ch ng trình đ cho ng i đ c d hi u mà không làm nh h ng đ n các ph n khác trong ch ng trình L i gi i thích đ c đ t gi a hai d u ngo c { và } ho c gi a c m d u (* và *)
Ví d :
Var a,b,c:Rea; {Khai báo bi n}
Delta := b*b – 4*a*c; (* Tính delta đ gi i ph ng trình b c 2 *)
II.4.5 Câu l nh
II.4.5.1 Khái ni m v m t câu l nh
- M t câu l nh đ nxác đ nh m t công vi c mà ch ng trình ph i th c hi n đ x
lý các d li u đã đ c mô t và khai báo Các câu l nh đ c phân cách b i d u (;)
D u (;) có tác d ng ng n cách gi a các câu l nh, nó không thu c vào câu l nh
CONST <Tên h ng> = <Giá tr h ng>;
[<Tên h ng> = <Giá tr h ng>;]
Trang 17Ví d :
CLRSCR; {Xóa màn hình}
Writeln(‘Nhap vao day mot so nguyen:’); {Thông báo nh p li u}
Readln(SoNguyen); {Ch nh p li u}
Writeln(‘Binh phuong cua no la: ’,SoNguyen*SoNguyen); {K t xu t}
- Câu l nh h p thành: N u trong ch ng trình có nhi u câu l nh liên ti p c n đ c
x lí và xem nh m t câu l nh đ n chúng ta c n bao nó gi a hai t khóa BEGIN
và END;
- Câu l nh có c u trúc: Bao g m c u trúc r nhánh, c u trúc đi u ki n ch n l a,
c u trúc l p M i câu l nh có c u trúc (IF , CASE , FOR , REPEAT ,
Trang 18Chú ý
- Khi m t giá tr gán cho bi n, nó s thay th giá tr c mà bi n đã l u gi tr c
đó (bi n s nh n giá tr m i)
- Trong l nh gán, bi u th c bên ph i và bi u th c bên trái phép gán ph i cùng
ki u d li u N u không s có thông báo l i “Type Mismatch” khi biên d ch
Các tham s có th là các h ng, bi n, bi u th c N u có nhi u tham s trong câu
l nh thì các tham s ph i đ c phân cách nhau b i d u ph y Khi s d ng l nh
WRITE/WRITELN, ta có hai cách vi t: không qui cách và có qui cách
- Vi t không qui cách: d li u xu t ra s đ c canh l phía bên trái N u d
500
500 1.2345700000E+02 123.46
c) L nh nh p d li u t bàn phím
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(<bi n 1> [,<bi n 2>, ,<bi n n>]);
Chú ý: Khi g p câu l nh READLN; (không có tham s ), ch ng trình s d ng l i ch
ng i s d ng nh n phím ENTER m i ch y ti p
Trang 19d) Các hàm và th t c th ng dùng trong nh p xu t d li u
- Hàm KEYPRESSED: Hàm tr v giá tr TRUE n u nh có m t phím b t k
đ c nh n, n u không hàm cho giá tr là FALSE
- Hàm READKEY: Hàm có ch c n ng đ c m t ký t t b đ m bàn phím
- Th t c GOTOXY(X,Y:Integer): Di chuy n con tr đ n c t X dòng Y
- Th t c CLRSCR: Xoá màn hình và đ a con tr v góc trên bên trái màn hình
- Th t c CLREOL: Xóa các ký t t v trí con tr đ n h t dòng
- Th t c DELLINE: Xoá dòng t i v trí con tr và d n các dòng phía d i lên
- Th t c TEXTCOLOR(color:Byte): Thi t l p màu cho các ký t Trong đó
color ∈ [0,15]
- Th t c TEXTBACKGROUND(color:Byte): Thi t l p màu n n cho màn
hình
Trang 20BÀI T P TH C HÀNH LÀM QUEN V I PASCAL
Bài t p 2.0: Làm quen v i Pascal
1 Kh i đ ng Turbo Pascal
2 Nh p vào đo n ch ng trình sau:
Uses Crt;
Begin
Writeln(‘***********************************************************’);
Writeln(‘* CHUONG TRINH PASCAL DAU TIEN CUA TOI *’);
Writeln(‘* Oi! Tuyet voi! *);
Writeln(‘***********************************************************’); Readln; End 3 D ch và ch y ch ng trình trên 4 L u ch ng trình vào đ a v i tên BAI1.PAS 5 Thoát kh i Pascal 6 Kh i đ ng l i Turbo Pascal 7 M file BAI1.PAS 8 Chèn thêm vào dòng: CLRSCR; vào sau dòng BEGIN 9 D ch và ch y th ch ng trình 10 L u ch ng trình vào đ a 11 Thoát kh i Pascal 12 Vi t ch ng trình in ra màn hình các hình sau: * ******** *******
*** ** ** ** **
** ** ** ** **
** ** ******** * *
********* ** ** **
** ** ** ** ** **
** ** ******** ********
BÀI T P M U
Bài t p 2.1: Vi t ch ng trình nh p vào đ dài hai c nh c a tam giác và góc gi a hai
c nh đó, sau đó tính và in ra màn hình di n tích c a tam giác
Ý t ng:
Công th c tính di n tích tam giác: S = sin( )
2
1a b θ v i a,b là đ dài 2 c nh và θ là góc
k p gi a 2 c nh a và b
Trang 21Program Tinh_dien_tich_tam_giac;
Var a,b,goc,dientich: Real;
Begin
Write('Nhap vao do dai canh thu nhat: '); Readln(a);
Write('Nhap vao do dai canh thu hai: '); Readln(b);
Write('Nhap vao goc giua hai canh: '); Readln(goc);
Write('Nhap vao n= '); Readln(n);
Write('Nhap vao x= '); Readln(x);
Write('Nhap vao a= '); Readln(a);
Write('Nhap vao b= '); Readln(b);
tam:=a; {tam l y giá tr c a a}
Trang 22b/ Không đ c phép dùng bi n trung gian
Program Swap;
Var a,b: Integer;
Begin
Write('Nhap vao a= '); Readln(a);
Write('Nhap vao b= '); Readln(b);
a:=a+b; {a l y t ng giá tr c a a+b}
B A
C y B x
+
++
Bài t p 2.7: Vi t ch ng trình tách m t s n thành 2 s a, b sao cho tích P=a*b2 đ t
Bài t p 2.8: Màn hình đ h a c a m t máy tính có đ phân gi i: 640x480 Bi t r ng,
m i đi m trên màn hình chi m 1 byte H i c n bao nhiêu byte đ l u tr toàn b màn hình đ h a đó?
Có 2 sinh viên vi t ch ng trình tính s byte l u tr màn hình đ h a:
Trang 23Hãy cho bi t 2 ch ng trình trên cho k t qu đúng hay sai? T i sao?
Bài t p 2.9: Màn hình đ h a c a m t máy tính có đ phân gi i: 640x480 Bi t r ng,
m i đi m trên màn hình chi m 1 byte H i c n bao nhiêu byte đ l u tr m t vùng có kích th c b ng 1/10 màn hình đ h a đó?
Có 2 sinh viên vi t ch ng trình gi i bài toán này nh sau:
Trang 24Ch ng 3 CÁC CÂU L NH CÓ C U TRÚC III.1 L NH C U TRÚC R NHÁNH
III.1.1 D ng Không y
N u đi u ki n là đúng thì th c hi n công vi c (ng c l i là đi u ki n sai thì không
th c thi công vi c) L u đ kh i (hình bên)
N u đi u ki n là đúng thì th c hi n công vi c 1, ng c l i là đi u ki n sai thì th c
thi công vi c 2 L u đ kh i (hình bên)
CV2
Trang 25Const 2: S2;
Const n: S n ; ELSE S n+1 ; END;
Trong đó:
B: Bi u th c ki u vô h ng đ m đ c nh ki u nguyên, ki u logic, ki u ký t ,
ki u li t kê
Const i: H ng th i, có th là m t giá tr h ng, các giá tr h ng (phân cách nhau
b i d u ph y) ho c các đo n h ng (dùng hai d u ch m đ phân cách gi a giá tr
đ u và giá tr cu i)
Giá tr c a bi u th c và giá tr c a t p h ng i (i=1¸n) ph i có cùng ki u
Khi g p l nh CASE, ch ng trình s ki m tra:
- N u giá tr c a bi u th c B n m trong t p h ng const i thì máy s th c hi n l nh
Trang 26Chú ý: Khi s d ng câu l nh l p FOR c n chú ý các đi m sau:
Không nên tu ti n thay đ i giá tr c a bi n đ m bên trong vòng l p FOR vì làm
nh v y có th s không ki m soát đ c bi n đ m
Giá tr Max và Min trong câu l nh FOR s đ c xác đ nh ngay khi vào đ u vòng
l p Do đó cho dù trong vòng l p ta có thay đ i giá tr c a nó thì s l n l p c ng không thay đ i
Ví d 1: in lên màn hình dãy s t 1, 2, 3, …, n ta có th làm nh sau:
Var i, n: Integer;
Begin
Write( ‘Nh p vào m t s : ’); Readln(n);
Wrtieln( ‘D i đây là dãy s t 1 đ n s b n v a nh p’ );
Trang 27Ví d 2: Li t kê các s nguyên d ng là c s c a m t s cho tr c
Var i, n: Integer;
Begin
Write( ‘Nh p vào m t s : ’); Readln(n);
Wrtieln( ‘D i đây li t kê các c s c a s b n v a nh p’ );
Until B;
While B Do S;
Ý ngh a:
• D ng REPEAT: L p l i công vi c S cho đ n khi bi u th c B=TRUE thì d ng
• D ng WHILE: Trong khi bi u th c B=TRUE thì ti p t c th c hi n công vi c S
Ví d 1: Tính ti n g i ngân hàng Lãi su t hàng tháng là 1.7%, ng i đó g i vào ngân hàng v n ban đ u là 1000000 (1 tri u), c sau m i tháng ti n lãi đ c g p vào v n và
tr thành v n m i đ tính cho tháng sau H i sau bao lâu ng i đó đ c 1 t đ ng?
Repeat
S
B
+ -
Trang 28var Ls, Vn, Mm, tam: real;
tam := Vn;
While (tam<Mm) do
begin tam := tam + Ls*tam;
sothang := sothang + 1;
end;
Writeln('So thang = ' ,sothang);
Writeln('Tien von cong lai la: ',tam:12:2);
readln;
End
Ví d 2: Vi t ch ng trình nh p vào bán kính, tính chu vi và di n tích c a hình tròn Sau khi in ra chu vi, di n tích thì h i ng i dùng có ti p t c không? (C/K) Khi nào
ng i dùng n phím ‘K’ thì thoát, ng c l i cho ng i dùng ti p t c nh p vào bán kính khác và in ra chu vi và di n tích m i
Trang 29III.3.3 S khác nhau gi a vòng l p WHILE … DO và REPEATE … UNTIL và FOR TO DO
Vòng l p FOR là vòng l p xác đ nh tr c s l n l p Tr khi c n thi t, nói chung không nên can thi p vào bi n đ m vòng l p
C hai vòng l p While và Repeat đ u là vòng l p không xác đ nh tr c s l n l p
C n ph i có câu l nh thay đ i giá tr bi n đi u khi n vòng l p đ có th thoát ra kh i vòng l p
Trong vòng l nh WHILE … DO thì đi u ki n s đ c ki m tra tr c, n u đi u ki n đúng thì th c hi n công vi c Còn trong l nh REPEAT … UNTIL thì ng c l i, công
vi c đ c làm tr c r i m i ki m tra đi u ki n, n u đi u ki n đúng thì vòng l p k t thúc Nh v y đ i v i vòng l p REPEAT bao gi thân vòng l p c ng đ c th c hi n ít
nh t m t l n, trong khi thân vòng l p WHILE có th không đ c th c hi n l n nào
Tu nh ng hoàn c nh khác nhau mà ta l a ch n lo i vòng l p cho thích h p N u dùng
2 l nh này đ gi i cùng m t bài toán, cùng m t gi i thu t nh nhau thì đi u ki n sau WHILE và đi u ki n sau UNTIL là ph đ nh nhau
Trang 30BÀI T P TH C HÀNH BÀI T P M U
Bài t p 3.1: Vi t ch ng trình nh p vào m t s nguyên và ki m tra xem s v a nh p
Trang 31Var tuoi:Byte;
Begin
Write(Nhap vao tuoi cua mot nguoi:'); Readln(tuoi);
Case tuoi Of
1 17: Writeln(Nguoi nay la thieu nien');
18 39: Writeln(Nguoi nay la thanh nien');
40 60: Writeln(Nguoi nay la trung nien');
Else Writeln(Nguoi nay la lao nien');
Trang 33Ý t ng:
Bài toán này không bi t chính xác s l n l p nên ta không th dùng vòng l p FOR
Vì ph i nh p vào s nguyên N tr c, sau đó m i ki m tra xem N=0? Do đó ta nên dùng vòng l p REPEAT
Write('Nhap vao mot so nguyen N= '); Readln(N);
If N MOD 2 = 0 Then dem:=dem+1;
Vì tính s Pi v i đ chính xác Epsilon nên không bi t tr c đ c c th s l n l p,
do đó ta ph i dùng vòng l p WHILE ho c REPEAT Có ngh a là ph i l p cho t i khi t=4/(2*i+1) ≤ Epsilon thì d ng
Trang 34- Tìm USCLN: L y s l n tr s nh cho đ n khi a=b thì d ng Lúc đó: USCLN=a
- BSCNN(a,b) = a*b DIV USCLN(a,b)
Trang 35Bài t p 3.11: Vi t ch ng trình nh p vào s t nhiên N r i thông báo lên màn hình s
đó có ph i là s nguyên t hay không
Ý t ng: N là s nguyên t n u N không có c s nào t 2 → N div 2 T đ nh ngh a
For i:=2 To N div 2 Do
If N MOD i=0 Then d:=d+1;
{Ki m tra}
If d=0 Then Writeln(N,’ la so nguyen to’)
Else Writeln(N,’ khong phai la so nguyen to’);
End;
Readln;
End
Trang 36Delta<0: Ph ng trình vô nghi m
Delta=0: Ph ng trình có nghi m kép: x = -b/(2*a)
Delta>0: Ph ng trình có 2 nghi m phân bi t: x1,2 = (-b±SQRT(Delta))/(2*a)
Bài t p 3.13: Vi t ch ng trình nh p vào t bàn phím: gi , phút, giây C ng thêm m t
s giây c ng đ c nh p t bàn phím Hãy in ra k t qu sau khi c ng xong
G i ý:
- G i s giây đ c c ng thêm là: ss Gán giây:=giây+ss
- N u giây≥60 thì: phút:=phút + giây DIV 60 và giây:=giây MOD 60
- N u phút≥60 thì: gi :=gi + phút DIV 60 và phút:=phút MOD 60
Bài t p 3.14: Vi t ch ng trình tìm Max, Min c a 4 s : a, b, c, d
Bài t p 3.15: Vi t ch ng trình nh p vào ngày, tháng, n m Máy s hi n lên ngày, tháng, n m hôm sau
G i ý:
Bi n lu n theo tháng Gom tháng thành 3 nhóm: tháng có 31 ngày (1,3,5,7,8,10,12), tháng có 30 ngày (4,6,9,11) và tháng 2 (có 28 ho c 29 ngày tùy theo n m nhu n) Dùng l nh l a ch n:
Trang 37S5 = 1 + sin(x) + sin2(x) + + sinn(x)
Bài t p 3.20: Vi t ch ng trình đ tìm l i gi i cho bài toán sau:
H i có bao nhiêu trâu đ ng, trâu n m, trâu nghé?
Bài t p 3.22: Vi t ch ng trình nh p vào các s nguyên t bàn phím cho đ n khi nào
g p s nguyên t thì k t thúc nh p Tính t ng các s ch n và trung bình c ng các s l
G i ý:
Dùng vòng l p REPEAT UNTIL NTo; đ nh p Trong đó, NTo là bi n ki u Boolean đ ki m tra s đ c nh p vào có ph i là s nguyên t hay không
Trang 38Bài t p 3.23: Vi t ch ng trình nh p vào m t s nguyên d ng Hãy thông báo lên màn hình s đó có bao nhiêu ch s và t ng các ch s c a s đó
G i ý:
Dùng vòng l p WHILE Trong khi N>0 thì: l y ra ch s cu i cùng c a N đ tính
b ng phép toán MOD 10, sau đó b b t đi ch s cu i cùng c a N b ng phép toán DIV
Bài t p 3.26: S hoàn thi n là s t nhiên có t ng các c c a nó (không k chính nó)
b ng chính nó Vi t ch ng trình ki m tra xem m t s đ c nh p vào t bàn phím có
ph i là s hoàn thi n hay không? Ví d : 6, 28 là các s hoàn thi n
Trang 39Ch ng 4
IV.1 KHÁI NI M V CH NG TRÌNH CON
Trong ch ng trình, có nh ng đo n c n ph i l p đi, l p l i nhi u l n nh ng ch khác nhau tránh ph i vi t l i các đo n đó ng i ta th ng phân ch ng trình ra thành nhi u module, m i module gi i quy t m t công vi c nào đó, các module nh v y
là nh ng ch ng trình con (subprogram)
M t ti n l i khác c a vi c s d ng module là ta có th d dàng ki m tra tính đúng
đ n c a nó tr c khi ráp n i vào ch ng trình chính Do đó vi c xác đ nh sai sót và
ti n hành đi u ch nh trong ch ng trình s thu n l i h n
Trong Pascal ch ng trình con đ c vi t d i d ng hàm (FUNCTION) ho c th t c (PROCEDURE) Hàm và th t c đ u là nh ng ch ng trình con, nh ng hàm khác th
t c ch hàm tr v m t giá tr cho l nh g i thông qua tên hàm còn th t c thì không
Do đó ta ch dùng hàm khi tho mãn các yêu c u sau
- Ta mu n nh n m t k t qu và ch m t mà thôi
- Ta c n dùng tên ch ng trình con (ch a k t qu đó) đ vi t trong các bi u th c
N u không th a hai yêu c u trên thì ta dùng th t c
Borland Pascal thi t k và cài đ t s n trong các Unit đi gèm theo gói ph n m m nhi u th t c và hàm r t ti n dùng Mu n s d ng các th t c ho c hàm trong Unit nào
ta ch c n khai báo tên Unit đó trong câu l nh USES Tuy nhiên ph n l n các th t c
và hàm dùng trong ch ng trình là do ng i dùng ph i t vi t
IV.2 HÀM (FUNCTION)
Hàm là m t ch ng trình con tính toán tr v cho ta m t giá tr ki u vô h ng C u trúc hàm nh sau:
FUNCTION <Tên hàm>[(<Th.s >:<Ki u>[;<Th.s >: <Ki u>])]:
[VAR <Bi n>:<Ki u>[;<Bi n>: <Ki u>]] Khai báo các
Trang 40- Tên hàm là m t danh bi u, ph i tuân th theo qui t c đ t danh bi u đã đ c p
FUNCTION TEST(x,y:Integer; z:Real): Real;
ây là m t hàm có tên là TEST, v i 3 tham s , x và y thu c ki u Integer, z thu c ki u real, hàm tr v m t k t qu ki u real
- Trong hàm, ta có th s d ng các h ng, ki u, bi n dùng riêng trong n i b hàm
- Thông th ng m c đích s d ng hàm là đ l y tr tr v do đó c n l u ý gán k t
qu cho tên hàm trong thân hàm
Ví d 1: Ta xây d ng hàm DT truy n tham s vào là bán kính c a hình tròn, hàm này
Writeln(‘Di n tích hinh tron tuong ung: ‘ ,DT(Bankinh):0:2);
Writeln;
Write(‘Ti p t c (C/K)? ’);
Repeat ch:=readkey;