1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Kỹ thuật lập trình turbo pascal

117 424 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 117
Dung lượng 0,92 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

B ng các hàm chu n gtr đ i Integer Real Boolean Char File succ abs sqr trunc round cos arctan ln exp sqrt sin cos arctan ln exp sqrt sqr abs succ eof eoln succ II... Xâu kí t String II.1

Trang 1

PGS.TS PHAN HUY KHÁNH biên so n 1

M đ u

Ch ng trình (CHTR) là dãy liên ti p các l nh (instructions, commands), hay các câu

l nh (statements) Ch y ch ng trình (run hay execute) là cho máy tính th c hi n l n l t

các l nh c a CHTR M t CHTR đang ch y t o ra m t ti n trình (process)

Các ti n trình th ng có các tính ch t sau :

1 Các l nh c a CHTR đ c th c hi n m t cách tu n t (sequantial), h t m t l nh l i

th c hi n l nh k ti p

2 M t ti n trình luôn luôn có k t qu (result) K t qu đ c đ a ra trong khi th c hi n

CHTR ho c sau khi đã th c hi n xong K t qu có th đúng ho c sai Thông th ng

k t qu đ c in (print) ra trên gi y ho c hi n th (display) lên màn hình

3 CHTR th ng đòi h i d li u (data) Các d li u có th đ c đ a vào tr c ti p trong

khi ch y CHTR, ho c t các thi t b ngoài nh bàn phím (keyboard), đ a t (disk),

b ng t (tape) , nh ng c ng có th đã đ t s n đâu đó trong CHTR

4 M t s l nh dùng đ mô t (declare) d li u c a CHTR Trong m t s ngôn ng ,

ng i l p trình (NLT) ph i đ t các l nh này ph n đ u c a CHTR đ máy s d ng

ph n sau

5 M t s l nh d n đ n s quy t đ nh (decision) s th c hi n nhóm l nh nào ti p theo

Ví d , khi gi i m t ph ng trình b c 2, n u bi t s Δ âm s tr l i ph ng trình

không có nghi m th c, ng c l i, th c hi n các l nh tính nghi m th c Th c t , NLT

không bi t lúc ch y CHTR, bi t s Δ là âm, d ng hay tri t tiêu ?

6 M t s l nh đ c th c hi n l p đi l p l i nhi u l n NLT có th bi t tr c ho c không

bi t tr c s l n l p NLT c ng có th n đ nh vi c l p đ c b t đ u nh th nào

II Ngôn ng l p trình (programming language)

II.1 Khái ni m v ngôn ng l p trình

Ngôn ng l p trình (NNLT) là công c đ con ng i giao ti p v i máy tính Trong Tin

h c, l nh v c xây d ng và phát tri n các ngôn NNLT luôn luôn đ t ra nh ng v n đ m i

Ng i ta th ng chia ra hai lo i NNLT : ngôn ng b c th p (low-level programming

language) và ngôn ng b c cao (high-level programming language)

Ngôn ng b c th p g m ngôn ng máy (machine language) và h p ng (assembly

language) Trong m t CHTR vi t b ng ngôn ng b c th p, m i câu l nh ch t ng ng v i

m t thao tác s c p c a b x lý Vì v y, l p trình trên các ngôn ng b c th p r t phi n ph c

và d nh m l n

Trang 2

Ngôn ng b c cao ph ng theo ngôn ng Toán h c và g n g i v i ngôn ng t nhiên L p trình trên các ngôn ng b c cao tho i mái h n và ít nh m l n h n do s d ng nh ng câu l nh

g n g i v i l i gi i bài toán, d ki m tra, d s a, v.v

Hi n nay có r t nhi u ngôn ng b c cao đã đ c phát tri n, m i ngôn ng đ c tr ng cho

m t phong cách, m t tr ng phái l p trình Vi c ch n m t NNLT nào đó ph thu c vào tính

ch t c a bài toán đang gi i và nhi u khi, ph thu c vào thói quen c a NLT

Khi th c thi m t CHTR vi t trên m t ngôn ng c p cao, b x lý ph i chuy n đ i CHTR này sang d ng m t CHTR b ng ngôn ng máy t ng đ ng M t CHTR th c hi n ch c

n ng này g i là ch ng trình d ch (compiler)

CHTR vi t trên m t ngôn ng c p cao đ c g i là ch ng trình ngu n (source program)

CHTR đã đ c d ch sang d ng ngôn ng máy t ng đ ng đ c g i là ch ng trình đích

(object program)

Máy th c hi n ch ng trình đích cùng v i các d li u nh p (input data) đ cho ra k t

qu

Khi ch y CHTR có th gây ra l i (error) L i sinh ra khi d ch đ c g i là l i th i gian

d ch (compile-time error) L i sinh ra khi ch y CHTR đ c g i là l i th i gian th c hi n

(run-time error)

Ngoài ra có th có các l i do sai sót v thu t gi i ho c do sai sót v d li u nh p

II.2 Các y u t c a ngôn ng l p trình

Các NNLT b c cao đ c t o thành t ba y u t : b kí t , b t v ng và cú pháp

II.2.1 B kí t (Character Set)

G m các kí t đ c phép dùng trong ngôn ng Các máy vi tính IBM và t ng thích

th ng s d ng các kí t ASCII Có th hi u b kí t có vai trò nh b ng ch cái (alphabet)

c a m t ngôn ng t nhiên

