1. Trang chủ
  2. » Trung học cơ sở - phổ thông

CHUYEN DE BDHSG TIN CẤP THCS

62 69 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 62
Dung lượng 841 KB

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

Nội dung

Hiện nay hầu hết các trường THCS đã dạy môn Tin học và cơ sở vật chất phục vụ cho việc dạy học môn học này đã được trang bị ngày càng tốt hơn. Rất nhiều học sinh, phụ huynh học sinh, lãnh đạo ngành, các trường rất mong muốn con mình, bản thân mình, học sinh mình tham gia các kỳ thi học sinh giỏi môn Tin học

Trang 1

BÀI THAM LUẬN VỀ CHUYÊN ĐỀ TIN HỌC

“ĐỊNH HƯỚNG CHƯƠNG TRÌNH BỒI DƯỠNG HỌC SINH GIỎI

MƠN TIN HỌC CẤP THCS”

A ĐẶT VẤN ĐỀ:

I Cơ sở lý luận thực tiễn:

Hiện nay hầu hết các trường THCS đã dạy mơn Tin học và cơ sở vật chất phục vụ cho việcdạy học mơn học này đã được trang bị ngày càng tốt hơn Rất nhiều học sinh, phụ huynh học sinh,lãnh đạo ngành, các trường rất mong muốn con mình, bản thân mình, học sinh mình tham gia các kỳthi học sinh giỏi mơn Tin học (Kỳ thi tin học trẻ, Kỳ thi học sinh giỏi lớp 9 ) bởi tính mới mẻ, hấpdẫn, thiết thực của bộ mơn Mặc khác chúng ta nhìn vào phịng trào Tin học của ngành giáo dục Tuyphước so với các Huyện khác trong Tỉnh thì cịn rất yếu và thua xa các huyện bạn Đĩ khơng phải vìhọc sinh huyện Tuy Phước khơng thích học Tin học, hay đội ngũ giáo viên Tin học của Huyện chưathật sự quan tâm đến phong trào mũi nhọn này Mà ở đây ngành giáo dục Huyện chúng ta thiếu đimột phong trào, một sân chơi Tin học dành cho các em cĩ niềm đam mê thật sự với bộ mơn Tin học.Với tâm huyết cộng với sự đam mê của mình, phần vì học sinh và vì bộ mặt Tin học của ngành giáodục Tuy Phước, tơi và đồng nghiệp đã đưa ra chuyên đề “Định hướng về nội dung bồi dưỡng học sinhgiỏi mơn Tin học cấp THCS” để các trường thành lập ra đội tuyển và bồi dưỡng đến tháng 7 hàngnăm chọn ra những học sinh xuất sắc Tin học của trường mình tham gia dự thi học sinh giỏi Tin học

do ngành giáo dục Tuy phước tổ chức Từ đĩ thành lập được đội tuyển cấp Huyện và xa hơn học sinhtham dự các cuộc thi Tin học khác như Tin học trẻ, học sinh giỏi Tin học lớp 9…) Qua đĩ tạo chocác em cĩ sân chơi Tin học lành mạnh, khoa học, một phong trào hấp dẫn thường niên cĩ tiếng vangcho các khối học sinh Tơi tin tưởng với cách làm đĩ thì phong trào Tin học ngành giáo dục TuyPhước sẽ mạnh lên qua từng năm!

II Thực trạng dạy học sinh giỏi mơn Tin học hiện nay trong nhà trường:

a) Về phía học sinh:

Một bộ phận học sinh rất đam mê lĩnh vực Tin học này Đa số là các em cĩ kiến thức tốt về mơnTốn

Các em rất mong muốn cĩ một phong trào để các em thể hiện niềm đam mê của mình

b) Về phía giáo viên:

- Đa số là giáo viên trẻ, nhiệt tình trong cơng tác

- Vì chưa cĩ phịng trào nên đa số giáo viên Tin học chưa thật sự đầu tư nghiên cứu về lĩnh vực họcsinh giỏi Tin học

c) Về phía nhà trường:

- Lãnh đạo nhà trường chưa thật sự quan tâm đến đội ngũ học sinh giỏi Tin học Do đĩ cần cĩ phongtrào thường niên để thay đổi cách nhìn đối với phong trào này

B GIẢI QUYẾT VẤN ĐỀ:

Tập tài liệu được biên soạn với nội dung bồi dưỡng được chia làm 3 phần

- Phần 1: Lý thuyết và bài tập cơ bản theo từng chương NNLT Pascal

- Phần 2: Phần bài tập theo chủ đề

- Phần 3: Các dạng đề thi HSG Tin học và Tin học trẻ tham khảo

Mỗi chương gồm tĩm tắt lý thuyết và bài tập xoay quanh nội dung của chương Mỗi bài tập đượctrình bày theo cấu trúc:

Trang 2

Nội dung các bài tập ở các chương đã được lựa chọn theo hướng kế thừa, tăng dần độ khó Nhiều bài toán cần giải quyết trong thực tế được đưa vào các bài tập nhằm tăng hướng thú học tập

Hầu hết các bài tập có độ khó vừa phải, phù hợp với nội dung bồi dưỡng ở cấp trường Nội dung liên quan với môn toán và các môn khác cấp THCS Nội dung bồi dưỡng được chia thành chương như sau:

Phần 1: Lý thuyết và bài tập cơ bản theo từng chương NNLT Pascal

CHƯƠNG 1: MỘT SỐ VẤN ĐỀ TOÁ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.10 n-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.2 n-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:

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.16 n-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 đủ 4chữ 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 sangHexa, 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 a 1a2…an từ hệ X sang hệ thập phân, ta tính giá trị của đa thức:

a1.X n-1 + a2.X n-2 +… +an.X 0 -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.

II TẬP HỢP:

1.Phép hợp (Union): A ∪ B = {x | x A hoặc x B}

Ngừng chia

Trang 3

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):

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

- UCLN (a,b)·BCNN (a,b)=a·b⇔BCNN (a,b)=UCLN(a,a.b b)⇔UCLN (a,b)=BCNN(a,b)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

