III. KIỂM TRA BÀI CŨ
HỌ VÀ TÊN STT LỚP: 11B II Lí thuyết
II. Lí thuyết
1. Định nghĩa mảng hai chiều
2. Cách khai báo mảng
3. Bài toán
Lập trình đê tính tuổi âm lịch theo can chi từ tuổi dương lịch.
ÔNG BÀ BỐ MẸ EM
NĂM SINH TUỔI ÂL
II. Phần lập trình Program Tinhtuoi; Const
Can: array[0..9] of string = (‘Canh’, ’Tan’, ’Nham’, ’Qui’, ’Giap’, ’At’, ’Binh’, ’Dinh’, ’Mau’, ’Kỉ’);
Chi: array[0..11] of string = (‘ Than’, ’Dau’, ’Tuat’, ’Hoi’, ’Ti’, ’Suu’, ’Dan’, ’Mao’, ’Thin’, ’Ty’, ’Ngo’, ’Mui’);
Var year: integer; i, j: byte; BEGIN Year :=1; While year >0 do Begin Write('Duong lịch: '); read(year); If year > 0 then
Begin i: = year mod 10;
J: = year mod 12;
Write('Amlich:', Can[i], ’ ’ ,Chi[j]); Readln; End; End; Readln; END. III. Kết quả IV. Đánh giá
Soạn ngày 12/1/2011
Tiết 26 – 27: Bài 12 : KIỂU XÂU I. MỤC TIÊU
Biết xâu là một dãy ký tự (có thể coi xâu là một 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.
Sử dụng được một số thủ tục, hàm thông dụng về xâu. II. PHƯƠNG PHÁP, PHƯƠNG TIỆN
- Phương pháp: Thuyết trình, vấn đáp. - Phương tiện: Máy chiếu, máy tính. III. LƯU Ý SƯ PHẠM
Thuận tiện của bài này là các em đã được học khái niệm về mảng, có thể sử dụng điều này để dạy về xâu, nhưng cần chú ý cho các em một số khác biệt so với mảng một chiều: độ dài xâu, một số phép toán trên xâu và một số hàm và thủ tục xử lý xâu.
VI. NỘI DUNG
HOẠT ĐỘNG CỦA GV VÀ HS NỘI DUNG GV: Để lưu trữ và xử lý Họ tên của một người, các kiểu
dữ liệu đã học có đáp ứng được?
HS: Đưa ra một số phương án.
GV: Phân tích các phương án của học sinh, từ đó đưa ra yêu cầu cần sử dụng một kiểu mới: Kiểu xâu .
GV: Giới thiệu một số khái niệm và thao tác thường dùng khi làm việc với xâu ký tự trong lập trình nói chung .
GV : Đây là cách khai báo trong ngôn ngữ Pascal, trong các ngôn ngữ khác nhau có thể có cách khai báo khác nhau . Do đó khi viết chương trình bằng ngôn ngữ nào cần tìm hiểu rõ các đối tượng của ngôn ngữ đó .
Độ dài tối đa của xâu phụ thuộc vào ngôn ngữ lập trình, thường là 255 ký tự.
Cách viết hằng xâu trong các ngôn ngữ khác nhau cũng
Một số khái niệm
- Xâu là một dãy kí tự trong bảng mã ASCII.
- Mỗi kí tự được gọi là một phần tử của xâu.
- Số lượng kí tự trong xâu được gọi là độ dài của xâu.
- Xâu có độ dài bằng 0 gọi là xâu rỗng.
- Tham chiếu tới phần tử trong xâu được xác định thông qua chỉ số của phần tử trong xâu.
- Chỉ số phần tử trong xâu thường được đánh số là 1.
- Trong ngôn ngữ Pacal, tham chiếu tới phần tử thường được viết:
<Tên biến xâu>[chỉ số]
Cách khai báo và xử lí xâu trong ngôn ngữ Pascal
- Khai báo biến xâu
Pascal sử dụng từ khóa STRING để khai báo xâu. Độ dài tối đa của xâu được viết trong [ ] sau từ khóa STRING. Khai báo như sau :
Var <tên biến> : String[độ dài lớn nhất của xâu] ;
Ví dụ :
Var Ten : String[10] ; Ho_dem : String[50] ; Que : String ;
có sự khác nhau .
Xét ví dụ như sau : Có xâu kí tự : ‘ nGuyen vaN A ’
Hỏi cần có các thao tác gì để chỉnh sửa xâu kí tự này? (cần đưa xâu về dạng ‘Nguyen Van A’)
HS : Đưa ra ý kiến của mình .
GV : Phân tích ý kiến và gợi ý để các em nhận ra cần :
- Xóa bớt một số dấu cách.
- Chuyển chữ hoa về chữ thường và ngược lại.
GV : Đưa ra một số câu hỏi :
- Làm sao biết một ký tự là dấu cách?
- Làm sao để xóa đi một vài kí tự
- Làm sao để thêm vào một xâu một vài kí tự?
- Làm sao để có được chữ in hoa tương ứng với chữ thường.
- Làm sao có được chữ cái thường tương ứng với chữ hoa?
- Làm sao biết xâu hiện có bao nhiêu kí tự?
Từ đó đưa ra các thủ tục chuẩn và hàm chuẩn của Pascal thường dùng để xử lí xâu.
Ứng với mỗi thủ tục hoặc hàm, giáo viên lấy ví dụ trong một chương trình Pascal cụ thể để các em hiểu được ý nghĩa các thủ tục và hàm này.
Trong môi trường soạn thảo của Pascal, giáo viên chỉ cần làm một chương trình đơn giản có sử dụng một trong các thủ tục hoặc hàm này để các em theo dõi.
Chú ý :
- Nếu không khai báo độ dài tối đa cho biến xâu kí tự thì độ dài ngầm định của xâu là 255.
- Độ dài lớn nhất của xâu là 255 ký tự.
- Hằng xâu kí tự được đặt trong cặp nháy đơn ‘ ’ .
Các thao tác xử lí xâu
- Với các xâu kí tự có các phép phép xâu và phép so sánh hai xâu kí tự.
- Phép ghép xâu: Kí hiệu bằng dấu cộng + .
Ví dụ : ‘Ha’ + ‘Noi’ cho kết quả là ‘Ha Noi’
Phép so sánh : <, <=, >, >=, =, <>, Pascal tự động so sánh lần lượt từ kí tự từ trái sang phải.
Ví dụ : ‘AB’ < ‘AC’, ‘ABC’ > ‘ABB’, ‘ABC’ <’ABCD’
Một số thủ tục chuẩn dùng để xử lí xâu
- Delete (St,vt,n) xóa n kí tự của xâu St bắt đầu từ vị trí vt .
- Insert (S1,S1,vt) chèn sâu S1 vào S2 bắt đầu từ vị trí vt của S2
- Val (St,x,m) Đổi giá trị xâu St thành số ghi giá trị vào biến X, nếu không đổi được thì vị trí gây lỗi ghi trong m, nếu đổi thành công thì m = 0
- Str (X,St) chuyển số X thành xâu kí tự lưu trong St .
Một số hàm chuẩn
- Copy (St,vt,n) sao chép từ xâu St n kí tự từ vị trí vt .
- Pos (S1,S2) tìm vị trí xuất hiện đầu tiên của S1 trong S2 .
- Length (St): cho độ dài xâu St .
- Upcase (ch) : cho chữ cái viết hoa tương ứng với chữ thường trong ch
- CHR(X): cho kí tự có mã X trong bảng mã ASCII .
- Ord (ch): cho mã của kí tự ch trong bảng mã .
- Một số ví dụ VD 1 :
Giáo viên soạn sẵn các ví dụ này để tiện cho học sinh theo dõi trên màn hình cũng như việc chạy thử và không làm mất thời gian ngồi viết chương trình.
Với mỗi ví dụ, giáo viên đi sâu vào câu lệnh trực tiếp đáp ứng yêu cầu của ví dụ, như vậy các em sẽ tiếp thu nhanh hơn .
Ví dụ 1 : Nhập 1 xâu, viết ra màn hình xâu dài hơn .
Ví dụ 2 : Nhập 1 xâu, kiểm tra xem ký tự đầu tiên của xâu S1 có trùng với ký tự cuối cùng của xâu S2 hay không ? Program vd1 ; Uses crt ; Var s1,s2 : String ; Begin Clrscr ;
Write('Nhap xau thu 1 : ') ; Readln(s1) ;
Write('Nhap xau thu 2 : ') ; Readln(s2) ;
If length(s1) > Length(s2) then Write(s1) else Write(s2); Readln ; End . VD 2 : Program vd2 ; Uses crt ; Var s1,s2 : String ; x : Byte ; Begin Clrscr ;
Write('Nhap xau thu 1 : '); Readln(s1) ;
Write('Nhap xau thu 2 : '); Readln(s2) ; x := length(s2) ; If s1[1] = s2[x] then Write('Trung nhau') else Write('Khac nhau'); Readln ; End. VII. CỦNG CỐ
o Nhắc lại cấu trúc câu lệnh. o Ra bài tập về nhà.
Soạn ngàyngày 6/2/2011 Tiết 28-29: THỰC HÀNH BÀI 5 I. MỤC TIÊU
Biết khai báo xâu, nhập xâu từ bàn phím, đưa xâu ra màn hình. Truy cập phần tử của xâu. Sử dụng một số hàm, thủ tục xử lý xâu. II. NỘI DUNG
HOẠT ĐỘNG CỦA THÀY HOẠT ĐỘNG CỦA TRÒ
Chia HS thành 4 nhóm tiến hành mỗi nhóm 20 ph Giáo viên hướng dẫn, giải đáp thắc mắc.
Lập trình để đếm các kí tự có trong một khổ thơ.
Chạy chương trình và ghi lại kết quả. BÁO CÁO THỰC HÀNH
TRƯỜNG THPT HOÀNG VĂN THỤ TỔ CÔNG NGHỆ
------
THỰC HÀNH TIN 11 BÀI KIỂU XÂU ---o0o--- HỌ VÀ TÊN.... STT... LỚP: 11B.... III. Lí thuyết
1. Định nghĩa xâu 2. Cách khai báo xâu 3. Các thao tác xử lí xâu 4. Bài toán
Lập trình để đếm các kí tự có trong một khổ thơ. Chạy chương trình và ghi lại kết quả.
IV. Phần lập trình Program xau; Var
Str: String[80];
Dem: Array [ 'A'..'Z'] of integer; I: integer;
Ch: char; Begin
for Ch:='A' to 'Z' do Dem[Ch] :=0; write ('str = '); readln(Str); for i:=1 to Length (Str) do
Dem [upcase(Str[i])]:= dem[upcase(str[i])]+1; writeln (' Cac chu trong xau Str la:');
for Ch:='A' to 'Z' do
if dem[Ch]>0 then writeln (Ch, ': ', dem[Ch]); readln;
end
Dung lo
Dem nay troi vang trang sao Tinh ta nong tham hay trao het minh
Anh oi sợ co ngươi rinh
Ngươi ta nhin thay chung mình gay go Nay này hai ban dưng lo
Tơ day dung gac tu do tam tinh
Soạn ngày 28/2/2010 Tiết 30: BÀI TẬP I. MỤC TIÊU
Nâng cao kĩ năng sử dụng một số câu lệnh và một số kiểu dữ liệu thông qua việc tìm hiểu, chạy thử các chương trình.
Biết giải bài tập tiêu biểu từ đó sửa lỗi trong lập trình. II. NỘI DUNG
HOẠT ĐỘNG CỦA THÀY HOẠT ĐỘNG CỦA TRÒ
Tiền hành thảo luận nhóm tìm chức năng của các câu lệnh. Câu lệnh ( 1) Câu lệnh ( 2) Câu lệnh ( 3) Câu lệnh ( 4) Câu lệnh ( 5)
Giáo viên hướng dẫn, giải đáp thắc mắc. Giải đáp thắc mắc về các lỗi
Lập trình để đếm các kí tự có trong một khổ thơ. Chạy chương trình và ghi lại kết quả. Nêu tác dụng của các câu lệnh.
Nêu các lỗi đã gặp. Củng cố: trương qua strình làm bài tập.
PHẦN LẬP TRÌNH Program xau;
Var
Str: String[80];
Dem: Array [ 'A'..'Z'] of integer; I: integer;
Ch: char; Begin
for Ch:='A' to 'Z' do Dem[Ch] :=0;
{ 1 } write ('str = '); readln(Str);
{ 2 } for i:=1 to Length (Str) do
Dem [upcase(Str[i])]:= dem[upcase(str[i])]+1; { 3 } writeln (' Cac chu trong xau Str la:');
{ 4 } for Ch:='A' to 'Z' do
if dem[Ch]>0 then writeln (Ch, ': ', dem[Ch]); readln;
{ } end.
Soạn ngày: 2/3/2010
Tiết 31 Bài 13: KIỂU BẢN GHI I. MỤC TIÊ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. II. PHƯƠNG PHÁP, PHƯƠNG TIỆN
- Phương pháp: Thuyết trình, vấn đáp. - Phương tiện: Máy chiếu, máy tính. III. LƯU Ý SƯ PHẠM
- Cần nhấn mạnh cho học sinh rằng, khác với kiểu mảng, trong kiểu bản ghi, các trường có thể thuộc các kiểu dữ liệu khác nhau.
- Các bản ghi thường mang các thông tin về một đối tượng cần quản lý. IV. NỘI DUNG
HOẠT ĐỘNG CỦA GV VÀ HS NỘI DUNG Viết chương trình dùng để quản lí các thí sinh của
một kỳ thi tuyển sinh.
Chương trình của chúng ta cần quản lí được : + SBD của thí sinh,
+ Họ tên thí sinh, + Giới tính,
+ Điểm của các môn … GV : Đưa ra một số câu hỏi sau :
- Làm thế nào để quản lý toàn bộ thông tin trên của học sinh?
- Mỗi thông tin trên có kiểu dữ liệu là gì?
HS : Có thể quản lý mỗi dữ kiện trên là một mảng một chiều
Ngôn ngữ lập trình bậc cao có cách tốt hơn để quản lý dữ liệu trên -> Bản ghi.
GV lấy một bảng điểm của học sinh rồi chỉ rõ: Mỗi hàng ta gọi là một bản ghi, mỗi cột là một trường.
GV : Mỗi ngôn ngữ có một cách khai báo kiểu bản ghi khác nhau .
Ngôn ngữ Pascal không cho bạn khai báo biến bản ghi trực tiếp mà phải khai báo biến bản ghi thông qua khai báo kiểu bản ghi.
Trước hết phải khai báo kiểu bản ghi sau đó biến bản ghi được khai báo thông qua kiểu bản ghi này.
Một số khái niệm
- Kiểu bản ghi được dùng để mô tả cho 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.
- Bản ghi thường được gọi là Record, mỗi Record sẽ lưu trữ dữ liệu về một đối tượng cần quản lí.
- Mỗi thuộc tính của đối tượng tương ứng với một trường của bản ghi. Các trường khác nhau có thể có dữ liệu khác nhau.
- Các ngôn ngữ lập trình thường cho cách để xác định :
+ Tên kiểu bản ghi. + Tên các trường.
+ Kiểu dữ liệu của trường. + Cách khai báo biến.
+ Cách tham chiếu đến trường. Cách khai báo và sử dụng kiểu bản ghi trong ngôn ngữ Pascal
1. Khai báo
Để khai báo biến bản ghi, thường khai báo một kiểu bản ghi sau đó khai báo biến bản ghi
Cách khai báo kiểu:
Type <Tên kiểu bản ghi>=Record <Tên trường 1> : <Kiểu trường 1> ; ……… ………
GV: Làm thế nào để có thể khai báo được nhiều biến bản ghi có cùng một kiểu ?
HS: GV sẽ gợi ý để học sinh đưa ra đó là sử dụng kiểu mảng trong đó phần tử mảng sẽ có kiểu bản ghi .
Ví dụ về khai báo bản ghi.
Khai báo một kiểu bản ghi để xử lý bảng kết quả thi của các học sinh.
Mỗi bản ghi sẽ bao gồm: Họ và tên của học sinh (Hoten), ngày tháng năm sinh(Ngaysinh), Giới tính (NamNu), và điểm thi các môn của mỗi học sinh (Toan, Ly, Hoa, Van, Su, Dia,Tin) .
Hãy xác định kiểu dữ liệu cho các trường trên (Mỗi nội dung trên là một trường của bản ghi)
GV : Khi có nhu cầu thay đổi thông tin trong từng trường, làm thế nào để truy cập thông tin vào từng trường của bản ghi ?
Mỗi ngôn ngữ có một cách truy cập khác nhau nhưng thường được viết là :
<Tên biến bản ghi>.<tên trường> GV: Đưa ra một số ví dụ.
GV: Vì bản ghi có nhiều trường nên việc gán giá trị cho bản ghi phức tạp hơn các biến khác.
Khi nhập thông tin vào từ bàn phím, ta thường phải nhập cho từng trường .
Ví dụ
CHương trình sau được viết trong ngôn ngữ Pascal dùng kiểu bản ghi để xử lý bảng kết quả thi bao gồm 2 môn Toán, Văn của học sinh , Sau khi nhập xong danh sách sẽ đưa ra bảng kết quả học tập và xếp loại (xem kỹ đầu bài trong SGK) .
<Tên trường n> : <Kiểu trường n> ; End ;
Cách khai báo biến :
Var <Tên biến> : <Tên kiểu bản ghi> ; Var <Tên mảng> : Array[1..n] Of <Tên kiểu bản ghi> ;
Type Hocsinh = Record Hoten : String[30] ; Ngaysinh : String[10] ; NamNu :Boolean ;
Toan,Ly, Hoa, Van, Su, Dia : Real ; End ;
Var A, B : Hocsinh ;
Lop : Array[1..100] Of Hocsinh ;
Để truy cập vào từng trường của bản ghi, ta viết :
<Tên biến bản ghi>. <Tên trường>
Ví dụ : A.Hoten B.Ngaysinh Lop[i].Toan Lop[i].Ly
……… với i là chỉ số nào đó của mảng Lop
2. Gán giá trị
Có 2 cách để gán giá trị cho bản ghi.
- Dùng lệnh gán trực tiếp : Nếu A, B là hai bản ghi cùng kiểu ta có thể gán giá trị của A cho B bằng câu lệnh gán : Vd : B := A ; hoặc A := B ;
- Gán giá trị cho từng trường. Dùng câu lệnh gán gán giá trị cho các trường hoặc nhập từ bàn phím.
A.Hoten := ‘Nguyen Van Tuan’ ; Readln(a.Ngaysinh);
Chương trình xử lý bảng kết quả thi. V. CỦNG CỐ
o Nhắc lại một số khái niệm mới.
o Nhắc lại cấu trúc câu lệnh về việc khai báo, truy cập đến các thành phần của bản ghi. o Ra bài tập về nhà.
Soạn ngày 3/2/2010 Tiết 32 BÀI TẬP I. MỤC TIÊU
Vận dụng làm baì tập 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. II. PHƯƠNG PHÁP, PHƯƠNG TIỆN
- Phương pháp: Thuyết trình, vấn đáp. - Phương tiện: Máy chiếu, máy tính.
III. NỘI DUNG 1. Kiểm tra
- Cách khai báo bản ghi? - Cách gán giá trị?
2. Làm bài tập
Chương trình sau được viết trong ngôn ngữ Pascal dùng kiểu bản ghi để xử lý bảng kết quả thi bao gồm 2 môn Toán, Văn của học sinh , Sau khi nhập xong danh sách sẽ đưa ra bảng kết quả học tập và xếp loại (xem kỹ đầu bài trong SGK) .
(* Kieu ban ghi xu ly bang ket qua thi 2 mon: Toan, Van *) Program Xeploai;
uses crt ;
Type Hocsinh = Record Ten: String[30] ; Ngaysinh : String[10] ; Diachi: String[50] ; toan, van : real ; Xeploai: Char ; End ;
Var
Lop : array[1..100] of Hocsinh ; i, n : Byte ;
Tg : Real ; Begin Clrscr ;
Write(' Cho biet so hoc sinh : ') ; Readln(n) ;
For i := 1 to n do Begin
Writeln(' Vao thong tin cho hoc sinh thu ',i,' : ') ; Write (' Ho ten : ') ;
readln(Lop[i].ten) ; Write(' Ngay sinh : ') ; readln(Lop[i].Ngaysinh) ; Write(' Dia chi : ') ; readln(Lop[i].Diachi) ; Write(' Diem Toan : ') ;
readln(Lop[i].toan) ; Write(' Diem Van ') ; readln(Lop[i].van) ;
Tg := Lop[i].toan + Lop[i].van ; if Tg >= 18 then Lop[i].Xeploai := 'A' Else if Tg >= 14 then Lop[i].Xeploai := 'B' Else if Tg >= 10 then Lop[i].Xeploai := 'C' Else Lop[i].Xeploai := 'D'
End ; Readln ;
For i := 1 to n do
Writeln(i : 4, Lop[i].ten : 30 , ' --- Loai : ', Lop[i].Xeploai); Readln ;
End. IV. LUYỆN TẬP
o Nêu cấu trúc câu lệnh về việc khai báo, truy cập đến các thành phần của bản ghi.