CHTR d ch CHTR ngu n

Trang 3

II.2.2 B t v ng (Vocabulary)

G m các t (word) hay đ n v t v ng (token) dùng đ t o thành câu l nh và đ c phân

lo i tu theo vai trò c a chúng trong ngôn ng M i lo i l i đ c chia ra thành các nhóm nh

D u phân cách Program var : ( ) begin end

(Delimiter)

II.2.3 Cú pháp (Syntax)

Cú pháp c a m t NNLT quy đ nh cách th c k t h p các kí t thành t , k t h p các t thành câu l nh đúng, k t h p các câu l nh đúng thành m t ch ng trình hoàn ch nh v m t

v n ph m (grammaire) Có th hình dung cách k t h p này gi ng cách đ t câu trong m t ngôn ng t nhiên

Th ng ng i ta dùng s đ cú pháp (syntax diagram) ho c d ng chu n Backus-Naur

Ví d : program, begin, end

Khung ch nh t : ch a các ký hi u không k t thúc (non-terminal symbol) là nh ng khái

ni m đ c đ nh ngh a qua nh ng ký hi u k t thúc và/ho c không k t thúc khác

Ví d : identifier (tên), program (ch ng_trình), file_name (tên t p)

ng n i : là các đ ng có m i tên đ ch th t xu t hi n c a các ph n t khung tròn, hay ch nh t

Ví d : Tên trong các NNLT th ng có s đ cú pháp nh sau :

T đó có th xây d ng các tên đúng nh : Delta, x1, x2, Sqrt, bánkính v.v Trái l i,

các chu i kí t sau đây đ u không ph i là tên :

Trang 5

III L p trình (programming)

Ngôn ng l p trình m i ch là công c đ NSD đi u khi n máy theo ý mu n, còn vi c s

d ng công c này nh th nào cho có hi u qu thì l i tu thu c vào k thu t l p trình c a

m i ng i

L p trình là vi c vi t ch ng trình trên m t ngôn ng l p trình c th nào đ gi i quy t

m t v n đ nào đó l p trình, ph i trãi qua 4 b c :

1 Phân tích v n đ c n gi i quy t : N i dung v n đ là gì ? Ph i làm gì ?

2 Xây d ng thu t gi i và c u trúc d li u đ gi i quy t v n đ

(làm nh th nào ?) Công th c c a Niclaus Wirth :

Algorithms + Data Structures = Programs

Ngh a là : Thu t gi i + C u trúc d li u = Ch ng trình

3 Vi t ch ng trình trên m t ngôn ng đã l a ch n, ví d Turbo Pascal

4 Ch y th ch ng trình, s a sai, hoàn thi n, cài đ t và đem vào ng d ng

III.1 Phân tích v n đ

Có nhi u ph ng pháp phân tích v n đ Th ng s d ng ph ng pháp phân tích t trên

xu ng (Top-Down Analysis) N i dung ph ng pháp là chia v n đ c n gi i quy t thành các

v n đ nh h n, m i v n đ đó l i đ c ti p t c chia thành các v n đ nh h n n a, v.v cho đ n khi đó là nh ng công vi c đ n gi n và d gi i quy t

Ví d : Phân tích bài toán c ng hai phân s đ đ a v bài toán tìm c s chung l n nh t c a hai s nguyên

c ng hai phân s , tr c tiên c n c l c chúng ( LPS), sau đó quy đ ng m u s (Q MS) C ng hai t s c a hai phân s đã quy đ ng đ đ c t s L y m u s chung

Trang 6

Vi c c l c phân s đ c đ a v tìm c s chung l n nh t c a t s và m u s quy đ ng m u s , c n tìm b i s chung nh nh t (BSCNN) Vi c tìm b i s chung nh nh t

c a hai s l i đ c đ a v tìm c s chung l n nh t c a chúng :

BSCNN(b’, d’) = b’ * d’ / SCLN(b’,d’)

tìm c s chung l n nh t, s d ng thu t gi i Euclide

III.2 Thu t gi i (Algorithm)

III.2.1 Khái ni m v thu t gi i

Thu t gi i, hay còn g i là thu t gi i (gi i thu t), là t p h p đ c tr ng các trình t logic và toán h c đ n gi n, đ c xác đ nh rõ ràng, đ theo đó gi i quy t m t v n đ v i m t s b c

B c 3 : So sánh Max v i b, n u Max nh thua b thì Max l y giá tr b : Max = b

B c 4 : So sánh Max v i c, n u Max nh thua c thì Max l y giá tr c :

Max = c

B c 5 : In k t qu là Max

Có th hình dung vi c tìm Max qua các bi u th c d ng hàm nh sau :

Max (a, b, c) = Max(Max (a, b), c), trong đó :

Max ( a, b) = if a>b then a else b

Có th hi u thu t gi i là ph ng pháp gi i m t bài toán b ng cách chia nh bài toán đó thành nh ng thao tác đ n gi n, d th c hi n và có trình t h p lý

Các b c đ làm m t món n, đ s p x p đ v t theo th t , đ gi i m t ph ng trình toán h c, v.v đ u có th coi là nh ng thu t gi i

Không th có trình t th c hi n gi ng nhau cho m i thu t gi i M t thu t gi i ph i tho mãn ba đi u ki n sau đây :

a⎯

b + c⎯d

a” ⁄ M + b” ⁄ M

SCLN(b’, d’)BSCNN(b’, d’)