b = c

d ⇔ ad = bc

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 (a ≠ 0)

Phương trình có nghiệm là x = -

a b

Lưu ý: Nếu a = 0 thì ax + b = 0 b = 0 Khi đó: b ≠ 0 thì phương trình vô nghiệm;

0

x x

Trang 4

+ 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 = –

a

b

2+ Nếu ∆ > 0: phương trình có 2 nghiệm phân biệt: x1=

2

b a

− + ∆ ; x2=

2

b a

− − ∆

Lưu ý:

- Nếu khuyết a (a = 0) thì phương trình ax 2 + bx + c = 0 trở thành phương trình bậc nhất ax +

b = 0.

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

Nếu a < 0 thì bất phương trình có nghiệm là x < -

a b

= +

' ' ' x b y c a

c y b x a

Nếu D = 0 thì: + 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

Nếu D ≠ 0 thì hệ PT có nghiệm duy nhất:

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ế 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.

a

− ;0)

- Cách vẽ đồ thị của hàm số y = ax:

Trang 5

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’:

 (Nếu hệ vô nghiệm thì (d) và (d’) không cắt nhau)

- Độ dài đoạn thẳng AB với A (x1,y1), B (x2,y2): 2 2

(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ếua>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

- Cách vẽ đồ thị của hàm số y = ax2:

+ Lập bảng giá trị tương ứng:

+ 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à:

- Nếu a là số gần đúng của số đúng ā thì ∆ =a ā – a được gọi là sai số tuyệt đối của số gần đúng a

- 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

Trang 6

- 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

k nn

Công thức tính tổng n số hạng đầu của cấp số cộng: 1 n

n

n(a a )S

Công thức tính tổng n số hạng đầu của cấp số nhân:

n 1 n

u (1 q )S

lôgarit cơ số a của b và kí hiệu là logab Ta có: x = logab ⇔ ax = b

Trang 7

3.Logarit tự nhiên (Logarit cơ số e – Logarit Nêpe):

Số e là hằng số quan trọng của tốn học, e 2.718 Ta cĩ: x = logeb ⇔ ex = b log eb 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) = e x và Ln (x) =ln x

- Tính A n : A n = (eloge A) n = (eln A) n = en.ln A An = Exp (n*LN (A))

1.Định lí Py-ta-go: Tam giác ABC vuơng tại A ⇒ BC 2 = AB 2 + AC 2

2.Hệ thức lượng trong tam giác vuơng:

b 2 =ab’ (c 2 =ac’); h 2 =b’c’; bc = ah; 12 12 12

6.Arcsin, Arccos, Arctan, Arccotg:

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

7.Đổi độ sang Radian và ngược lại: 10

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 = a2 (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)

- Diện tích hình tam giác: 1

2

S = ah (với a là cạnh đáy, h là đường cao thuộc cạnh đáy)

α

Cạnh đố i Cạnh kề

Trang 8

- Diện tích hình thang: 1( )

2

S = a+b h (với a là đáy lớn, b là đáy nhỏ, h là đường cao)

- 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)

CHƯƠNG 2: CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ LẬP TRÌNH 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

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.

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).

3 Cấu trúc chung của một chương trình Pascal

Program <Tên_Chương_Trình>;

Uses Crt; {Khai báo thư viện hàm}

Const <Hằng> = <Giá Trị>; {Khai báo hằng}

Var <Biến 1>,<Biến 2> : <Kiểu Dữ Liệu>; {Khai báo biến}

Begin

Clrscr; { Lệnh xóa màn hình kết quả }

Write(‘<Yêu cầu nhập liệu>’); Readln(<Biến>); { Nếu cần}

{Xử lĩ và hiện kết quả}

Writeln(‘<Thông báo kết quả>’,<kết quả>); { Nếu cần}

Readln; {Giữ màn hình kết quả}

End.

Giải thích cấu trúc các khai báo trên:

Nếu có phần khai báo nào cần cho chương trình thì phải tuân theo thứ tự trên, ví dụ: phần khai báo

thư viện (USES) không thể đặt sau phần khai báo hằng số (CONST) hoặc sau (VAR) sau mỗi phần

khai báo phải có dấu ‘;’

- Program: Từ khoá này dùng để khai báo tên chương trình Tên chương trình phải tuân theo quy

tắc:

+ Không có ký tự trống xen giữa

+ Không đặt số ở ký tự đầu tiên

+ Trong phần tên không chứa các ký tự đặt biệt như: ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘^’,

Trang 9

- Const: Từ khoá này dùng để khai báo các hằng số sử dụng trong chương trình, khi báo hằng số

là việc cố định một vài giá trị nào đó trong chương trình thông qua tên hằng, ví dụ cách khai báohằng:

- Var: Từ khoá dùng để khai báo các biến số được sử dụng trong chương trình Biến số là các giá

trị có thể thay đổi được trong suốt quá trình chạy của chương trình Khái niệm về biến số rất quan

trọng trong việc lập trình (khái niệm này được trình bày kỹ ở bài 3) Một ví dụ về cách khai báo biến:

Var HoDem, Ten : String;

N : Integer;

Ghi chú:

- Thứ tự các khai báo trên là điều bắt buộc, ta phải nắm thứ tự này cho dù một số khái niệm tachưa được biết Trong chương trình Pascal, để tạo lời chú thích, ta sử dụng cặp dấu { } hoặc (* *)lồng các câu chú thích vào bên trong nó

- Trên một dòng có thể viết một hoặc nhiều câu lệnh Các lệnh cách nhau bằng dấu chầm phẩy

Ví dụ :

Program GioiThieu;

Begin

Writeln ( ‘Truong THCS Luong Tam‘ );

Write ( ‘Ap 3 – Luong Tam – Long My – Hau Giang‘ );

End

4 Các thao tác cơ bản khi soạn thảo chương trình

- F2: Lưu chương trình trong khi soạn thảo.

- F3: Tạo một file mới hoặc mở một file cũ.

- F9: Dịch thử chương trình để kiểm tra lỗi.

