Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Trung học cơ sở Tài liệu bồi dưỡng học sinh giỏi tin 9...

Tài liệu Tài liệu bồi dưỡng học sinh giỏi tin 9

.DOC
126
1758
56

Mô tả:

 Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT Giáo dục có rễ đắng mà trái ngọt. (384-322 Chương 1: MỘT SỐAristote VẤN ĐỀ TOÁNT.C.N) HỌC I. HỆ ĐẾM: 1. Hệ đếm thập phân (Decimal): Có 10 chữ số biểu diễn (0,1,2,3,4,5, 6,7,8,9) Dạng tổng quát: a1a2…an = a1.10n-1+ a2.10n-2+… +an.100 VD: 35710 = 3.102+5.101+7.100 (Lưu ý: Thường khi viết số ở hệ đếm thập phân người ta không ghi cơ số) 2. Hệ đếm nhị phân (Binary): Có 2 chữ số biểu diễn (0,1) a. Dạng tổng quát: a1a2…an = a1.2n-1 + a2.2n-2 + … + an.20 VD: 10102 = 1.23 + 0.22 + 1.21 + 0.20 = 10 (Lưu ý: Đây chính là cách quy đổi từ hệ nhị phân sang hệ thập phân) b. Cách quy đổi từ thập phân sang nhị phân: - Bước 1: Chia liên tiếp số cần đổi cho 2 đến khi thương bằng 0. - Bước 2: Viết ngược lại số dư, ta được số mới trong hệ nhị phân. VD: Đổi số 6 từ hệ thập phân sang hệ nhị phân, ta làm như sau: 6 2 0 3 2 Ngừng chia 1 1 2 1 0 Kết quả: 6 = 1102 3. Hệ đếm thập lục phân (Hexa): Có 16 chữ số biểu diễn (0,1,2,3,4,5, 6,7,8,9,A,B,C,D,E,F) a. Dạng tổng quát: a1a2…an = a1.16n-1 + a2.16n-2 + … + an.160 VD: 37Dh = 3.162 + 7.161 + 13.160 = 893 (Lưu ý: Đây chính là cách quy đổi từ hệ Hexa sang hệ thập phân) b. Cách quy đổi từ TP sang Hexa: - Bước 1: Chia liên tiếp số cần đổi cho 16 đến khi thương bằng 0. - Bước 2: Viết ngược lại số dư, ta được số mới trong hệ Hexa. (Lưu ý: Nếu số dư lớn hơn 9 ta quy đổi thành A, B, C, D, E, F) c. Cách quy đổi nhanh từ hệ Hexa sang hệ nhị phân và ngược lại: Nhận xét: Số lớn nhất trong hệ Hexa có thể đổi ra 4 chữ số trong hệ nhị phân (1111=F). Do đó muốn đổi từ hệ Hexa ra hệ nhị phân, ta đổi từng con số Haxa ra nhóm 4 số nhị phân (nếu chưa đủ 4 chữ số nhị phân ta phải thêm các chữ số 0 vào phía trước). Ngược lại, muốn đổi từ hệ nhị phân sang Hexa, ta nhóm từ phải sang trái, mỗi nhóm 4 số rồi quy đổi từng nhóm sang hệ Hexa.  Tổng quát: - Muốn đổi a1a2…an từ hệ X sang hệ thập phân, ta tính giá trị của đa thức: a1.Xn-1+ a2.Xn-2+… +an.X0 - Muốn đổi một số từ hệ thập phân sang hệ X, ta chia liên tiếp số đó cho X cho đến khi thương bằng 0. Viết ngược lại số dư ta được số trong hệ X. - Muốn đổi một số từ hệ X sang hệ Y, ta đổi số từ hệ X sang hệ thập phân, sau đó đổi kết quả từ hệ thập phân sang hệ Y. 1  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT II. TẬP HỢP: 1. Phép hợp (Union): A  B = {x | x  A hoặc x  B} 2. Phép giao (Intersection): A  B = {x | x  A và x  B} (Lưu ý: Khi A  B =  ta nói rằng A và B là hai tập phân biệt) 3. Phép trừ (Difference): A \ B = {x | x  A và x  B} 4. Phép nhân (Multiplication): A  B = { (a,b) | a  A và b  B} 5. Phép phân hoạch (Partition): Cho X là một tập hợp (X  ). Tập X được chia ra thành các tập con Ai (Ai  ), họ các tập con Ai này được gọi là 1 phân hoạch (hay chia lớp) của tập X khi nó giao nhau từng đôi một bằng rỗng và hợp lại bằng tập lớn X. Tức là: A  B = ,  i  j và  Ai = X. i 6. Hiệu đối xứng (Symmetric difference): A  B = (A \ B)  (B \ A) Các ký hiệu tập hợp số thường dùng: N (số tự nhiên), N* (số tự nhiên khác không), Z (số nguyên) , Q (số hữu tỉ), I (số vô tỉ), R (số thực), P (số nguyên tố). III. SỐ NGUYÊN TỐ - ƯỚC SỐ CHUNG LỚN NHẤT - BỘI SỐ CHUNG NHỎ NHẤT: 1. Số nguyên tố: Khái niệm: Số nguyên tố là số tự nhiên lớn hơn 1, chỉ có 2 ước là 1 và chính nó. Định lí: Mọi hợp số n đều có ít nhất một ước nguyên tố không vuợt quá n . 2. Ước số chung lớn nhất – Bội số chung nhỏ nhất: - Thuật toán Euclid: Để tìm ƯCLN (a,b), ta có thể làm bằng cách trừ liên tiếp số lớn cho số nhỏ tới khi 2 số bằng nhau, giá trị cuối cùng của a hoặc b chính là ƯCLN (a,b). - Bổ đề: ƯCLN (a,0) = |a|,  a ≠ 0. a.b a.b - UCLN (a,b)·BCNN (a,b)=a·bBCNN (a,b)= UCLN(a, b) UCLN (a,b)= BCNN(a,b) 3. Số nguyên tố cùng nhau: Hai số có UCLN bằng 1 gọi là hai số nguyên tố cùng nhau. IV. PHÂN SỐ: 1. Phân số bằng nhau: a c =  ad = bc b d 2. Phân số tối giản: - Khi chia tử và mẫu của một phân số cho UCLN của chúng ta được phân số tối giản. V. PHƯƠNG TRÌNH - BẤT PHƯƠNG TRÌNH: 1. Phương trình bậc nhất: ax + b = 0 Phương trình có nghiệm là x = - (a ≠ 0) b a Lưu ý: Nếu a = 0 thì ax + b = 0  b = 0. Khi đó: b ≠ 0 thì phương trình vô nghiệm; b = 0 thì PT có vô số nghiệm. 2. Phương trình bậc hai: ax2 + bx + c = 0 (a ≠ 0). a) Dạng khuyết c (c=0): ax2 + bx = 0 x  0  ax + bx = 0  x. (ax + b) = 0   ax  b  0 2 2 x  0  x   b a   Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT b) Dạng khuyết b (b=0): ax2 + c = 0 + Nếu a và c cùng dấu: phương trình vô nghiệm. 2 + Nếu a và c khác dấu: ax2 + c = 0  ax   c  x2   c  a  c x   a   c x    a  c) Dạng đầy đủ: ax2 + bx + c = 0 + Ta tính  = b2 – 4ac + Nếu  < 0: phương trình vô nghiệm. + Nếu  = 0: phương trình có 1 nghiệm x = – b 2a + Nếu  > 0: phương trình có 2 nghiệm phân biệt: x1= b   b   ; x2= 2a 2a Lưu ý: - Nếu khuyết a (a = 0) thì phương trình ax2 + bx + c = 0 trở thành phương trình bậc nhất ax + b = 0. - Trong toán học ta còn có thể tìm nghiệm của phương trình bậc 2 bằng cách tính ’ (nếu b chẵn) hoặc tính nhẩm nghiệm trong các trường hợp a+b+c=0, a-b+c=0. Tuy nhiên những cách này ít dùng trong lập trình. 3. Phương trình trùng phương: ax4 + bx2 + c = 0 (a ≠ 0) (*) Cách giải: Ta đặt t = x , khi đó phương trình (*) trở thành at2 + bt + c = 0 (**) Giải (**) theo ẩn t. 2 Nếu (**) có các nghiệm t >= 0 thì (*) có nghiệm là  t , ngược lại thì (*) vô nghiệm. 4. Bất phương trình bậc nhất: ax + b > 0 (a ≠ 0) b a b Nếu a < 0 thì bất phương trình có nghiệm là x < a Nếu a > 0 thì bất phương trình có nghiệm là x > - Lưu ý: - Nếu khuyết a (a = 0) thì ax + b > 0  b > 0. Khi đó: b ≤ 0 thì BPT vô nghiệm; b > 0 thì BPT có vô số nghiệm. - Các dạng khác của bất phương trình bậc nhất: ax + b ≥ 0, ax + b < 0, ax + b ≤ 0) 5. Hệ phương trình bậc nhất 2 ẩn số (Giải bằng định thức): a b  D     ab' - a'b a' b' c b  Dx     cb' - c'b c' b' Nếu D = 0 thì: a x  b y  c  a ' x  b ' y  c ' a c  D y     ac' - a'c a' c' + Nếu Dx ≠ 0 hoặc Dy ≠ 0 thì hệ PT vô nghiệm; + Nếu Dx = Dy = 0 thì hệ PT có vô số nghiệm. Dy D Nếu D ≠ 0 thì hệ PT có nghiệm duy nhất: x  x và y  D D Lưu ý: Trong toán học ta có thể giải hệ phương trình bậc nhất 2 ẩn bằng phương pháp thế 3  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT hoặc phương pháp cộng đại số. Tuy nhiên những cách đó ít dùng trong lập trình. VI. HÀM SỐ - ĐỒ THỊ: 1. Hàm số bậc nhất: y = ax + b (a ≠ 0) - Tập xác định: x R - Tính chất biến thiên: đồng biến trên R khi a>0; nghịch biến trên R khi a<0. - Cách vẽ đồ thị của hàm số y = ax + b: Cho x = 0  y = b, ta được A (0;b) b b Cho y = 0  x =  , ta được B (  ;0) a a b Vậy đồ thị hàm số là một đường thẳng đi qua hai điểm A (0;b) và B (  ;0). a - Cách vẽ đồ thị của hàm số y = ax: Cho x = 1  y = a, ta được A (1;a) Vậy đồ thị là một đường thẳng đi qua gốc tọa độ O (0;0) và qua điểm A (1;a). - Vị trí tương đối của hai đường thẳng (d) y = ax + b và (d’): y = a’x + b’: (d) // (d’)  a = a’; b ≠ b’ (d)  (d’)  a = a’; b = b’ (d) cắt (d’)  a ≠ a’ (d) cắt (d’) tại một điểm trên trục tung  a ≠ a’; b = b’ (d)  (d’)  a.a’ = -1 Lưu ý: Tọa độ giao điểm (nếu có) của (d) và (d’) là nghiệm x, y của hệ phương trình  ax  b  y (Nếu hệ vô nghiệm thì (d) và (d’) không cắt nhau)  a ' x  b '  y - Độ dài đoạn thẳng AB với A (x1,y1), B (x2,y2): AB  ( x2  x1 ) 2  ( y2  y1 ) 2 - Để xác định hàm số y = ax + b biết đồ thị của nó đi qua 2 điểm A (x 1,y1), B (x2,y2), ta chỉ  ax1  b  y1 việc giải hệ phương trình  để tìm giá trị của a và b, sau đó thay giá trị a, b vào  ax2  b  y2 hàm số y = ax + b. - Để xét xem 3 điểm A (x1,y1), B (x2,y2), C (x3,y3) trong hệ trục tọa độ có thẳng hàng hay không, ta chỉ việc tìm hàm số y = ax + b đi qua 2 điểm A và B, sau đó xét xem điểm C (x 3,y3) có thuộc đường thẳng y = ax + b hay không. (C (x3,y3) thuộc đường thẳng y = ax + b  y3 = ax3 + b) 2. Hàm số: y = ax2 (a ≠ 0) - Tập xác định: x R - Tính chất biến thiên: + Nếu a>0 thì hàm số đồng biến khi x>0 và nghịch biến khi x<0 + Nếu a<0 thì hàm số đồng biến khi x<0 và nghịch biến khi x>0 - Đồ thị của hàm số y = ax2 là một Parabol có đỉnh O (0;0) và nhận trục Oy làm trục đối xứng. Nếu a>0 thì đồ thị nằm phía trên trục hoành Ox; nếu a<0 thì đồ thị nằm phía dưới trục hoành Ox. 4  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT - Cách vẽ đồ thị của hàm số y = ax2: + Lập bảng giá trị tương ứng: X - x1 - x2 0 x2 x1 2 Y = ax y1 y2 0 y2 y1 + Biểu diễn các điểm có tọa độ như bảng trên. Vẽ Parabol đi qua các điểm đó. - Quan hệ giữa (P) y = ax2 (a ≠ 0) và đường thẳng (D) y = mx + n: Phương trình hoành độ giao điểm của (P) và (D) là: ax2 = mx + n  ax2 – mx – n = 0 (*) + (P) cắt (D) tại hai điểm phân biệt  (*) có hai nghiệm phân biệt (>0) + (P) tiếp xúc (D)  (*) có nghiệm kép (=0) + (P) và (D) không có điểm chung  (*) vô nghiệm (<0) Mở rộng: Đồ thị hàm số y = ax2 + bx + c cũng là một Parabol có tọa độ đỉnh là (  b V , ). 2a 4 a Giữa (P) y = ax2 + bx + c và đường thẳng (D) y = mx + n cũng có quan hệ như trên, nhưng phương trình hoành độ giao điểm là: ax2 + bx + c = mx + n  ax2 + bx + c - mx - n = 0  ax2 + (b–m)x + c – n = 0 VII. SỐ GẦN ĐÚNG – SAI SỐ: - Nếu a là số gần đúng của số đúng āthì đúng a. a  ā – a được gọi là sai số tuyệt đối của số gần - Nếu  a  ā – a  d thì dā– a d hay a  dā a d , ta nói a là số gần đúng của số đúng ā với độ chính xác d, và quy ước viết gọn là ā = a ± d. VIII. GIẢI TÍCH TỔ HỢP: 1. Hoán vị: - Cho tập hợp A có n phần tử (n >0). Khi sắp xếp n phần tử này theo một thứ tự, ta được 1 hoán vị các phần tử của tập A. - Số các hoán vị của một tập hợp có n phần tử là: Pn = 1.2.3…... (n-1).n = n! 2. Chỉnh hợp: - Cho tập hợp A gồm n phần tử. Mỗi cách sắp k phần tử của tập hợp A (1 kn) theo một thứ tự nhất định gọi là một chỉnh hợp chập k của n phần tử của tập A. - Số các chỉnh hợp chập k của một tập hợp có n phần tử (1 k n) là: A k n  n(n  1)...(n  k  1)  n! (Lưu ý: 0! = 1) (n  k)! 3. Tổ hợp: - Cho tập hợp A gồm n phần tử. Mỗi cách sắp k phần tử của tập hợp A (1 k n) (không quan tâm thứ tự) gọi là một tổ hợp chập k của n phần tử của tập A. - Số các tổ hợp chập k của một tập hợp có n phần tử (1 k n) là: k n(n  1)...(n  k  1) n!  C  Ak!  k! k!(n  k)! k n n 5  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT IX. CẤP SỐ CỘNG – CẤP SỐ NHÂN: 1. Cấp số cộng: Cấp số cộng là một dãy số (hữu hạn hoặc vô hạn), trong đó kể từ số hạng thứ hai, mỗi số hạng đều bằng số hạng đứng ngay trước nó cộng với một số không đổi d. Số d được gọi là công sai của cấp số cộng. Nếu (U n) là một cấp số cộng với công sai d, ta có công thức truy hồi: U n 1  U n  d với n  N* Công thức tính tổng n số hạng đầu của cấp số cộng: Sn  n(a1  a n ) 2 2. Cấp số nhân: Cấp số nhân là một dãy số (hữu hạn hoặc vô hạn), trong đó kể từ số hạng thứ hai, mỗi số hạng đều là tích của số hạng đứng ngay trước nó với một số không đổi q. Số q được gọi là công bội của cấp số nhân. Nếu (U n) là một cấp số nhân với công bội q, ta có công thức truy hồi: U n 1  U n .q với n  N* u1 (1  q n ) Công thức tính tổng n số hạng đầu của cấp số nhân: Sn  1 q X. LŨY THỪA – LOGARIT: 1. Lũy thừa: Am+n = Am.An ; A n Am-n = Am (A≠0) ; An (Am)n = Am.n ; 1 A0 1 n 0 n  n (A  A  n  n ) ; A A A m n a  n am (n am  n a m .n n  n A 1 (A  A 0 0 (a m n )n  a m n (A.B)n = An. Bn ; n n An  n 1) A ) Lưu ý: + Khi không có dấu ngoặc thì thứ tự thực hiện lũy thừa là từ trên xuống: b (b ) b b.c a c = a c ≠ (a )c= a + Số mũ của lũy thừa còn có thể là số thực và trong lập trình thường được định nghĩa bằng cách sử dụng logarit (xem phần ứng dụng trong lập trình). 2. Logarit: Khái niệm: Cho hai số dương a, b với a khác 1. Số x thoả mãn đẳng thức a x = b được gọi là lôgarit cơ số a của b và kí hiệu là logab. Ta có: x = logab  ax = b Tính chất:  loga 1 = 0 (a0 = 1  loga 1 = 0)   loga a = 1 (a1 = a  loga a = 1) log b log b a a = b (x = logab  ax = b. Thay x = logab vào ax ta có: a a = b)  loga ax = x (loga ax = x  ax = ax) 3. Logarit tự nhiên (Logarit cơ số e – Logarit Nêpe): Số e là hằng số quan trọng của toán học, e  2.718. Ta có: x = logeb  ex = b. logeb gọi là gogarit tự nhiên của b và viết tắt là ln b. 4. Ứng dụng trong lập trình: Trong Pascal chỉ có 2 hàm liên quan đến số mũ là : Exp (x) = ex và Ln (x) =ln x log A ln A n n.ln A  An = Exp (n*LN (A)) - Tính An: An = (e e )n = (e ) =e 1 1 .ln A log A 1 ln A 1  n A = Exp (1/n*LN (A)) - Tính n A : n A =A n = (e e ) n = (e ) n =e n 6  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT XI. HÌNH HỌC: A 1. Định lí Py-ta-go: Tam giác ABC vuông tại A  BC2 = AB2 + AC2 2. Hệ thức lượng trong tam giác vuông: b2=ab’ (c2=ac’); h2=b’c’; bc = ah; 1 1 1  2 2 2 h b c c b' B 3. Trong một tam giác bất kỳ với 3 cạnh là a, b, c: b h c' H a + Ta luôn có a + b > c; a + c > b; b + c > a + Ta có thể tính diện tích tam giác theo công thức Hê-rông: S p ( p  a )( p  b)( p  c ) Trong đó p là nửa chu vi: p  a bc 2 A 4. Tỉ số lượng giác của góc nhọn: Sin  tg  � � i  AC    huy� n  BC  � � i  AC    k�  AB  cos  k�  AB    huy� n  BC  cotg  k� AB    � � i  AC  5. Một số hệ thức về cạnh và góc trong tam giác vuông: b  a.Sin  a.Cos  b  c.tg  c.Cotg  C c  a.Sin   a.Cos c  b.tg   b.Cotg 6. Arcsin, Arccos, Arctan, Arccotg: Caïnh ñoái Caïnh keà B  C Caïnh huyeàn B  a c  b A Arcsin a = số đo của cung có sin bằng a. Arccos a = số đo của cung có cos bằng a. Arctan a = số đo của cung có tang bằng a. Arccotg a = số đo của cung có cotang bằng a.  0 180  rad và 1 rad   7. Đổi độ sang Radian và ngược lại: 1    180    0 8. Một số công thức tính chu vi, diện tích: - Chu vi hình vuông: C  4a (với a là cạnh hình vuông) - Diện tích hình vuông: S  a 2 (với a là cạnh hình vuông) - Chu vi hình chữ nhật: C  2(a  b) (với a là chiều dài, b là chiều rộng) - Diện tích hình chữ nhật: S  ab (với a là chiều dài, b là chiều rộng) 1 - Diện tích hình tam giác: S  ah (với a là cạnh đáy, h là đường cao thuộc cạnh đáy) 2 1 - Diện tích hình thang: S  ( a  b) h (với a là đáy lớn, b là đáy nhỏ, h là đường cao) 2 - Chu vi đường tròn: C = 2R  (với R bán kính) - Diện tích hình tròn: S = R2 (với R bán kính) 7 C  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT Học, học nữa, học mãi. Vladimir Ilyich Lenin (18701924) Chương 2: MỘT SỐ VẤN ĐỀ CƠ BẢN TRONG PASCAL I. GIẢI THUẬT: a. Khái niệm: Giải thuật (còn gọi là thuật toán) là một tập hữu hạn các thao tác (các công việc, các phép toán…) có thể đặt tên được và chúng được thực hiện theo một trình tự thích hợp đối với một số đối tượng nào đó để đạt được điều mong muốn. b. Biểu diễn giải thuật: Thông thường, người ta sử dụng một trong 4 cách sau để biểu diễn giải thuật: - Liệt kê: Là hình thức liệt kê từng bước bằng ngôn ngữ tự nhiên. - Lưu đồ: Là hình thức biểu diễn giải thuật dưới dạng sơ đồ. - Dùng ngôn ngữ lập trình. - Dùng ngôn ngữ mã giả. II. CÁC PHÉP TOÁN CƠ BẢN – TỪ KHÓA, TÊN TỰ ĐẶT: 1. Các phép tính: + ; - ; * ; / (chia cho thương là số thực); DIV (chia lấy phần nguyên); MOD (chia lấy phần dư); IN (thuộc về - dùng cho tập hợp)  Lưu ý: phép + có thể dùng để cộng hai chuỗi hoặc cộng hai tập hợp; phép trừ có thể dùng để trừ hai tập hợp; phép * có thể dùng để lấy phần giao của hai tập hợp; phép DIV, MOD không dùng được với số thực. 2. Các phép so sánh: > ; < ; = ; <> ; >= ; <= 3. Từ khóa: Là các từ của riêng Pascal, không được dùng vào những việc khác hoặc đặt tên mới trùng với từ khóa. Các từ khóa bao gồm: And, Array, Begin, Case, Const, Div, Do, Downto, Else, End, File, For, Function, Goto, If, In, Label, Mod, Nil, Not, Of, Or, Packed, Procedure, Program, Record, Repeat, Set, String, Then, To, Type, Until, Uses, Var, While, With 4. Tên tự đặt: Là một dãy ký tự dùng để đặt tên chương trình, biến, hằng, nhãn, thủ tục, hàm… Tên phải bắt đầu bằng một chữ cái và theo sau là các chữ cái, chữ số, dấu “_” (gạch nối dưới). Tên không được có khoảng trắng, không được chứa ký hiệu đặc biệt và không được trùng với từ khóa. Độ dài tối đa của tên là 127 ký tự. Không nên đặt tên trùng với tên chuẩn của Pascal. Một số tên chuẩn của Pascal: Abs, Arctan, Boolean, Byte, Char, Chr, Cos, Eof, Exp, False, Integer, New, Old, Read, Readln, Real, Reset, Rewrite, Round, Sin, Sqr, Sqrt, Text, True, Write, Writeln. III. BIẾN, HẰNG, LỆNH GÁN - MỘT SỐ THỦ TỤC CƠ BẢN: 1. Biến: Biến là những đại lượng có thể thay đổi giá trị. Tên của biến là tên vùng nhớ lưu trữ dữ liệu. Cách khai báo biến: Var : ; (Một số kiểu cơ bản: Integer, Real, Char, String, Boolean...) VD: Var n,p: Integer; f: Boolean; 2. Hằng: Hằng là những đại lượng không thay đổi giá trị. Tên của hằng là tên vùng nhớ lưu trữ dữ liệu. Cách khai báo hằng: Const = ; (VD: Const Pi = 3.14;) 8  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT  Tổng quát: Một chương trình thường có những khai báo theo thứ tự sau: Khai báo tên chương trình: PROGRAM ; Khai báo sử dụng đơn vị chương trình: USES ; Khai báo nhãn: LABEL ; Khai báo hằng : CONST = ; Khai báo kiểu dữ liệu mới: TYPE = <Định nghĩa kiểu>; Khai báo biến: VAR : ; : ; Khai báo thủ tục: PROCEDURE (Các tham số nếu cần); Khai báo hàm: FUNCTION (Các tham số nếu cần):; 3. Ghi chú trong chương trình: {nội dung ghi chú} hoặc (* nội dung ghi chú *) 4. Lệnh gán: := ; (VD: x:= -b/a;) 5. Thủ tục nhập: Read (DS biến); hoặc Readln (DS biến); {Nhập vào DS biến các giá trị từ bàn phím} (Lưu ý: Nếu nhập nhiều biến một lần thì mỗi biến phải cách nhau 1 khoảng trắng) Read (F, DS biến); hoặc Readln (F, DS biến); {Đọc từ tệp F vào DS biến} Readln; {Chờ nhấn phím Enter} Thủ tục nhập đặc biệt: Readkey : Char; {Cho kí tự khi gõ phím mà không cần nhấn Enter. Để sử dụng thủ tục này phải khai báo Uses CRT;} Hàm KeyPressed : Boolean; cho giá trị True nếu bàn phím có kí tự gõ, ngược lại sẽ có giá trị False.  Lưu ý về cách viết Thủ tục và Hàm trong tài liệu này: ( : ) : Ví dụ: Ghi Thủ tục FillChar (Var X; N:Word, V) Có nghĩa là: Tên thủ tục là FillChar. Thủ tục có 3 đối số X, N, V, trong đó X phải là 1 biến kiểu bất kỳ (tham biến), N phải là số nguyên kiểu Word (biến hoặc giá trị đều được), V là giá trị bất kỳ (biến hoặc giá trị đều được). Ghi Hàm Copy (S : String; P,N : Integer) : String Có nghĩa là: Tên hàm là Copy. Hàm có 3 đối số S, P, N, trong đó S phải là chuỗi (String), P và N phải là số nguyên kiểu Integer. Kết quả của hàm trả về là chuỗi (String). Nếu trước đối số có từ VAR thì phải truyền vào đối số ở vị trí đó là biến (không được truyền giá trị - Về tham biến, tham trị sẽ nghiên cứu trong chương 4). Nếu ghi rõ kiểu của đối số thì phải truyền đúng kiểu cho đối số đó, nếu không ghi rõ kiểu đối số thì có thể truyền kiểu bất kỳ (Riêng các kiểu Integer, Byte, ShortInt, LongInt, Word có thể truyền chung tùy từng trường hợp. Nếu đối số là số nguyên nói chung thì chỉ ghi đại diện bằng từ Integer). Đối số nào có thể có hoặc không có vẫn được thì ghi trong ngoặc vuông [ ]. Giữa các loại đối số ghi cách nhau dấu chấm phẩy để cho dễ phân loại, nhưng khi sử dụng ta phải dùng dấu phẩy (không được dùng dấu chấm phẩy). 6. Thủ tục xuất: Write (DS dữ liệu xuất); hoặc Writeln (DS dữ liệu xuất); {Xuất ra màn hình} Write (n:d); hoặc Writeln (n:d); {Dành d vị trí để xuất biến nguyên n} Write (x:d:d1); hoặc Writeln (x:d:d1);{Xuất biến thực x với d vị trí và d1 kí số thập phân} Write (F, DS dữ liệu xuất); hoặc Writeln (F, DS dữ liệu xuất);{Ghi dữ liệu vào tệp F} Write (LST, DS dữ liệu xuất); hoặc Writeln (LST, DS dữ liệu xuất);{Xuất ra máy in} Writeln; {Xuống dòng} Write (#7); hoặc Write (Chr (7)); {Phát ra một tiếng chuông ở loa của máy} 9  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT 7. Các thủ tục điều khiển màn hình: (Cần khai báo Uses CRT; trước khi dùng) ClrScr: Xóa mành hình ClrEol: Xóa từ vị trí con trỏ tới cuốn dòng DelLine: Xóa toàn bộ dòng chứa con trỏ, sau đó dồn các dòng dưới lên InsLine: Xen một dòng trắng vào màn hình từ vị trí con trỏ Gotoxy (Cột, Dòng : Byte): Chuyển tới tọa độ cột, dòng Hàm WhreX : Byte cho giá trị cột hiện thời. Hàm WhreY : Byte cho giá trị dòng hiện thời. Textbackground (Color) hoặc Textbackground (từ 0 tới 15 : Byte): Định màu nền. TextColor (Color) hoặc TextColor (số từ 0 tới 15 : Byte): Định màu chữ. Windows (X1,Y1,X2,Y2 : Byte): Tạo cửa sổ có tọa độ X1,Y1,X2,Y2 trong màn hình. LowVideo, NormVideo, HighVideo: điều khiển độ sáng của màn hình. 8. Một số hàm và thủ tục khác: Hàm MaxInt : Integer Cho giá trị lớn nhất của kiểu Integer. Hàm MaxLongInt : LongInt Cho giá trị lớn nhất của kiểu LongInt. Break: Thoát khỏi vòng lặp. Continue: Bỏ qua những lệnh sau Continue và tiếp tục thực hiện vòng lặp. Exit: Thoát khỏi khối lệnh. (thường dùng để thoát khỏi chương trình con) Halt: Thoát khỏi chương trình. Randomize: Khởi động bộ tạo số ngẫu nhiên để cung cấp cho hàm Random Hàm Random (N : Word ) : Word cho số nguyên ngẫu nhiên trong nửa đoạn [0;n) Hàm SizeOf (X) : Integer cho biết kích thước của biến hoặc kiểu x tính theo đơn vị Byte FillChar (Var X, N : Word, V): Ghi n byte liên tiếp trong bộ nhớ với giá trị V, bắt đầu từ byte đầu tiên được biến x chiếm giữ. Việc kiểm tra độ dài biến không được thực hiện nên thường phải dùng kèm theo hàm SizeOf (x). VD: FillChar (A,SizeOf (A),0); {Điền đầy mảng A với giá trị là số 0} Sound (F : Word): Tạo âm thanh tần số F tính theo Hz cho đến khi gặp lệnh NOSOUND. Nosound: Ngừng thực hiện hàm SOUND. Delay (T : Word): Tạo thời gian trể T tính theo đơn vị mili giây (T là số nguyên). Goto : Nhảy vô điều kiện tới {không nên dùng} IV. MỘT SỐ CẤU TRÚC ĐIỀU KHIỂN: 1. Câu lệnh điều kiện IF: Dạng 1: IF <Điều kiện> THEN ; Dạng 2: IF <Điều kiện> THEN ELSE ; (Lưu ý: Trước ELSE của lệnh IF không được viết dấu chấm phẩy) 2. Câu lệnh lựa chọn CASE: Dạng 1 Dạng 2 CASE OF CASE OF : ; : ; : ; : ; ............ ............ : ; : ; END; ELSE ; END; (Lưu ý: CASE kết thúc bằng END; Trước ELSE của CASE được chấm phẩy ) 10  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT 3. Điều khiển lặp FOR…TO/ FOR…DOWNTO: Dạng 1: FOR := TO DO ; Dạng 2: FOR := DOWNTO DO ; 4. Điều khiển lặp REPEAT…UNTIL: Ngừng lặp khi <Điều kiện> ĐÚNG. REPEAT ; ; … ; UNTIL <Điều kiện>; 5. Điều khiển lặp WHILE…DO: Ngừng lặp khi <Điều kiện> SAI. WHILE <Điều kiện> DO ; (Sau DO chỉ có 1 câu lệnh, muốn lặp nhiều câu lệnh ta phải dùng câu lệnh ghép) 6. Lệnh ghép: Ở những chỗ ta chỉ được sử dụng 1 câu lệnh, nhưng ta lại muốn sử dụng nhiều hơn 1 câu lệnh thì phải sử dụng lệnh ghép. Lệnh ghép có dạng: BEGIN ; ; … ; END; BÀI TẬP CHƯƠNG 2 1. Viết chương trình nhập tổng, hiệu của hai số nguyên a,b rồi in ra giá trị của hai số đó ? 2. Viết chương trình nhập tổng, tích của hai số nguyên a,b rồi in ra giá trị của hai số đó ? 3. Viết chương trình tính tổng các phần tử của cấp số cộng có n phần tử biết rằng phần tử thứ nhất là a và công sai là d ? 4. Viết chương trình tính tổng các phần tử của cấp số nhân có n phần tử biết rằng phần tử thứ nhất là a và công bội là q ? 5. Cho 2 số nguyên m và n (1 ≤ m ≤ 12; 0 ≤ n < 60). Hãy xác định thời gian bé nhất mà sau khoảng thời gian đó hai kim đồng hồ sẽ: a) Trùng nhau. b) Vuông góc với nhau. 6. Tuổi cha hiện nay là B và tuổi con là C (019). Viết chương trình kiểm tra xem tuổi cha có gấp đôi tuổi con không ? Nếu đúng thì đưa ra màn hình thông báo “Tuổi cha gấp đôi tuổi con”. Trong trường hợp ngược lại, hãy tính số năm mà trước đó (hoặc sau đó) tuổi cha gấp đôi tuổi con và đưa ra thông báo dạng “n năm trước đây tuổi cha gấp đôi tuổi con” hoặc “sau n năm nữa tuổi cha sẽ gấp đôi tuổi con”. Ví dụ: Với B=59, C=29 thì thông báo sẽ đưa ra là: “Sau 1 năm nữa tuổi cha sẽ gấp đôi tuổi con” 7. Viết chương trình tính tổng n số tự nhiên đầu tiên (n là số tự nhiên nhập từ bàn phím).  Yêu cầu kỹ thuật: Nếu người sử dụng nhập n ≤ 0 thì thông báo “Dữ liệu nhập không hợp lệ” rồi kết thúc chương trình. 11  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT 8. Cho n! (n giai thừa) là tích n số tự nhiên dầu tiên (n! = 1.2.3....n). Hãy viết chương trình tính n! với n là số tự nhiên nhập vào từ bàn phím (n>0). 9. Nhập số nguyên dương n. Tính: 1.3.5...n (Nếu n lẻ) n!! = 2.4.6...n (Nếu n chẵn) 10. Bộ ba số nguyên dương a, b, c được gọi là bộ số Py-ta-go nếu tổng các bình phương của hai số bằng bình phương của số còn lại. Viết chương trình nhập từ bàn phím ba số nguyên dương a, b, c và kiểm tra xem chúng có là bộ ba số Py-ta-go hay không ? 11. Số tự nhiên n gọi là Amstrong nếu nó bằng tổng lập phương các chữ số của nó. Ví dụ 153 = 1+125+27. Viết chương trình tìm tất cả các số Amstrong có 3 chữ số. 12. Viết chương trình đổi từ năm dương lịch sang năm âm lịch. Năm dương lịch được biểu diễn bằng một số nguyên dương, năm âm lịch được biểu diễn bằng 2 từ theo thứ tực Can và Chi. Can và Chi được lấy lần lượt vòng tròn, năm xuất phát là năm Tân Dậu (ứng với dương lịch là năm 1). Có 10 Can được lấy theo thứ tự như sau: Canh, Tân, Nhâm, Quý, Giáp, Ất, Bính, Đinh, Mậu, Kỷ. Có 12 Chi được lấy theo thứ tự như sau: Thân, Dậu, Tuất, Hợi, Tí, Sửu, Dần, Mão, Thìn, Tỵ, Ngọ, Mùi. (Lưu ý: Viết Tí, Tỵ để khỏi nhần khi không có dấu thanh tiếng Việt) 13. Viết chương trình để giải bài toán sau: Trăm trâu ăn trăm bó cỏ Trâu đứng ăn năm Trâu nằm ăn ba Lụ khụ trâu già Ba con một bó Hỏi có bao nhiêu con trâu mỗi loại ?. 14. Viết chương trình in tất cả các nghiệm nguyên dương của phương trình: x2 + y2 = n với n nhập từ bàn phím (n > 0). 15. Viết chương trình nhập một số nguyên từ bàn phím và kiểm tra xem số vừa nhập có phải là lập phương của một số hay không (tức là có dạng z3 với z là số nguyên) 16. Viết chương trình in bảng cửu chương (từ 2 tới 9) ra màn hình ? 17. Nhập n số nguyên (0< n <= 20). In ra màn hình tam giác cân có chiều cao n: * *** ***** n ******* ********* *********** Yêu cầu: Đỉnh tam giác nằm tại dòng 2, tam giác nằm ở giữa màn hình theo chiều ngang. 12  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT Thiên tài gồm một phần trăm là linh cảm , còn chín mươi chín phần trăm là mồ hôi. Thomas Alva Edison (1847-1931) Chương 3: CÁC KIỂU DỮ LIỆU ĐƠN GIẢN TRONG PASCAL Kiểu cơ sở Kiểu vô hướng đơn giản Kiểu dữ liệu Kiểu dữ liệu có cấu trúc Kiểu do người dùng định nghĩa Kiểu logic (Boolean) Kiểu số nguyên (Integer) Kiểu số thực (Real) Kiểu ký tự (Char) Kiểu khoảng con Kiểu liệt kê Kiểu mảng (Array) Kiểu tập hợp (Set) Kiểu bản ghi (Record) Kiểu tệp (File) Kiểu xâu ký tự (String) Kiểu con trỏ (Pointer)  Lưu ý quan trọng: Các kiểu Boolean, Integer, Char, đoạn con, liệt kê là kiểu dữ liệu đếm được. Các kiểu khác là kiểu dữ liệu không đếm được. Không được dùng kiểu dữ liệu không đếm được để làm chỉ số mảng, chỉ số lặp. I. KIỂU LOGIC (BOOLEAN): 1. Tập giá trị: True, False (kích thước: 1 bit) 2. Khai báo: VAR : Boolean; VD: Var f: Boolean; 3. Đọc / ghi biến Logic: Ta không thể dùng lệnh Read để đọc biến logic. Muốn nhận dữ liệu cho biến logic, ta phải dùng phép gán. VD: f:=3>5; Ta có thể dùng lệnh Write để viết giá trị của biến logic ra màn hình. Nhưng thông thường ta chỉ dùng giá trị của biến logic để làm điều kiện. 4. Các phép toán: And, Or, Xor, Not 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 Lưu ý: Các phép so sánh luôn cho giá trị kiểu logic. 5. Ví dụ: Viết chương trình kiểm tra số nhập vào có phải là số nguyên tố không? Var n,p: Integer; f: Boolean; Begin Write ('Nhap n >=2: '); Readln (n); If n < 2 then Begin f:= False; Halt; {Thoat chuong trinh} End; p:=2; f:= True; 13  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT While (p <= Sqrt (n)) and f do If n mod p = 0 then f:= false Else p:= p+1; If f then Write (n, ' la so nguyen to') Else Write (n, ' khong phai la so nguyen to') Readln; End. Lưu ý: Giả sử f là biến logic. Thay vì viết If f=true … , ta chỉ cần viết If f…; Thay vì viết If f=False…, ta chỉ cần viết If not f … II. KIỂU SỐ NGUYÊN (INTEGER): 1. Tập giá trị: Từ khai báo Phạm vi biểu diễn Kích thước (Byte) BYTE 0 .. 255 1 SHORTINT -128 .. +127 1 INTEGER -32768 .. 32767 2 WORD 0 .. 65535 2 LONGINT -2147483648 .. 2147483647 4 2. Khai báo: VAR : ; VD: Var i,n: Integer; 3. Đọc / ghi biến nguyên: Ta có thể dùng lệnh Read, Write để đọc / ghi biến nguyên. VD: Readln (n); s:= 0; For i:=1 to n do s:= s+i; Writeln (s); 4. Các phép toán: - Phép toán số học: + ; - ; * ; / (chia cho thương là số thực); DIV (chia lấy phần nguyên); MOD (chia lấy phần dư). - Phép toán so sánh: > ; < ; = ; <> ; >= ; <= 5. Ví dụ: Viết chương trình hiển thị tất cả các số tự nhiên gồm 3 chữ số sao cho tổng tất cả các chữ số bằng tích của chúng ? Var a, b, c: Integer; Begin For a:= 1 to 9 do For b:= 0 to 9 do For c:= 0 to 9 do if a+b+c = a*b*c then Writeln (a,b,c); Readln; End. Viết chương trình nhập số nguyên n rồi viết đảo ngược lại số n ? Var n, n1, cs: Integer; Begin Readln (n); n1:= 0; {n1 lưu giá trị đảo ngược của n} While n <> 0 do Begin cs:= n mod 10; n1:= n1*10+cs; n:= n div 10; End; Writeln (n1); Readln; End. (Lưu ý: Có thể dùng cách tách chữ số như trên để dùng vào các mục đích khác) 14  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT III. KIỂU SỐ THỰC (REAL): 1. Tập giá trị: Từ khai báo Phạm vi biểu diễn Chữ số có nghĩa Kích thước (Byte) REAL 2.9E-39 .. 1.7E+38 11-12 6 SINGLE 1.5E- 45 .. 3.4E+38 7-8 4 DOUBLE 5.0E-324 .. 1.7E+308 15-16 8 EXTENDED 3.4E- 4951 .. 1.1E+4932 19-20 10 2. Khai báo: VAR :;VD: Var x,y,tam: Real; Lưu ý: Thông thường chỉ dùng kiểu Real. Muốn sử dụng các kiểu thực khác thì phải vào Options / Compiler và chọn mục 8087 / 80287. 3. Đọc / ghi biến thực: Ta có thể dùng lệnh Read, Write để đọc / ghi biến thực. VD: Readln (x,y); tam:= x; x:= y; y:= tam; Wrietln (x,' ', y); 4. Các phép toán: - Phép toán số học: + ; - ; * ; / . (Không dùng DIV, MOD cho số thực) - Phép toán so sánh: > ; < ; = ; <> ; >= ; <= 5. Một số hàm và thủ tục xử lý số nguyên, số thực: Hàm Abs (X : Integer / Real) : Integer / Real = x . VD: Abs (-5) = 5 Hàm Sqr (X : Integer / Real) : Integer / Real = x2. VD: Sqr (2) = 4 Hàm Sqrt (X : Integer / Real) : Integer / Real = x . VD: Sqrt (9) = 3 Hàm Pred (N : Integer) : Integer = n-1. VD: Pred (3) = 2 Hàm Succ (N : Integer) : Integer = n+1 VD: Succ (3) = 4 Hàm Trunc (X : Integer / Real) : LongInt lấy phần nguyên của x. VD: Trunc (5.75) = 5 Hàm Round (X : Integer / Real) : LongInt làm tròn x. VD: Round (5.75) = 6 Hàm Int (X : Integer / Real) : Real cho giá trị là phần nguyên của x. VD: Int (5.75) = 5.00 Hàm Frac (X : Integer / Real) : Real cho giá trị là phần thập phân của x. VD: Frac (5.75)=0.75 Thủ tục Inc (Var I : kiểu đếm được; [N : LongInt]) thủ tục tăng giá trị biến i:=i+ 1 [+n] VD: n:=5; Inc (n); Write (n); {Viết ra màn hình số 6} Thủ tục Dec (Var I : kiểu đếm được; [N : LongInt]) thủ tục giảm giá trị biến i:=i–1 [-n] VD: n:=5; Dec (n,2); Write (n); {Viết ra màn hình số 3} Hàm Odd (N : LongInt) : Boolean cho giá trị True nếu n là số lẻ. VD: Odd (5)=True Hàm Cos (X : Real) : Real = Cos x (X tính theo Radian). VD: Cos ( (pi/180)*60)=0.5 Hàm Sin (X : Real) : Real = Sin x (X tính theo Radian). VD: Sin ( (pi/180)*30) = 0.5 Hàm Arctan (X : Real) : Real = Arctg x (Kết quả hàm tính theo Radian). VD: Arctan (1)*180/pi=45.00 2 hàm Exp (x) = ex ; Ln (x) = ln x  An = Exp (n*LN (A)); n A = Exp (1/n*LN (A)) 6. Ví dụ: Viết chương trình nhập 3 số thực x, y, z rồi in ra số có giá trị lớn nhất ? Var x, y, z, Max: Real; Begin Readln (x, y, z); Max:= x; If y > Max then Max:= y; If z > Max then Max:= z; Writeln (Max:0:2); {dành “đủ” vị trí để in với 2 kí số thập phân} Readln; End. 15  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT {Lưu ý: Có thể tìm số nhỏ nhất bằng cách tương tự như trên} IV. KIỂU KÝ TỰ (CHAR): 1. Tập giá trị: Gồm tốt cả các ký tự trong bảng mã ASCII (American Standard Code for information Interchange). Lưu ý: 65..90  ‘A’.. ‘Z’, 97..122  ‘a’.. ‘z’ 2. Khai báo: VAR : Char; 3. Đọc / ghi biến kí tự: Ta có thể dùng lệnh Read, Write để đọc / ghi biến ký tự. 4. Các phép toán: Phép toán so sánh: > ; < ; = ; <> ; >= ; <= Lưu ý: ch1 > ch2  Ord (ch1) > Ord (Ch2) 5. Một số hàm xử lý: Hàm Ord (C : Char / kiểu đếm được) : LongInt cho thứ tự của kí tự C trong bảng ASCII. VD: Ord (‘A’)=65 Hàm Chr (N : Byte) : Char cho kí tự có thứ tự là n trong bảng ASCII. VD: Chr (65)=‘A’ Hàm Pred (C : Char / kiểu đếm được) : Char / kiểu đếm được Cho ký tự đứng liền trước C trong bảng mã ASCII. VD: Pred (‘B’)=‘A’ Hàm Succ (C : Char / kiểu đếm được) : Char / kiểu đếm được Cho ký tự đứng liền sau ch trong bảng mã ASCII. VD: Succ (‘B’)=‘C’ Hàm Upcase (C : Char) : Char cho giá trị là ký tự in hoa của ký tự ch. VD: Upcase (‘a’)=‘A’ 6. Ví dụ: Viết ra màn hình chữ “A” có 3 cách sau: Write (‘A’); hoặc Write (Chr (65)); hoặc Write (#65); V. KIỂU CHUỖI KÝ TỰ (STRING): 1. Tập giá trị: Là dãy các ký tự có trong bảng mã ASCII (tối đa 255 ký tự). 2. Khai báo: Var : String; {Độ dài tối đa là 255} Hoặc: Var : String [n]; {độ dài tối đa n kí tự}.VD: Var S:String[40]; 3. Đọc / ghi: Ta có thể dùng lệnh Read, Write để đọc / ghi chuỗi ký tự. 4. Các phép toán: - Phép cộng hai chuỗi: + VD: S1:= ‘Tran Van’; S2: = ‘Nam’; S:=S1+S2; {S = ‘Tran Van Nam’} - Phép toán so sánh: > ; < ; = ; <> ; >= ; <= VD: S1:= ‘Tran Van’; S2: = ‘Nam’; f:=S1>S2; {f = True} 5. Truy xuất từng ký tự trong chuỗi: [chỉ số] Ví dụ: S:= ‘ABC’; Write (S[2]);  viết ra màn hình chữ “B” Write (S[0]);  viết ra số 3 (phần tử thứ 0 nhớ độ dài thật của chuỗi) 6. Một số hàm và thủ tục xử lý chuỗi: Hàm Length (S : String) : Integer cho độ dài thật của chuỗi S. VD: S:= ‘Tran Van Nam’; For i:=1 to length (S) do If (ord (S[i]) >= 97) and (ord (S[i]) <= 122) then S[i]:= chr (ord (S[i])-32); Writeln (S);  viết ra màn hình “TRAN VAN NAM” Hàm Copy (S : String; P, N : Integer) : String cho chuỗi con của chuỗi S kể từ vị trí p với độ dài n. VD: Copy (‘ABCDEF’,3,2) = ‘CD’ Thủ tục Insert (S1 : String; Var S : String; P : Integer) chèn chuỗi S1 vào chuỗi S tại vị trí P. VD: S:=‘ABCDEF’; Insert (‘XY’,S,3);Write (S);{Viết ra “ABXYCDEF} 16  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT Thủ tục Delete (Var S : String; P, N : Integer): xóa trong chuỗi S đi n ký tự kể từ vị trí P. VD: S:=‘ABCDEF’; Delete (S,3,2); Write (S); {Viết ra màn hình “ABEF} Hàm Pos (S1, S : String) : Byte tìm chuỗi S1 trong chuỗi S.{Giá trị là vị trí đầu tiên} VD: S:=‘ABCDEF’; n:=Pos (‘CD’,S); {Biến n có giá trị là 3} Thủ tục Val (S : String; Var X : Integer / Real; E : Integer) đổi chuỗi S thành số và gán vào biến X, gán mã lỗi vào biến E (nếu không có lỗi thì E = 0, ngược lại thì E = vị trí đầu tiên xuất hiện lỗi). VD: S:=‘3.14’; Val (S,x,n); {Biến x có giá trị là 3.14; biến n có giá trị là 0} S:=‘3.14ABC’; Val (S,x,n); {Biến x có giá trị là 0; biến n có giá trị là 5} Thủ tục Str (X [quy cách] : Integer / Real; Var S : String) đổi một số thành chuỗi và lưu trong biến S. VD: Str (10/3:0:2,S); {Biến S có giá trị là chuỗi ‘3.33’} Hàm Concat (S1,S2,...,Sn : String) : String cho xâu mới bằng cách nối các xâu S1, S2, … Sn. VD: S1:= ‘ABC’; S2:= ‘XYZ’; S3:= Concat (S1,S2);  S3 = ‘ABCXYZ’ 7. Một số phương pháp xử lý chuỗi:  Đổi chuỗi bất kỳ thành chuỗi in hoa: For i:=1 to length (S) do If S[i] IN ['a'.. 'z'] then S[i]:= chr (ord (S[i])-32);  Đổi chuỗi bất kỳ thành chuỗi in thường: For i:=1 to length (S) do If S[i] IN ['A'.. 'Z'] then S[i]:= chr (ord (S[i])+32);  Đổi chuỗi bất kỳ thành chuỗi dạng tên riêng: If (S[1] IN ['a'..'z']) then S[1]:= chr (ord (S[i+1])-32); For i:=1 to length (S) do If (S[i] = #32) and (S[i+1] IN ['a'..'z']) then S[i+1]:= chr (ord (S[i+1])-32);  Cắt các khoảng trắng bên trái chuỗi: While S[1] = #32 do Delete (S,1,1);  Cắt các khoảng trắng bên phải chuỗi: While S[Length (S)] = #32 do Delete (S,Length (S),1); Hoặc: While S[Length (S)] = #32 do S:= Copy (S,1,Length (S) - 1);  Cắt các khoảng trắng vô nghĩa ở giữa chuỗi: While Pos (#32#32,S) > 0 do Delete (S,Pos (#32#32,S),1);  In ra từng từ trong chuỗi: Var S,S1:string; Begin Write('Nhap chuoi : '); Readln(s); S1:=''; While length (S) > 0 do Begin If S[1] <> #32 then Begin S1:= S1 + Copy (S,1,1); Delete (S,1,1); End Else Begin If S1 <> '' then Writeln (S1); Delete (S,1,1); S1:= ''; End; End; Writeln(S1); Readln; 17  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT End. VI. KIỂU KHOẢNG CON: 1. Khai báo: Cách 1: TYPE = . . ; VAR : ; VD: Type Kieutuoi = 0..120; Var Tuoi: Kieutuoi; Cách 2: VAR : . . ; VD: Var Chu_cai_hoa: ‘A’..’Z’; Lưu ý: , thuộc kiểu đếm được. 2. Sử dụng: Tùy theo , thuộc kiểu dữ liệu nào, ta có thể sử dụng khoảng con như kiểu dữ liệu đó. VII. KIỂU LIỆT KÊ: Là một tập hợp các giá trị được sắp xếp theo thứ tự. 1. Khai báo: Cách 1: TYPE : (liệt kê các giá trị); VAR : ; VD: Type Mau = (Xanh, Do, Tim, Vang); Var Mau_ao: Mau; Cách 2: VAR : (liệt kê các giá trị); VD: Var Mau_ao: (Xanh, Do, Tim, Vang); Khi đã khai báo như trên, trong chương trình ta có thể dùng lệnh: Mau_ao:=Xanh; 2. Đọc / ghi: Ta không thể dùng lệnh Read, Write để đọc / ghi trực tiếp kiểu liệt kê, mà phải thông qua cách chuyển đổi như sau: Readln (i); Mau_ao:= Mau (i); If mau_ao = Xanh then Write (‘Xanh’); 3. Một số hàm xử lý: Hàm Ord (X : kiểu liệt kê / kiểu đếm được) : LongInt cho thứ tự trong danh sách liệt kê đã được khai báo. (VD: Ord (Mau_ao)=0) Hàm (N : LongInt) : Kiểu liệt kê cho giá trị kiểu liệt kê có thứ tự là n. BÀI TẬP CHƯƠNG 3 1. Viết chương trình nhập 4 số tự nhiên a,b,c,d rồi cho biết số lớn nhất? Số nhỏ nhất? 2. Viết chương trình nhập số tự nhiên n từ bàn phím (0 < n ≤ 65355). a) Hãy cho biết n có bao nhiêu chữ số b) Hãy cho biết chữ số lớn nhất, chữ số nhỏ nhất của n c) Tính tổng các chữ số, tích các chữ số của n d) So sánh tổng các chữ số của n với tính các chữ số của n e) Hãy cho biết số đảo ngược của n có phải là số nguyên tố hay không ? 3. Viết chương trình nhập 2 số tự nhiên m, n từ bàn phím (0 0 (a, b là số thực tùy ý nhập từ bàn phím). 11. Viết chương trình nhập vào một ký tự rồi cho biết mã ASCII của ký tự vừa nhập? 12. Viết chương trình nhập vào mã ASCII một ký tự rồi cho biết ký tự tương ứng? 13. Viết chương trình in ra màn hình bảng mã ASCII gồm 255 mã và ký tự tương ứng? 14. Viết chương trình nhập vào chuỗi S. Sau đó: a) Cắt tất cả các khoảng trắng vô nghĩa trong chuỗi S. b) Đổi chuỗi S thành chuỗi in hoa, in thường, in dạng tên riêng. c) In ra màn hình từng từ trong chuỗi S. d) Cho biết chuỗi vừa nhập có đối xứng hay không? (các chuỗi happyyppah, catac là các chuỗi đối xứng). e) Cho biết chuỗi vừa nhập có tuần hoàn hay không? Nếu là chuỗi tuần hoàn thì cho biết chu kỳ tuần hoàn (chuỗi abcabc tuần hoàn với chu kỳ là 3). 15. Viết chương trình nhập vào chuỗi ngày, tháng, năm theo dạng dd/mm/yy hoặc dd/mm/yyyy, sau đó cho biết ngày đó là thứ mấy trong tuần. Hướng dẫn cách tính thứ trong tuần:  Nam:= 1900 + (Nam MOD 1900); {Quy đổi Nam về dạng yyyy}  Nếu Thang <3 thì Thang:= Thang + 12; và Nam:= Nam -1;  Thu=ABS (Ngay+2*Thang+3* (Thang+1) DIV 5+Nam+Nam DIV 4) MOD 7 (Khi đó Thu = 0  Chủ nhật; Thu = 1  Thứ hai; …) Lưu ý: Công thức tính trên chỉ đúng từ ngày 01/03/1900 trở đi. 19  Tài liệu bồi dưỡng học sinh giỏi Tin 9.................................. Lê Đắc Ước-Tân Thành-BRVT Đức hơn tài là quân tử, Tài hơn đức là tiểu nhân. (Sách Cảnh hành) Chương 4: CHƯƠNG TRÌNH CON - THỦ TỤC VÀ HÀM I. THỦ TỤC (PROCEDURE) VÀ HÀM (FUNCTION): 1. Ví dụ: Xét ví dụ sau đây: Chương trình tính tổ hợp chập k của n phần tử (1 ≤ k ≤ n). Program Tinh_To_Hop_Chap_K_Cua_N_Phan_Tu; Uses Crt; Var n,k: Byte; Tohop: Real; Procedure Nhap; {Thu tuc nhap du lieu} Begin Clrscr; Write ('Nhap n: '); Readln (n); Write ('Nhap k: '); Readln (k); If (k<1) or (n<1) or (n - Xem thêm -

Tài liệu liên quan