77

thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

Embed Size (px)

Citation preview

Page 1: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu
Page 2: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

Tiãút 39. KIÃØU XÁU I. Mục đích – Yêu cầu

1. Mục đích:Đưa ra khái niệm về kiểu dữ liệu xâu.HS làm quen với kiểu dữ liệu xâu.Giới thiệu một số thủ tục thao tác trên xâu.

2.Yêu cầu:HS nắm được thế nào là xâu ký tự, cách khai báo.Nắm được các thủ tục thao tác trên xâu.

II. Phương pháp giảng dạySử dụng phương pháp đặt vấn đề, gợi ý, đàm thoại, hướng dẫn.

III. Các bước lên lớpỔn định lớp:

Nắm sĩ số và tình hình của lớp.Kiểm tra bài cũ:Nội dung bài mới:

Đặt vấn đề: Chúng ta thường sử dụng các câu chữ để diển đạt ý của mình lên giấy, có thể viết bằng tay, có thể dùng máy vi tính để soạn thảo. Như vậy máy tính cho phép chúng ta viết các từ, các câu như cách chúng ta viết lên giấy. Thế máy tính đã làm như thể nào để có được chức năng như vậy. Để tìm hiểu về vấn đề này chúng ta sẽ bắt đầu tìm hiểu về kiểu DL xâu, đó là một kiểu dữ liệu có cấu trúc cũng tương tự như kiểu DL mảng một chiều.

Tg

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

1. Khai báo kiểu DL xâu.Khái niệm kiểu DL xâu.- Xâu là một dãy các ký trong bảng mã ASCII, liên hệ với nhau qua tên xâu.- Ví dụ: S: = ‘Phu loc’;

Độ dài xâu.- Độ dài xâu là số ký tự của xâu.Ví dụ: Độ dài xâu S ở ví dụ trên là 12.

- Tương tự như vậy HS liên hệ xâu khác. - Khi viết một hằng xâu cần đặt trong dấu ‘’.

S1: = ‘ABCD’;S2: = ‘Lop 11D’;

Page 3: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

Khai báo biến kiểu xâu:- Cú pháp:VAR <tên biến>: STRING [độ dài lớn nhất của xâu];

Ví dụ: Var S: String[25];- Chú ý: Nếu muốn khai báo một xâu có độ dài 255 thì có thể không cần khai báo độ dài lớn nhất của xấu. Lúc này ta chỉ cần viết: Var S: String;

-Để khai báo báo kiểu dữ liệu xâu, TP sử dụng tên dành riêng STRING tiếp theo độ dài lớn nhất (không vượt quá 255) được ghi trong cặp ngoặc [ ].- Các em cho hãy biết muốn khai báo một xâu có độ dài 255 ký tự thì làm thế nào? - Nhận xét câu trả lời của HS.

Var S: String[255];

Nhập, xuất giá trị của một biến xâu:- Nhập xâu, sử dụng lệnh: read hoặc readln. Ví dụ: read (S) hoặc readln (S).- Nhập xâu, sử dụng lệnh: Ví dụ: write hoặc writeln. Ví dụ: write(S) hoặc writeln(S).

Tham chiều đến phần tử trong xâu.- Cú pháp: <tên biến xâu>[<chỉ số>]- Ví dụ: st[5], nếu st:= ‘Lop 11’ thì st[5] = ‘1’. st[7] sẽ ra một mã ASCII nào đó.

- Trước khi đi vào tìm hiều các thao tác xử lý xâu chúng ta thử xem qua cách tham chiều các phần tử của xâu.

- Chú ý: Các ký tự trong xâu được đánh số thứ tự từ 1.- Dựa vào khái niệm xâu đã học các em cho biết phần tử của xâu có kiểu gì?- Nhận xét, và bổ sung cho câu trả lời (nếu cần).

- Kiểu ký tự.

- Bây giờ chúng ta sẽ tìm hiểu các thao tác xử lý trên xâu.

2. Các thao tác xử lý xâu.a. Phép ghép xâu.- Sử dụng toán tử ‘+’: S1+S2+…+Sn. trong đó S1, S2,…, Sn là một biến xâu, một hằng xâu.-Ý nghĩa: Ghép nhiều xâu thành

một xâu.

Page 4: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

- Ví dụ: ‘Lop’ +‘ 11’ + ‘ D’ KQ: ‘Lop 11 D’.b. Các Phép so sánh.- Có các phép so sánh: =, <>, <, >, <=, >=.- Ví dụ: ‘Lop 11’ < ‘Lop 11 HBT’- Hai xâu có độ dài bằng nhau nếu chúng giống nhau hoàn toàn. Ví dụ: ‘Lop 11’ = ‘Lop 11’.c. Thủ tục chuẩn Delete.- Cú pháp: DELETE(st, vt, n); Trong đó: st là xâu kí tự, vt và n là biểu thức nguyên.- Ý nghĩa: Xóa n kí tự của xâu st bắt đầu từ vị trí vt.- Ví dụ: st: = ‘abcdef’; Delete(st,2,3); Kq: ‘aef’

- Cho HS lấy ví dụ.- Giả sử có xâu s:= ‘Truong HBT’, làm thế nào để được xâu s:= ‘Truong’

- delete(st,1,4);KQ: ‘ef’- delete(s,7,4);- delete(s,8,4);.

d. Thủ tục Insert.- Cú pháp: INSERT(s1, s2, vt); Trong đó: s1, s2 là xâu kí tự, vt là biểu thức nguyên.- Ý nghĩa: Chèn xâu s1 vào xâu s2 bắt đầu từ vị trí vt.- Ví dụ: s1: = ‘Lop 11’; s2: = ‘⊔truong HBT’; insert(s1,s2,1); Kq:‘Lop 11 truong HBT’.

- HS liên hệ lấy ví dụ.- Giả sử có xâu s1:= ‘⊔HBT’; s2:= ‘Truong’;Vậy làm thế nào để được xâu ‘Truong HBT’

- Insert(s2,s1,1);

Cũng cố.Yêu cầu học sinh: HS nắm khái niệm về xâu ký tự, cách khai báo xâu, cách xuất nhập

biến xâu. Nắm vững cú pháp và ý nghĩa của thủ tục DELETE và INSERT. Đọc trước các hàm xử lý xâu tiếp theo trong sách giáo khoa ở mục 2 và các ví dụ ở mục 3 để chuẩn bị cho tiết tiếp theo.

Page 5: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

Tiết 24. Time Nội dung bài giảng Hoạt động GV Hoạt động HS