- Ctrl - F9: Chạy chương trình.

- Alt - F5: Xem kết quả chạy chương trình.

- Alt - X: Thoát khỏi màn hình soạn thảo chương trình Pascal.

Insert: Chuyển qua lại giữa chế độ đè và chế độ chèn.

Home: Đưa con trỏ về đầu dòng.

End: Đưa con trỏ về cuối dòng.

Page Up: Đưa con trỏ lên một trang màn hình.

Page Down: Đưa con trỏ xuống một trang màn hình.

Del: Xoá ký tự ngay tại vị trí con trỏ.

Back Space (): Xóa ký tự bên trái con trỏ.

Ctrl-PgUp: Đưa con trỏ về đầu văn bản.

Ctrl-PgDn: Đưa con trỏ về cuối văn bản.

Ctrl-Y: Xóa dòng tại vị trí con trỏ.

5 Các thành phần cơ bản trong phần khai báo của chương trình

a Từ khóa

Các từ khoá là các từ dùng để khai báo, đặt tên cho đối tượng trong Pascal, khi ta đặt tên cho đốitượng nào đó, không được đặt trùng tên với các từ khoá

Bảng từ khoá trong ngôn ngữ Pascal gồm:

and, array, begin, case, const, div, do, downto, else, end, file, for, function, goto, if, in, label, mod, nil, not, object, of, or, procedure, program, record, repeat, set, string, then, to, type, unit, until, uses, var, while, with

Turbo Pascal không phân biệt ký tự thường hoặc hoa Ví dụ, các cách viết sau có ý nghĩa như

nhau: Begin, BEGIN, begin, beGIN, bEGIN,

b Tên (định danh)

Trang 10