Q MS(a’ ⁄ b’, c’⁄d’)

SCLN(a/b) SCLN(c/d)LPS(a ⁄ b) LPS(c ⁄ d)

Trang 7

1 Các thao tác có tính kh thi (th c hi n đ c trên máy) và có trình t

xác đ nh

2 M i thao tác ph i c th , rõ ràng và ch đ c hi u theo m t ngh a

duy nh t

3 Thu t gi i ph i k t thúc sau m t s h u h n b c

Vi c gi i quy t m t bài toán có th có nhi u thu t gi i khác nhau M i thu t gi i l i có

th có hi u qu nh nhau cho m t l p các bài toán Ví d , có nhi u thu t gi i đ s p x p m t

III.2.2 Các công c đ trình bày thu t gi i

Có hai công c ph bi n : l u đ và ngôn ng gi

a L u đ (Flowchart)

L u đ hay s đ kh i là s đ ch a các hình ký hi u đ i di n cho các thao tác c n ph i làm Trong s đ , các hình đ c n i v i nhau b i các m i tên ch trình t th c hi n các thao tác

L u đ g m các hình c b n sau :

ánh d u b t đ u và k t thúc thu t gi i

Nh p / xu t d li u

X lý (tính toán) d li u Quy t đ nh r nhánh Các h ng r nhánh

ho c

Trang 8

úng

K t thúc

In Max Max < c

x1 = (-b - SQRT(Δ))/2/a x1 = (-b - SQRT(Δ))/2/a

úng Sai

K t thúc

D = 0

Trang 9

Sau đây là m t s quy đ nh c a ngôn ng gi :

B kí t là t p kí t ASCII và các ch cái có d u ti ng Vi t đ ti n theo dõi

B t v ng đ c xây d ng b ng cách ghép các kí t thu c t p h p kí t và b t đ u

ph i b ng ch

Có hai lo i t :

− T khoá (Keyword) là t dành riêng đ ch m t l nh (m t thao tác)

Trong ph n đ u giáo trình, các t khoá đ c in ch đ m đ d phân bi t

Ví d : Program, begin, end

− Tên là t do NSD t đ t

Tên xác đ nh đ a ch c a m t vùng nh ch a d li u trong b nh trong

Ki u d li u (Data Type) ch đ nh m t l p các giá tr d li u mà máy có th x lý

Ví d : ‘This is a string’, ‘ i h c à n ng, 17A Lê Du n’, ‘ ‘ (chu i r ng)

− Ki u logic, hay lu n lý, ch g m hai giá tr True (1) và False (0)

H ng, bi n và hàm đ c tr ng b i tên g i, ki u d li u và giá tr

− H ng (Constant) là đ i l ng không đ i trong quá trình th c hi n CHTR

− Bi n (Variable) là đ i l ng thay đ i trong quá trình th c hi n CHTR

− Hàm (Function) là m t CHTR con đã đ c l p s n và c đ t tên, khi c n ch vi c

g i tên, cung c p tham đ i đ tr v m t giá tr

Trong ngôn ng gi có s d ng các dòng chú thích (Comment) đ t gi a hai d u {} ho c

c p d u (* *) nh m m c đích d theo dõi, không có tác d ng gì đ i v i các l nh c a thu t

gi i

Trang 10

Ví d :

S d ng ngôn ng gi , có th vi t l i các thu t gi i trên nh sau :

Program TìmMaxC a3S

begin

c (a, b, c) Max = a

if Delta < 0

then In (‘Ph ng trình vô nghi m.’)

else if Delta = 0 then x1_2 = -b/2/a

In (‘Ph ng trình có nghi m kép x = ’, x1_2)

else begin

x1 = (-b + SQRT(Delta))/2/a x2 = (-b - SQRT(Delta))/2/a

In (‘Ph ng trình có hai nghi m :’)

In (‘x1 = ‘, x1) ; In (‘x2 = ‘, x2)

end end { Gi iPh ngTrìnhB c2 }

Trang 11

III.2.3 Các l nh dùng trong thu t gi i

Các l nh trong thu t gi i có hai lo i :

các l nh không mang tính đi u khi n, ví d l nh gán và các l nh vào - ra

D u := là d u gán b ng c a Pascal, tuy nhiên có th vi t =, ho c ←

Bên trái d u gán ch có th là m t tên bi n <Bi n> Bên ph i d u gán là m t bi u th c

<Bi u th c> Máy tính giá tr c a bi u th c và gán cho bi n, giá tr c c a c a bi n b xoá

N u trong bi u th c có các tên bi n khác xu t hi n thì các bi n này ph i có giá tr tr c khi

c a a), dùng m t bi n trung gian t theo m t trong hai cách nh sau :

S1

.

Sn

Trang 12

C u trúc đi u khi n L u đ t ng đ ng Mô t

N u K không tho mãn (sai) thì th c hi n S2

4 L a ch n (Selection)

case

K1 : S1 K2 : S2

Kn : Sn endcase

N u K1 đúng thì th c hi n S1

N u không, n u K2 đúng thì th c hi n S2 v.v

S2 S1

K ? úng

Sai

S

K ? úng Sai

S

K ? úng

úng

úngSai

K2 ?

Kn ?

Trang 13

III.3 C u trúc d li u

Nh đã th y, thu t gi i ch ph n ánh các thao tác c n x lý, còn đ i t ng đ x lý trên