§2. KIỂU DỮ LIỆU XÂU 6. Hàm Copy: - Cú pháp: Copy(st, pos, num) - Công dụng: Hàm cho kết quả là một xâu gồm num kí tự được lấy bắt đầu từ vị trí pos trong xâu st.ví dụ 1: st := ‘Tin hoc van phong’; write(Copy(st, 5, 7); ‘hoc van’ ví dụ 2: st := ‘Phu loc’; delete(st, 3, 3); write(copy(st, 5, 5); loc 7. Hàm Pos: - Cú pháp: Pos(st1, st2) - Công dụng: Hàm cho kết quả là một số nguyên dương là vị trí xuất hiện đầu tiên của xâu st1 trong xâu st2.ví dụ: st := ‘ab’; st1 := ‘efadbabeabcabn’; write(Pos(st, st1)); 6III. Ví dụ: 1) Ví dụ 1: (Xem ví dụ 2, Sgk/72) Viết chương trình nhập vào một xâu, in ra màn hình kí tự đầu có trùng với kí tự cuối hay không? Input: một xâu bất kỳ Outpt: Trả lời trùng nhau hay không trùng nhau. Hướng dẫn: sử dụng hàm length. Ví dụ: ‘edge’+ Lấy kí tự ở vị trí đầu tiên st[1]+ Lấy kí tự ở vị trí cuối cùng st[length(st)]

Var st: string;Begin Write(‘Nhap xau st: ‘);

Readln(st); If st[1] = st[length(st)] then

write(‘trung nhau’) Else write(‘khong trung nhau’);End.

Ví dụ 2: Nhập vào một xâu kí tự, in ra màn hình xâu đó có phải là Palindrom hay không. ‘ABCBA’ xâu Palindrom ‘ABCCA’ không phải là xâu PalindromHD: Dùng 2 biến chạy i, j để so sánh các kí tự nằm đối xứng nhau trong xâu cho đề khi i = j.Ví dụ 3: Viết chương trình nhập vào

Page 6: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

một xâu, in ra màn hình mỗi từ trên mỗi dòng. (Các từ cách nhau bởi khoảng trắng).Chẳng hạn : st := ‘Tin hoc van phong’; In ra trên màn hình :

Tinhocvan phong

Cũng cố.Yêu cầu học sinh: HS nắm khái niệm về xâu ký tự, cách khai báo xâu, cách xuất nhập

biến xâu. Nắm vững cú pháp và ý nghĩa của thủ tục DELETE và INSERT. Đọc trước các hàm xử lý xâu tiếp theo trong sách giáo khoa ở mục 2 và các ví dụ ở mục 3 để chuẩn bị cho tiết tiếp theo.

Page 7: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

BAÌI THÆÛC HAÌNH 3 (tiết 27, 28)

I. Mục đích – Yêu cầu.1. Mục đích.- Giúp HS thành thạo trong sử dụng kiểu dữ liệu xâu.- Khi đã sử dụng thành thạo kiểu dữ liệu xâu HS nắm vững hơn về kiểu dữ liệu mảng

một chiều nói riêng và kiểu dữ liệu có cấu trúc nói chung.- Thông qua những ví dụ, bài tập được sửa, HS có thể nắm được phương pháp giải

quyết các bài toán thực tế như: Tìm số lượng các từ thỏa mãn điều kiện nào đó.2. Yêu cầu.- Nắm được cách khai báo một biến xâu, sử dụng được các thủ tục và hàm xử lý xâu. - HS tự làm bài tập hoặc tham gia làm bài tập về nhà.

II. Phương pháp giảng dạy.- Chủ yếu sử dụng phương pháp đàm thoại, gợi mở để HS tìm ra phương pháp giải bài

tập (giải thuật), hướng dẫn HS cài đặt chương trình, hiệu chỉnh chương trình.

III. Các bước lên lớp. (10’)3. Ổn định lớp.- Nắm sĩ số và tình hình của lớp.4. Kiểm tra bài cũ.- Cho biết cú pháp khai báo một biến kiểu xâu. Giải thích các thành phần trong câu

lệnh, cho hai ví dụ về khai báo biến xâu.+ Đáp án: Var <tên biến>:String[độ dài tối đa của xâu];

Ví dụ: var hoten:string[30]; diachi:string[40];

+ Thang điểm: Phần khai báo đúng được 5 điểm, mỗi ví dụ đúng được 2 điểm.- Cho biết cách truy xuất (làm việc) đến từng phần tử của xâu? Giả sử có xâu:

St:= ‘Lop 11A’; viết lệnh in ra màn hình ký tự thứ 2 và ký tự cuối của xâu st. + Đáp án: <tên biến>[chỉ số].

write(st[2]); write(st[7]); Câu hỏi phụ: Có thể viết cách khác tổng quát để in ký tự cuối không?

+ Thang điểm: Cách truy xuất 4 điểm, hai câu lệnh in 6 điểm.- Nhận xét, cho điểm.5. Nội dung bài mới.

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

15’ Bài 1: Xâu Palindrom.Đề: Hãy nhập từ bàn phím một xâu, đưa ra màn hình xâu đó có phải là xâu Palindrom hay không.

Input:Output:

- Em nào cho thầy biết dữ liệu vào và dữ liệu ra của bài?- Nhận xét câu trả lời của HS, sau đó ghi lên bảng intput và output.

HS trả lới:- In: Một xâu ký tự.- Out: True/False.

Page 8: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

- Ví dụ: ‘ABCBA’ là một xâu Palindrom.

- ‘AbCCbA’ và ‘aBBCa’

- S = ‘ABCBA’, hình ảnh của xâu S:

ABCBA54321

Trong đó: S[1] = S[5] = S[length(s)] S[2] = S[4] = S[length(s)-1]

- S:= ‘AbCCbA’:

AbCCbA654321

Ta có:- S[1] = S[length(s)]- S[2] = S[length(s)-1]- S[3] = S[length(s)-2]Phần tử 1 và 6, phần tử 2 và 5, phần tử 3 và phần tử 4 được gọi là các cặp phần tử đối xứng.

- Bây giờ chúng ta hãy xem, thế nào là một xâu Palindrom.- Xâu trên bảng là một xâu Palindrom, vậy em nào có nhận xét gì về dạng của xâu đó không?- Câu hỏi mở: Các em thấy gì về sự tương quan giữa phần tử đầu và phần tử cuối của xâu, phần tử thứ hai và kế cuối?

- Như vậy xâu Palindrom là xâu có phần tử đầu giống phần tử cuối, phần tử thứ hai giống phần tử kế cuối, v.v…- Đưa thêm hai ví dụ để học sinh nhận dạng.

- Hai xâu trên bảng xâu nào là xâu Palindrom?

- Như vậy xâu Palindrom là xâu đối xứng. Để thấy rõ hơn chúng ta xét ví dụ trên bảng.

- Xâu trên có mấy kí tự?- Ký tự 1 và ký tự 5 như thế nào?- Để lấy số lượng phần tử của một xâu bất kỳ ta dùng hàm gì?- Phần tử đầu là ký tựgì, phần tử cuối là ký tự gì? - Ký tự ‘A’ ở cuối nằm ở vị trí thứ mấy trong xâu? Length(s) bằng bào nhiêu?- Cách truy xuất đến phần tử cuối của xâu S như thế nào?- Cách truy xuất đến phần tử kế cuối?

- Kí tự đầu trùng ký tự cuối, ký tự thứ hai trùng ký tự kế cuối, v.v…

- Kí tự đầu trùng ký tự cuối, ký tự thứ hai trùng ký tự kế cuối.

- Xâu ‘AbCCbA’

- Có 5 ký tự.- Giống nhau

- Hàm length(s)

- ‘A’, ‘A’

- Vị trí 5, length(s) = 5.

- S[length(s)]- S[length(s)-1]

S[length(s)]S[length(s)-1]S[length(s)-2]

Page 9: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

* 1 length(s) - 0 = length(s) - (1-1)* 2 length(s) - 1 = length(s) - (2-1)* 3 length(s) - 2 = length(s) - (3-1) Vị trí 1 và vị trí length(s), vị trí 2 và length(s) - 1, vị trí 3 và vị trí length(s) - 2 được gọi là các cặp vị trí đối xứng.Vị trí i đối xứng với vị trí nào?Đặt n:=length(s);

- Cần kiểm tra cặp thứ i tức là S[i] = S[n-i+1] với i = 1,2,3,…,(n div 2).

- Cho xâu: ‘aBBCa’

- Xét thêm ví dụ về xâu Palindrom có số phần tử chẵn (giúp HS nhận biết được quan hệ giữa các cặp ví trí đối xứng).

- S[1] bằng phần tử nào?- S[2] bằng phần tử nào?- S[3] bằng phần tử nào?

- Lấy chỉ số của các phần tử đối xứng thì ta sẽ có:- Chỉ số 1 tương ứng với?- Chỉ số 2 tương ứng với?- Chỉ số 3 tương ứng với?- Gọi chỉ số 1,2,3 tổng quát là vị trí i

- Vị trí i đối xứng với vị trí nào? Có quan hệ gì với i không?- Xâu Palindrom là xâu gồm các cặp ký tự đối xứng. Như vậy để kiểm tra một xâu Palindrom thì cần kiểm tra cái gì?

- Xâu ‘ABCBA’ có bao nhiêu ký tự? Cần kiểm tra mấy cặp?- Xâu ‘AbCCbA’ có bao nhiêu ký tự? Cần kiểm tra mấy cặp?

- Các em có nhận xét gì về độ dài xâu và số cặp ký tự cần kiểm tra?

- length(s)- length(s) - 1 - length(s) - 2

- length(s)-(i-1) = length(s)-i+1

- Kiểm tra các cặp kí tự đối xứng, bắt đầu tử cặp (1,n).- Có 5 ký tự, cần kiểm tra 2 cặp.

- Có 6 ký tự, cần kiểm tra 3 cặp.

- 2 = 5 div 2. 3 = 6 div 2.

(n div 2) lần.

- Cặp thứ 2.Vì cặp này không giống nhau.

- Tới cặp thứ ký tự thứ: (n div 2) hoặc

Page 10: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

Sử dụng whilei:=1;while (i<=length(s)div 2)and (S[i]=S[length(s)-i+1])do i:=i+1;if i>length(s)div 2 then write(S,‘ la xau Palindrom)else write(S,‘ khong la xau Palindrom);

Sử dụng Repeat untili:=0;repeat i:=i+1;until (i>length(s)div 2)or (S[i]<>S[length(s)-i+1]);if i>length(s)div 2 then write(S,‘ la xau Palindrom)else write(S,‘ khong la xau Palindrom);

Var s:string;begin write(‘Nhap xau: ’); readln(s);

Chương trình:Var s:string; i,n:byte;begin write(‘Nhap xau: ‘);readln(s); n:=length(s) div 2; i:=1; while (i<=n ) and (S[i]=S[length(s) -i+1]) do i:=i+1; if i>n then write(S,‘ la xau Palindrom’)

- Cần mấy lần kiểm tra một xâu Palindorm bất kỳ?

- Với xâu trên thì cần kiểm tra đến cặp thứ mấy? Tại sao?

- Nếu một xâu không là xâu Palindrom thì việc kiểm tra kết thúc trước khi i đến (n div 2).- Như vậy kiểm tra một xâu bất kỳ là xâu Palindrom thì việc kiểm tra các cặp đối xứng đến khi nào thì ngừng?

- Số lần kiểm tra không biết trước, nên dùng vòng lặp kiểu nào?

- Gọi HS làm đoạn CT kiểm tra.

- HS viết bẳng, GV đặt câu hỏi cho cả lớp:+ Bắt đầu kiểm tra từ cặp thứ mấy?+ Khi nào thì thực hiện kiểm tra cắp tiếp theo?+ Khi ngừng kiểm tra, chỉ số i ở vị trí nào trong xâu đối với xâu ‘AbCCbA’, ‘aBBCa’.

gặp cặp ký tự khác nhau.

- Vòng lặp với số lần không biết trước. (while,repeat)- HS ghi bảng.Sử dụng whilei:=1;while (i<=n div 2)and (S[i]=S[n -i+1])do i:=i+1;if i>(n div 2) then write(S,‘ la xau Palindrom)else write(S,‘ khong la xau Palindrom);

Sử dụng Repeat untili:=0;repeat i:=i+1;until (i>n div 2)or (S[i]<>S[n-i+1]);if i>length(s)div 2 then write(S,‘ la xau Palindrom)else write(S,‘ khong la xau Palindrom);

Var s:string;begin write(‘Nhap xau: ’); readln(s);

Page 11: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

else write(S,‘ khong la xau Palindrom’); readln;end.HoặcVar s:string; i,n:byte;begin write(‘Nhap xau: ‘);readln(s); n:=length(s) div 2; i:=0; repeat i:=i+1; until (i>n ) or (S[i]<>S[length(s) -i+1]);if i>n then write(S,‘ la xau Palindrom’)else write(S,‘ khong la xau Palindrom’); readln;end.

- Nhận xét, hiệu chỉnh, kết hợp với phần khai báo và nhập của HS trước viết thành chương trình hoàn chỉnh.

- Em nào có thể lên bảng viết phần khai báo và nhập dữ liệu cho một xâu.

10’ Bài 2 (bài 11 SGK/85):Đề: (Cho HS đọc SGK)

- Input: Một xâu có độ dài tối đa là 100.- Output: Số chữ số thập phân xuất hiện trong xâu S.Ví dụ 1: st1:= ‘14/2 ngay Valentine’; Kq: 3Ví dụ 2: st2:= ‘tang ban 999 doa hong’;

- 0 <= a <= 9 thì a là một chữ số thập phân.

- Các em cho biết dữ liệu vào và dữ liệu ra của bài.

- GV ghi lại input và output lên bảng.

- Xâu st2 có bao nhiêu chữ số thập phân?

- Các em hãy liệt kê các chữ số thập phân?

- Câu hỏi: Hãy cho biết có bao nhiều chữ số thập phân xuất hiện trong xâu S tức là đếm số chữ số thập phân trong S phải không?- Các em đã học về ký tự số chưa? Hãy liệt kê các

- In: xâu ký tự S có độ dài tối đa là 100.- Out: Số chữ số thập phân xuất hiện trong xâu S.

- 3.

- 0,1,2,…,9

- Đúng.

- ‘0’,‘1’,‘2’,…, ‘9’- <,>,<=,>=,=,<>

- 0 <= a <= 9- Không

Page 12: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

Kí tự ‘0’ có thứ tự bao nhiêu trong bảng mã ASCII?Kí tự ‘9’ có thứ tự bao nhiêu trong bảng mã ASCII?

- (‘0’<=ch) and (ch<=’9’) (*)

- (‘0’<=st[i]) and (st[i]<= ‘9’)

Dem:=0;for i:=1 to length(st) do if (‘0’<=st[i]) and (st[i]<= ‘9’) then dem:=dem+1;

dem:=0;for i:=length(st) downto 1 do if (‘0’<=st[i]) and (st[i]<= ‘9’) then dem:=dem+1;

ký tự số trong bảng mã ASCII?- Ta đã học các phép toán quan hệ gì?- Để kiểm tra một số a là một chữ số thập phân ta làm thế nào?- Một ký tự số có phải là một số hay không?

- Trong bảng mả ASCII thì ký thứ ‘0’ < ‘9’. Có nhận xét gi khi so sánh giữa ‘0’ với ‘9’ - Ký tự ‘1’ như thế nào với ‘0’,‘9’. - Ký tự số bất kỳ ch như thế nào với ‘0’,‘9’.- Viết biểu thức kiểm tra một ký tự là ký tự số?

- Nếu thay ch bằng st[i] được hay không? Tại sao?- Như vậy điều kiện kiểm tra phần tử thứ i trong xâu st có là ký tự số như sau. - Cần phải duyệt hết các ký tự, với mỗi ký tự của xâu st ta kiểm tra điều kiện trên, nếu thỏa mãn thì đếm thêm một ký tự số.- Cần kiểm tra hết các phần tử trong xâu do đó chúng ta nên sử dụng vòng lặp kiểu nào?

- Em nào có thể lên bảng viết đoạn lệnh đếm số ký tự số được không?- Nếu không có HS lên bảng có thể chia HS thành từng nhóm cùng thảo luận, lấy 10 nhóm nộp đầu tiên, đúng được cộng điểm tốt.

- ‘0’< ‘1’< ‘9’- ‘0’<= ch <= ‘9’

- (‘0’<=ch) and (ch<= ‘9’)

- Được, vì st[i] cũng là một ký tự.

- Vòng lặp với số lần biết trước. (for)

Dem:=0;for i:=1 to length(st) do if (‘0’<=st[i]) and (st[i]<= ‘9’) then dem:=dem+1;

dem:=0;for i:=length(st) downto 1 do if (‘0’<=st[i]) and (st[i]<= ‘9’) then dem:=dem+1;

Page 13: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

Chương trình 1:Var st:string[100]; i,dem:byte;begin write(‘Nhap xau: ‘);readln(s); Dem:=0; for i:=1 to length(st) do if (‘0’<=st[i]) and (st[i]<= ‘9’) then dem:=dem+1; write(‘So luong chu so thap phan: ’,dem); readln;end.Chương trình 2:Var st:string[100]; i,dem:byte;begin write(‘Nhap xau: ‘);readln(s); Dem:=0; for i:=length(st) downto 1 do if (‘0’<=st[i]) and (st[i]<= ‘9’) then dem:=dem+1; write(‘So luong chu so thap phan: ’,dem); readln;end.

- Hiệu chỉnh các câu lệnh của HS đã viết sau đó viết lại chương trình hoàn chỉnh lên bảng.

7’ Bài 3 (bài 12 SGK/85):Đề: (Cho HS đọc SGK)

- Input: Một xâu có độ dài tối đa là 120.- Output: Số chữ cái khác nhau.

- Ví dụ: ‘abcdef’, ‘aabca’.

- Nếu không có thêm điều kiện “khác nhau” thì cách giải bài này như thế nào? Có khác gì so với cách giải bài 2 hay không?

- Giả sử dữ liệu vào đã đúng theo yêu cầu của bài. Bây giờ chúng ta tìm cách đếm các chữ cái khác nhau trên nó.- Nếu không tính điều kiện

- Cách giải tương tự, chỉ khác ở chỗ là tìm số chữ cái.

- Length(s).

Page 14: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

- Với xâu S = ‘aabca’ ta có:

acbaa54321

Sử dụng thêm mảng dd để đánh dấu.

- Mảng dd có miền chỉ số ‘a’..‘z’, có kiểu boolean, giá trị ban đầu của các phần tử mảng dd bằng false.- S[1] = ‘a’ tức là ký tự ‘a’ có xuất hiện trong S nên gán dd[‘a’]:= true; hay dd[s[1]]:=true;- S[2] = ‘a’ tức là ký tự ‘a’ có xuất hiện trong S nên gán dd[‘a’]:= true; hay dd[s[2]]:=true;- S[3] = ‘b’ tức là ký tự ‘b’ có xuất hiện trong S nên gán dd[‘b’]:= true; hay dd[s[3]]:=true;

Tương tự ta có:- S[4] = ‘c’ nên dd[‘c’]:=true; hay dd[s[4]]:=true;- S[5] = ‘a’ nên dd[‘a’]:=true; hay dd[s[5]]:=true;- Như vậy ta có: dd[s[1]], dd[s[2]], dd[s[3]], dd[s[4]], dd[s[5]] đều có giá trị là true.

“khác nhau” thì số các chữ cái của xâu là bao nhiêu, chú ý xâu S chỉ gồm các chữ cái thường?

- Nếu có thêm điểu kiện khác nhau thì kết quả bài toán sẽ như thế nào, các em xem một số ví dụ sau.- Với hai ví dụ trên kết quả ra màn hình là bao nhiêu?

- Để tìm số các chữ cái có nhiều cách khác nhau, bây giờ chúng ta sẽ cùng xét một cách đó. Cách này sử dụng thêm một mảng đánh dấu các chữ cái nào xuất hiện, cuối cùng chỉ cần đếm số các chữ cái được đánh dấu. Để rõ hơn chúng ta cùng xét ví dụ sau đây.

- Ta có thể khai báo một mảng có các chỉ số là ký tự chữ cái được không?

- 6, 3.

- Được.

- True

Page 15: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

- dd[s[i]]:=true; với i = 1,2,3,…,length(s)

- Từ kết quả bên các em cho thầy biết giá trị của dd[s[i]] với s[i] là ký tự thứ i của xâu S? - Điều này có nghĩa là các ký tự của một xâu sẽ xuất hiện ít nhất một lần trong xâu đó.- Tạo mảng dd chính duyệt hết các phần tử của xâu S, với mỗi phần tử s[i] thì gán dd[s[i]]:= true; tức là

- Sau khi tạo được mảng dd, để có số chữ cái thường khác nhau chỉ cần đếm số phần tử của dd có giá trị true.- Từ cách giải trên các em về nhà có thể viết lại thành chương trình hoàn chỉnh chuẩn bị cho buổi thực hành sắp tới.

IV. Củng cố. (2’)Yêu cầu học sinh:- Viết lại chương trình các bài đã học lên máy và chạy thử.- Chuẩn bị cho buổi thực hành sắp tới.

BAÌI THÆÛC HAÌNH 4 (29,30)

II. MỤC ĐÍCH – YÊU CẦU.1. Mục đích.- Giúp HS thành thạo trong sử dụng kiểu dữ liệu xâu.- Giúp HS có thể viết được chương trình Pascal giải các bài tập về kiểu dữ liệu xâu lên

máy.- Biết cách khắc phục những lỗi thường gặp.2. Yêu cầu.- HS nắm được giải thuật của các bài tập về kiểu dữ liệu xâu đã học trong tiết chữa bài

tập.

III. PHƯƠNG PHÁP GIẢNG DẠY.- Hướng dẫn HS xác định lỗi, sửa lỗi không sửa lỗi thay cho HS. - Khuyến khích một số HS làm xong sớm giúp đỡ những bạn chưa làm được bài.

Page 16: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

IV. CÁC BƯỚC LÊN LỚP. (5’)- Nắm sĩ số và tình hình của lớp.- Ổn định lớp, nhắc nhở HS trước khi vào phòng máy thực hành.- Ra một 2 bài về kiểu dữ liệu xâu để HS thực hành.- Cho HS vào phòng máy, ổn định chỗ ngồi.- Cho HS khởi động máy vào Pascal để thực hành.

V. NỘI DUNG.1. Các bài cần thực hành: Bài xâu Palindrom, Bài 11 SGK trang 85.2. Dự đoán các chương trình HS có thể viết:

Bài xâu Palindrom:a. Chương trình 1:

Var s,s1:string; i,n:byte; begin write(‘Nhap xau: ‘);readln(s); for i:=1 to length(s) do s1:=s1+s[i]; if s1 = s then write(S,‘ la xau Palindrom’) else write(S,‘ khong la xau Palindrom’); readln; end.

b. Chương trình 2: Var s:string; i,n:byte; begin write(‘Nhap xau: ‘);readln(s); n:=length(s) div 2; i:=1; while (i<=n) and (S[i]=S[length(s) -i+1]) do i:=i+1; if i>n then write(S,‘ la xau Palindrom’) else write(S,‘ khong la xau Palindrom’); readln; end.

c. Chương trình 3: Var s:string; i,n:byte; begin write(‘Nhap xau: ‘);readln(s); n:=length(s) div 2; i:=0; repeat i:=i+1; until (i>n) or (S[i]<>S[length(s) -i+1]); if i>n then write(S,‘ la xau Palindrom’) else write(S,‘ khong la xau Palindrom’); readln; end.

Page 17: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

Bài xâu 11 SGK/85:a. Chương trình 1:

Var st:string[100]; i,dem:byte; begin write(‘Nhap xau: ‘);readln(s); Dem:=0; for i:=1 to length(st) do if (‘0’<=st[i]) and (st[i]<= ‘9’)then dem:=dem+1; write(‘So luong chu so thap phan: ’,dem); readln; end.

b. Chương trình 2: Var st:string[100]; i,dem:byte; begin write(‘Nhap xau: ‘);readln(s); Dem:=0; for i:=length(st) downto 1 do if (‘0’<=st[i]) and (st[i]<= ‘9’) then dem:=dem+1; write(‘So luong chu so thap phan: ’,dem); readln; end.

3. Các lỗi HS có thể mắc phải và hướng dẫn khắc phục.a. Lỗi cú pháp:

Lỗi Khắc phục- Sai từ khóa - Từ khóa có màu trằng, nên xem tại dòng

báo lỗi có từ nào có thể là từ khóa nhưng không hiện màu trắng

- Thiếu dấu ; - Thông báo lỗi có mã 85, xem ở dòng trên dòng có vệt sáng câu lệnh không có dấu ‘;’, thêm dâu ; vào cuối câu lệnh đó.

- Thiếu ngoặc ( ),[ ] - Mã lỗi 89 hoặc 93, số ngoặc đóng phải bằng số ngoặc mở.

… - Xem mã lỗi, tra sách để biết lỗi.

b. Sai giải thuật: Lỗi Khắc phục

- Xác định sai điều kiện lặp. - Kiểm tra lại điều kiện lặp, while: điều kiện được thỏa mãn thì làm; repeat: điều kiện được thỏa mãn thì ngừng; for: xác định rõ số lần lắp, mốc đầu tiên vào mốc cuối cùng.

- Lặp vô hạn do điều kiện lặp không thay đổi qua mỗi bước.

- Có thể do không tăng biến điều kiển vòng lặp.

Page 18: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu
Page 19: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

KIÃØU BAÍN GHI (tiãút 25)

I. Mục đích – Yêu cầu.1. Mục đích.

- Giới thiệu về kiểu bản ghi.- Giúp HS biết cách khai báo kiểu bản ghi và cách truy xuất biến bản ghi.- Giúp HS hiểu được ý nghĩa của kiểu bản ghi.

2. Yêu cầu.- HS đã biết các kiểu dữ liệu đơn giản, cách khai báo và sử dụng chúng.- Vận dụng để khai báo một số kiểu bản ghi đơn giản.

II. Phương pháp giảng dạy.- Tạo tình huống có vấn đề khi sử dụng các kiểu dữ liệu đã học từ đó giúp HS hình dung ra

một kiểu dữ liệu mới.- Sử dụng phương pháp thuyết trình, gợi mở để giới thiệu cho HS nội dung bài mới.

III. Các bước lên lớp. (10’)1. Ổn định lớp.

- Nắm sĩ số và tình hình của lớp.2. Kiểm tra bài cũ. (Khuyến khích xung phong, lấy điểm tốt)

- Hãy liệt kê các kiểu dữ liệu chuẩn (kiểu dữ liệu đơn giản)? - Đã học các kiểu dữ liệu có cấu trúc nào?

3. Nội dung bài mới. Đặt vấn đề: Để lưu tên của tất cả các bạn trong lớp các em thường dùng biến kiểu gì? Để

lưu tuổi của các bạn trong lớp em làm thế nào? Để lưu tên và tuổi ta thường sử dụng kiểu string và kiểu số. Có thể gộp kiểu string và kiểu số thành một kiểu được không. Tất nhiên là được, vậy cách gộp thế nào, sử dụng nó ra sao chúng ta sẽ biết ngay qua bài “Kiểu bản ghi” hôm nay.TG Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

KIỂU BẢN GHI1. Khái niệm: DL Kiểu bản ghi dùng để mô tả các đối tượng có cùng một số thuộc tính mà các thuộc tính có thể có các kiểu dữ liệu khác nhau.

Ý nghĩa:Thường dùng để tổ chức dữ liệu

trong quản lý.- Để mô tả hàng loạt các đối tượng.

Mỗi đối tượng được mô tả bằng một bản ghi. Mỗi thuộc tính của đối tượng tưng ứng với một trường trong bản ghi.

2. Cách khai báo:a. Gián tiếp:Định nghĩa kiểu:TYPE <tên kiểu bản ghi> = RECORD <tên trường 1>:<tên kiểu dữ liệu T1>; … … <tên trường n>:<tên kiểu dữ liệu Tn>;

Page 20: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

END;

Khai báo biến:VAR <tên biến>: <Tên kiểu bản ghi>;Trong đó TYPE, RECORD, END, VAR là các từ khóa.

Ví dụ 1: Để quản lý một thí sinh thi nghề người ta thường quản lý: SBD, họ tên, ngày sinh, giới tính, điểm lý thuyết, điểm thực hành.TYPE thisinh = RECORD SBD:string[6]; hoten:string[30]; ns:string[10];

- Họ và tên thường có kiểu gì?- Độ dài tối đa là bao nhiêu?- Ngày sinh có kiểu gì?

- Kiểu String- 30- Kiểu String

gt: boolean; DLT, DTH: real; END;VAR ts:thisinh;

* Lưu ý: Các trường cùng kiểu có thể viết tên các trường rồi đến khai báo kiểu của các trường đó, tên các trường được phân cách bởi dâu “,”.

Ví du 2: Mô tả các đặc tính của một chiếc xe máy đã đăng ký sử dụng.VAR xemay = RECORD Bienso:string[6]; Sokhung, somay: byte; Loai: string; Mauxe: string; END;

Ví dụ 3: Quản lý chủ của xe máy:- Họ tên.- Ngày sinh.- Số CMND.- Địa chỉ: Số nhà và tên đường.

- Độ dài tối đa là bao nhiêu?- Giới tính thường có kiểu gì?- Điểm lý thuyết, điểm thực hành có kiểu gì?

- Em hãy cho biết các đặc tính cơ bản của một xe máy đã đăng ký sử dụng?

- Biển số xe thường có kiểu gì? Có thể xem nó như số SBD của thí sinh.- Số khung số máy có kiểu gì?- Các loại xe máy thường thấy trên thị trường là gì?- Màu xe có kiểu gi?

- Để quản lý chủ của xe máy có thể quản lý các mục như bên.- Trong địa chỉ cần phân biệt số nhà và

- 10- Kiểu boolean.- Kiểu real.

- Tên chủ xe, Biển số, số khung, số máy, loại xe, màu xe.- HS lên bảng khai báo kiểu bản ghi.Đáp án:VAR xemay = RECORD Hoten: string[30]; Bienso:string[6]; Sokhung, somay: byte; Loai: string; Mauxe: string; END;

- Kiểu bản ghi.

Page 21: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

tên đường, vậy cần khai báo kiểu dữ liệu gì để lưu địa chỉ?

- Kiểu dữ liệu để lưu chủ của xe máy như thế nào?

- Cần định nghĩa kiểu dữ liệu cho địa chỉ trước định nghĩa kiểu dữ liệu liệu để lưu thông tin về chủ xe.

Đáp án:TYPE diachi = RECORD sonha: string[6]; tendung:string[30]; END;- Đáp án:TYPE chuxe = RECORD hoten: string[30]]; ns:string[10]; cmnd:string[10]; dc:diachi; END;