Tên (đị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ìnhcon 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, ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘^’,‘&’, ‘* ’, ‘(‘, ‘)’, ‘-‘, ‘+’, ‘/’, ‘\’, ‘.’,

’,’,.v.v

c Hằng

- Hằng là một đại lượng có giá trị không thay đổi trong suốt chương trình

- Cú pháp khai báo: CONST <Tên hằng> = <Giá trị>;

VAR x, y: Real; {Khai báo hai biến x, y có kiểu là Real}

a, b: Integer; {Khai báo hai biến a, b có kiểu integer}

6 Các thành phần cơ bản trong phần thân chương trình

a Biểu thức: Biểu thức (expression) là công thức tính toán mà trong đó bao gồm các phép toán,

các hằng, các biến, các hàm và các dấu ngoặc đơn

Ví dụ: (x +sin(y))/(5-2*x) biểu thức số học

Trong một biểu thức, thứ tự ưu tiên của các phép toán được liệt kê theo thứ tự sau:

• Dấu ngoặc ( )

• Phép toán một ngôi (NOT, -)

• Phép toán *, /, DIV, MOD, AND

• Phép toán +, -, OR, XOR

• Phép toán so sánh =, <, >, <=, >=, <>, IN

Chú ý: Một hăng, một biến, một hàm cũng được xem là biểu thức, đó là biểu thức đơn giản.

b Câu lệnh

Câu lệnh đơn giản

- Câu lệnh gán (:=): <Tên biến>:=<Biểu thức>;

- Các lệnh xuất nhập dữ liệu: READ/READLN, WRITE/WRITELN.

Câu lệnh có cấu trúc

- Câu lệnh ghép: BEGIN END;

- Các cấu trúc điều khiển: IF , CASE , FOR , REPEAT , WHILE

Lệnh xuất dữ liệu: Để xuất dữ liệu ra màn hình, ta sử dụng ba dạng sau:

(1) WRITE(<tham số 1> [, <tham số 2>, ]);

(2) WRITELN(<tham số 1> [, <tham số 2>, ]);

Các thủ tục trên có chức năng như sau:

(1) Sau khi xuất giá trị của các tham số ra màn hình thì con trỏ không xuống dòng

(2) Sau khi xuất giá trị của các tham số ra màn hình thì con trỏ xuống đầu dòng tiếp theo

(3) Xuất ra màn hình một dòng trống

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.

Trang 11

Nhập dữ liệu: Để 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.

7 BÀI TẬP:

7.1 Viết chương trình nhập 2 số nguyên x,

y Tính tổng, hiệu, tích, thương của chúng

writeln('Tong cua hai so ',x,' va

',y,' la: ', x+y);

writeln('Hieu cua hai so ',x,' va

',y,' la: ', x-y);

writeln('Tich cua hai so ',x,' va

',y,' la: ', x*y);

writeln('Thuong cua hai so ',x,'

va ',y,' la: ', x/y:5:2);

readln

end.

7.2 Viết chương trình tính tổng lương nhân

viên theo công thức sau:

BHXH Songaycong

Phucap Tigia

từ bàn phím.

program tinh_hoc_sinh_nam_nu; uses crt;

var n, k, nam, nu: integer;

writeln('So hoc sinh nam: ',nam);

writeln('So hoc sinh nu : ', nu); readln

program tinh_hoc_sinh_nam_nu; uses crt;

var n, k, nam, nu: integer;

Trang 12

writeln('So hoc sinh nam: ',

nam);

writeln('So hoc sinh nu : ', nu);

readln

end.

Trang 13

CHƯƠNG 3: CÁC KIỂU DỮ LIỆU CƠ BẢN

I KIỂU LOGIC

- Kiểu logic là kiểu biểu diễn hai trạng thái là đúng (True) hoặc sai (False) Từ khoá để khai báo cho kiểu logic là BOOLEAN.

- Các phép toán: phép so sánh (=, <, >) và các phép toán logic: AND, OR, XOR, NOT.

Trong Pascal, khi so sánh các giá trị boolean ta tuân theo qui tắc: FALSE < TRUE

Giả sử A và B là hai giá trị kiểu Boolean Kết quả của các phép toán được thể hiện qua bảngdưới đây:

b Sử dụng hàm Random(n) để lấy số ngẫu nhiên:

Hàm Random(n) sẽ trả về một giá trị nguyên mà máy lấy ngẫu nhiên có giá trị từ 0 đến n Trong đó, n

là một số kiểu Word tức là trong khoản từ 0 65535 Trước khi sử dụng hàm Random ta phải gọi thủ

tục Randomize để khởi tạo bộ tạo số ngẫu nhiên.

c Các phép toán trên kiểu số nguyên

Các phép toán số học: +, -, *, / (phép chia cho ra kết quả là số thực).

Phép chia lấy phần nguyên: DIV (Ví dụ : 34 DIV 5 = 6).

Phép chia lấy số dư: MOD (Ví dụ: 34 MOD 5 = 4).

Extended 3.4×10-4932 → 1.1×10+4932 10 byte

b Các phép toán trên kiểu số thực: +, -, *, /

Trang 14

- Trên kiểu số thực không tồn tại các phép toán DIV và MOD.

- Biến số thực có thể nhận giá trị nguyên Nhưng biến số nguyên không nhận được giá trị thực.

c Các hàm số học sử dụng cho kiểu số nguyên và số thực:

SQRT(x): Trả về căn bậc hai của x (x≥0)

ARCTAN(x): Trả về arctang(x) theo radian

TRUNC(x): Trả về số nguyên gần với x nhất nhưng bé hơn x

ROUND(x): Làm tròn số nguyên x

PRED(n): Trả về giá trị đứng trước n

ODD(n): Cho giá trị TRUE nếu n là số lẻ

IV KIỂU KÍ TỰ(Char)

* Bộ mã ASCII (American Standard Code for Information Interchange) là bộ mã ký tự được sử dụng

phổ biến, có 256 ký tự gồm các ký tự điều khiển, chữ số, chữ cái A Z và những ký tự đặc biệt khác.Hằng ký tự được biểu diễn bằng một ký tự nằm trong dấu nháy đơn (’) Ví dụ: ‘a’, ‘9’, ‘+’, …

- UPCASE(ch): Trả về ký tự in hoa tương ứng với ký tự ch Ví dụ: UPCASE('a') = 'A'.

- ORD(ch): Trả về số thứ tự trong bảng mã ASCII của ký tự ch Ví dụ ORD('A')=65.

- CHR(n): Trả về ký tự tương ứng trong bảng mã ASCII có số thứ tự là n Ví dụ: CHR(65)='A'.

- PRED(ch): cho ký tự đứng trước ký tự ch Ví dụ: PRED('B')='A'.

Trang 15

- SUCC(ch): cho ký tự đứng sau ký tự ch Ví dụ: SUCC('A')='B'.

Ví dụ: ord(‘a’) = 97; ord(‘9’) = 57; pred(‘b’) = ‘a’; succ(‘d’) = ‘e’;

Lưu ý: ‘A’ < ‘a’

- Tên kiểu: Char (Kích thước: 1 byte)

- Để biểu diễn một ký tự, ta có thể sử dụng một trong số các cách sau đây:

• Đặt ký tự trong cặp dấu nháy đơn

Ví dụ kt:='A';

Chuso:= '0';

• Dùng hàm CHR(n) (trong đó n là mã ASCII của ký tự cần biểu diễn, bảng mã ASCII có 255 kí

tự ) Ví dụ CHR(65) biễu diễn ký tự 'A'

* Các phép toán: =, >, >=, <, <=,<>

V KIỂU XÂU KÍ TỰ

- Tên kiểu: String

- Là kiểu dữ liệu chứa các giá trị là nhóm các ký tự hoặc chỉ một ký tự, kể cả chuỗi rỗng Độ dài

tối đa của một biến kiểu String là 255, tức là nó có thể chứa tối đa một dãy gồm 255 ký tự

Cú pháp khai báo:

Var Biến1, Biến2, Biếnn: String; (1)

Var Biến1, Biến2, Biếnn: String [30]; (2)

Cách khai báo (1) sẽ cho phép biến HoTen nhận tối đa 255 ký tự Cách (2) cho phép biến HoTen nhận tối đa 30 ký tự.

Ghi chú: Cách sử dụng kiểu dữ liệu String sẽ được trình bày chi tiết Chương 5.

write('Ma ASCII cua ky tu ',

kytu, ' la: ', ord(kytu));

readln

end.

2 Viết chương trình nhập vào một số

nguyên dương In ra màn hình số vừa nhập

và chữ cái tương ứng với nó trong bảng mã ASCII.

CHƯƠNG 4: CÁC CÂU LỆNH CÓ CẤU TRÚC

I LỆNH GHÉP:

Lệnh ghép là một nhóm các câu lệnh được đặt giữa hai từ khoá BEGIN và END.

Lệnh ghép được thực hiện bằng cách thực hiện tuần tự các câu lệnh nằm giữa

Trang 16

Dạng thiếu: IF <Điều kiện> THEN <Câu lệnh>

Dạng đủ: IF < Điều kiện> THEN < Câu lệnh 1> ELSE < Câu lệnh 2>;

Giải thích lệnh: Khi gặp lệnh này máy kiểm tra < Điều kiện> nếu biểu thức này có giá trị TRUE

(tức là đúng như điều kiện đặt ra) thì máy thực hiện <câu lệnh1> nếu ngược lại, tức <biểu thức logic> có giá trị FALSE thì <câu lệnh 2> được thực hiện Trường hợp trong câu lệnh không có phần ELSE và <biểu thức logic> có giá trị FALSE thì <câu lệnh> không được thực hiện và máy chuyển

đến câu lệnh kế sau lệnh IF đó.

Chú ý: Trước từ khóa ELSE không đựơc có dấu ‘;‘ Trường hợp có câu lệnh ghép đựơc đặt kế

trước ELSE thì từ khoá END trước ELSE không được đặt dấu ‘;‘.

Ví dụ 1: Chương trình nhập từ bàn phím 2 số nguyên a, b Kiểm tra và cho biết số nào lớn hơn.

Var a, b : Integer;

Begin

Write( ‘ Nhap so a: ‘ ); Readln(a);

Write( ‘ Nhap so b: ‘ ); Readln(b);

If a > b then Write( ‘ So lon hon la ‘, a) { tại vị trí này không được đặt dấu; }

Else Write( ‘ So lon hon la ‘, b);

Readln;

End

Ví dụ 2: Viết chương trình kiểm tra trong ba số a, b, c được nhập từ bàn phím, số nào là lớn nhất.

Var a, b, c, max : Integer;

Begin

Write( ‘ Nhap so a: ‘ ); Readln(a);

Write( ‘ Nhap so b: ‘ ); Readln(b);

Write( ‘ Nhap so c: ‘ ); Readln(c);

Max := a;

If max < b thenMax := b;

If max < c then Max := c;

Write( ‘ So lon hon la ‘, max);

Trang 17

 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ê.

 Hằng 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 Hằng i thì máy sẽ thực hiện lệnh Si tương ứng

- Ngược lại:

+ Đối với dạng 1: Không làm gì cả

+ Đối với dạng 2: thực hiện lệnh Sn+1

Ví dụ: Viết chương trình nhập vào một điểm kiểm tra từ bàn phím và in kết quả xếp loại: loại Yếu

(dưới 5 điểm), loại Trung bình (5, 6 điểm), loại Khá (7, 8 điểm), loại Giỏi (9, 10 điểm).

Var Diem : Byte;

Begin

Write( ‘ Nhap diem : ’);

Readln(Diem);

Case Diem of

0 4 : Write( ‘ Xep loai yeu ‘ );

5 6 : Write( ‘ Xep loai Trung binh ‘ );

7 8 : Write( ‘ Xep loai Kha ‘ );

9 10: Write( ‘ Xep loai Gioi ‘ );

Trường hợp để giải quyết bài toán nào đó mà ta cần phải lặp đi lặp lại một công việc nào đó thì ta

sẽ cần đến lệnh lặp Số bước lặp có thể xác định hoặc không xác định Trong ngôn ngữ Pascal có ba

câu lệnh lặp là FOR, REPEAT, WHILE Nếu số vòng lặp xác định thì ta sử dụng lệnh FOR còn vòng lặp không xác định thì ta sử dụng lệnh REPEAT hoặc WHILE Tất cả các loại lệnh lặp phải có điểm

dừng, cho dù đó là loại xác định hay không xác định

1 Vòng lặp xác định (For)

a Dạng tiến:

Cú pháp: FOR <Biến> := <giá trin Min> TO <giá trị max> DO < Câu Lệnh >;

<Biến> trong cấu trúc FOR gọi là biến điều khiển Kiểu của biến điều khiển là kiểu số nguyên,

<giá trin Min>, <giá trị max> phải là kiểu vô hướng đếm được (số nguyên, kí tự…).

Giải thích sự hoạt động lệnh FOR dạng tiến:

B1: Đầu tiên, Biến nhận giá trị của biểu_ thức1.

B2: Máy kiểm tra Biến có nhỏ hơn hoặc bằng biểu_ thức2 hay không tức là xét điều kiện (Biến <=

Biểu_ thức2) ?

Trang 18

B3: Nếu điều kiện trên là sai thì máy thoát khỏi vòng lặp FOR để thực hiện các lệnh kế tiếp sau vòng lặp FOR Nếu điều kiện trên là đúng thì <Lệnh> được thực hiện, sau đó, Biến được tăng một

giá trị và quay trở lại bước (2)

Lưu ý: Số lần lặp tính bằng công thưc : <giá trị Max> - <giá trin Min> + 1

b Dạng lùi:

Cú pháp: FOR <Biến> := <giá trin Max> DOWNTO <giá trin Min> DO <Câu lệnh>

Giải thích sự hoạt động lệnh FOR dạng lùi:

B1: Đầu tiên, Biến nhận giá trị của biểu thức1.

B2: Máy kiểm tra Biến có lớn hơn hoặc bằng biểu thức2 hay không tức là xét điều kiện (Biến >=

- Các Biểu thức1 và Biểu hức2 được ước lượng trước khi vào vòng lặp, do đó số vòng lặp không bị

thay đổi Ta có thể lợi dụng tính tăng hoặc giảm của biến điều khiển để gán giá trị của nó cho bất kỳbiến nào hoặc thực hiện công việc nào đó có tính chất tăng hoặc giảm

2 Vòng lặp không xác định

Repeat S;

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.

UNTIL < Biểu thức logic >;

Giải thích sự hoạt động lệnh REPEAT:

Đầu tiên, thực hiện lần lượt các lệnh <Lệnh 1>, <Lệnh 2>, , <Lệnh n>, sau đó kiểm tra < Biểu

thức logic > Nếu < Biểu thức logic > nhận giá trị FALSE thì lại quay lên đầu vòng lặp thực hiện tiếp

<Lệnh 1>, <Lệnh 2>, , <Lệnh n> Nếu <Biểu thức logic > nhận giá trị TRUE thì máy thoát khỏi

vòng lặp Như vậy, các lệnh nằm giữa REPEAT UNTIL được thực hiện ít nhất một lần.

Chú ý:

- Các lệnh nằm giữa REPEAT và UNTIL không có từ khoá Begin và End.

- Trong vòng lặp phải có lệnh nào đó làm thay đổi giá trị một biến trong <Biểu thức logic> nhằm

làm dừng vòng lặp, nếu không vòng lặp sẽ chạy mãi không ngừng dẫn đến treo máy

Ví dụ: Chương trình yêu cầu nhập vào một mật khẩu là ‘ttthcn’ thì mới thoát khỏi chương trình.

Trang 19

Write( ‘ Ban da nhap dung mat khau ! ‘ );

Delay(1000);

Readln;

End

Giải thích lệnh: Delay(1000): Thủ tục Delay(n) là thủ tục của Unit CRT tức là dừng một khoản

thời gian là 1000 xung nhịp của máy, vì vậy, tùy theo tốc độ của máy mà có khoản thời gian thực

dừng lại khác nhau

b Câu lệnh While:

Cú pháp:

WHILE < Biểu thức logic > DO < Lệnh >;

Giải thích lệnh: Gặp lệnh này trước tiên máy kiểm tra < Biểu thức logic >, nếu nó có giá trị TRUE

thì thực hiện < Lệnh > và sau đó quay lại kiểm tra < Biểu thức logic > và quá trình cứ tiếp tục như vậy Nếu < Biểu thức logic > nhận giá trị FALSE thì máy lập tức thoát khỏi vòng lặp Như vậy lệnh

WHILE dùng để lặp đi lặp lại một công việc trong khi điều kiện còn được thỏa mãn.

Ghi chú: Nếu ngay từ khi mới vào vòng lặp mà thấy điều kiện không được thỏa mãn, máy tự động

thoát ngay mà không thực hiện < Lệnh > bên trong vòng lặp.

Ví dụ: Chương trình tìm ước số chung lớn nhất của hai số nguyên.

Var a, b, r : Integer; tl : Char;

Writeln( ‘ Uoc so chung lon nhat la ‘ , a );

Write( ‘ Ban tim USCLN nua khong (C/K) ? );

Readln(tl);

Until Upcase(tl) = ‘K’;

End

IV BÀI TẬP:

1 Viết chương trình nhập số nguyên dương

X, in kết quả cho biết X có chia hết cho 3

hoặc 7 hay không?

10 ≥ Điểm trung bình ≥ 9: Xuất sắc.

9 > Điểm trung bình ≥ 8 : Giỏi.

8 > Điểm trung bình ≥ 7 : Khá.

7 > Điểm trung bình ≥ 5 : Trung bình.

5 > Điểm trung bình ≥ 0 : Yếu.

Lưu ý: Cho phép nhập điểm trung bình ở

dạng số thực, điểm nhập vào phải thoả [0 10] nếu nhập ngoài giới hạn thì thông báo “Điểm trung bình nhập không hợp lệ!”

và bỏ qua không so sánh.

program in_xep_loai;

Trang 20

var dtb: real; xeploai: String;

xeploai := 'Trung binh'

else xeploai := 'Yeu';

write('Xep loai: ', xeploai);

end

else write('Diem trung binh

khong hop le!');

136

115

94

73

52

Trang 21

repeat

clrscr;

write('Nhap so so hang can

tinh tong: '); readln(n);

Mảng (Array) là một kiểu dữ liệu có cấu trúc bao gồm một số cố định các thành phần có cùng

kiểu, có cùng một tên chung Các thành phần của mảng được truy xuất thông qua các chỉ số

Ví dụ: Mảng A gồm năm phần tử: A[1]=7, A[2]=9, A[3]=0, A[4]= -2, A[5]=3:

Công dụng của mảng là dùng để lưu trữ một dãy số liệu có cùng một tính chất nào đó Ví dụ: cácđiểm kiểm tra một môn học nào đó của một học sinh, các giá trị của một dãy số được nhập từ bànphím

II KHAI BÁO MẢNG

- Kiểu phần tử là kiểu dữ liệu của mỗi phần tử trong mảng (Integer, real, string, …).

- 1 n là danh sách các chỉ số để truy cập đến các thành phần của mảng.

Ví dụ:

Var ch : Array[0 25] of Char;

Th : Array[-2 4] of Real;

b Truy cập câc phần tử của mảng:

Việc truy nhập vào một phần tử nào đó của biến mảng được thực hiệnh qua tên biến mảng, theo

sau là giá trị chỉ số đặt trong dấu [ ].

Trang 22

Write( ‘ Trung binh cong cua day so = ‘ , s / n : 0 : 4 );

b Truy cập câc phần tử của mảng:

Số phần tử của mảng số thực B là 3 x 3 = 9 (phần tử), sắp đặt trong bộ nhớ theo thứ tự như sau:

B[1, 1] B[1, 2] B[1 ,3]

B[2, 1] B[2, 2] B[2 ,3]

B[3, 1] B[3, 2] B[3 ,3]

Chú ý: Mảng hai chiều còn gọi là ma trận Trong ví dụ trên, B là ma trận cấp 3x 3 Trong mảng

hai chiều, chỉ số sau truy cập nhanh hơn chỉ số trước Để truy cập đến phần tử hàng thứ i, cột thứ j của mảng hai chiều B ta dùng cách viết: B[ i ][ j ] hoặc B[ i , j ]

For i := 1 to m do Sum := sum + a[ i, j ];

Write( ‘ Tong cot ‘ , j ,’ = ‘ , sum : 0 : 5 );

End;

For i := 1 to m do

Begin

sum := 0;

For j := 1 to n do Sum := sum + a[ i, j ];

Write( ‘ Tong hang ‘ , i ,’ = ‘ , sum : 0 : 5 );

End;

Readln;

END

3. BÀI TẬP:

Trang 23

1 Viết chương trình nhập vào một dãy số,

sau đó xuất ra màn hình dãy số được sắp

xếp tăng dần.

program day_so;

uses crt;

type arr = array [1 20] of integer;

var a: arr; n: byte;

procedure nhap_day_so (var a: arr; var n:

a[i] := a[i] + a[j];

a[j] := a[i] - a[j];

a[i] := a[i] - a[j];

type arr = array[1 20] of integer;

var a: arr; n: byte;

procedure nhap_day_so (var a: arr; var n:

Trang 24

writeln('So nguyen lon nhat la:

3 Viết chương trình nhập vào một dãy số,

kiểm tra xem dãy số đó có phải là dãy số

tăng dần hay không?

program day_so;

uses crt;

type arr = array[1 20] of integer;

var a: arr; n: byte;

procedure nhap_day_so (var a: arr; var n:

while a[i] <= a[i+1] do inc(i);

if i = n then kiem_tra := true

else kiem_tra := false;

type matrix = array [1 5,1 5] of byte;

var a: matrix; n: byte;

procedure input_matrix (var a: matrix; var n:

if a[i][j] <> a[j][i] then test := false;

symmetrical_matrix := test;

end;

function unit_matrix (a: matrix; n: byte):

boolean;

Trang 25

var i, j :byte; test: boolean;

writeln('This is a symmetrical matrix.')

else writeln('This is not a symmetrical

matrix.');

if unit_matrix(a, n) then

write('This is a matrix unit.')

else write('This is not a matrix unit.');

readln

end.

Trang 26

CHƯƠNG 6: XÂU KÝ TỰ (STRING)

I KHAI BÁO KIỂU STRING

Xâu (String) là kiểu dữ liệu có cấu trúc dùng để xử lý các xâu ký tự Kiểu String có nhiều điểm tương tự như kiểu mảng (Array) nhưng cũng có điểm khác nhau là: số ký tự trong một biến kiểu xâu

có thể thay đổi còn số phần tử của kiểu mảng luôn cố định

Cú pháp: VAR Tên biến : STRING[Max];

Trong đó Max là số ký tự tối đa có thể chứa trong chuỗi (Max ∈ [0,255]) Nếu không có khai báo[Max] thì số ký tự mặ mặc định trong chuỗi là 255

Ví dụ: Var Name : String[50];

St : String; {St có tối đa là 255 ký tự}

II TRUY XUẤT DỮ LIỆU KIỂU STRING

Muốn in một xâu ký tự ta dùng lệnh Write(St) hoặc Writeln(St).

Lệnh Readln(St) sẽ đọc các ký tự cho xâu St với độ dài thực sự là số ký tự gõ vào từ bàn phím Nếu ta gõ < Enter > luôn mà không nhập cho nó ký tự nào thì St là xâu rỗng.

Đại lượng bên phải của lệnh phải được đặt giữa hai dấu nháy đơn nếu đó là xâu ở dạng hằng Ta có

thể sử dụng dấu cộng (+) để ghép các xâu khi gán Ví dụ:

HoTen:= ‘Huynh Ngoc‘ + ‘ Nhan‘;

‘ABC’ = ‘ABC’ có giá trị True.

‘ABC’ = ‘AB’ có giá trị là False.

‘ABCD’ < ‘ABED’ có giá trị là True.

‘ABC’ > ‘AD’ có giá trị là False.

IV CÁC THỦ TỤC VÀ HÀM VẾ XÂU KÝ TỰ

1 Các thủ tục:

a Delete(St , Pos, Num):

Trong đó: - St (String): Biến kiểu String.

- Pos (Position): Biến kiểu nguyên.

- Num (Number): Biến kiểu nguyên.

Trang 27

Công dụng: Thủ tục này dùng để xóa khỏi xâu St một số Num ký tự bắt đầu từ vị trí thứ Pos.

Ví dụ: Nếu St = ‘ABCDEFG’; thì:

Delete(St, 2, ); ð làm cho St = ‘AFG’.

Delete(St, 2, 10); ð làm cho St = ‘A’.

Delete(St, 9, 3); ð làm cho St = ‘ABCDEFG’.

b Insert(St2, St1, Pos):

Trong đó: - St2 và St1: Biến kiểu String.

- Pos: Biến kiểu nguyên.

Công dụng: Thủ tục này dùng để chèn xâu St2 vào xâu St1 ở vị trí Pos

Ví dụ:

Nếu St := ‘ABCD’ thì sau lệnh Insert(‘TFG’, St, 3) ta nhận được St := ‘ABTFGCD’ Trường hợp

Pos vượt quá chiều dài của St1 thì St2 sẽ được nối đuôi vào St1 Ví dụ: St = ‘ABCD’ , vậy lệnh Insert(‘TFG’, ST, 9); sẽ làm cho St = ‘ABCDTFG’.

c Str(Value, St):

Trong đó: - Value: Là một biểu thức nguyên hay thực có ghi dạng in ra.

- St: Biến kiểu String.

Công dụng: Thủ tục này dùng để đổi giá trị số Value thành kiểu xâu rồi gán cho St.

d Val(St, Var, Code):

Trong đó: - St: Biểu thức kiểu String.

- Var: Là biến kiểu nguyên hay thực.

- Code: Biến kiểu nguyên.

Công dụng: Thủ tục này đổi xâu chữ St (biểu diên ở dạng số nguyên hay thực) thành số và gán cho biến Var Code là biến nguyên dùng để phát hiện lỗi: nếu phép biến đổi đúng thì Code có giá trị 0, nếu sai do St không biểu diễn đúng số nguyên hay thực thì Code sẽ có giá trị bằng vị trí của ký tự sai trong xâu St

Giả sử: St := ‘234’ , i và e là hai biến nguyên.

Val(St, i, e); { cho ta i = 234 và e = 0 }

Nếu St := ‘21x’ thì Val(St, i, e) {cho ta i không xác định và e=3, tức là ký tự thứ ba gây ra lỗi}

2 Các hàm:

a Length(St):

Cho ta độ dài của biểu thức xâu ký tự St Ví dụ: với St = ‘’ABCDEFG’ thì Length(St) sẽ trả về giá trị 7.

b Copy(St, Pos, Num):

Trong đó: - St: Biểu thức kiểu xâu ký tư.

- Pos,Num: Biểu thức kiểu nguyên.

Hàm này trả về cho ta một xâu mới từ xâu St, hàm bắt đầu chép từ vị trí Pos và chép Num ký tự.

Ví dụ: St = ‘ABCDEF’ thì lệnh Copy(St, 3, 2) = ‘CD’ và Copy(St,4, 10) cho ta ‘DEF’.

Ghi chú:

- Nếu Pos + Num > Length(St) thì hàm sẽ trả về các ký tự trong xâu St.

- Nếu Pos > Length(St) thì hàm Copy sẽ trả về cho ta một xâu rỗng.

c Concat(St1, St2, , Stn):

Hàm này dùng để ghép tất cả các xâu ký tự St1, St2, ,Stn thành một xâu theo thứ tự các đối số

cung cấp cho hàm

Ghi chú:

- Số lượng đối của hàm Concat phải >= 2.

- Nếu tổng số chiều dài các xâu > 255 thì máy sẽ báo lỗi.

Trang 28

- Có thể dùng phép cộng (+) để ghép xâu ký tự Ví dụ: St :=Concat(St1,St2 +’N’);

d Pos(St1, St2):

Trong đó: St1, St2 là biểu thức xâu ký tự.

Hàm này trả về số nguyên biểu diễn vị trí đầu tiên của St1 gặp trong xâu St2 Nếu không tìm thấy thì Pos = 0.

Ví dụ: nếu St := ‘ABCDEFGBCD’ thì Pos(‘DE’,St) = 4, Pos(‘BCD’,St) = 2, Pos(‘XY’,St) = 0.

3.BÀI TẬP:

1 Viết chương trình nhập vào một chuỗi,

tách và in ra từ cuối cùng trong chuỗi.

Ví dụ: Nhập vào Nguyễn Thị Thu Điểm

function layten(ht: string): string;

var ten: string;

ten := copy(ht, vt+1, length(ht)-vt);

layten := ten; end;

3 Viết chương trình nhập vào hai chuỗi ký

tự a và b Mỗi chuỗi tối đa 9 ký tự (nếu

chuỗi nào có số ký tự quá 9 thì chỉ lấy 9 ký

tự đầu tiên) Kiểm tra, nếu hai chuỗi tương

ứng với hai giá trị số nguyên thì xuất ra kết

quả so sánh của hai số a, b đồng thời tính

tổng, hiệu của hai số đó; Ngược lại, xuất ra

kết quả so sánh của hai chuỗi a, b và ghép

chúng tạo thành chuỗi mới.

program bai4;

uses crt;

var chuoi1, chuoi2: string;

procedure nhapchuoi( var st1: string;

var st2: string); begin

write('Nhap chuoi thu nhat: ');

readln(chuoi1);

write('Nhap chuoi thu hai: ');

readln(chuoi2); End;

procedure xulychuoi(st1, st2: string);

var so1, so2: longint;

code1, code2: integer;

val(st1, so1, code1);

val(st2, so2, code2);

if (code1 = 0) and (code2 = 0) then begin

if so1 < so2 then

writeln(so1, ' be hon ', so2)

else

if so1 > so2 then

writeln(so1, ' lon hon ', so2)

else

writeln(so1, ' bang ', so2);

writeln('Tong hai so: ', so1+so2);

writeln('Hieu hai so: ', so1-so2);

end else begin

Trang 29

1 Khai báo

……

End;

Ví dụ 1: Khai báo biến hs thuộc kiểu dữ liệu hocsinh (họ tên, lớp, điểm trung bình)

Ví dụ 2: Khai báo biến ngaysinh thuộc kiểu Date mô tả ngày, tháng, năm riêng biệt.

1 Viết chương trình cho phép nhập họ tên,

điểm toán, lý, hoá của tối đa 50 học sinh.

Tính điểm trung bình của từng học sinh

Trang 30

theo hệ số lần lượt là 2,1,1 Sau đó, in kết

quả ra màn hình.

program dshs;

uses crt;

const space = ' 20 khoảng trống ';

type hocsinh = record

hoten: String;

toan, ly, hoa, dtb : real;

end;

arr = array [1 20] of hocsinh;

var hs: arr; n: byte;

procedure nhaphs (var a: arr; var sohs: byte);

write(i:3, ' ', copy(hoten + space, 1, 25),

toan:5:1, ly:6:1, hoa:6:1);

a) Đưa ra danh sách các cuốn sách của nhà xuất bản Giáo dục.

b) Tính tổng số tiền sách.

c) Sắp xếp danh sách theo năm xuất bản giảm dần và ghi kết quả ra màn hình.

d) In ra màn hình các cuốn sách có giá tiền<=10.000đ và xuất bản sau năm 2000.

HƯỚNG DẪN

Mô tả mỗi cuốn sách là một bản ghi, các thôngtin về nó (tên sách, tên tác giả,…) là các trường Danh sách cuốn sách sẽ là một mảng các bản ghi

Khai báo kiểu dữ liệu mô tả sách như sau:type

sach = record ten : string[30]; {tên sách}

nxb : string[20]; {tên Nhàxuất bản}

namxb : integer; {năm xuất bản} soluong : integer; {số lượng}

gia : real; {giá tiền}

Nhập dữ liệu: ta nhập tên sách trước Nếu tên

sách là xâu rỗng thì đừng nhập, ngược lại lần lượt nhập các thông tin khác:

procedure nhap;

var t : string;

begin ClrScr;

writeln('NHAP THONG TIN VE CACCUON SACH');

Trang 31

writeln('(nhap ten sach la xau rong neu

write('So luong: ');readln(soluong);

write('Gia tien: ');readln(gia);

end;

until false;

end;

Câu a: ta sẽ duyệt qua toàn bộ danh sách các

cuốn sách, kiểm tra nếu tên nhà xuất bản là

Giáo dục thì in ra tất cả các thông tin của cuốn

Câu b: ta cũng duyệt qua toàn bộ các cuốn

sách, nhân số lượng và giá tiền rồi cộng dồn vào một biến tổng Sau đó in ra biến tổng đó:procedure tinh;

var i : integer;

tong : real;

begin tong := 0;

for i := 1 to n do with ds[i] do tong := tong + gia *soluong;

writeln('TONG GIA TRI CUA TAT CACAC CUON SACH:', tong:0:3);

end;

Câu c: Sắp xếp danh sách giảm dần theo năm

xuất bản bằng phương pháp nổi bọt (2 vòng

for) Chú ý biến trung gian trong đổi chỗ phải

có kiểu sach thì mới gán được.

procedure sxep;

var i,j : integer;

tg : sach;

begin for i := 1 to n do for j := i + 1 to n do

if ds[i].namxb < ds[j].namxb thenbegin

tg := ds[i]; ds[i] := ds[j]; ds[j] := tg; end;

for i:=1 to n do with ds[i] do begin writeln('Ten:',ten);

writeln('Nam xuat ban:',namxb);

Ngày đăng: 23/09/2020, 07:35

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w