máy l i là d li u (Data) D li u bi u di n các thông tin c n thi t cho bài toán, g m các d

li u đ a vào, các d li u đ a ra và các d li u tính toán trung gian

D li u và thu t gi i có m i quan h v i nhau : nói đ n thu t gi i là nói đ n thu t gi i đó tác đ ng lên d li u nào Còn nói đ n d li u là nói đ n d li u y c n đ c tác đ ng b i thu t gi i nào đ đ a đ n k t qu mong mu n

B n thân các d li u th ng có m i quan h v i nhau Cách t ch c d li u sao cho phù

h p v i bài toán c n gi i quy t chính là vai trò c a l nh v c c u trúc d li u (Data

Structure) C u trúc d li u liên quan đ n ba v n đ : ki u d li u, các phép tóan tác đ ng lên d li u và cách bi u di n d li u trong b nh c a máy tính

III.3.1 Ki u d li u

M i NNLT th ng có hai ki u d li u : ki u d li u c s và ki u d li u có c u trúc

Ki u d li u c s có th là ki u s , ki u kí t và ki u logic Tu theo bài toán mà ki u d

li u nào thì đ c s d ng T ki u d li u c s , ng i ta xây d ng các ki u d li u ph c

t p h n b ng cách liên k t chúng l i v i nhau theo m t c u trúc nào đó

Ví d , trong h u h t các NNLT đ u có c u trúc m ng (Array) là m t dãy các ph n t d

li u có cùng ki u và có s l ng n đ nh M i ph n t c a m ng có th là ki u c s nh ng

c ng có th là ki u có c u trúc

C u trúc ki u b n ghi (Record) là s m r ng c a khái ni m m ng M i b n ghi g m nhi u thành ph n, m i thành ph n còn g i là m t tr ng (Field) có ki u d li u xác đ nh khác nhau

Ví d , trong qu n lý cán b , có th hình dung m i b n ghi mô t m t cán b g m các

tr ng H _tên, Ngày_sinh, L ng_c _b n, v.v Tr ng H _tên có ki u kí t ; tr ng Ngày_sinh l i là m t ki u b n ghi đ c đ nh ngh a g m 3 tr ng Ngày, Tháng và N m cùng

ki u s nguyên ; tr ng L ng_c _b n có ki u s th c

Chính vì s phong phú c a các bài toán th c ti n mà máy tính ph i gi i quy t trên nh ng

d li u phi s (Non-numerical) có c u trúc đa d ng

III.3.2 Các phép tóan trên d li u

V i m i c u trúc, c n ph i xây d ng các phép toán trên đó : phép t o l p hay hu b m t

c u trúc, phép truy c p vào t ng ph n t c a c u trúc đ xem hay s a đ i, phép b sung hay

Nh v y, m i khi xây d ng m t c u trúc d li u thì đ ng th i ph i xây d ng các phép toán kèm theo ây là hai m t c a m t v n đ

Trang 15

Trong đó T là tên ki u (identifier), AnyType là ki u b t k đ c đ nh ngh a t m t trong

9 l p ki u sau đây : ordinal, real, string, array, set, record, file, object, pointer

Có 7 ki u th t ti n đ nh ngh a (ordinal predefined) là : Shortint, Integer, Longint, Byte, Word (5 ki u s nguyên), Boolean và Char Hai ki u do NSD t đ nh ngh a là ki u li t kê (enumerated) và ki u mi n con (subrange)

S các giá tr khác nhau c a ki u T là b n s (cardinality) c a T, ng i ta th ng ký hi u Card (T)

Trang 16

Trong đó, maxint là tr nguyên l n nh t máy có th bi u di n đ c Trong Turbo Pascal,

có hai h ng chu n là MaxInt = 32 767 và MaxLongint = 2 147 483 647

Các ki u ordinal nguyên nh sau :

Ki u Boolean ch có hai giá tr là false, true, đ c đ nh ngh a nh sau :

type Boolean = (False, True);

Ki u Char g m các kí t ASCII Hai hàm chu n ki u Char là Ord và Chr :

Trang 17

I.4 B ng các hàm chu n

gtr đ i Integer Real Boolean Char File

succ abs sqr

trunc round

cos arctan

ln exp sqrt

sin cos arctan

ln exp sqrt sqr abs

succ

eof eoln

succ

II Ki u s th c Real

Trong m t CHTR Pascal, bi n th c (real variable) đ c dùng đ l u tr các giá tr th c

Tu theo máy mà mi n giá tr (range) b h n ch nh t p các s nguyên

Khi gi i quy t các bài toán khoa h c, có th t n t i nh ng s r t bé ho c r t l n, ví d ,

tr ng l ng c a m t electron là :

0.000 000 000 000 000 000 000 000 000 091 095 600 gram

D ng khoa h c (d ng m ) c a s này là 9.10956 × 10−28 gram Trong ngôn ng Pascal,

s này có d ng 9.10956E−28

Turbo Pascal có 5 ki u s th c nh sau :

M i bi n th c đ c xác đ nh b i hai y u t : mi n giá tr và đ chính xác (precision)

Mi n giá tr cho bi t đ l n c a s đ c l u tr chính xác cho bi t s s l có ý ngh a sau d u ch m th p phân

Trang 18

III Các phép toán (Operators)

Các phép toán c a Turbo Pascal nh sau :

DIV Division

MOD Modulo

SHL Bitwise shift-left

SHR Bitwise shift-right