b. Trực tiếp:VAR <tên biến bản ghi> = RECORD <tên trường 1>:<tên kiểu dữ liệu T1>; … … <tên trường n>:<tên kiểu dữ liệu Tn>; END;

VAR ts: RECORD SBD:string[6]; hoten:string[30]; ns:string[10]; gt: boolean; DLT, DTH: real; END;

VAR xemay : RECORD Bienso:string[6]; Sokhung, somay: byte; Loai: string; Mauxe: string; END;

- Gọi 3 HS lên bảng viết lại hai ví dụ trên với cách khai báo trực tiếp.

- HS ghi phần khai báo lên bảng:Đáp án:VAR ts:RECORD SBD:string[6]; hoten:string[30]; ns:string[10]; gt: boolean; DLT, DTH: real; END;

VAR xemay: RECORD Bienso:string[6]; Sokhung, somay: byte; Loai: string;

Page 22: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

Mauxe: string; END;

TYPE chuxe : RECORD hoten: string[30]]; ns:string[10]; cmnd:string[10]; dc:diachi; END;

TYPE chuxe : RECORD hoten: string[30]]; ns:string[10]; cmnd:string[10]; dc:diachi; END;

3. Tham chiếu đến các trường của bản ghi:

Quy tắc: <tên biến bản ghi>.<tên trường>

Vi dụ: Nhập từ bàn phím họ tên thí sinh ts: write(‘ nhap ho ten:’);readln(ts.hoten);

