Kiểm tra bài cũ Câu hỏi: Nêu cách khai báo một xâu và tham chiếu đến một phần tử thứ i của xâu?. Bài m i ới GV soạn sẵn các ví dụ để chiếu và chạy thử cho học sinh tiện theo dõi và không
Trang 1Tiết 30
Bài 12 KIỂU XÂU
I Mục đích, yêu cầu
- Biết xâu là một dãy kí tự (có thể coi xâu là mảng một chiều)
- Biết cách khai báo xâu, truy cập phần tử của xâu
- Nhận biết và bước đầu sử dụng được một số thủ tục, hàm thông dụng về xâu
II Phương tiện dạy học
- Máy chiếu Projector
- Nếu không có máy, GV có thể chuẩn bị các ví dụ minh họa trên khổ giấy lớn
III Hoạt động dạy – học
1 Ổn định lớp
2 Kiểm tra bài cũ: Không kiểm tra bài cũ
3 Tiến trình tiết dạy:
- Đặt vấn đề:
+ Trình chiếu Slide1: em hãy cho biết kết quả sau khi thực
hiện chương trình dưới đây:
var ht:char;
begin
write('nhap ho va ten:');readln(ht);
write(ht);
readln;
end
+ Rõ ràng, không thể in ra được họ tên nếu ta khai báo
biến ht:char Vậy có cách nào không?
+ Phân tích các câu trả lời của HS (nếu có)
+ Quay lại với CT: nếu ta sửa kiểu char thành string có
in ra được họ tên không? Chạy thử cho HS thấy? Vậy kiểu
string là gì? Thì hôm nay các em sẽ học 1 kiểu dữ liệu mới
nữa đó là kiểu xâu, là kiểu dữ liệu có cấu trúc
- Ghi đầu bài
- H: Kiểu dữ liệu xâu là kiểu như thế nào?
- Nhấn mạnh khái niệm xâu và ghi bảng 1 số ý chính:
+ dãy các kí tự
- HS lên bảng làm, HS khác theo dõi, nhận xét.(có thể coi như đây là phần kiểm tra bài cũ)
kết quả:
nhap ho va ten:Nguyen Vu
N
- TL
- Quan sát trên màn hình
- TL
- Nghe giảng, trả lời câu hỏi, ghi vở
Trang 2VD: ‘Bach Khoa’; ‘A’, ‘’
H: Trong CT, khi viết 1 xâu, ta viết trong ‘’, nhưng khi
nhập từ bàn phím giá trị một xâu, có cần ‘’ không?
+ Độ dài xâu
VD: ‘Nguyen Vu’ L = ? (9, kể cả kí tự rỗng)
Nếu L = 0 thì gọi là xâu gì? (xâu rỗng)
+ 1 mảng một chiều mà mỗi phần tử là 1 kí tự
+ Tham chiếu tới phần tử của xâu: tên biến [chỉ số]
VD: Để tham chiếu đến ptử thứ 6 của xâu trên ta viết thế
nào? (ht[6] ‘n’)
- Kiểu xâu được khai báo thế nào, ta vào phần 1
1 Khai báo
- Chiếu lại Slide 1
- Ghi và giảng phần khai báo, cho ví dụ
var <tên biến> : string [độ dài lớn nhất của xâu]
VD:
var ht: string [25];
Có thể bỏ qua phần khai báo độ dài được không?
var ht: string;
H: Phân tích sự khác nhau giữa 2 cách khai báo trên?
(GV gọi bất kỳ 1 HS trong nhóm trả lời)
* Nhấn mạnh:
để tránh lãng phí bộ nhớ
2 Các thao tác xử lý xâu:
những ý chính
- TL
- TL
- TL
- TL
- Quan sát cách khai báo trong chương trình trên
- TL
- HS có thể thảo luận với nhau trong vòng 1 phút
- Nghe, tự ghi
Trang 3- Lần lượt giảng 8 thao tác xử lý xâu, nhất là ý nghĩa các
hàm và thủ tục chuẩn trên xâu
- Các ví dụ được trình chếu bằng Slide
a) Phép ghép xâu
VD: ‘pas’+’cal’ = ‘pascal’
b) Phép so sánh xâu (=, <>, <, >, <=, >=)
Chú ý 2 qui tắc so sánh xâu
c) Thủ tục delete(st, vt, n)
d) Thủ tục insert(s1, s2, vt)
e) Hàm copy(S, vt, N)
f) Hàm length(s)
g) Hàm pos(s1,s2)
h) Hàm upcase(ch)
Lưu ý:
* Các hàm trên kiểu xâu cho kết quả trả về là 1 giá trị (số, kí
tự hay xâu)
* Các thủ tục trên kiểu xâu sẽ làm thay đổi, biến đổi xâu
- Nghe, ghi những gì cần thiết, không cần ghi nhiều, SGK đã trình bày rất rõ
4 Củng cố bài:
- Giá trị của X là ‘Mon tin hoc’, sau thao tác delete (X, 4, 4) giá trị của X là gì?
- Giá trị của X là ‘Em yeu truong em’, hãy viết thao tác để thêm tên trường (em đang học) vào sau chữ truong trong xâu X?
- Cho biết giá trị của pos(‘xinh’,’Cai xac xinh xinh’)
5 Bài tập về nhà:
- Xem trước phần 3 Một số ví dụ
*******************************
A MỤC ĐÍCH, YÊU CẦU:
- Sử dụng được một số thủ tục, hàm thông dụng về xâu
- Cài đặt được một số chương trình đơn giản có sử dụng xâu
B PHƯƠNG PHÁP:
- Phương pháp: Vấn đáp
- Phương tiện: máy chiếu, bảng đen
C NỘI DUNG BÀI GIẢNG
I Ổn định lớp
II Kiểm tra bài cũ
Câu hỏi: Nêu cách khai báo một xâu và tham chiếu đến một phần tử thứ i của xâu?
Đáp án: Khai báo : Var <tên biến>: string[độ dài lớn nhất của xâu];
Trang 4Tham chiếu đến ptử thứ i: tên xâu[i]
III Bài m i ới
GV soạn sẵn các ví dụ để chiếu và chạy thử
cho học sinh tiện theo dõi và không làm mất thời gian
viết chương trình
VD1: Nhập vào hai xâu và in ra xâu dài hơn,
nếu bằng nhau thì in ra xâu nhập sau
HS: Nêu ý tưởng, thuật toán
B1: Nhập vào 2 xâu bất kì
B2: So sánh độ dài 2 xâu với nhau
B3: In kết quả
GV: Yêu cầu HS nêu cách so sánh?
HS: Dùng hàm Length() để lấy độ dài từng
xâu và dùng phép so sánh
GV: Chiếu hoặc viết lên bảng chương trình
theo ý tưởng trên, chạy thử minh hoạ
VD2: Nhập vào một xâu và đưa ra màn hình
xâu đó nhưng được viết theo thứ tự ngược lại
GV: Cho vdụ một xâu và in ra theo thứ tự đảo
ngược
Vd: ‘hoten’ -> ‘netoh’
HS: Từ ví dụ, nêu thuật toán
B1: Nhập vào xâu bất kì
B2: Duyệt phần tử cuối đến ptử đầu
B3: In kết quả
GV: Cho học sinh giải thích cách duyệt phần
tử cuối đến phần tử đầu Phần tử cuối là phần tử nào?
HS: Ptử cuối có vị trí bằng độ dài xâu
Để duyệt từng phần tử từ cuối đến đầu, ta
dùng vòng lặp For…downto
HS: Lên viết chương trình
GV+HS: Sửa lỗi chương trình cùng các HS
khác Chiếu chương trình mẫu, chạy thử
VD3: Nhập vào một xâu và in ra màn hình
xâu đã được loại bỏ các dấu cách nếu có
GV: Cho biết dấu cách biểu diễn là kí tự nào?
HS: Kí tự rỗng
GV: Hướng dẫn cho HS
+ Cách tạo xâu rỗng
+ Duyệt từ đầu đến cuối xâu:
Kiểm tra nếu kí tự nào khác với dấu cách (rỗng)
thì đưa nó vào xâu rỗng vừa tạo
HS: Lên viết thuật toán
HS: Lên viết chương trình, chạy thử
GV+HS: Sửa bài HS và chạy thử kết quả
GV: Như vậy, qua các ví dụ trên các em đã
nắm rõ cách cài đặt một chương trình có dùng kiểu
xâu.Bây giờ, các em lấy giấy ra làm bài tập này trong
VD1:
Var a, b: string;
Begin
Write(‘Nhap xau thu nhat:’);
Readln(a);
Write(‘Nhap xau thu hai:’);
Readln(b);
If length(a)>length(b) then Writeln(a) Else writeln(b);
Readln End
VD2:
Var s:String;
i,k:byte;
Begin
Write(‘Nhap xau :’);
Readln(s);
K:=length(s) ; For i:=k downto 1 do write(s[i]) ;
Readln End
VD3:
Var s,st:String;
i,k:byte;
Begin
Write(‘Nhap xau :’);
Readln(s);
K:=length(s) ; St:= ‘ ‘;
For i:=1 to k do
If s[i] <> ‘ ‘ then st:=st+s[i];
writeln(‘ket qua:’,st);
Readln
Trang 55 phút Em nào làm nhanh nhất có thể lên bảng nêu ý
tưởng và viết chương trình
VD4: Nhập vào 1 xâu, in ra màn hình xâu
gồm các kí tự là số của xâu đó
HS: Nêu ý tưởng, viết chương trình, chạy trên
máy
GV: Cho HS trong lớp nhận xét, sửa lỗi
End
VD4:
Var s,st:String;
i,k:byte;
Begin Write(‘Nhap xau :’);
Readln(s);
St:= ‘ ‘;
For i:=1 to k do
If (‘0’<=s[i])and(s[i]<=’9’) then st:=st+s[i];
writeln(‘ket qua:’,st);
Readln End
IV Củng cố:
Cho biết để duyệt tất cả các kí tự của một xâu, ta thường dùng câu lệnh nào?
TL: Ta dùng vòng lặp For, như khi duyệt các phần tử trong mảng một chiều
V Dặn dò :
Về nhà xem lại bài, làm trước các bài tập thực hành 5
Bài 13: KIỂU BẢN GHI
*********************************
A Mục đích, yêu cầu:
- Biết khái niệm kiểu bản ghi
- Biết cách khai báo bản ghi, truy cập trường của bản ghi
B.Phương pháp:
- Giáo viên: thuyết giảng cho học sinh hiểu
- Học sinh : đọc bài trước ở nhà
B Nội dung bài giảng:
I Ổn định lớp:
II Kiểm tra bài cũ:
III N i dung bài gi ng: ội dung bài giảng: ảng:
Nội dung Hoạt động của thầy Hoạt động của trò
* Giới thiệu kiểu bản ghi:
- Bản ghi là kiểu dữ liệu có cấu trúc
- Mỗi đối tượng được mô tả bằng
một bản ghi
- Mỗi bản ghi có nhiều trường
- Nêu ví dụ về việc lưu giữ thông tin của một học sinh: họ tên, ngày sinh, giới tính, điểm các môn thi…
- Phân tích cho hs thấy sự khác
- HS lắng nghe
Trang 61/Khai báo:
* Kiểu bản ghi được định nghĩa như
sau:
Type <tên kiểu bản ghi> = record
<tên trường1> : <kiểu
trường1>;
……….
<tên trường2> : <kiểu
trường 2>;
End;
* Biến kiểu bản ghi được khaibáo
như sau:
Var
<tên biến bản ghi>:<tên kiểu
bản ghi>;
VD:
Const Max=60;
Type
Danhsach = record
Hoten: string[30];
Ngaysinh: string[10];
Gioitinh: Boolean;
Tin,Toan,Li,Hoa,Van,Su,Đia:re
al;
End;
Var A, B: Danhsach;
Hocsinh: array[1 max] of
Danhsach;
CÝ: Có thể tham chiếu đến từng
thành phần của bản ghi:
A.Ngaysinh
Hocsinh[2].Giơitinh
2.Gán giá trị:
biệt khi khai báo đối tượng hs này bằng mảng và bằng bản ghi Từ đó rút ra kết luận việc khai báo đối tượng này bằng bản ghi sẽ thuận tiện hơn
- Yêu cầu hs nêu quy tắc, cách thức xác định kiểu bản ghi
- Giới thiệu cho hs các thông tin cần khai báo trong kiểu bản ghi là: tên kiểu bản ghi, tên các thuộc tính, kiểu dữ liệu của mỗi thuộc tính
- Yêu cầu HS định nghĩa kiểu bản ghi
- Từ việc định nghĩa kiểu bản ghi đưa ra cách khai báo kiểu bản ghi
- Yêu cầu HS đọc ví dụ trong SGK
- Qua ví dụ thì HS nhận thấy
sự khác biệt cơ bản nào giữa kiểu bản ghi và kiểu mảng
- Trong ví dụ đã nêu, A và B
có cùng kiểu không?
Hocsinh[2] và A có cùng kiểu không?
- GV chuẩn lại ý HS đã trả lời
- GV chú ý cho HS : có thể tham chiếu trên từng thành phần của bản ghi, mỗi trường được xác định bởi tên biến và tên trường
- Yêu cầu HS viết tham chiếu đến trường Ngaysinh của biến bản ghi A, tham chiếu đến trường giới tính của biến mảng Hocsinh[2]
- Nếu ta gán giá trị của Hocsinh cho A (Hocsinh:=A)
có được không? tại sao?
-GV chuẩn lại ý HS đã trả lời
- HS tham khảo trong SGK để trả lời câu hỏi
- HS tham khảo SGK để lên bảng định nghĩa kiểu bản ghi
- HS đọc ví dụ
- Khi dùng kiểu bản ghi thì các thuộc tính của đối tượng có thể được khai báo bằng các kiểu
dữ liệu khác nhau
- HS suy nghĩ và trả lời câu hỏi
- HS lắng nghe
- HS lên bảng viết tham chiếu
- HS trả lời câu hỏi
Trang 7Có 2 cách để gán giá trị cho biến
bản ghi:
- Dùng lệnh gán trực tiếp
- Gán gía trị cho từng trường
Ví dụ: tham khảo ví dụ trong SGK
- Phân tích cho HS hiểu giá trị của mỗi thành phần của bản ghi cũng được xuất, nhập xử lí như mỗi biến cùng kiểu nó chỉ khác là nó được xác định bởi tên kiểu bản ghi và tên trường
- Yêu cầu HS đọc ví dụ trong SGK
- Yêu cầu đặt ra của bài toán là gì?
- Nêu các thao tác cần thiết để thực hiện bài toán?
- GV chuẩn lại ý HS trả lời
- GV phân tích và giải thích cho HS hiểu tại sao lại dùng vòng lặp for…do và việc tính toán giá trị trường xếp loại thông qua câu lệnh if…then
- HS đọc ví dụ
- HS suy nghĩ và trả lời câu hỏi
- HS nghe, hiểu và trình bày lại ví dụ lên bảng
2 Hoạt động 2: Tìm hiểu về cách sử dụng kiểu bản ghi trong ngôn ngữ Pascal.
- Giới thiệu cấu trúc chung để tham chiếu
đến trường của biến bản ghi
- Yêu cầu: Tìm ví dụ về tham chiếu đến
từng trường của biến bản ghi đã được khai
báo ở trên
- Giới thiệu hai cách gán giá trị cho biến
bản ghi
+ Gán nguyên cả biến bản ghi
+ Gán lần lượt từng trường
- Yêu cầu: Lấy ví dụ minh hoạ cho từng
trường hợp?
- Hỏi: Trường hợp 1 thực hiện được trong
điều kiện nào?
- Quan sát, ghi bài
- Gọi 3 học sinh cho ví dụ:
HS.hoten HS.Gioitinh HS.toan
- Quan sát, nghe giảng
A:=B;
A.hoten:=B.hoten;
A.van:=B.van;
- Hai biến A và B phải được khai báo cùng một kiểu bản ghi
Chú ý: Tham chiếu đến từng trường bằng cách:
Tên_biến_bản_ghi.tên_trường
2 Gán giá trị:
Có 2 cách:
- Dùng lệnh gán trực tiếp: Nếu A và B
là 2 biến bản ghi cùng kiểu thì có thể gán bằng câu lệnh: A:=B;
- Gán giá trị cho từng trường: có thể bằng lênh gán hoặc nhập từ bàn phím
3 Hoạt động 3: Hướng dẫn học sinh giải ví dụ:
Viết chương trình giải quyết bài toán sau:
Có một lớp gồm N học sinh (1<=N<=60) Với mỗi học sinh cần quản lí các thuộc tính: họ và tên, điểm toán, điểm văn và xếp loại.Xếp loại được xác định theo quy tắc sau:
+ Nếu tổng điểm toán và điểm văn nhỏ hơn 10 thì xếp loại D
+ Nếu tổng điểm toán và điểm văn lớn hơn hoặc bằng 10 và nhỏ hơn 14 thì xếp loại C
+ Nếu tổng điểm toán và điểm văn lớn hơn hoặc bằng 14 và nhỏ hơn 18 thì xếp loại B
Trang 8+ Nếu tổng điểm toán và điểm văn lớn hơn hoặc bằng 18 thì xêp loại A.
- Chiếu nội dung đề bài
- Hỏi: Sử dụng kiểu dữ liệu
như thế nào để giải quyết
bài toán?
- Yêu cầu: Mô tả thông tin
về một học sinh bằng kiểu
bản ghi, sau đó tạo mảng các
bản ghi đó
- Nêu các bước để giải quyết
bài toán này? Nhập dữ liệu
cho những trường nào?
- Nhập dữ liệu cho từng
trường của từng bản ghi như
thế nào?
- Tổ chức học sinh thảo luận
theo nhóm, viết chương
trình Gọi đại diện nhóm lên
trình bày, tổ chức cho các
nhóm khác nhận xét, bổ
sung
- Chiếu chương trình mẫu để
chính xác hoá lại cho học
sinh
- Quan sát, hiểu dề để trả lời câu hỏi
- Khai báo một mảng các bản ghi
- Một học sinh lên bản viết khai báo
+ Tạo kiểu dữ liệu, khai báo biến
+ Nhập dữ liệu cho mảng các bản ghi
+ Tính tổng điểm toán và điểm văn
+ Dựa vào tổng điểm để xếp loại
Readln(lop[i].hoten);
Readln(lop[i].ngayinh);
- Tâp trung thảo luận theo nhóm để hoàn thành chương trình
- Thông báo kết quả
- Nhận xét, đánh giá và bổ sung nhữnh sai sót của nhóm khác
- Quan sát và ghi nhớ
3 Ví dụ:
Program xep_loai;
Uses crt;
Const max = 60;
Type HS = record Hoten : string[30];
Ngaysinh : string[10];
Diachi : string[50];
Toan, van: real;
Xl: char;
End;
Var lop : array[1 max] of HS;
N, i: byte;
Begin Clrscr;
Write( ‘So luong hs trong lop:’);
Readln(N):
For i:=1 to N do Begin
Writeln(‘Nhap du lieu cho hs thu’,i,’:’); Write(‘Ho va ten:’);
Readln(lop[i].hoten);
Write(‘Ngay sinh:’);
Readln(lop[i].ngaysinh);
Write(‘Dia chi:’);
readln(lop[i].diachi);
Write(‘Diem toan:’); readln(toan);
Write(‘Diem van:’); readln(van);
If lop[i].toan+lop[i].van >= 18 then lop[i].xl:= ‘A’;
If (lop[i].toan + lop[i].van >= 14) and (lop[i].toan + lop[i].van < 18) then lop[i].xl:=’B’;
If (lop[i].toan + lop[i].van >= 10) and (lop[i].toan + lop[i].van < 14) then lop[i].xl:=’C’;
If lop[i].toan + lop[i].van < 10 then lop[i].xl := ’D’;
End;
Write(‘Danh sach xep loai hoc sinh trong lop:’);
For i:=1 to N do Writeln(lop[i].hoten:30,’Xep loai: ’, lop[i].xl);
Readln End
Trang 9IV Củng cố:
- Câu hỏi: Phân biệt sự giống nhau và khác nhau giữa kiểu bản ghi và kiểu mảng một chiều?
- Xem thêm: nội dung phụ lục B, sách giáo khoa, trang 134: Câu lệnh WITH
Trang 10Bài 14 + 15 KIỂU DỮ LIỆU TỆP VÀ CÁC THAO TÁC VỚI TỆP
********************************************************************
I-Mục đích và yêu cầu:
Hs cần biết:
-Khái niệm và vai trò của kiểu tệp
-Biết phân loại kiểu tệp
-Hiểu biết bản chất của tệp văn bản
-Biết các bước làm việc với tệp
-Biết các thao tác cơ bản về tệp
II-Phương tiện dạy học:Bảng phụ (hoặc máy chiếu)
III-Nội dung tiết dạy:
1.Tổ chức lớp: ổn định và kiểm tra sĩ số.
2.Kiểm tra bài cũ:
3.Tiến trình bài dạy: Cho thực hiện chương sau:
GV: Sau khi nhập dữ liệu xong và thoát khỏi
Dữ liệu nhập vào nó sẽ như thế nào?
HS: Trả lời: nó sẽ bị mất Vì nó mới lưu trữ trên bộ Ram
Để dữ liệu không bị mất ta phải làm sao Dữ liệu kiểu tệp hôm nay các em tìm hiểu sẽ giải quyết vấn đề đó
Bài 14: KIỂU DỮ LIỆU TỆP
Hoạt động 1:
1-Vai trò của kiểu tệp:
?Cho biết vai trò của kiểu tệp
Lưu trữ dữ liệu lâu dài ở bộ nhớ ngoài
?Hãy cho biết sự khác biệt của kiểu tệp với
các kiểu khác
Hình thành khái niệm: Có cấu trúc gồm
nhiều phần tử, được lưu trữ lâu dài trên bộ
nhớ ngoài
Trả lời:Lưu trữ dữ liệu lâu dài ở bộ nhớ ngoài
Trả lời:
-Kiểu tệp:Lưu trữ dữ liệu lâu dài ở bộ nhớ ngoài
-Các kiểu khác: Không lưu trữ dữ liệu được
ở bộ nhớ ngoài
Hoạt động 2:
2-Phân loại
Tệp văn bản Xét theo tổ chức dữ liệu
Tệp truy cập tuần tự Xét theo cách thức truy cập
Tệp truy cập trực tiếp GV: Hãy cho biết bản chất của từng loại tệp? ( trả lời SGK)
GV: Để làm việc với kiểu tệp ta phải thực hiện những thao tác nào? Có thể hoán đổi được không? vì sao?
Var i:Byte; hoten: String[20];
Begin
For i:=1 to 5 do
Readln(hoten);
readln;
end
Nguyen Anh Tran Binh
Le Hien Nguyen Hanh
Le Khanh