Các phép quan h sau đây tr v giá tr Boolean :

= Equal Ordinal, real, string, set, pointer

>= Greater than or equal Ordinal, real, string, set

Giá tr tr v c a phép IN

IN Member of True n u toán h ng bên trái (ki u ordinal) là m t ph n

t c a toán h ng bên ph i (ki u t p h p) False n u không

Ví d : Tính c n b c hai c a m t s d ng (s = √⎯n ) theo ph ng pháp Newton không s

s2 − 1 ε

Trang 19

{ Ch ng trình đ c vào m t s và in ra giá tr c n b c hai g n đúng t ng ng cho đ n khi đ c vào s 0 }

write(’D c vào m t s n = ’);readln(n);

if n<0 then writeln(’#7Vào sai d li u !’)

else begin

s:=1;

repeat s:=(n/s+s)/2 until abs(n/sqr(s)-1)< epsilon;

writeln(’C n b c hai = ’, s:14:6) end

until n = 0;

readln

end {Tính_c n_b c_2 }

IV Ki u vô h ng li t kê và ki u mi n con

IV.1 Ki u vô h ng li t kê (Enumerated Scalar Type)

Ki u vô h ng li t kê đ c đ nh ngh a là t p h p các h ng có th gán cho các bi n thu c

lo i vô h ng li t kê :

Type T = (C1, C2, , Cn) ; Các Ci, v i i = 1 n đ c s p x p theo th t t nhiên T không là ki u s và không có

c u trúc Card(T) = n, Ci ≠ Cj n u i ≠ j

Ví d :

Type

Màu = (đ , dacam, vàng, l c, lam, chàm, tím);

Sex = (male, female);

Boolean = (false, true);

Ki u li t kê là đ m đ c Ta c ng có hai hàm pred (x), succ (x) xác đ nh b i :

(Ci < Cj) ≡ (i<j) Succ(Ci) = Ci+1 Pred(Cj) = Ci−1

Trang 20

Hàm Ord (x) cho v trí c a x trong T V trí đ u tiên c a ki u li t kê có giá tr 0

Ta có :

Ord (đ ) = 0, Ord(false)=0 Ord(male) = 0

Ord (vàng) = 2, Ord(true)=1 Ord(female) = 1

Các bi n ki u li t kê đ c dùng trong các vòng l p có tham bi n Ví d :

IV.2 Ki u mi n con (Sub-range type)

Ki u mi n con đ c đ nh ngh a b i hai h ng là c n trên (upper bound) và c n d i (lower bound)c a các giá tr thu c ki u này

Type T = min max ; min và max là c n d i và c n trên t ng ng (hay là hai gi i h n) c a ki u mi n con T, tho mãn b t đ ng th c min ≤ max

N u không c n tên ki u T, có th khai báo tr c ti p :

Var x1, , xm : min max ;

Còn y:= 2001; l:= “a” ; t:= 205; là không h p l

T t c các hàm dùng cho các ki u ordinal đ u có th s d ng cho ki u mi n con t ng

ng Giá tr tr v c a hàm không nh t thi t ph i n m trong các c n c a ki u tham đ i Ví d giá tr c a sqr(t) có th v t quá c n trên 200

Các th t c Read và Write có th có tham đ i ki u mi n con ki u nguyên hay ki u kí t

Ki u mi n con th ng đ c dùng đ ki m tra t đ ng các c n giá tr cho phép, tránh gây ra sai sót khi l p trình

Vi d 1 : tính s ngày c a tháng b t k trong n m

Trang 21

Type ds_tháng = (giêng, hai, ba, t , n m, sáu, , m i_hai);

giêng,ba,n m,b y,tám,m i,m i_hai: s _ngày:= 31;

t , sáu, chín, m i_m t: s ngày := 30;

hai: if (n m mod 4 = 0) and (n m mod 100 <> 0)

then s ngày := 29 else s ngày := 28 end {case }

chú_thích B qua m i kí t G p '}' chuy n qua l i tr ng thái chép_l i

Tuy nhiên, do các kí t ‘{‘ và ‘}’ có th không có trên m t s bàn phím, nên Pascal c ng

s d ng hai c p kí t '(*' và '*)' đ phân cách các câu chú thích Do đó ph i thêm vào 2 tr ng thái m i là :

Trang 22

b t_đ u_chú_thích: X _lý_b t_đ u_chú_thích chú_thích : X _lý_chú_thích

k t_thúc_chú_thích: X _lý_k t thúc_chú_thích end (*case*)

t := chép_l i end else write ('(') ; (* không đ i tr ng thái *)

Trang 23

chép_l i : (*X _lý_chép_l i*)

if c = '(' then t := b t_đ u_chú_thích else write (c);

b t_đ u_chú_thích: (*X _lý_b t_đ u_chú_thích*)

if c = '*' then t := chú_thích else if c <> '(' then begin write ('(') ; (*chép l i '(' v a đ c *) write (c) ;

t := chép_l i end

else write ('(') ; (* không đ i tr ng thái *) chú_thích : (*X _lý_chú_thích*)

if c = '*' then t := k t_thúc_chú_thích;

k t_thúc_chú_thích: (*X _lý_k t thúc_chú_thích*)

if c = ')' then t := chép_l i else if c < > '*' then t := chú_thích end (*case*)

end (*Lo i_b _chú_thích*)

Trang 24

Ki u ch s có th là ki u char, ki u boolean, ki u li t kê ho c ki u mi n con

Phép toán c b n trên m ng là truy c p tr c ti p, hay truy c p ng u nhiên (random access) đ n t ng v trí c a m ng đ có th tìm ra ph n t v trí đó, hay đ có th l u tr d

li u t i v trí đó

M i m ng đ c ký hi u b i m t bi n mà giá tr c a nó là t p h p các ph n t t o nên

m ng truy c p đ n m ng, ng i ta thêm vào tên m ng m t hay nhi u ch s đ đ c t v trí c a ph n t đó trong m ng

N u ch có m t ch s đ ng sau tên m ng, m ng đ c g i là m ng m t chi u

(one-dimensional), nh ng m ng c n nhi u ch s đ c g i là m ng nhi u chi u

khai báo bi n x có ki u T :

Var x : T ;

N u không c n tên ki u T, có th khai báo tr c ti p :

Var x : array [I ] of T0; truy c p đ n m t ph n t th i (v i mô t var i:I;)c a m ng x, ta vi t tên m ng r i ch

s đ t gi a c p d u móc : x[i]

Ví d 1 :

Type

Trang 25

dãy_s _th c = array [1 5] of real;

Day = (Sun, Mon, Tue, Wed, Thu, Fri, Sat);

Work = (Mat, Comput, Lang, Progr) ; Plan = array [Day] of Work ;

Var

x, y, z : d y s th c ; w1, w2 : Plan ;

k : array [char] of Integer ;

b : array [boolean] of Byte ;

readln(N) Until (0 <= N) and (N <= Max) ; For i := 1 to N do begin

write ('a [', i, ']= ') ; readln (a [i]) ; write ('b [', i, ']= ') ; readln (b [i]) ; end ;

Ví d 3 : c vào t bàn phím các kí t b t k cho đ n khi gõ vào d u (.)

Ch ng h n đ c vào dãy : a10bq012034C

thì in ra : S ch s 0 là 3

S ch s 1 là 1

S ch s 2 là 1

v.v

Phác ho l i gi i nh sau : c n 10 bi n nguyên count0, count1, , count9 đ đ m s các

ch s 0 9 t ng ng Tuy nhiên, t t nh t nên dùng m t m ng s g m 10 ph n t Ta dùng

ch s ki u char đ đ m t 0 tr đi M ng s đ c mô t nh sau :

Trang 26

Type sequency10 = array['0' '9'] of integer ;

for c := '0' to '9' do

writeln('S ch s ', C,‘ là : ', s[c]:2)

end

I.2 M ng nhi u chi u

Khi ki u ph n t c a m ng l i là ki u m ng, ta đ c m ng nhi u chi u

Type T = array [I1 ] of array [I2 ] of T0 ;

trong đó I1 và I2 có ki u ch s , các ph n t có ki u c s T0 khai báo bi n x có ki u

T :

Var x : T ;

N u không c n tên ki u T, có th khai báo tr c ti p :

Var x : array [I1] of array [I2 ] of T0;

Ví d : Type

Ma_tr n = aray [1 10] of array [1 15] of real ;

Var a : Ma_tr n ;

Trang 27

Trong ví d trên, ma tr n a có 10 ph n t [1], a[2], , a[10] mà m i ph n t a[i], i=1 10,

I.3 Bi u di n m ng trong b nh

I.3.1 Bi u di n m ng m t chi u

Trong b nh , tu theo ki u d li u c a m ng mà m i ph n t có th đ c bi u di n trên

m t t nh (word) g m m t ho c nhi u byte Gi s m i ph n t c a m ng A c n w byte đ

l u tr G i base(A) là đ a ch c a byte đ u tiên (base address) Khi đó, ph n t th i c a

m ng A đ c l u tr trong w byte b t đ u t đ a ch :

base(A) + (i − 1)w

Ví d 1 : N u ch s c a A là nh ng s nguyên thu c m t mi n con min max, thì đ a ch

c a ph n t A[i] đ c xác đ nh theo công th c :

base(A) + (i − min)w

vì A[i] v trí th (i − min + 1) c a m ng

Ví d 2 : N u ch s c a A thu c ki u b t k , ta c ng có th áp d ng d dàng quy t c tính đ a

ch Gi s m ng Count ch a các s nguyên 2 byte đ c khai báo nh sau :

Type Frequency = array [‘A’ ‘Z’] of integer;

Var Count : Frequency; ch : char;

khi đó Count[ch] v trí th i = (ord(ch) − ord(‘A’) + 1) c a m ng và đ c l u tr b t đ u t byte có đ a ch là :

base(Count) + i -1 = base(Count) + (ord(ch) − ord(‘A’)) * 2

Trang 28

I.3.2 Bi u di n m ng nhi u chi u

Gi s cho m ng hai chi u M đ c khai báo nh sau :

Type Matrix = array [1 3,1 4] of integer;

Var M : Matrix; i : 1 3; j : 1 4;

M ng M có th l u tr theo th t hàng (h t hàng n đ n hàng kia), ho c theo th t c t

(h t c t n đ n c t kia), b t đ u t byte có đ a ch base(M) ( đây, w = 2) :

M t cách t ng quát, n u m ng hai chi u M g m m hàng, n c t, có các ch s thu c các

mi n con ki u nguyên đ c khai báo nh sau :

array [min1 max1, min2 max2] of component;

trong đó : component là ki u ph n t c a M s d ng w byte nh đ bi u di n,

m = max1 − min1 + 1, n = max2 − min2 + 1

Gi s M đ c l u tr theo hàng, đ a ch b t đ u c a ph n t M[i, j] là :

base(M) + ( (i − min1) * n + (j − min2)) * w

T ng t , ta có th l p công th c d ch đ a ch cho m ng 3 chi u Ví d xét m ng ba chi u B đ c khai báo t ng quát nh sau :

Type ThreeDim= array[min1 max1, min2 max2, min3 max3] of component;

Var M: ThreeDim;

i: min1 max1; j: min2 max2; k: min3 max3;

trong đó : component là ki u ph n t c a M s d ng w byte nh đ bi u di n,

m = max1 − min1 + 1,

n = max2 − min2 + 1,

p = max3 − min3 + 1

a ch b t đ u c a ph n t M[i, j] là :

base(M) + ( (i − min1) * n * p + (j − min2) * p + (k − min3)) * w

Các công th c tính đ a ch cho các m ng trên 3 chi u c ng đ c tính t ng t , nh ng đ

ph c t p s t ng lên theo s chi u

Trang 29

II Xâu kí t (String)

II.1 Khái ni m

Ki u xâu kí t th ng đ c s d ng trong các ng d ng so n th o v n b n hay x lý t

M t xâu (hay chu i) là dãy kí t b t k l y t m t t p h p các kí t cho tr c

Trong Turbo Pascal, xâu đ c xây d ng t các kí t ASCII M t xâu h ng đ c đ t gi a hai d u nháy đ n (quotes)

q:= ‘Gia khánh, Gia vi n, Ninh bình’

dài c a xâu là s kí t có m t trong đó N u đ dài c a xâu b ng 0, ta đ c xâu r ng,

là xâu không có kí t nào Ví d đ dài c a xâu ht b ng 11, m c dù đ dài t i đa c a xâu

ki u HoTenlà 20

Các phép toán trên xâu : + = <> < <= > >=(xem m c III)

Trang 30

II.2.2 Các th t c và hàm trên xâu

1 dài xâu, hàm Length :

Length(s: string): Integer;

Tr v đ dài đ ng (dynamic length) c a xâu

Copy(s: string; index: Integer; count: Integer): string;

Tr v xâu con c a s có đ dài count t v trí index

3 Ghép m t xâu, hàm Concat :

Concat(s1 [, s2, , sn]: string): string;

Tr v xâu là xâu ghép c a dãy các xâu (concatenates a sequence of strings)

Ví d :

begin { tr v 'ABCDEF' }

WriteLn(Concat('ABC','DEF'));

end

4 Xoá b m t ph n c a xâu, th t cDelete :

Delete(var s: string; index: Integer; count: Integer);

Xoá b kh i s xâu con có đ dài count t v trí index

5 Chèn vào m t xâu, th t c Insert :

Insert(source: string; var s: string; index: Integer);

Chèn xâu con source vào xâu s b t đ u t v trí index

Trang 31

WriteLn(s); { 'Honest Abe Lincoln' } end

6 Tìm xâu con, th t c Pos :

Pos(substr: string; s: string): Byte;

Tìm v trí c a xâu con substr t xâu s

end

7 Chuy n xâu thành s , th t c Val :

Val(s: string; var v; var code: Integer);

Chuy n đ i giá tr bi n ki u xâu s (s ch a m t dãy ch s ) thành bi n v có ki u Integer

Str(x [: width [: decimals ]]; var s: string);

Chuy n đ i giá tr s x thành m t xâu s Xâu s có th xu t ra b i Write

Trang 32

Ví d :

function IntToStr(i: Longint): string;

{ Convert any Integer type to a string }

for i:=1 to MaxStringLength do

if not eoln then read(str[i]) else str[i]:=' ';

readln end

Trang 33

III Ki u t p h p (set type)

III.1 Khái ni m

T p h p là m t nhóm các đ i t ng có cùng m t ki u g i là các ph n t c a t p h p

Trong Toán h c, các t p h p th ng đ c kí t b i danh sách các ph n t đ t trong c p d u ngo c {} Ví d các t p h p {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, {♣, ♦, ♥, ♠}, v.v T p h p không

ch a ph n t nào g i là t p h p r ng (empty set), ký hi u ∅ hay {}

Do các ph n t c a t p h p không đ c s p x p th t nên ng i ta không nói đ n ph n

t th nh t, ph n t th hai, v.v Nh v y, không th truy c p các ph n t c a t p h p m t cách tr c ti p nh trong m ng

Trong m t bài toán đòi h i đ n t p h p, các ph n t đ c ch n t m t t p h p cho tr c

đ c g i là t p h p v tr (universal set) Ví d n u xét t p h p các ch cái hoa thì t p h p

v tr có th là t p h p t t c các kí t

Các phép toán c b n trên t p h p là thu c (n m trong), giao, h p và hi u nh đ c ch

ra trong gi n đ Venn d i đây

III.2 Khai báo t p h p

Day = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;

Days = set of Day ;

Các khai báo trên t o thành ba t p h p ph d ng là :

{‘A’, ‘B’, , ’Z’}, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} và

{Sun, Mon, Tue, Wed, Thu, Fri, Sat}

s d ng t p h p trong ch ng trình, các bi n đ c khai báo nh sau :

Var Vowels, Consonants : CapLetter;

Numbers, Evens, Odds : Digit;

Trang 34

trong đó <ds ph n t > là danh sách (có th r ng) các h ng, bi n hay bi u th c đ t cách nhau

d u ph y và chúng đ c đ t trong c p d u ngo c [ và ] Các giá tr h ng liên ti p có th dùng cách bi u di n ki u mi n con

c s c a set

K t qu c a bi u th c là true (n u thu c) ho c false (n u không thu c)

Trang 35

Ví d :

‘A’ in Consonants có k t qu false

Cho set1, set2 là các h ng, ho c bi n, ho c bi u th c ki u t p h p Ta có các phép quan

h nh sau :

set1 <= set2 hay set2 >= set1 Ki m tra n u set1 ⊆ set2

gi ng nhau set1 <> set2 T ng đ ng v i not (set1 = set2)

Ví d :

[3, 5, 7] <= Odds có k t qu true

[‘A’]<>Consonants có k t qu true

III.3.3 Các phép toán trên t p h p

Cho set1, set2 là các h ng, ho c bi n, ho c bi u th c ki u t p h p Ta có các phép toán

c b n nh sau :

theo th t u tiên đ c gi i thích nh sau :

Trang 36

Thêm Prime vào t p h p k t qu

Lo i tr kh i sàng các b i s c a Prime là 2* Prime, 3* Prime

{ Thêm Prime vào t p h p k t qu và in ra }

PrimeSet:= PrimeSet + [Prime];

Write(Perime:4,’,’);

{ Lo i tr kh i Sieve các b i s c a Prime }

i:= Prime;

while i<= N do begin

Sieve:= Sieve - [i];

i:= i + Prime end

until Sieve=[];

writeln;

Readln

End {TimSoNguyenTo }

Ví d 2 : Tìm s các c p kí t đi li n nhau trong m t v n b n Ch ng h n t lúc l c g m

các c p kí t đi li n nhau lu, úc, la, ac

Trang 37

var Count : array [letter, letter] of Word ;

d, c : letter ;

C1, C2 : char ;

begin

for c:= letter_a to letter_Z do

for d:= letter_a to letter_Z do

Count[c,d]:= 0 { Kh i đ ng } while not eof do { c v n b n, v a đ c v a đ m }

III.4 Bi u di n c u trúc t p h p trong máy

Cho S là m t t p h p các ph n t đ c ch n t m t t p h p v tr h u h n Trong máy tính, t p h p S c ng đ c bi u di n b i m t dãy bit t ng t các ki u d li u ti n đ nh khác (Integer, Real, Char và Boolean)

x in [C1, C2, , Cn] ≡ (x = C1) ∨ (x = C2) ∨ (x = Cn)

Trang 38

IV C u trúc ki u b n ghi (record)

IV.1 c t ki u b n ghi

B n ghi (hay m u tin, m c) là m t dãy h u h n các thành ph n có ki u b t k Các thành

ph n đ c g i là các tr ng (field) c a b n ghi T ng t c u trúc m ng, phép toán c b n

trên b n ghi là truy c p đ n t ng thành ph n c a nó

Khai báo ki u b n ghi là vi c đ c t tên c a b n ghi và ki u c a các tr ng :

Type T = Record s1 : T1;

s2 : T2;

Ví d 1 :

Type Complex= Record re: real; { real part }

im: real; { imaginary part } end;

Date= Record month: string[9];

Các bi n đ c khai báo nh sau :

Trang 39

−1.7 19 'Jhon'

male single

N u x, y là hai bi n b n ghi có cùng ki u v i mô t : Var x, y: T;

có th th c hi n phép gán : x:= y; đ chép các tr ng c a b n ghi y vào b n ghi x

G i si, i = 1 n là tên c a các tr ng trong b n ghi, v i mô t : Var x: T;

if (a[i].sex = female) and (a[i].marstatus = single)

then count:= count + 1 ;

Có th vi t l i đo n l nh đ m s ng i đ c thân c a phái n nh sau :

for i := 1 to N do with a [i] do

if (sex = female) and (marstatus = single)

then count:= count + 1 ;

L nh with c ng cho phép li t kê nhi u tên b n ghi :

Trang 40

writeln(‘Birthday: ‘,birthday.month,

birthday.day:3,’,’, birthday.year:5);

write (‘Sex: ‘);

if sex=male then write (‘male’)

else write (‘female’);

with p, birthday do begin

writeln(‘Name: ‘,name,’ ‘,firstname);

writeln(‘Birthday: ‘,month,day:3, ’,’,year:5);

write (‘Sex: ‘);

if sex=male then write (‘male’)

else write (‘female’);

write (‘ Marstatus: ‘);

case marstatus of

single : write (‘single’);

maried : write (‘maried’);

widowed : write (‘widowed’);

divorced: write (‘divorced’);

end;

writeln

end;

IV.2 B n ghi thay đ i

Ví d : Mô t các khái ni m hình h c to đ và đi m nh sau :

Type To đ =Record Hoànhđô : real;

Ngày đăng: 03/01/2016, 21:29

HÌNH ẢNH LIÊN QUAN

Hình v   d i  đ ây là hình m u c a  đ ng Sierpinski c p 1 và  đ ng Sierpinski c p 2. - Kỹ thuật lập trình turbo pascal
Hình v d i đ ây là hình m u c a đ ng Sierpinski c p 1 và đ ng Sierpinski c p 2 (Trang 98)

TỪ KHÓA LIÊN QUAN