* Nhận xét: <tên biến bản ghi>.<tên trường> là một biến, nên có thể làm việc với các trường của bản ghi nhưng cách làm việc với các biến mà trước đây đã học.

- Để nhập họ tên của một HS ta làm thế nào?- Câu hỏi phụ: Nếu viết var hoten:string[30]; thì hoten được xem là gì?- Nhập dữ liệu cho biến hoten thì làm thế nào?- hoten là một trường của biến hs nên phải làm việc với nó có gì khác?- Gọi một HS viết lệnh nhập họ tên cho biến hs.

- hs.hoten có phải là một biến hay không? Biến kiểu gì?

- write(‘Nhap ho ten’); readln(hoten);

- Thêm ts. vào phía trước hoten.

- write(‘ nhap ho ten’); readln(ts.hoten);

- Phải, kiểu string[30].

IV. Củng cố.i. Yêu cầu:

- Xem lại phần khai báo một biến bản ghi gồm khai báo gián tiếp và khai báo trực tiếp.- Làm việc với một biến bản ghi như nhập dữ liệu,… ta phải làm việc với các trường, tức là

phải truy xuất đến các trường của nó.ii. Bài tập về nhà:

- Lớp chúng ta có 46 em đi thi nghề, để quản lý các em đó thì dùng dữ liệu gì.- Nhập tên của một HS bất kỳ, in ra màn hình ký tự đầu của tên HS đó.

Page 23: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

KIỂU BẢN GHI (tiãút 26)I. MỤC ĐÍCH – YÊU CẦU.

1. Mục đích.- Giúp HS thành thạo trong việc khai báo kiểu dữ liệu bản ghi.- Giúp HS nắm chắc cách truy xuất đến các trường của bản ghi, biết cách sử dụng

câu lệnh WITH.2. Yêu cầu.

- Học sinh cần nắm được các cách khai báo biến kiểu bản ghi.- Biết cú pháp truy xuất đến các trường của biến bản ghi.

II. PHƯƠNG PHÁP GIẢNG DẠY.Thuyết trình gợi mở vấn đề, từ đó tạo cho học sinh nhu cầu tìm kiểu dữ liệu mới để

giải quyết vấn đề.

III. CÁC BƯỚC LÊN LỚP.1. Ổn định lớp.

- Nắm sĩ số và tình hình của lớp.2. Kiểm tra bài cũ.

- Câu 1: Có mấy cách khai báo biến kiểu bản ghi? Viết cú pháp khai báo của mỗi cách.

TYPE <tên kiểu bản ghi> = RECORD <tên trường 1>:<tên kiểu dữ liệu T1>; … … <tên trường n>:<tên kiểu dữ liệu Tn>; END;VAR <tên biến>: <Tên kiểu bản ghi>;VAR <tên biến bản ghi> : RECORD <tên trường 1>:<tên kiểu dữ liệu T1>; … … <tên trường n>:<tên kiểu dữ liệu Tn>; END;- Câu 2: Khai báo một bản ghi để lưu thông tin của một thí sinh trong bài học

hôm trước và có thêm trường điểm trung bình của DLT và DTH? Khai báo theo hai cách? Lớp có 46 thí sinh, vậy để lưu thông tin của cả lớp thì dùng kiểu dữ liệu gì? Có thể khai báo trực tiếp được không?

TYPE THISINH = RECORD SBD:string[6]; hoten:string[30]; ns:string[10]; gt: boolean; DLT, DTH, DTB: real; END;VAR ts:THISINH;VAR ts:RECORD SBD:string[6]; hoten:string[30]; ns:string[10]; gt: boolean;

Page 24: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

DLT, DTH, DTB: real; END;VAR lop:array[1..46]of THISINH;

- Câu 3: Cách truy xuất đến các trường của một biến bản ghi? Viết lệnh nhập SBD từ bàn phím cho thí sinh thứ 1 của mảng LOP.

<tên biến bản ghi>.<tên trường>Write(‘ Nhap so bao danh: ’);readln(LOP[1].SBD);

3. Dẫn dắt vào bài mới.Buổi trước chúng ta đã biết thế nào là kiểu bản ghi, cách khai báo một kiểu bản ghi,

truy xuất đến các trường của bản ghi. Cách làm việc với kiểu DL bản ghi như thế nào, có gì giống và khác với cách làm việc với các kiểu DL khác, để hiểu rõ chúng ta sẽ tiếp tục tìm hiểu về kiểu bản ghi trong bài học hôm nay.

TG Nội dung ghi bảng Hoạt động của thầy

Hoạt động của trò

4. Gán giá trị cho biến bản ghi:Có hai cách gán giá trị cho biến bản ghi:* Dùng lệnh gán: Nếu có hai biến bản ghi cùng kiểu là A, B có thể gán giá trị của B cho A bằng câu lệnh sau: A:=B;Ví dụ:- var A,B:record x,y:real; end;B:=A;

- A,B là hai điểm trên hệ trục tọa độ.- Có thể gán giá trị A cho B không?

- Có thể gán được.

* Gán giá trị cho từng trường: Có thể thực hiện bằng lệnh gán hoặc nhập từ bàn phím.Ví dụ: A.x:=5; A.y:=6; B:=A;

- lop[i].SBD:=i;

write(‘nhap ho ten’); readln(lop[i].hoten);write(‘nhap ngay sinh’);

- Với 2 lệnh gán bên thì A có hoành độ và tung độ là mấy?- B có tung độ và hoành độ là mấy?- Giả sử SBD là số thứ tự của các thí sinh, lúc này trường SBD có kiểu gì?- Câu hỏi phụ: stt thường có kiểu gì?- Thí sinh thứ i sẽ có SBD là mấy?- Có thể dùng

- Hoành độ 5, tung độ 6.- Hoành độ 5, tung độ 6.

- Kiểu số nguyên.- Là i.

- Được.

- HS ghi bảng:write(‘nhap ho ten’); readln(lop[i].hoten);write(‘nhap ngay sinh’); readln(lop[i].ns);

Page 25: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy

Hoạt động của trò

readln(lop[i].ns);write(‘nhap gioi tinh’); readln(lop[i].gt);write(‘nhap diem ly thuyet’); readln(lop[i].DLT);write(‘nhap diem thuc hanh’); readln(lop[i].DTH);

- DTB:=(DTH*2+DLT)/3;

lệnh gán: lop[i].SBD:=i; được không?

- Hãy nhập giá trị cho các trường còn lại trừ trường điểm trung bình của thí sinh thứ i.

- Với i bằng 1 thì các lệnh trên mang ý nghĩa gì?- Với i bằng 2?- Với i bằng n?- Thêm những lệnh gì để các lệnh trên trở thành đoạn chương trình nhập dữ liệu cho n thí sinh.- Câu hỏi phụ: + Viết các lệnh nhập số thí sinh từ bàn phím?

+ Để nhập n phần tử cho một mảng phải duyệt mảng như thế nào? Dùng câu lệnh lặp gì?

- Gọi HS lên bảng viết câu lệnh

write(‘nhap gioi tinh’); readln(lop[i].gt);write(‘nhap diem ly thuyet’); readln(lop[i].DLT);write(‘nhap diem thuc hanh’); readln(lop[i].DTH);

- Nhập thông tin thí sinh thứ 1.- Nhập thông tin thí sinh thứ 2.- Nhập thông tin thí sinh thứ n.

- HS ghi bảng:Write(‘ Nhap So thi sinh’); Readln(n);

- Câu lệnh for.

- for i:=1 to n do

- lop[i].DTB:=(lop[i].DTH*2+lop[i].DLT)/3;

- Sau các câu lệnh nhập điểm lý thuyết và điểm thực hành?

- write();writeln();

- HS ghi bảng:write();writeln();

Page 26: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy

Hoạt động của trò

- write(‘Ho ten DTB’);For i:=1 to n do write(lop[i].hoten,lop[i].DTB:5:1);

duyệt n phần tử của lop và thêm begin end để đoạn chương trình trên bảng thành đoạn chương trình nhập thông tin n thí sinh.

- Điểm trung bình được tính thức công thức: (DTH*2+DLT)/3;

- Có điểm thực hành có điểm lý thuyết hãy viết lệnh tính điểm trung bình cho thí sinh thứ i?

- Nên đặt câu lệnh tính giá trị cho điểm TB ở đâu?

- Dùng lệnh gì để in một giá trị một biến ra màn hình?- Khi làm việc với các trường ta phải truy xuất đên nó, khi truy xuất phải viết tên biến bản ghi, chương trình trên ta phải viết lại rất nhiều lop[i]. Vậy có cách nào khắc phục được trường hợp này không? Để biết rõ chúng ta tìm hiểu câu lệnh WITH.

- Duyệt mảng lop, in giá trị của trường họ tên và điểm trung bình.

- HS ghi bảng:For i:=1 to n do write(lop[i].hoten,‘,’,lop[i].DTB);

- write(‘Ho ten DTB’);

- write(lop[i].hoten, lop[i].DTB:5:1);

- HS ghi bảng:write(‘Ho ten DTB’);For i:=1 to n do write(lop[i].hoten, lop[i].DTB:5:1);

Page 27: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy

Hoạt động của trò

4.Câu lệnh WITH:Cú pháp:WITH <Tên biến bản ghi> DO BEGIN <Câu lệnh 1>; <Câu lệnh 2>; … <Câu lệnh n>; END;Trong BEGIN, END nếu có truy xuất đến trường của biến bản ghi được nhắc đến ở câu lệnh WITH thì chỉ cần ghi trên trường.

Ví dụ: Viết lại đoạn chương trình nhập dữ liệu ở ví dụ trên.For i:=1 to n do With Lop[i] do Begin write(‘nhap SBD’); readln(SBD); write(‘nhap ho ten’); readln(hoten); write(‘nhap ngay sinh’); readln(ns); write(‘nhap gioi tinh’); readln(gt); write(‘nhap diem ly thuyet’); readln(DLT); write(‘nhap diem thuc hanh’); readln(DTH); End;

- Gọi HS lên viết lại đoạn chương trình nhập có sử dụng câu lệnh with

For i:=1 to n do With Lop[i] do Begin SBD:=i; write(‘nhap ho ten’); readln(hoten); write(‘nhap ngay sinh’); readln(ns); write(‘nhap gioi tinh’); readln(gt); write(‘nhap diem ly thuyet’); readln(DLT); write(‘nhap diem thuc hanh’); readln(DTH); End;

Page 28: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

BAÌI THÆÛC HAÌNH 5 (Tiết 31)

I. MỤC ĐÍCH – YÊU CẦU.1. Mục đích:

- Giúp HS thành thạo trong sử dụng kiểu dữ liệu bản ghi.- Thông qua những ví dụ, bài tập được sửa, HS có thể nắm được phương pháp giải quyết các bài toán thực tế như: Sắp xếp, tìm kiếm trên mảng các bản ghi theo điều kiện bài toán.

2. Yêu cầu:- Học sinh cần nắm được các cách khai báo kiểu dữ liệu bản ghi.- Học sinh làm bài tập trước ở nhà.

II. PHƯƠNG PHÁP GIẢNG DẠY.- Sử dụng phương pháp đặt vấn đề, gợi ý, đàm thoại, hướng dẫn.

III. CÁC BƯỚC LÊN LỚP.3. Ổn định lớp:

- Nắm sĩ số và tình hình của lớp.4. Kiểm tra bài cũ:

- Câu 1: Khai báo một mảng để lưu 45 thí sinh, mỗi thí sinh là một bản ghi gồm các trường sau: SBD, họ tên, ngày sinh, giới tính, điểm lý thuyết, điểm thực hành, điểm trung bình trong đó SBD là số thứ tự.

Dự kiến:TYPE THISINH = RECORD SBD:byte; hoten:string[30]; ns:string[10]; gt: boolean; DLT, DTH, DTB: real; END;VAR lop:array[1..45]of THISINH;

- Câu 2: Viết đoạn lệnh nhập thông tin cho thí sinh?for i:=1 to n do Begin

Lop[i].SBD:=i;write(‘nhap ho ten’); readln(lop[i].hoten);write(‘nhap ngay sinh’); readln(lop[i].ns);write(‘nhap gioi tinh’); readln(lop[i].gt);write(‘nhap diem ly thuyet’); readln(lop[i].DLT);write(‘nhap diem thuc hanh’); readln(lop[i].DTH);

end;

IV. NỘI DUNG BÀI MỚI.

TG Nội dung ghi bảng Hoạt động của thầy

Hoạt động của trò

4.Câu lệnh WITH:Cú pháp:

Page 29: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy

Hoạt động của trò

WITH <Tên biến bản ghi> DO BEGIN <Câu lệnh 1>; <Câu lệnh 2>; … <Câu lệnh n>; END;Trong BEGIN, END nếu có truy xuất đến trường của biến bản ghi được nhắc đến ở câu lệnh WITH thì chỉ cần ghi trên trường.

Ví dụ: Viết lại đoạn chương trình nhập dữ liệu ở ví dụ trên.For i:=1 to n do With Lop[i] do Begin write(‘nhap SBD’); readln(SBD); write(‘nhap ho ten’); readln(hoten); write(‘nhap ngay sinh’); readln(ns); write(‘nhap gioi tinh’); readln(gt); write(‘nhap diem ly thuyet’); readln(DLT); write(‘nhap diem thuc hanh’); readln(DTH); DTB:=(DTH*2+DLT)/3; End;

- Gọi HS lên viết lại đoạn chương trình nhập có sử dụng câu lệnh with.

For i:=1 to n do With Lop[i] do Begin SBD:=i; write(‘nhap ho ten’); readln(hoten); write(‘nhap ngay sinh’); readln(ns); write(‘nhap gioi tinh’); readln(gt); write(‘nhap diem ly thuyet’); readln(DLT); write(‘nhap diem thuc hanh’); readln(DTH); DTB:=(DTH*2+DLT)/3; End;

Bài tập: Nhập từ bàn phím thông tin cho n thí sinh. Sắp xếp danh sách thí sinh theo thứ tự giảm dần của điểm trung bình?

- Input: Danh sách các thí sinh.- Output: Danh sách thí sinh được sắp xếp theo thứ tự giảm dần của điểm trung bình.Ví dụ:

Giải thuật xắp xếp các phần tử của một mảng số thực A có n phần tử theo thứ tự giảm dần?For i:=1 to n-1 do For j:=i+1 to n do

- Input, output?- Input: Danh sách các thí sinh.- Output: Danh sách thí sinh được sắp xếp theo thứ tự giảm dần của điểm trung bình.- Sử dụng bảng phụ.

- Input: Danh sách các học sinh.- Output: Danh sách thí sinh được sắp xếp theo thứ tự giảm dần của điểm trung bình.

For i:=1 to n-1 do For j:=i+1 to n do

Page 30: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy

Hoạt động của trò

If A[j] >A[i]then Begin Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam; End;

Ý tưởng:- Tìm phần tử có giá trị lớn nhất đặt vào vị trí đầu.- Tìm phần tử có giá trị lớn thứ hai đặt vào vị trí thứ hai....- Sau khi đặt xong n-1 phần tử thì ngừng, do lúc này thì phần tử có giá trị nhỏ thứ n cũng đúng vị trí.

Giải thuật:B1: i:=1;B2: Duyệt mảng từ vị trí j:=i+1 đến n để tìm phần tử có giá trị lớn hơn giá trị của phần tử tại vị trí thứ i, nếu gặp thì đổi chỗ các phần tử tại vị trí i và j.B3: Trong khi i<n-1 thì i:=i+1 và quay lại bước 2.B4: Dừng.

- Đoạn chương trình:For i:=1 to n-1 do For j:=i+1 to n do If Lop[j].DTB > Lop[i].DTBthen Begin Tam:=Lop[i]; Lop[i]:=Lop[j]; Lop[j]:=Tam; End;

Giải thuật xắp xếp các phần tử của một mảng số thực A có n phần tử theo thứ tự giảm dần?For i:=1 to n-1 do For j:=i+1 to n do If A[j] >A[i]then Begin Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam; End;

- Để tìm số lớn nhất của một dãy số thì làm thế nào?- Với cách như vậy không sử dụng biến max?- Sắp xếp theo ý tưởng này cũng chính là thực hiện lại nhiều lần việc tìm phần tử lớn nhất.

- Chỉ cần duyệt từ j:=i+1 đến n để tìm phần tử lớn thứ i bởi vì ta cần tìm những phần tử a[j] lớn hơn a[i]

If A[j] >A[i]then Begin Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam; End;

- Duyệt mảng, nếu có phần tử có giá trị lớn hơn max thì gán giá trị max bằng giá trị của phần tử đó.

- Kiểu bản ghi Thisinh.

- A và B cùng kiểu.

Page 31: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy

Hoạt động của trò

còn j=i thì a[j]=a[i].

Ý tưởng?6 7 5 8 9

9 6 5 7 8

9 8 5 6 7

9 8 7 5 6

9 8 7 6 5

- Để thực hiện được câu lệnh Tam:=lop[i] thì tam la biến kiểu gì?- Câu hỏi phụ: Liên hệ đến phần gán giá trị hai biến, A và B trong ví dụ ở phần này có kiểu gì?- Ở đây ta hoán đối giá trị của trường DTB được không?

- Không, nếu làm như vậy thì các thông thi khác sẽ bị xáo.

- In ra màn hình họ tên và điểm trung bình của n thí sinh đã được sắp xếp, mỗi thí sinh trên một dòng.

type thisinh = record SBD:byte; hoten:string[30]; ns:string[10]; gt:char; DLT,DTH,DTB:real; end;

- Tập hợp các đoạn lệnh của HS lại thành chương trình hoàn chỉnh.

- HS ghi bảng:write(‘Ho ten DTB’);For i:=1 to n do write(lop[i].hoten:30, lop[i].DTB:5:1);

Page 32: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy

Hoạt động của trò

var lop:array[1..45]of Thisinh; tam:thisinh; n,i,j:byte;begin write(' Nhap so luong thi sinh: ');readln(n); for i:=1 to n do with lop[i] do begin writeln(' Nhap thong tin cho TS: ',i); lop[i].SBD:=i; write(' Nhap ho ten: ');readln(hoten); write(' Nhap ngay sinh: ');readln(ns); write(' Nhap gioi tinh: ');readln(gt); write(' Nhap diem ly thuyet: ');readln(DLT); write(' Nhap diem thuc hanh: ');readln(DTH); lop[i].DTB:=(lop[i].DTH*2+lop[i].DLT)/3; end; for i:=1 to n-1 do for j:=i+1 to n do if lop[j].DTB>lop[i].DTB then begin tam:=lop[i]; lop[i]:=lop[j]; lop[j]:=tam; end; writeln('Ho va ten',' ':21,'DTB':5); for i:=1 to n do writeln(lop[i].hoten,' ':30-length(lop[i].hoten),lop[i].DTB:5:1); readln;end.

V. CỦNG CỐ BÀI HỌC1. Yêu cầu:

- Viết lại các đoạn chương trình trên thành một chương trình hoàn chỉnh.- Chuẩn bị bài để chuẩn bị cho buổi thực hành trên máy.

2. Bài tập về nhà:Bài 1: Viết lại thành chương trình các bài tập trên.Bài 2: Với kiểu bản ghi thí sinh ở trên, viết chương trình thực hiện các công việc sau:

a. Nhập số liệu cho n thí sinh, với n nhập vào từ bàn phím (0<n<46).b. Xếp loại cho các thí sinh, DTB>=8 xếp loại giỏi, 5.5<=DTB<8 xếp loại khá,

4.5<=DTB<5.5 xếp loại trung bình, DTB<4.5 xếp loại yếu.c. In ra màn hình danh sách học sinh vừa nhập.

Page 33: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

BAÌI THÆÛC HAÌNH 5 (TIÃÚT 32)

I. MỤC ĐÍCH – YÊU CẦU.1. Mục đích.- Giúp HS thành thạo trong sử dụng kiểu bản ghi.- Giúp HS viết được chương trình Pascal giải các bài tập về kiểu bản ghi lên máy.- Biết cách khắc phục những lỗi thường gặp.2. Yêu cầu.- HS nắm được giải thuật của các bài tập về kiểu dữ liệu xâu đã học trong tiết chữa bài

tập.

II. PHƯƠNG PHÁP GIẢNG DẠY.- Hướng dẫn HS xác định lỗi, sửa lỗi không sửa lỗi thay cho HS. - Khuyến khích một số HS làm xong sớm giúp đỡ những bạn chưa làm được bài.

III. CÁC BƯỚC LÊN LỚP. (5’)- Nắm sĩ số và tình hình của lớp.- Ổn định lớp, nhắc nhở HS trước khi vào phòng máy thực hành.- Ra một 2 bài về kiểu dữ liệu xâu để HS thực hành.- Cho HS vào phòng máy, ổn định chỗ ngồi.- Cho HS khởi động máy vào Pascal để thực hành.

IV. NỘI DUNG.1. Các bài cần thực hành: Viết chương trình nhập từ bàn phím thông tin cho n thí sinh. Sắp xếp danh sách thí

sinh theo thứ tự giảm dần của điểm trung bình, in ra màn hình họ tên và điểm trung bình của n thí sinh đã được sắp xếp, mỗi thí sinh trên một dòng.

2. Dự đoán các chương trình HS có thể viết:d. Chương trình:

type thisinh = record SBD:byte; hoten:string[30]; ns:string[10]; gt:char; DLT,DTH,DTB:real; end;var lop:array[1..45]of Thisinh; tam:thisinh; n,i,j:byte;begin write(' Nhap so luong thi sinh: ');readln(n); for i:=1 to n do with lop[i] do begin writeln(' Nhap thong tin cho TS: ',i); lop[i].SBD:=i; write(' Nhap ho ten: ');readln(hoten); write(' Nhap ngay sinh: ');readln(ns); write(' Nhap gioi tinh: ');readln(gt); write(' Nhap diem ly thuyet: ');readln(DLT);

Page 34: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

write(' Nhap diem thuc hanh: ');readln(DTH); lop[i].DTB:=(lop[i].DTH*2+lop[i].DLT)/3; end; for i:=1 to n-1 do for j:=i+1 to n do if lop[j].DTB>lop[i].DTB then begin tam:=lop[i]; lop[i]:=lop[j]; lop[j]:=tam; end; writeln('Ho va ten',' ':21,'DTB':5); for i:=1 to n do writeln(lop[i].hoten,' ':30-length(lop[i].hoten),lop[i].DTB:5:1); readln;end.

Yêu cầu HS:iii. Viết phần nhập dữ liệu cho n thí sinh.iv. Viết đoạn chương trình sắp xếp theo điểm trung bình.v. Viết đoạn chương trình in danh sach thí sinh gồm họ tên và điểm trung bình.

vi. Sau đó cho HS xem chương trình mẫu.

SBD

Ho ten NS GT

DLT DTH DTB

1 Ton That Lam 02/02/1987 T 8 8 82 Nguyen Thi Truc 12/02/1987 F 9 8 8.33 Le Van Linh 12/10/1987 T 10 9 9.34 Vo Thi Tam 24/09/1987 F 8 9 8.75 Tran Linh 22/09/1987 T 7 7 7 SBD

Ho ten NS GT

DLT DTH DTB

1 Le Van Linh 12/10/1987 T 10 9 9.32 Vo Thi Tam 24/09/1987 F 8 9 8.73 Nguyen Thi Truc 12/02/1987 F 9 8 8.34 Ton That Lam 02/02/1987 T 8 8 85 Tran Linh 22/09/1987 T 7 7 7

4. Các lỗi HS có thể mắc phải và hướng dẫn khắc phục.c. Lỗi cú pháp:

Lỗi Khắc phục- Sai từ khóa - Từ khóa có màu trắng, nên xem tại dòng báo lỗi có

từ nào có thể là từ khóa nhưng không hiện màu trắng- Thiều dâu ; - Thông báo lỗi có mã 85, xem ở dòng trên dòng có

vệt sáng câu lệnh không có dấu ‘;’, thêm dâu ; vào cuối câu lệnh đó.

- Thiếu ngoặc ( ),[ ] - Mã lỗi 89 hoặc 93, số ngoặc đóng phải bằng số ngoặc mở.

… - Xem mã lỗi, tra sách để biết lỗi.

Page 35: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

d. Sai giải thuật: Lỗi Khắc phục

- Xác định sai điều kiện lặp. - Kiểm tra lại điều kiện lặp, while: điều kiện được thỏa mãn thì làm; repeat: điều kiện được thỏa mãn thì ngừng; for: xác định rõ số lần lắp, mốc đầu tiên vào mốc cuối cùng.

- Lặp vô hạn do điều kiện lặp không thay đổi qua mỗi bước.

- Có thể do không tăng biến điều kiển vòng lặp.

Page 36: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TIÃÚT 47. TÃÛP VAÌ XÆÍ LÊ TÃÛP

I. MỤC ĐÍCH – YÊU CẦU1. Mục đích:- Giới thiệu cho HS một kiểu dữ liệu mới có thể lưu trữ dữ liệu lâu dài trong bộ nhớ ngoài đó là kiểu dữ liệu tệp.- Nêu lên sự khác nhau giữa kiểu dữ liệu tệp và các kiểu dữ liệu khác.- Giúp học sinh thấy được sự hữu ích của kiểu dữ liệu tệp trong việc lưu trữ lâu dài để xử lý.2. Yêu cầu:- Học sinh cần nắm được cách khai báo và truy xuất kiểu dữ liệu tệp tập trung chủ yếu

vào tệp định kiểu.- Biết được cách truy xuất giá trị của kiểu tệp định kiểu thông các hàm và thủ tục

chuẩn.

II. PHƯƠNG PHÁP GIẢNG DẠY- Sử dụng phương pháp thuyết trình, đặt vấn đề, gợi ý và hướng dẫn để học sinh chiếm

lĩnh tri thức.

III. NỘI DUNG BÀI MỚI

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

TỆP VÀ XỬ LÝ TỆP (Tiết 1 )

1. Khái niệm: + Kiểu dữ liệu tệp là một kiểu dữ liệu có cấu trúc gồm nhiều thành phần cùng kiểu được lưu trữ ở bộ nhớ ngoài (đĩa từ, đĩa quang,… ).Có hai loại tệp thường dùng: tệp định kiểu và tệp văn bản.+Tệp định kiểu là tệp mà các phần tử có cùng một kiểu.+Tệp văn bản bao gồm cá ký tự được phân chia thành một hoặc nhiều dòng.Hai thao tác cơ bản: Đọc và ghi.Cá thao tác với tệp được thực hiện thông qua con trỏ tệp.Đặc điểm của kiểu dữ liệu tệp:+ Lưu trữ lâu dài, có thể được sử dụng nhiều lần.+ Lưu được khối lượng thông

Khác với mảng, số lượng phần tử của tệp là không xác định trước.Hai thao tác cơ bản với tệp là đọc dữ liẹu từ tệp và ghi dữ liệu vào tệp.Thao tác với tệp được thực hiện qua từng phần tử của tệp. Vị trí để đọc/ghi được xác định bởi con trỏ tệp.

Page 37: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

tin lớn.

2. Khai báo biến tệp:Cú pháp:Tệp định kiểu: VAR <tên biến tệp>:FILE OF <kiểu phần tử tệp>;Tệp văn bản: VAR <tên biến tệp>:TEXT;Trong đó: VAR, FILE, OF, TEXT là từ khoá. <kiểu phần tử tệp> là tất cả những kiểu dữ liệu đã học.Ví dụ:VAR F5: FILE OF string; F6: FILE OF Thisinh;

Tương tự như các kiểu dữ liệu khác, muốn làm việc với kiểu dữ liệu tệp ta phải sử dụng biến tệp.

Các kiểu dữ liệu đã học được chia làm mấy loại? Nêu rõ từng loại?

Hai loại:+Kiểu dữ liệu đơn giản: số nguyên, số thực, lôgic, kí tự, miền con.+Kiểu dữ liệu có cấu trúc: mảng, xâu, bản ghi.

3. Xử lý tệp:Các thao tác xử lý tệp:

+ Gán tên tệp. + Mở tệp. + Vào / ra dữ liệu. + Đóng tệp.

Các thao tác xử lý tệp được chia làm 4 nhóm.

a. Gán tên tệp:Cú pháp: ASSIGN(<tên biến tệp>,<tên tệp>);Trong đó <tên tệp> có thể là mộ hàng xâu hoặc một biến xâu.Ví dụ:ST:= ‘SONGUYEN.DAT’;ASSIGN(F2,ST);HoặcASSIGN(F2,’SONGUYEN.DAT’);Giả sử ta có tệp: C:\SOTHUC.INP.S:=’C:\SOTHUC.INP’;ASSIGN(F3,S);Hoặc:ASSIGN(F3,’C:\SOTHUC.INP’);

Để thao tác với tệp, trước hết phải gán tên tệp cho tên biến tệp đã được khai báo.

Giả sử ta chuẩn bị thao tác với một tệp có tên là ‘SOTHUC.INP’ ở thư mục gốc ổ đĩa C: ta làm như thế nào?KQ:S:=’C:\SOTHUC.INP’;ASSIGN(F3,S);Hoặc:ASSIGN(F3,’C:\SOTHUC.INP’);

S:=’C:\SOTHUC.INP’;ASSIGN(F3,S);Hoặc:ASSIGN(F3,’C:\SOTHUC.INP’);

Page 38: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

b. Mở tệp:Có hai cách để mở tệp là: mở tệp để ghi và mở tệp để đọc.+ Cú pháp: - Mở tệp để ghi dữ liệu: REWRITE(<tên biến tệp>); Ví dụ: ST:=DONGUYEN.DAT’; ASSIGN(F2,ST);REWRITE(F2);Hoặc:ASSIGN(F2,’SONGUYEN.DAT’);REWRITE(F2);

Trước khi mở tệp, tên biến tệp phải được gán cho tên tệp bằng thủ tục ASSIGN.

Khi mở tệp bằng thủ tục REWRITE (F2), nếu tại thư mục hiện tại chưa có tệp SONGUYEN.DAT thì tệp sẽ được tạo với nội dung rỗng. Nếu tệp này đã tồn tại thì nội dung thông tin cũ sẽ bị xoá hết để chuẩn bị ghi thông tin mới vào.

- Mở tệp để đọc: RESET(<Tên biến tệp>);Ví dụ: ST:=’SONGUYEN.DAT’; ASSIGN(F2,ST);REWRITE(F2);Hoặc:ASSIGN(F2,’SONGUYEN.DAT’);REWRITE(F2);

Thủ tục này cho phép đọc hoặc ghi dữ liệu với tệp định kiểu và chỉ cho phép đọc dữ liệu đối với tệp văn bản.

c. Đọc/ghi tệp định kiểu:+Ghi dữ liệu vào tệp: WITE(<tên biến tệp>,<tên biến>);Trong đó <tên biến> là cùng kiểu với kiểu phần tử của tệp.Ví dụ: Ghi giá trị 16 vào tệp F2N:=16;WRITE(F2,N);+Đọc dữ liệu từ tệp: READ(<tên biến tệp>,<tên biến>);Trong đó <tên biến> là cùng kiểu với kiểu phần tử của tệp.Sau thao tác đọc ghi tệp con trỏ tệp tự động chuyển đến phần tử tiếp theo.Ví dụ: Đọc một giá từ tệp F2 vào biến N

+ Tệp định kiểu mở bằng thủ tục REWRITE chỉ có thể ghi dữ liệu bằng thủ tục WRITE.

+ Tệp định kiểu mở bằng thủ tục RESET, có thể đọc hoặc ghi thông dữ liệu.

Page 39: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG

Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

READ(F2,N);

d. Đóng tệp:Cú pháp: CLOSE(<tên biến tệp>);Ví dụ: đóng tệp F2 và F3 lại. CLOSE(F2); CLOSE(F3);

Sau khi làm việc với tệp xong ta phải tiến hành đóng tệp lại. Việc đóng tệp là đặc biệt quan trọng sau khi chúng ta ghi thông tin vào tệp.Một tệp sau khi đóng rồi có thể mở lại. Khi mở tệp lại, nếu vẫn dùng biến tệp cũ thì ta không cần thiết phải dùng thủ tục ASSIGN để gán lại tên tệp.

e. Một số hàm và thủ tục chẩn thường dùng trong thao tác tệp:Hàm logic: EOF(<tên biến tệp>);Hàm cho giá trị TRUE nếu con trỏ tệp đang ở vị trí cuối tệp, ngược lại cho giá trị FALSE.

Giả sử ta có tệp F2 như sau:

1 2 3 4EOF

1 2 3 4 EOF

EOF(F2)=False

EOF(F2)=True

Thủ tục: SEEK(<tên biến tệp>,<tên biến>);Trong đó: <tên biến> là biến kiểu số nguyên.Ý nghĩa: đưa con trỏ tệp đến vị trí phần tử có có số thứ tự được xác định bởi giá trị của tên biến.Các phần tử của tệp được đánh số thứ tự bắt đầu tự 0.

1 2 3 4 EOF

1 2 3 4 EOF

N:=2;SEEK(F2,N)

V. CỦNG CỐ BÀI HỌC. 1. Yêu cầu:

- Học sinh cần nắm được cách khai báo kiẻu dữ liệu tệp.- Nắm được các hàm và thủ tục thao tác trên tệp định kiểu.

2. Bài tập:

Page 40: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

Khai báo kiểu tệp có kiểu phần là kiểu số nguyên. Viết chương trình nhập vào từ bàn phím n số nguyên (n nhập vào từ bàn phím) và tiến hành lưu vào tệp có tên ‘SONGUYEN.INP’.

Page 41: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TIÃÚT 48. TÃÛP VAÌ XÆÍ LÊ TÃÛP (TIÃÚT 2)I. MỤC ĐÍCH – YÊU CẦU

1. Mục đích:Nêu lên sự khác nhau giữa tệp định kiểu và các tệp văn bản.Giới thiệu cho học sinh một số hàm và thủ tục thao tác trên tệp văn bản.

2. Yêu cầu:Học sinh cần nắm được cách khai báo và truy xuất kiểu dữ liệu tệp (tệp định kiểu và tệp văn bản).Biết được cách truy xuất giá trị của kiểu tệp (định kiểu và văn bản) thông các hàm và thủ tục chuẩn.

II. PHƯƠNG PHÁP GIẢNG DẠY- Sử dụng phương pháp thuyết trình, đặt vấn đề, gợi ý và hướng dẫn để học sinh chiếm lĩnh tri

thức.III. CÁC BƯỚC LÊN LỚP

1. Ổn định lớp:- Nắm sĩ số và tình hình của lớp.2. Kiểm tra bài cũ:- Câu hỏi: Cú pháp khai báo tệp định kiểu, tệp văn bản mỗi loại cho một ví dụ?- Dự kiến:Tệp định kiểu:

VAR <tên biến tệp>:FILE OF <kiểu phần tử tệp>;Tệp văn bản:

VAR <tên biến tệp>:TEXT;Ví dụ:

VAR F1: FILE OF BYTE;VAR F2: TEXT;

TG Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

TỆP VÀ XỬ LÝ TỆP (Tiết 2)

3.Xử lý tệp:f.Ví dụ áp dụng:+Ví dụ 1: (trang 92 SGK)Input: - số học sinh của một lớp. - dữ liệu về các HS đó.Output: tệp KQ.DAT chứa dữ liệu của các HS.

Khai báo biến:TYPE Hocsinh = RECORD Hoten:string[28]; Diem:byte; END;VAR F: FILE OF Hocsinh; HS:Hocsinh; N,i,TG: byte; Tentep:string[10];Nhập dữ liệu:

+Input, output?

Biến bản ghi HS có mấy trường?Khai báo biến bản ghi HS?

Các bước mở một tệp

Input: - số học sinh của một lớp. - dữ liệu về các HS đó.Output: tệp KQ.DAT chứa dữ liệu của các HS.

2 trường.

TYPE Hocsinh = RECORD Hoten:string[28]; Diem:byte;END;VAR F: FILE OF Hocsinh;

Page 42: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy Hoạt động của tròTentep:=’KQ.DAT’;ASSIGN(F,tentep);REWRITE(F);

Write(‘Nhap so hoc sinh: ’);Readln(N);

For i:=1 to n do Begin Write(‘Ho va ten: ’); Readln(HS.Hoten); Write(‘Diem Tin: ’); Readln(HS.Diem); Write(F, HS); End;

Close(F);

+Ví dụ 2: (trang 94 SGK)Input: dữ liệu từ tệp KQ.DATOutput: điểm trung bình môn tin học của lớp.

Reset(F);

N:=0; TG:=0;

While not Eof(F) do Begin Read(F, HS); TG:=TG+HS.Diem; N:=N+1; End;

Writeln(‘Diem trung binh cua lop: ’, TG/N:8:2);

Close(F);

g.Đọc/ghi tệp văn bản:

để ghi dữ liệu?

Cách truy xuất đến một trường của biến bản ghi?

Thủ tục ghi một giá trị vào tệp định kiểu?

Sau khi làm việc với tệp xong ta cần phải làm gì để khỏi bị mất dữ liệu?

Input, Output?

Các bước mở một tệp để đọc dữ liệu?

Hàm nào xác định là đã kết thúc tệp hay chưa?

Thủ tục đọc một giá trị từ tệp?

Để tính điểm trung bình của tất cả các hS trong một lớp, ta dung một biến TG để tính điểm tổng của các HS trong lớp. Sau đó chia cho số HS là được ĐTB.

Khai báo tệp văn bản F?

+Gán tên tệp cho biến tệp bằng thủ tục ASSIGN.+Mỏ tệp bằng thủ tục REWRITE.

<tên biến bản ghi>.<tên trường>

Write(<tên biến tệp>,<tên biến>);

Đóng tệp lại bằng thủ tục CLOSE(<tên biến tệp>);Input: dữ liệu từ tệp KQ.DATOutput: điểm trung bình môn tin học của lớp.

+Gán tên tệp cho biến tệp bằng thủ tục ASSIGN.+Mỏ tệp bằng thủ tục RESET.

Hàm EOF(<tên biến tệp>);

Read(<tên biến tệp>, <tên biến>);

Var F:TEXT;

Page 43: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy Hoạt động của tròVar F: TEXT;

+Thủ tục ghi: WRITE(<tên biến tệp>,<danh sách các giá trị>); WRITELN(<tên biến tệp>,<danh sách các giá trị>);

Ví dụ: ASSIGN(F,’VB.DAT’); REWRITE(F); Writeln(F, ‘1’, ‘ ‘, ‘2’); Write(F, ‘3’, ‘ ‘, ‘4’); F

+Thủ tục đọc: READ(<tên biến tệp>,<danh sách các biến>); READLN(<tên biến tệp>,<danh sách các biến>);Vi dụ: ASSIGN(F,’VB.DAT’); RESET(F); Readln(F, m, n);Khi đó m=1 và n=2.+Ví dụ 1: Var FA, FB: TEXT;

Read(FA, X, Y);Write(FB, ‘X=’,X, ‘Y=’,Y);+Ví dụ 2: (trang 96 SGK)Input: số n và toạ độ của n đỉnh liên tiếp của đường gấp khúc.Output: tệp GAPKHUC.INP mỗi dòng chứa 2 số nguyên là toạ độ của 1 đỉnh.

Var F,F1:TEXT; i, N, X, Y:integer; tentep:string[10];

Cách mở tệp văn bản ra để ghi/đọc tương tự như cách mở tệp định kiểu.Thông tin trong tệp văn bản được chia làm nhiều dòng.

WRITELN(F);

Trong đó DS các giá trị có thể là hằng, biến hoặc các biểu thức (số học, logic) và nếu có nhiều giá trị thì giữa các giá trị đó cách nhau bởi dấu phẩy.

Trong đó danh sách biến có thể là một hoặc nhiều tên biến và giữa chúng cách nhau bởi dấu phẩy.

FA, FB là biến tệp kiểu gì?

Thủ tục mở tệp FA để đọc?

Thủ tục mở tệp FB để ghi?

Khi đó ta có thể thực hiện các câu lệnh sau:

Input, output?

Biến tệp văn bản.

RESET(FA);

REWRITE(FB);

Input: số n và toạ độ của n đỉnh liên tiếp của đường gấp khúc.Output: tệp GAPKHUC.INP mỗi dòng chứa 2 số nguyên dương là toạ độ của một đỉnh.

1 23 4

Page 44: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Nội dung ghi bảng Hoạt động của thầy Hoạt động của trò

tentep:=’GAPKHUC.INP’;ASSIGN(F,tentep);REWRITE(F);

Write(‘Nhap n: ’); readln(N);For i:=1 to N do Begin Write(‘X, Y: ‘); readln(X,Y); Writeln(F, X, ‘ ‘, Y); End;Close(F);+Ví dụ 3: (trang 97 SGK)Input: dữ liệu chứa trong tệp GAPKHUC.INPOutput: tệp GAPKHUC.OUT chứa chu vi giới hạn bởi đường gấp khúc.

Reset(F);Readln(F, X, Y);X0:=X; Y0:=Y; L:=0;While not EOF(F) do Begin X1:=X; Y1:=Y; Readln(F, X, Y); L:=L+ABS(X-X1)+ABS(Y-Y1); End;L:=L+ABS(X-X0)+ABS(Y-Y0);Close(F);ASSIGN(F1,’GAPKHUC.OUT’);REWRITE(F1);Writeln(F1,’ Chu vi: ‘, L);Close(F1);

Input, output? Input: dữ liệu chứa trong tệp GAPKHUC.INP

Output: tệp GAPKHUC.OUT chứa chu vi giới hạn bởi đường gấp khúc.

IV. CỦNG CỐ BÀI HỌC. 1.Củng cố:

- Học sinh cần nắm được cách khai báo kiểu dữ liệu tệp văn bản.- Nắm được các hàm và thủ tục thao tác trên tệp định kiểu.

2.Bài tập:Viết chương trình nhập tạo một tệp văn bản có nội dung bất kỳ nhập vào từ bàn phím và lưu

lại thành tệp có tên và VANBAN.DAT. Sau đó in ra màn hình số dòng và số từ có trong tệp VANBAN.DAT. Từ là một dãy liên tiếp các ký tự không chứa ký tự trắng, ví dụ: xâu ‘asd ahsf aasfghhgh’ có 3 từ.

Page 45: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TIÃÚT 49. BAÌI TÁÛP KIÃØU TÃÛP

I. MỤC ĐÍCH – YÊU CẦU.1. Mục đích:

- Giúp HS thành thạo trong sử dụng kiểu dữ liệu bản ghi.- Thông qua những ví dụ, bài tập được sửa, HS có thể nắm được phương pháp giải quyết các bài toán thực tế như: Sắp xếp, tìm kiếm trên mảng các bản ghi theo điều kiện bài toán.

2. Yêu cầu:- Học sinh cần nắm được các cách khai báo kiểu dữ liệu bản ghi.- Học sinh làm bài tập trước ở nhà.

II. PHƯƠNG PHÁP GIẢNG DẠY.- Sử dụng phương pháp đặt vấn đề, gợi ý, đàm thoại, hướng dẫn.

III. CÁC BƯỚC LÊN LỚP.1. Ổn định lớp:

- Nắm sĩ số và tình hình của lớp.2. Kiểm tra bài cũ:

- Haîy nãu caïch khai baïo mäüt file âënh kiãøu. Cho vê duû. - Haîy nãu mäüt säú haìm vaì thuí tuûc trãn file âënh kiãøu. Cho mäüt vê

duû/mäùi haìm hoàûc thuí tuûc. IV. NÄÜI DUNG BAÌI MÅÏITG Näüi dung ghi baíng Hoaût âäüng cuía tháöy Hoaût âäüng cuía troì25’ Baìi táûp 4/ SGK p. 99

Chæång trçnh: Uses crt;Type nguoi= record Hoten:string[30]; Tuoi:byte; Qh:string[10]; End;Var x:nguoi; f:file of nguoi; I,N:byte;Begin Clrscr; Assign(f,’quanhe.dat’); Rewrite(f); Write(‘Nhap so nguoi than:’): Readln(n); For i:=1 to n do Begin Write(‘nhap hoten:’); Readln(x.hoten);Write(‘tuoi: ’); Readln(x.tuoi);Write(‘quan he: ’); Readln(x.qh);Write(f,X); End; Close(f);Writeln(‘danh sach da nhap:’);

Âãø læu thäng tin cho 1 ngæåìi thán, ta cáön täø chæïc kiãøu dæî liãûu gç?

Âãø læu træî danh saïch ngæåìi thán lãn âéa ta duìng kiãøu dæî liãûu gç?

Thuí tuûc naìo duìng âãø gaïn tãn file?Âãø måí 1 file måïi ta duìng thuí tuûc gç? Ta coï nháûp dæî liãûu træûc tiãúp cho file âæåüc khäng?

Âãø xaïc âënh file coï bao

- Kiãøu baín ghi.Type nguoi= record Hoten:string[30]; Tuoi:byte; Qh:string[10]; End;- Kiãøu fileVar f:file of nguoi; - Thuí tuûc Assign

- Thuí tuûc Rewrite

- khäng thãø nháûp træûc tiãúp, maì ta nháûp thäng tin cho 1 biãún baín ghi, sau âoï ghi giaï trë biãún baín ghi vaìo cho file.

Page 46: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TG Näüi dung ghi baíng Hoaût âäüng cuía tháöy Hoaût âäüng cuía troì

7’

Reset(f); For i:=1 to filesize(f) do Begin Read(f,X); Writeln(x.hoten,’ ‘,x.tuoi,’ ‘,x.qh); End;Close(f);ReadlnEnd.

Bt5/SGK p.99Yãu cáöu hoüc sinh laìm tæång tæû baìi táûp 4.

nhiãu pháön tæí ta duìng haìm gç?

Taûi mäùi pháön tæí cuía file ta thæûc hiãûn cäng viãûc gç?

Haìm Filesize

Âoüc giaï trë cuía file, gaïn cho biãún baín ghi X, sau âoï in giaï trë tæìng træåìng cuía biãún X ra maìn hçnh.

V. CUÍNG CÄÚ BAÌI HOÜC: - Yãu cáöu HS vãö nhaì hoaìn thaình baìi táûp 5 âãø chuáøn bë cho tiãút thæûc haình vaì än táûp tiãúp theo.- Nhàõc laûi træåìng håüp naìo måí file måïi, måí file âaî coï trãn âéa. - Caïch truy xuáút âãún pháön tæí cuía file.

TIÃÚT 50. ÄN TÁÛPI. LYÏ THUYÃÚT: 1. Kiãøu baín ghi:

- Caïch khai baïo- Caïch laìm viãûc våïi baín ghi (thäng qua tæìng træåìng)

2. Kiãøu file: - Caïch khai baïo file âënh kiãøu, file vàn baín- Caïc thao taïc cå baín trãn file: âoüc & ghi- Mäüt säú haìm vaì thuí tuûc trãn kiãøu file

II. BAÌI TÁÛP: 1. Nháûp vaìo 1 file säú nguyãn gäöm n pháön tæí. In ra maìn hçnh täøng cuía caïc pháön tæí chia hãút cho 3 hoàûc 5 vaì caïc pháön tæí âoï. 2. Cho A(x,y) laì mäüt âiãøm trãn màût phàóng toaû âäü. Haîy nháûp vaìo 1 file gäöm n âiãøm. In ra maìn hçnh caïc âiãøm nàòm åí goïc pháön tæ thæï nháút. Hæåïng dáùn: âiãøm nàòm åí goïc pháön tæ thæï nháút coï x>0, y>0. Tæïc laì A.x>0 and A.y>0.

Page 47: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

TIÃÚT 51. KIÃØM TRA 1 TIÃÚT

Baìi 1. Cho A(x,y) laì mäüt âiãøm trãn màût phàóng toaû âäü. Haîy nháûp vaìo 1 file gäöm n âiãøm. In ra maìn hçnh caïc âiãøm nàòm trãn âæåìng phán giaïc cuía goïc pháön tæ thæï nháút. Baìi 2. Nháûp vaìo 1 file säú nguyãn gäöm n pháön tæí. In ra maìn hçnh pháön tæí coï giaï trë låïn nháút vaì täøng cuía caïc pháön tæí âoï.Chæång trçnh:

Baìi 1. Uses crt; Type diem=record

X,Y:real; End;

Var f:file of diem; A:diem;I,n: byte;

Begin Clrscr; Assign(f,’diem.dat’); Rewrite(f); Write(‘Nhap so diem: ’): Readln(n); For i:=1 to n do Begin Write(‘nhap hoanh do:’); Readln(A.x);

Write(‘nhap tung do:’); Readln(A.y);Write(f,A); End; Close(f);Writeln(‘Cac diem nam tren duong phan giac cua goc phan tu thu nhat:’);Reset(f); For i:=1 to filesize(f) do Begin Read(f,X); If (A.x=A.y) and (A.x>0) and (A.y>0) then Write(A.x:5:2,’ ‘,A.y:5:2,’ ‘); End;Close(f);ReadlnEnd.

Baìi 2. Uses crt; Var f:file of integer; max:integer;

I,n,X: integer; Begin Clrscr; Assign(f,’somax.dat’); Rewrite(f); Write(‘Nhap so phan tu: ’): Readln(n); For i:=1 to n do Begin Write(‘nhap gia tri phan tu:’); Readln(X);Write(f,X); End; Close(f);Reset(f);Read(f,max);While not eof(f) do

Begin Read(f,X); If max<X then max:=X; End; Seek(f,0);Writeln(‘Gia tri lon nhat trong file la: ’,max);Writeln(‘Cac phan tu dat gia tri lon nhat:’);For i:=1 to filesize(f) do Begin Read(f,X); If max=X then writeln(‘phan tu thu ’,i-1); End; Close(f);ReadlnEnd.

Page 48: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

Chương 6CHƯƠNG TRÌNH CON

Tiết 52,53 $1. CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI$2. CÁCH VIẾT VÀ SỬ DỤNG THỦ TỤC

I.Mục đích –Yêu cầu: Giới thiệu chương trình con, lợi ích và sự cần thiết sử dụng CTC Phân biệt Hàm & Thủ tục

II. Phương pháp sử dụng: Gợi mở nêu vấn đề & giải quyết vấn đềIII.Các bước lên lớp:

1. Ổn định lớp: Ktra sĩ số2. Đặt vấn đề vào bài mới:(5’)Trong thực tế khi giải quyết các bài toán lớn, phức tạp, chương trình thường dài, gồm hàng

trăm, nghìn lệnh. Đọc các chương trình dài rất khó nhận biết được chương trình thực hiện được công việc gì? Vì thế vấn đề đặt ra là phải cấu tạo chương trình như thế nào để cho chương trình dễ đọc, dễ hiểu. Để giải quyết vấn đề đó ta vào nghiên cứu bài Chương trình con.IV. Nội dung bài mới: T/g

Nội dung ghi bảng Hoạt động giáo viên Hoạt động học sinh

5’

5’

5’

10

CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI

1. Định nghĩa: Chương trình con thực chất là một khối lệnh( tập các lệnh) nhằm giải quyết một bài toán con để góp phần giải quyết một bài toán lớn hơn bằng 1 chương trình.

2. Lợi ích của việc sử dụng chương trình con( SGK)

3. Phân loại: Hàm & Thủ tục

CÁCH VIẾT VÀ SỬ DỤNG THỦ TỤC

1. Ví dụ: Viết chương trình vẽ hình chữ nhật sau: *** **** * * *** ****

Trong thực tế khi giải quyết một vấn đề lớn, phức tạp ta thuờng chia thành các vấn đề nhỏ. Vì thế cần định chương trình thành các khối( các môđun), mỗi khối bao gồm các lệnh giải quyết một bài toán cụ thể nào đó.

Gọi học sinh lên bảng

Muốn vẽ hình chữ nhật bên thì ta sử dụng 3 lệnh trên.Vậy thì vấn đề đặt ra là vẽ 3 hcn thì sao ?

Program Vidu; Begin

Writeln(‘*** ****’);Writeln(‘* *’);Writeln(‘*** ****’);Readln; End.

Cũng như chương trình trên ta sử dụng 9 lệnhProgram Vidu; Begin

Writeln(‘*** ****’);Writeln(‘* *’);

Page 49: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

3’

3’

7’

3’

2. Thủ tục: Thủ tục có cấu trúc hoàn toàn giống như một chương trình, trừ dòng đầu tiên và dòng cuối cùng.PROCEDURE <Tên thủ tục>[(Danh sách tham số) ]; {Phần khai báo}BEGIN {Dãy các lệnh}END;

-Vị trí của thủ tục nằm sau phần khai báo biến.- Khi cần sử dụng thủ tục ta phải viết lời gọi thủ tục tương tự như gọi các thủ tục chuẩn.

Như vậy mỗi lần in ra 1 hcn trên cần phải đưa vào 3 câu lệnh đó.Nếu yêu cầu vẽ 1000 hcn trên thì sử dụng bao nhiêu lệnh ?Việc viết đi viết lại các lệnh đó gây mất thời gian.Do đó người ta đưa 3 lệnh trên vào 1 thủ tục có tên là Ve_hcn và mỗi lần vẽ hình nhật đó ta chỉ cần viết ra 3 lời gọi thủ tục.Vậy thì thủ tục là gì ?

Tên thủ tục được đặt giống như tên chương trình. Hãy quy tắc đặt tên chương trình ?

Phần khai báo bao gồm những loại nào?Ví dụ thủ tục vẽ hcn trên không có tham số nên ko có phần khai báo.

Writeln(‘*** ****’);Writeln(‘*** ****’);Writeln(‘* *’);Writeln(‘*** ****’);Writeln(‘*** ****’);Writeln(‘* *’);Writeln(‘*** ****’); Readln; End.

3000 lệnh

Trả lời

Trả lời

V. CỦNG CỐ: (5’)- Khái niệm chương trình con : thủ tục, hàm- Khi nào cần sử dụng chương trình con- Cấu trúc của thủ tục

$2. CÁCH VIẾT VÀ SỬ DỤNG THỦ TỤC (tiếp theo)I.Mục đích – Yêu cầu:

Giới thiệu thủ tục có tham số và thủ tục không có tham số

Page 50: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

Giới thiệu khái niệm tham số, phân biệt các loại tham số (giá trị và biến)II. Phương pháp sử dụng: Nêu vấn đề và giải quyết vấn đề.III. Các bước lên lớp:

1. Ổn định lớp: Kiểm tra sĩ số2. Kiểm tra bài cũ:(5’)

CH1: Nêu khái niệm chương trình con và lợi ích của việc sử dụng chương trình con CH2: Nêu cấu trúc của thủ tục và các thành phần trong thủ tục.

3. Đặt vấn đề vào bài mới(3’)Trong ví dụ đã xem xét, mỗi khi thực hiện thủ tục Ve_Hcn đều vẽ hình chữ nhật có kích thước

cố định 7x 3. Khi cần vẽ 3 hcn cùng có kích thước như vậy, chương trình chỉ cần gọi thủ tục Ve_Hcn 3 lần. Nếu cần vẽ 3 hình chữ nhật nhưng với kích thước khác nhau thì ko thể sử dụng thủ tục Ve_Hcn như trước nữa. Vậy để viết thủ tục vẽ hình chữ nhật sao cho mỗi khi gọi nó thực hiện, chương trình chính quy định được kích thước hình chữ nhật mà thủ tục này phải vẽ ở lần thực hiện đó. Để tìm hiểu điều này ta vào phần 3 (Tham số).IV.Nội dung bài mới: T/g Nội dung ghi bảng Hoạt động giáo viên Hoạt động HS

5’

5’

5’

10’

4. Tham số: a.Tham số giá trị:Ví dụ 1Procedure Ve_HCN(Dai, Rong:Integer);….Begin Ve_HCN(25,10);End.

- Khi gọi thủ tục các tham số hình thức được thay bởi các tham số thực sự tương ứng.

- Tham số Dai, Rong ở trên được gọi là tham số giá trị.

- Tham số giá trị có thể là hằng hay biểu thức.

b. Tham số bi ến: V í d ụ : Procedure HoanDoi ( V ar X, Y : Integer);

- X, Y gọi là tham biến Tham biến : Trước và sau khi gọi thủ tục các tham biến đã thay đổi, giá trị của tham biến sau lời gọi thủ tục là giá trị sau cùng khi kết thúc thủ tục.

CT4Procedure Hoan_doi( Var A: Integer; B:Integer);…..BeginA:=5; B:=10; Hoan_doi (A, B);

Dai, Rong được gọi là tham số hình thức25, 10 gọi là tham số thực sự.

Các lời gọi sau đây có hợp lệ không ?Ve_HCN(25,10);Ve_HCN(5, X);Ve_HCN(3*x+2, 2*x);

Sau lời gọi thủ tục A, B ?

Hợp lệKhông hợp lệHợp lệ

A=10, B=10

Page 51: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

5’

End.Kết quả A:=10, B=10 Sự khác nhau giữa Tham trị & Tham Biến

- Về hình thức: + Tham biến có từ khoá VAR đứng trước + Tham trị không có từ khoá VAR đứng trước.

Chú ý:Khi tham số hình thức thuộc kiểu dữ liệu là kiểu có cấu trúc thì ta phải khai báo kiểu trướcVí dụ:Khai báo kiểu trước:Type Mang= Array [1..10] of Byte; Xau = String[10];Sau đó mới dung:

Procedure Delta( M:mang; Var X: Xau );

Các lời gọi sau có hợp lệ không?Hoan_Doi(A,10);Hoan_Doi(10,B);Hoan_Doi(A+3,B);

CóKhôngKhông

V. Củng cố(2’)- Nhắc lại tham trị, tham biến- Phân biệt sự khác nhau giữa tham trị và tham biến.

Tiết 54.

$ 3. CÁCH VIẾT VÀ SỬ DỤNG HÀMI. Mục đích – Yêu cầu: - HS cần nắm được sự giống nhau và khác nhau giữa thủ tục và hàm - Rèn luyện cho HS kĩ năng + nhận biết được các thành phần trong đầu hàm + nhận biết được các câu lệnh sử dụng hàm ở chương trình chính cùng các tham sốII. Phương pháp sử dụng: Nêu vấn đề, giải quyết vấn đềIII. Nội dung lên lớp:

1. Ổn định lớp: Kiểm tra sĩ số (1’)2. Kiểm tra bài cũ: Nêu cách viết và sử dụng thủ tục ? (5’)

IV. Nội dung bài giảng:

T/g Nội dung ghi bảng Hoạt động giáo viên Hoạt động h/s

Page 52: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

5’

5’

10’

5’

10’

CÁCH VIẾT VÀ SỬ DỤNG HÀM1. .Định nghĩa:

Hàm là chương trình con, luôn cho một giá trị kết quả thuộc kiểu xác định và giá trị đó gán cho tên hàm.

2. Cách viết đầu hàm: FUNCTION <Tên hàm>([Danh sách tham số]): <Kiểu của hàm>; Chú ý :- Kiểu của hàm là kiểu kết quả của hàm

(Integer, Real, Char, Boolean, String) - Trong thân của hàm phải có lệnh

<Tên hàm>:= <Biểu thức>;Ví dụ:Viết chương trình giản ước phân số

Function UCLN( X, Y:Integer):Integer; Begin If X= Y Then UCLN:=X Else While X<>Y do If X>Y Then X:=X-Y else Y:=Y-X; End;Begin Nhập tử số; Mẫu sốA:=UCLN(Tuso, Mauso);IF A>1 Then BeginTuso:=Tuso div A;Mauso:= Mauso div A; End;In Tuso, Mauso

3. Cách sử dụng hàm: - Hoàn toàn giống hàm chuẩn- Lời gọi hàm có thể tham gia vào biểu

thức như một toán hạng hoặc tham số lời gọi hàm hay thủ tục khác.

- Vì kết quả trả ra đã gán cho tên hàm nên thông thường các tham số dùng trong 1 hàm là tham số giá trị.

Ví dụ: A:= Ucln(Tuso, Mauso)+1;Tìm số lớn nhât trong 3 số (SGK)

Vậy giữa hàm &thủ tục giống nhau và khá nhau chỗ nào ?

Để giản ước phân số ta làm thế nào?

- Nhắc lại thuật toán tìm UCLN(a,b)

Nêu một số hàm chuẩn đã học ?

Thế nào là tham trị ?

Nêu giải thuật tìm số lớn nhất trong 2 sốLưu ý học sinh Lời gọi hàm là tham số của hàm khácMax(Max(a, b), c)

Trả lời

- Tìm UCLN của tử số và mẫu số

- Tửsố và mẫu số chia cho UCLN- Trả lời

Học sinh tự rút ra sự khác nhau giữa 2 hàm.

V Củng cố(4’)- Nhắc lại hàm và cách sử dụng hàm- Nêu lại điểm khác biệt giữa hàm & thủ tục

Page 53: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

Tiết 55.$4. BIẾN CỤC BỘ VÀ BIẾN TOÀN BỘ

I. Mục đích – Yêu cầu:Học sinh cần nắm được:

- Các biến khai báo trong phần khai báo chương trình là biến toàn bộ và chúng được sử dụng trong toàn bộ chương trình.

- Các biến khai báo trong phần khai báo chương trình con là biến cục bộ và chỉ sử dụng trong chương trình con này.

II. Phương pháp sử dụng: Nêu vấn đề và giải quyết vấn đềIII. Các bước lên lớp:

1. Ổn định lớp: Kiểm tra sĩ số (5’)2. Kiểm tra bài cũ:5’Câu hỏi:1. Nêu cách viết đầu hàm. Hàm và thủ tục giống nhau và khác nhau ở điểm nào ?2. Xây dựng hàm tìm số lớn nhất giữa 2 số a và b. Sau đó áp dụng để tìm số lớn nhất của 4 số x, y, z, t.

IV. Nội dung bài mới: T/g Nội dung ghi bảng Hoạt động giáo viên Hoạt động học sinh

Page 54: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

5’

5’

5’

5’

5’

BIẾN CỤC BỘ&

BIẾN TOÀN BỘ1.Định nghĩa:- Các biến được khai báo trong chương trình con chỉ có tác dụng trong CTC đó gọi là biến cục bộ.- Các biến được khai báo trong chương trình chính gọi là biến toàn bộ và các CTC được phép sử dụng các biến này.

Ví dụ1:Xét 2 biến x,y được khai báo trong chương trình dưới đây:Var x:integer; Procedure CTC; Var y: integer; Begin

{ Tại đây có thể sử dụng cả x và y}. End;BEGIN

{ Tại đây có thể sử dụng cả x }.

END.

Ví dụ2:Trường hợp CTC khai báo một biến cục bộ trùng tên với một biến toàn bộ, khi đó CTC chỉ tác động được vào biến cục bộ này chứ không tác động được vào biến toàn bộ ( trùng tên). Trường hợp gọi là “Che khuất biến” Ví dụ 3: (SKG)

Trong ví dụ ở tiết trước Tìm Giản ước phân số.Hãy cho biết biến nào là biến cục bộ ? biến toàn bộ ?

- X: Biến toàn bộ- Trong CTC có thể

sử dụng x,y - Tai CT chính có

thể sử dụng biến x nhưng nếu biến y sử dụng CT sẽ báo lỗi.

Cho biết các câu lệnh sau đúng hay sai ?

- Writeln(x, ‘ ‘,y) ; trong thân CTC có hợp lệ ko ? Trong chương trình chính có hợp lệ ko ?

- X:=2*X đặt trong chương trình có hợp lệ không?

- X:=X-Y hợp lệ khi đặt trong thân thủ tục hay thân chương trình

I:=1

Củng cố nếu không bị che khuất, biến toàn bộ

- x,y là biến cục bộ.

- Tuso, Mauso là biến toàn bộ

Hợp lệ trong CTCKhông hợp lệ trong chương trình chính.

Hợp lệ

Thân thủ tục

Page 55: thpt-ploc.thuathienhue.edu.vnthpt-ploc.thuathienhue.edu.vn/imgs/Thu_muc_he_thong/_Nam... · Web viewI. Mục đích – Yêu cầu. Mục đích: Đưa ra khái niệm về kiểu

được sử dụng và thay đổi.

V. Củng cố: (5’)Nhắc lại việc sử dụng biến cục bộ và biến toàn bộ, sự khác nhau giữa 2 loại biến đó.

BTVN: Bài 5/118