Kiến thức: Một số ví dụ về kiểu mảng một chiều mục 1b của Đ11, cách sử dụng mảng 1 chiều trong chơng trình thể hiện các thuật toán cơ bản về tìm kiếm và sắp xếp; - Duyệt tuần tự để tìm p
Trang 1- Tiếp tục làm quen với các công cụ phục vụ hiệu chỉnh chơng trình.
2 Kỹ năng: tạo cấu trúc lặp, giải bài toán tìm tổng của dãy số;
3 Thái độ: có hành vi thái độ đúng đắn về những vấn đề đạo đức liên quan đến việc sử dụng MT
II Chuẩn bị của thầy và trò:
1 Giáo viên: SGK, SGV, Giáo án, phiếu HT, Ví dụ su tầm cho chơng trình TP về tổ chức lặp
2 Học sinh: SGK, vở ghi
II - Tiến trình bài dạy:
1 Kiểm tra bài cũ: Không
2 Nội dung bài giảng:
-GV yêu cầu các nhóm 2,3,4 lắng nghe và nhận
xét câu trả lời của nhóm 1.
- Giáo viên nhận xét, đánh giá, chốt lại (có thể
cho điểm).
* Chữa bài tập Câu hỏi 1:
rẽ nhánh, thực hiện câu lệnh tiếp theo của
- GV yêu cầu các nhóm 1,3,4 lắng nghe và
nhận xét câu trả lời của nhóm 2.
- Giáo viên nhận xét, đánh giá, chốt lại (có thể
cho điểm).
Câu hỏi 2: (SGK/50)
Câu lệnh ghép là một câu lệnh đợc hợp thành từnhiều câu lệnh thành phần Câu lệnh ghépnhằm thực hiện thao tác gồm nhiều thao tácthành phần Mỗi thao tác thành phần tơng ứngvới một câu lệnh thành phần hoặc câu lệnhghép khác Về mặt NNLT, câu lệnh ghép làmột trong các yếu tố để tạo khả năng chơngtrình có cấu trúc
GV yêu cầu HS nhóm 3 trả lời câu hỏi
3-SGK/51
Có thể thay thế đoạn chơng trình chứa câu
lệnh FOR - DO bằng đoạn chơng trình chứa
câu lệnh WHILE - DO đợc không?
- GV yêu cầu các nhóm 1,2,4 lắng nghe và
nhận xét câu trả lời của nhóm 3.
- Giáo viên nhận xét, đánh giá, chốt lại (có thể
cho điểm).
Câu hỏi 3: (SGK-51)
Có thể thay thế đoạn chơng trình chứa câu lệnhFOR - DO bằng đoạn chơng trình chứa câulệnh WHILE - DO nh sau:
i:= <giá trị đầu>;
While < i <=giá trị cuối> do Begin
<câu lệnh>;
<tăng i một đơn vị>;
end;
GV yêu cầu HS đọc đề bài 4 trong SGK/51 Bài tập 4: SGK/51
a) if sqr(x)+sqr(y)<=1 then z:=sqr(x)+sqr(y)else
if y>=x then z:=x+yelse z:=0.5;
nếu x2+y2≤ 1 nếu x2+y2> 1 và y ≥ x nếu x2+y2>1 và y<x
Trang 2Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
y:=0;
For n:=1 to 50 do y:= y+n/(n+1);
Writeln(y:10: 6);
Readln;
End
GV yêu cầu HS đọc đề bài 5 trong SGK/51
b) GV gợi ý HS đặt giá trị ban đầu/giá trị khởi
tạo cho các biến (Cách thức tiến hành tơng tự
khi giải bài 5a nhng nên nhấn mạnh về lí do
chọn lặp có số lần lặp không biết trớc).
!
1
! 2
1
! 1
3 Củng cố: - Học sinh nắm vững kiến thức đã học trong bài lý thuyết, áp dụng vào bài luyện tập.
- Giáo viên tóm tắt nội dung về tổ chức rẽ nhánh và tổ chức lặp
trong trường hợp còn lại
Trang 3Ngày soạn:… / /2011
Ngày giảng:… / /2011 Lớp: 11B1 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B2 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B7 Sĩ số:………
Tiết 20: bài tập và thực hành 2 (2/2)
I - Mục tiêu:
1 Kiến thức: - Củng cố thêm về cấu trúc rẽ nhánh;
- Tiếp tục làm quen với các công cụ phục vụ hiệu chỉnh chơng trình
2 Kỹ năng: tạo cấu trúc lặp, giải bài toán tìm tổng của dãy số;
3 Thái độ: có hành vi thái độ đúng đắn về những vấn đề đạo đức liên quan đến việc sử dụng MT
II Chuẩn bị của thầy và trò:
1 Giáo viên: SGK, SGV, Giáo án, phiếu HT, Ví dụ su tầm cho chơng trình TP về tổ chức lặp
2 Học sinh: SGK, vở ghi
III - Tiến trình bài giảng:
1 Kiểm tra bài cũ: Không
2 Nội dung bài giảng:
GV yêu cầu HS đọc đề bài 6 trong SGK/51
Lập trình để giải bài toán cổ sau:
Vừa gà vừa chó
Bó lại cho tròn
Ba mơi sáu con Một trăm chân chẵn.
Hỏi có bao nhiêu con mỗi loại?
GV: Gợi ý HS tìm Input, Output của bài toán,
chọn biến, kiểu DL, tìm công thức liên hệ giữa
các biến và hớng dẫn viết chơng trình.
Bài tập 6: SGK/51:
uses CRT;
Var ga, cho: Integer;
BEGIN
Clrscr;
For cho:=1 to 24 do Begin
ga:=36 - cho;
If ga+2 * cho =50 then
writeln('Ga co:',ga,'con',' Cho co: ',cho,' con');
End;
Readln;
END.
GV yêu cầu HS đọc đề bài 7 trong SGK/51
NHập từ bàn phím tuổi của cha và con (hiện
tại tuổi của cha lớn hơn 2 lần tuổi của con và
tuổi cha hơn tuổi con ít nhất là 25) Đa ra màn
hình câu trả lời cho câu hỏi "Bao nhiêu năm
nẵa thì tuổi cha gấp đôi tuổi con ?"
Bài tập 7: SGK/51 Uses CRT;
Var tuoicha,tuoicon,nam: word;
BEGIN
Clrscr;
Write('Nhap tuoi cha va con: ');
write('(tuoicha>2 * tuoicon va tuoicha -tuoicon>=25)');
Readln(tuoicha,tuoicon);
nam:=0;
While (tuoicha<>2 * tuoicon) do begin
tuoicha:=tuoicha+1;
tuoicon:=tuoicon+1;
nam:=nam+1;
end;
writeln('Sau',nam,'nam tuoi cha gap 2tuoi con'); Readln;
END.
GV yêu cầu HS đọc đề bài 8 trong SGK/51 Bài tập 8: SGK/51
Trang 4Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
Một ngời gửi tiết kiệm không kỳ hạn với số tiền
A đồng với lãi suất 0,3% mỗi tháng Hỏi sau
bao nhiêu tháng, ngời đó rút hết tiền thì sẽ
nhận đợc số tiền ít nhất là B đồng? Biết rằng
với việc gửi tiết kiệm không kỳ hạn thì lãi
tiengui:= tiengui + luu * laisuat;
- Học sinh nắm vững kiến thức đã học trong bài lý thuyết, áp dụng vào bài luyện tập
- Giáo viên tóm tắt nội dung về tổ chức rẽ nhánh và tổ chức lặp
4 Hớng dẫn học ở nhà:
BTVN: - Học sinh làm lại các câu hỏi và bài tập trong bài
- Chuẩn bị học và đọc trớc bài kiểu dữ liệu có cấu trúc ở Đ11 - Kiểu mảng.
, Ngày tháng năm 2011
Trang 5Ngày soạn:… / /2011
Ngày giảng:… / /2011 Lớp: 11B1 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B2 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B7 Sĩ số:………
Chơng 4: Kiểu dữ liệu có cấu trúc Tiết 21 Đ11 - kiểu mảng (1/4) I - Mục tiêu: 1 Kiến thức: - Kiểu mảng là một kiểu DL có cấu trúc, rất cần thiết và hữu ích trong nhiều chơng trình - Mảng 1 chiều là một dãy hữu hạn các phần tử cùng kiểu - Các NNLT thông dụng cho phép ngời lập trình xây dựng kiểu DL mảng một chiều - Để mô tả mảng 1 chiều cần khai báo kiểu của các phần tử và cách đánh số các phần tử của nó (mỗi phần tử của nó có 1 chỉ số) - Có thể tham chiếu phần tử của mảng bằng tên của mảng và chỉ số tơng ứng của phần tử này 2 Kỹ năng: - Nhận biết đợc các thành phần trong khai báo kiểu mảng một chiều - Nhận biết đợc định danh của một phần tử kiểu mảng 1 chiều xuất hiện trong một chơng trình - Biết cách viết khai báo mảng đơn giản với chỉ số kiểu miền con của kiểu nguyên 3 Thái độ: có hành vi thái độ đúng đắn về kiểu dữ liệu có cấu trúc mảng II Chuẩn bị của thầy và trò: - Giáo viên: SGK, SGV, SBT, Giáo án, ví dụ minh họa su tầm, MTĐT (nếu có) - Học sinh: SGK, SBT, vở ghi III - Tiến trình bài giảng: 1 Kiểm tra bài cũ: (Không) 2 Nội dung bài giảng: Hoạt động của Giáo viên và Học sinh Nội dung kiến thức Hoạt động 1: Giáo viên: lấy ví dụ về mảng một chiều: Nhập vào nhiệt độ (trung bình) của mỗi ngày trong tuần Tính và đa ra màn hình nhiệt độ TB của tuần và số lợng ngày trong tuần có nhiệt độ cao hơn nhiệt độ TB của tuần Program nhietdotuan; Var t1,t2,t3,t4,t5,t6,t7,tb:real; dem:integer; BEGIN CLRSCR; write('Nhap vao nhiet do cua 7 ngay:'); Readln(t1,t2,t3,t4,t5,t6,t7); tb:=(t1+t2+t3+t4+t5+t6+t7)/7; dem:=0; if t1>tb then dem:=dem+1; if t2>tb then dem:=dem+1; if t3>tb then dem:=dem+1; if t4>tb then dem:=dem+1; if t5>tb then dem:=dem+1; if t6>tb then dem:=dem+1; if t7>tb then dem:=dem+1; writeln('nhiet do TB cua tuan: ',tb); writeln('so ngay nhiet do cao hon nhiet do TB: ',dem); Readln; END. 1 Kiểu mảng một chiều: - Khái niệm: là dãy hữu hạn các phần tử cùng kiểu đặt sau tên mảng - Mảng đợc đặt tên và mỗi phần tử của nó có 1 chỉ số * Để xây dựng và sử dụng kiểu DL mảng 1 chiều, ngời lập trình cần phải xác định những yếu tố sau: - Tên kiểu mảng 1 chiều - Số lợng phần tử - Kiểu DL của phần tử - Cách khai báo biến mảng - Cách tham chiếu đến từng mảng a) Khai báo: * Khai báo biến mảng 1 chiều có dạng: + Khai báo trực tiếp biến mảng 1 chiều: VAR <tên biến mảng>:ARRAY[kiểu chỉ số] OF <kiểu phần tử>; + Khai báo gián tiếp biến mảng qua kiểu mảng 1 chiều: TYPE <tên kiểu mảng> = ARRAY
[kiểu chỉ số] OF <kiểu phần tử>;
VAR <tên biến mảng>: <tên kiểu mảng>;
Trong đó:
- kiểu chỉ số: thờng là 1 đoạn số nguyên liên
Trang 6Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
Gv giảng giải BTVD và nêu cách đặt vấn đề để
đa ra câu hỏi về mảng 1 chiều nếu số ngày
trong bài là N (N có thể khá lớn) thì giải quyết
BT ntn?
HS: trả lời.
GV đa ra các khai báo liên quan đến DL:
- Khai báo kiểu DL:
TYPE <tên kiểu>=<kiểu DL>;
vd: TYPE hoten=char;
- Khai báo biến gián tiếp qua tên kiểu:
VAR <tên biến>:<tên kiểu>;
vd: VAR HT: hoten;
- Khai báo biến trực tiếp:
VAR <tên biến>:<kiểu DL>;
vd: VAR hoten: char;
GV đa ra 2 khai báo mảng 1 chiều và yêu cầu
hs lấy ví dụ.
tục có dạng n1 n2 với n1 và n2 là các hằnghoặc biểu thức nguyên xác định chỉ số đầu vàchỉ số cuối (n1<=n2);
- kiểu phần tử: là kiểu của các phần tử mảng.Tham chiếu tới phần tử của mảng 1 chiều đợcxác định bởi tên mảng cùng với chỉ số, đợc viếttrong cặp ngoặc [ ]
mảng một chiều hợp lệ và không hợp lệ cho Hs
quan sát và lựa chọn cách khai báo đúng:
TYPE
a1= array[-100 200] of real;
mang1: array[10 50] of integer;
arrayInt = array[-100 0] of Integer;
arrayBoolean= array[-n+1 n+1] of boolean;
type abc=array[1 Max] OF Real;
Var Nhietdo: abc;
Dem,i,N: byte; tong, tb: real;
BEGIN
WRITE('Nhap so ngay:'); Readln(N);
tong:=0;
For i:=1 to N do begin
write('Nhap nhiet do ngay ',i,': ');
if Nhietdo[i] > tb then dem:=dem+1;
writeln('Nhiet do trung binh N ngay: ',tb:6:2);
writeln(' so ngay co nhiet do cao hon nhiet do trung binh: ',dem);
readln;
END.
3 Củng cố: - Tóm tắt lại các kiến thức đã học trong bài.
- Câu lệnh về kiểu mảng 1 chiều: cách khai báo biến của mảng một chiều (ở 2 dạng: trực tiếp và gián tiếp);
- Vận dụng lí thuyết làm bài tập hoặc ra các câu hỏi trắc nghiệm thông tin về các dạng khai báo của mảng 1 chiều Lấy các ví dụ Đúng và Sai để HS phân biệt, giải thích câu lệnh
4 Hớng dẫn học ở nhà:
BTVN: - Trả lời các câu hỏi 1 đến 4 trong SGK /79;
- Yêu cầu HS chuẩn bị tiết học sau bằng cách: giao nhiệm vụ cho Hs ôn lại 3 thuật toán đã học ở lớp 10 (Tìm giá trị lớn nhất của một dãy số nguyên; sắp xếp bằng tráo đổi và tìm kiếm nhị phân ở Đ 4
- Bài toán và thuật toán SGK Tin học lớp 10)
, Ngày tháng năm 2011
Trang 7Ngày soạn:… / /2011
Ngày giảng:… / /2011 Lớp: 11B1 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B2 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B7 Sĩ số:………
I - Mục tiêu:
1 Kiến thức: Một số ví dụ về kiểu mảng một chiều (mục 1b của Đ11), cách sử dụng mảng 1 chiều trong chơng trình thể hiện các thuật toán cơ bản về tìm kiếm và sắp xếp;
- Duyệt tuần tự để tìm phần tử lớn nhất của dãy số nguyên;
- Sắp xếp dãy số nguyên bằng tráo đổi;
- Tìm một số hạng trong một dãy số nguyên tăng bằng thuật toán tìm kiếm nhị phân
- Củng cố và làm HS hiểu sâu sắc hơn những thuật toán tìm kiếm, sắp xếp cơ bản mà HS đã
đợc học ở lớp 10
- Minh họa, củng cố và nâng cao những hiểu biết của HS trong tiết 1 về mảng 1 chiều
- Hình thành kĩ năng cơ bản về sử dụng kiểu mảng trong cài đặt chơng trình
2 Kỹ năng: xây dựng cấu trúc, cách khai báo, cách tham chiếu một phần tử và ích lợi của kiểu dữ liệu mảng)
3 Thái độ: có hành vi thái độ đúng đắn về kiểu dữ liệu có cấu trúc mảng
II Chuẩn bị của thầy và trò:
1 Giáo viên: SGK, SGV, SBT, Giáo án, ví dụ minh họa su tầm, MTĐT (nếu có)
2 Học sinh: SGK, SBT, vở ghi
III - Tiến trình bài giảng:
1 Kiểm tra bài cũ: Hãy nêu cách khai báo biến mảng một chiều? Nêu ví dụ minh họa?
2 Nội dung bài giảng:
Hoạt động 1:
- Nh đã yêu cầu của BTVN tiết trớc; GV yêu
cầu HS phát biểu và nêu ra ý tởng các bài toán:
Tìm giá trị lớn nhất của một dãy số nguyên; sắp xếp
bằng tráo đổi và tìm kiếm nhị phân
- Mặc dù các bài toán này đã đợc biết trớc ở lớp 10,
gv vẫn cần làm rõ phát biểu bài toán qua việc xác
định input và Output Gv có thể hỏi và giải thích
thêm để giúp cho HS hiểu, xác định đúng yêu cầu
của bài toán.
- Hs cần nắm đợc thuật toán trớc khi đợc giáo viên
hớng dẫn xem xét (hay tham gia viết) chơng trình
cài đặt.
* Gv yêu cầu HS đọc SGK ví dụ 1 về Tìm phần
tử lớn nhất của dãy số nguyên /56
- Dùng một mảng có kiểu phần tử là nguyên
để biểu diễn 1 dãy hữu hạn số nguyên và cách
khai báo mảng trong Pascal
b) Một số ví dụ:
Ví dụ 1:
Tìm phần tử lớn nhất của dãy số
nguyên.
Input: Số nguyên dơng N (N≤ 250) và dãy N
số nguyên a1, aN, mỗi số đều không vợt quá 500
Output: Chỉ số và giá trị lớn nhất Max của dãy
số đã cho (nếu nhiều phần tử lớn nhất chỉ cần đa ra một trong số chúng)
Thuật toán:
B1: Nhập N và dãy a1, aN; B2: Max ← a1; i ← 2;
B3: Nếu i>N thì đa ra giá trị Max rồi kết thúc; B4
B4.1: Nếu ai > Max thì Max ← ai; B4.2: i ← i + 1 rồi quay lại B3;
Chơng trình thực hiện việc duyệt tuần tự các
phần tử để tìm ra số lớn nhất của dãy số nguyên: SGK/56-57.
Program TIMMAX;
uses CRT;
Const Nmax=250;
type daynguyen = array[1 Nmax] of integer; var N, i, max, csmax: integer;
Trang 8Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
- Câu lệnh For - do thứ nhất trong chơng trình
thể hiện 1 nhiệm vụ trong B1 của thuật toán,
dùng để nhập các phần tử của mảng Số phần tử
thực sự của mảng do ngời chạy chơng trình
nhập vào bởi câu lệnh ngay trớc câu lệnh for
-do này.
- Câu lệnh for - do thứ hai trong chơng trình
thể hiện vòng lặp (gồm B3 và B4 trong thuật
toán), dùng để duyệt tuần tự từng phần tử trong
mảng lọc lấy phần tử tạm thời là lớn nhất
(trong các phần tử đã duyệt qua)
- GV cần rèn luyện cho HS thuần thục cách
tham chiếu đến 1 phần tử của mảng 1 chiều qua
tên mảng và chỉ số của phần tử đó
- Mỗi phần tử của mảng h vậy đợc xử lí nh một
biến kiểu nguyên
- So với bài toán phát biểu ở lớp 10, bài toán
này có thêm y/cầu cho biết chỉ số của phần tử
lớn nhất và nếu có nhiều phần tử lớn nhất thì
chỉ cần đa ra 1 trong các chỉ số (bởi vậy chơng
END.
Hoạt động 2:
- Giáo viên ôn lại thuật toán và kết hợp với ví
dụ mô phỏng để tạo điều kiện HS hiểu chơng
trình
- Khái niệm lợt: sau lợt (lần) duyệt thứ nhất giá
trị lớn nhất xếp đúng vị trí là ở cuối dãy Tơng
tự, sau lợt 2, giá trị lớn thứ 2 đợc xếp ở vị trí sát
cuối sau mỗi lợt có ít nhất 1 số hạng đã xếp
đúng vị trí HS cần hiểu cụ thể, trong thuật toán
phải thực hiện bao nhiêu lợt, mỗi lợt thực hiện
trên đoạn nào (từ đâu đến đâu) của dãy số? Giá
trị của j chính là chỉ số phần tử cuối trong đoạn
đợc duyệt của lợt Tạo điều kiện cho HS hiểu
mục đích của câu lệnh for j:=N downto 2 do
với biến đếm j chạy từ N về 2
- Mỗi lợt bao gồm việc thực hiện một số thao
tác: so sánh một phần tử với phần tử đứng ngay
sau nó để xử lí, bắt đầu từ phần tử đầu tiên
trong dãy đến phần tử thứ j Thao tác so sánh
để quyết định xử lí (tráo đổi 2 phần tử) đợc lặp
một số lần Tạo đk cho Hs hiểu mục đích của
câu lệnh lặp mà chơng trình dùng để thể hiện
mỗi lợt
for i:= 1 to j-1 do
if A[i] > A[i+1] then
Begin (* tráo đổi vị trí A[i] và A[i+1] *)
t:= A[i];
A[i]:=A[i+1];
A[i+1]:= t;
Ví dụ 2: Sắp xếp dãy số nguyên bằng thuật
toán tráo đổi
Input: Số nguyên dơng N (N≤ 250) và dãy A
B3: Nếu M <2 thì đa ra dãy A đã đợc sắp xếp
rồi kết thúc;
B4: M ← M-1, i ← 0;
B5: i ← i + 1;
B6: Nếu i > M thì quay lại B3;
B7: Nếu ai > ai + 1 thì tráo đổi ai và ai +1 cho
Trang 9Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
end;
- giá trị biến đếm i chính là chỉ số phần tử đợc
lấy so sánh với phần tử kề sau nó trong dãy số
Hs cần hiều vì sao cấu trúc lặp này, i chỉ lấy
đến j-1 chứ không phải lấy đến j
- Nên bám sát thuật toán để giải thích (hoặc
xây dựng) những đoạn câu lệnh tơng ứng trong
If a[i] > a[i + 1] then Begin ( * trao doi a[i] va a[i + 1] *)
Giáo viên: - Tóm tắt lại các kiến thức đã học trong bài.
- Không thể nhập hay xuất giá trị của một biến mảng một chiều nh nhập hay xuất một giá trị của biến có kiểu DL chuẩn mà phải nhập hay xuất cho từng phần tử của mảng.
- Do mảng là dãy các phần tử đợc đánh số bởi các số nguyên liên tiếp nên việc thực hiện các thao tác nào đó (nhập, xuất hay xử lí) trên dãy các phần tử của mảng thờng gắn với câu lệnh for - do.
- Các thao tác nhập, xuất hay xử lý mỗi phần tử của mảng phải tuân theo quy định kiểu phần tử của mảng.
- Khai báo kiểu mảng cần xác định kích thớc của mảng Tuy nhiên, trên thực tế có nhiều trờng hợp số phần
tử chứa DL thực sự có ý nghĩa đối với bài toán đang giải quyết nhỏ hơn số lợng phần tử của mảng.
4 Hớng dẫn học ở nhà:
BTVN: - Làm các bài tập 5 - 6 trong SGK /79;
Hớng dẫn làm Bài tập ở nhà:
A[i] = A[1] + (i-1)d (hoặc điều kiện A[i] - A[i-1] = d với 1 < i ≤ N) Dùng một vòng lặp theo biến đếm i để kiểm tra xem mỗi A[i] có thỏa mãn điều kiện nói trên hay không? chỉ cần phát hiện đợc một phần tử của A không thỏa mãn là kết luận đợc dãy A không phải là cấp số cộng.
, Ngày tháng năm 2011
Trang 10Ngày soạn:… / /2011
Ngày giảng:… / /2011 Lớp: 11B1 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B2 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B7 Sĩ số:………
I - Mục tiêu:
1 Kiến thức: Một số ví dụ về kiểu mảng một chiều (mục 1b của Đ11), cách sử dụng mảng 1 chiều trong chơng trình thể hiện các thuật toán cơ bản về tìm kiếm và sắp xếp;
- Củng cố và làm HS hiểu sâu sắc hơn những thuật toán tìm kiếm, sắp xếp cơ bản mà HS đã đợc học ở lớp 10
- Minh họa, củng cố và nâng cao những hiểu biết của HS trong tiết 1 về mảng 1 chiều (cấu trúc, cách khai báo, cách tham chiếu một phần tử và ích lợi của kiểu Dl này)
2 Kỹ năng: - Duyệt tuần tự để tìm phần tử lớn nhất của dãy số nguyên;
- Sắp xếp dãy số nguyên bằng tráo đổi;
- Tìm một số hạng trong một dãy số nguyên tăng bằng thuật toán tìm kiếm nhị phân
- Hình thành kĩ năng cơ bản về sử dụng kiểu mảng trong cài đặt chơng trình
3 Thái độ: Nghiêm thúc thực hiện
II Chuẩn bị của thầy và trò:
1 Giáo viên: SGK, SGV, SBT, Giáo án, ví dụ minh họa su tầm, MTĐT (nếu có)
2 Học sinh: SGK, SBT, vở ghi
III - Tiến trình bài giảng:
1 Kiểm tra bài cũ: Làm bài tập 5 - SGK/79
2 Nội dung bài giảng:
Hoạt động 1:
- Giáo viên ôn lại thuật toán và nêu và củng cố,
nhấn mạnh ý tởng của thuật toán là thu hẹp
nhanh phạm vi tìm kiếm sau mỗi lần so sánh
khóa với số hạng đợc chọn Có thể lấy ví dụ mô
phỏng để làm rõ một số điểm trong thuật toán,
tạo điều kiện cho HS hiểu chơng trình
- Trong thuật toán tìm kiếm thực chất là lặp
một số lần (cha xác định trớc) các thao tác sau:
chọn số hạng ở giữa dãy, so sánh số hạng đó
với k, căn cứ vào kết quả so sánh này để hoặc
kết luận đã tìm thấy (trờng hợp xảy ra bằng)
hoặc thu hẹp phạm vi tìm kiếm (trờng hợp
không bằng).
- Khi nào thì quá trình nói trên dừng lại? Quá
trình lặp đó cần dừng lại khi một trong 2 sự
kiện sau xảy ra: đã tìm thấy hoặc không gian
tìm kiếm đã trở nên nằng rỗng (nghĩa là không
còn đoạn nào của dãy cho ta hi vọng chứa phần
tử cần tìm)
- Phạm vi tìm kiếm trên dãy là một đoạn đợc
xác định bởi các biến nguyên Dau và Cuoi,
t-ơng ứng cho biết bắt đầu từ phần tử có chỉ số
Dau của dãy cho đến phần tử có chỉ số Cuoi
của dãy Gv dẫn dắt để HS hiểu đc công thức
xđ lại cho biến Dau hay Cuoi trong mỗi trờng
hợp thu hẹp phạm vi tìm kiếm
b) Một số ví dụ:
Ví dụ 3:
Tìm kiếm nhị phân
Input: Dãy A là dãy tăng gồm N (N≤ 250) số
nguyên dơng a1, a2, aN và số nguyên k
Output: Chỉ số i mà ai = k hoặc thông báo
"không tìm thấy" nếu không có số hạng nào của dãy A có giá trị bằng k
Thuật toán:
B1: Nhập N và dãy a1, a2 aN và khóa k;
B2: Dau ← 1; Cuoi ← N;
2
Dau+Cuoi
B4: Nếu agiua =k thì thông báo chỉ số Giua, rồi
kết thúc;
B5: Nếu Agiua > k thì đặt Cuoi= Giua - 1 rồi
chuyển đến B7;
B6: Dau ← Giua + 1;
B7: Nếu Dau> Cuoi thì thông báo dãy A không
có số hạng có giá trị bằng k, rồi kết thúc;
B8: Quay lai B3
Program TK_nhiphan;
uses CRT;
const Nmax=250;
type
Trang 11Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
* Từ thuật toán chuyển sang ch trình thì:
- Chơng trình sẽ gồm một cấu trúc lặp (cha xác
định trớc đợc số lần lặp)
- Tim_thay là biến logic Khi cha tìm kiếm, tất
nhiên phải khởi tạo biến này là false, khi tìm
thấy sẽ thành true để dễ dàng xđ đk lặp
- Đk của lặp là gì? Thể hiện sự kiện cha tìm
thấy hoặc không gian tìm kiếm cha rỗng bằng
biểu thức logic nào?
- Khi kết thúc lặp, giá trị của biến logic
tim_thay cho biết có tìm thấy hay không? bởi
vậy sau cấu trúc lặp dùng câu lệnh rẽ nhánh
theo giá trị của tim_thay để thông báo kq
- Trờng hợp tìm thấy, nên đa ra kq chi tiết và
thông báo chỉ số của phần tử có giá trị là k Khi
tìm thấy, sự kiện này đc ghi nhận ngay (ngay
sau khi so sánh phần tử giua đc chọn với k), đk
lặp đc kiểm tra và quá trình lặp đc dừng lại
Lúc đó biến Giua cho biết chỉ số của phần tử
cần tìm
dnguyen=array[1 max] of integer;var
write('nhap so luong phan tu cua day so, N= ');
readln(n);
writeln('Nhap cac phan tu cua day
so tang: ');
for i:=1 to n dobegin
write(' phan tu thu ', i,' = ');readln(a[i]);
giua:=(dau+cuoi)div 2;
if a[giua]=k thentim_thay:=true;
else if a[giua] > k thencuoi:= giua-1;
else dau:= giua+1;
end;
if tim_thay thenwriteln('chi so tim duoc la: ',giua)
elsewriteln(' khong tim thay');
- Giáo viên hớng dẫn HS làm BT Sử dụng thuật
toán tráo đổi
write('vao mang a[',i,']=');readln (a[i]);
end;
for i:=1 to 7 dofor j:=7 downto i do
if a[j]>a[j+1] thenbegin
tam:=a[j];
Trang 12Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
Trang 13Ngày soạn:… / /2011
Ngày giảng:… / /2011 Lớp: 11B1 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B2 Sĩ số:………
Ngày giảng:… / /2011 Lớp: 11B7 Sĩ số:………
I - Mục tiêu:
1 Kiến thức: Nội dung của tiết này là kiểu mảng hai chiều (mục 2 của Đ11)
* Học sinh cần biết:
- Có thể hình dung một mảng hai chiều nh một bảng có các dòng và các cột Các dòng và các cột đều đợc đánh số bằng các số nguyên liên tiếp Hai đoạn số nguyên dùng để đánh số cho các dòng và các cột có thể khác nhau Mỗi phần tử của mảng 2 chiều có thể hình dung nh giá trị của một ô trong bảng, mỗi ô có chỉ số dòng và chỉ số cột
- Giống nh mảng 1 chiều, có thể tham chiếu (hay thao tác) trên mỗi phần tử của mảng 2 chiều, nhng khác ở chỗ mỗi phần tử của mảng 2 chiều có 2 chỉ số và do vậy nó đợc xác định bởi tên mảng và 2 chỉ số của nó
- Mảng 2 chiều là mảng mà mỗi phần tử của nó lại là một mảng 1 chiều
* Học sinh cần nắm đợc:
+ Cách khai báo kiểu DL mảng 2 chiều:
+ Giống nh khi khai báo kiểu DL mảng 1 chiều, ngời lập trình cần xác định kiểu của các phần tử tạo nên mảng và kiểu chỉ số Cách xác định kểi chỉ số vẫn nh đã biết ở kiểu mảng 1 chièu, chỉ khác
là ở mảng 2 chiều cần xác định 2 chỉ số, 2 chỉ số đó độc lập với nhau
+ Giống nh ở mảng 1 chiều, các thao tác nhập, xuất hay xử lí mỗi phần tử của mảng phải tuân theo quy định kiểu phần tử của mảng
+ Việc tựhc hiện các thao tác đó (nhập, xuất hay xử lí) lần lợt trên các phần tử của mảng 2 chiều thờng gắn với 2 câu lệnh for- do lồng nhau
2 Kĩ năng:
- Nhận biết đợc các thành phần trong khai báo kiểu mảng 2 chiều
- Nhận biết đợc định danh của một phần tử mảng 2 chiều xuất hiện trong chơng trình Cách tham chiếu đến một phần tử của mảng 2 chiều
- Viết đợc khai báo kiểu mảng 2 chiều với các chỉ số thuộc kiểu nguyên
3 Thái độ: có hành vi nghiêm túc đúng đắn
II Chuẩn bị của thầy và trò:
1 Giáo viên: SGK, SGV, SBT, Giáo án, ví dụ minh họa su tầm, MTĐT (nếu có)
2 Học sinh: SGK, SBT, vở ghi, học bài cũ, tìm hiểu trớc bài mới
III - Tiến trình bài giảng:
1 Kiểm tra bài cũ:
Em hiểu thế nào là mảng 1 chiều? Cách khai báo mảng 1 chiều ntn? Lấy ví dụ?
2 Nội dung bài giảng:
Hoạt động 1:
Giáo viên: lấy ví dụ về mảng hai chiều và đa
ra khái niệm mảng 2 chiều là gì?
Ví dụ:
TYPE
A= ARRAY[-10 20,10 20] OF Real;
- Mảng 2 chiều là bảng các phần tử cùng kiểu
VAR C: ARRAY[1 5,1 5] OF byte;
GV yêu cầu HS lấy thêm ví dụ minh hoạ
1 Kiểu mảng 2 chiều:
+ Khái niệm: mảng 1 chiều mà mỗi phần tử
cũng là mảng 1 chiều gọi là mảng 2 chiều
+ Các quy tắc, cách thức cho phép xác định kiểu mảng 2 chiều:
- tên kiểu mảng 2 chiều
- số lợng phần tử của mỗi chiều
- kiểu DL của phần tử
- cách khai báo biến
- cách tham chiếu đến phần tử
a) Khai báo:
Khai báo mảng 2 chiều có 2 cách:
Trang 14Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
Cách 1:
+ Khai báo trực tiếp biến mảng 2 chiều:
VAR <tên biến mảng>:ARRAY [Kiểuchỉ số
dòng, kiểu chỉ số cột] OF <kiểu phần tử>;
Cách 2:
+ Khai báo gián tiếp biến mảng 2 chiều:
TYPE <tên kiểu mảng>=ARRAY [Kiểuchỉ số
dòng, kiểu chỉ số cột] OF <kiểu phần tử>; Var <tên biến mảng>: <tên kiểu mảng>;
- Tham chiếu phần tử của mảng:
Tên biến mảng [Chỉ số dòng, chỉ số cột]
Ví dụ: ab[4,5] - tham chiếu tới phần tử ở dòngthứ 4, cột thứ 5 của biến mảng ab
Gv yêu cầu hs quan sát ví dụ qua màn hình và
trong SGK- 59,61 bài tập tính và đa ra màn
Writeln('Cho cac he so A cua he pt: ');
For i:=1 to 2 do {i: chi so hang}
For j:=1 to 2 do {j: chi so cot}
Đa ra màn hình các phần tử của mảng có giá trịlớn hơn k
Trang 15Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
- Muốn đa ra màn hình tất cả các phần tửcủa mảng
có giá trị lớn hơn một giá trị nào đó cần phải duyệt
qua tất cả các phần tử của mảng, có thể dùng một
số câu hỏi gợi ý để hs tham gia viết đoạn chơng
trình
chẳng hạn:
"Chơng trình ở VD1 cũng đã phải duyệt qua tất cả
các phần tử của một mảng 2 chiều để in tất cả ra
các phần tử, trong trờng hợp này không phải phàn
tử nào cũng đợc đa ra mà chỉ đa ra những phần tử
thỏa mãn đk lớn hơn giá trị của biến k Vậy có thể
sửa đổi đoạn ch/trình trong VD1 nh thế nào để đáp
ứng đc yêu cầu đặt ra?"
- Gv lu ý HS rằng có thể dùng khai báo kiểu DL
mảng 2 chiều với từ khóa type Gv viết lại cách khai
báo trong VD (hoặc trong ch/trình của VD) sang
dạng này
- HS tìm hiểu và phân tích thuật toán và câu lệnh
của ví dụ 2 (tìm hiểu và đọc chú ý sau ví dụ
-SGK/62)
begin for j:=1 to 7 do read(b[i,j]);
if b[i,j] <k then begin write(b[i,j], ' ');
Giáo viên: - Tóm tắt lại các kiến thức đã học trong bài.
- Kiểu mảng 1 chiều thờng đợc dùng trong những chơng trình cần tổ chức DL nh một dãy các phần tử cùng kiểu để giải quyết đợc các bài toán đặt ra.
- Khi cần tổ chức DL có cấu trúc bảng, ngời ta nghĩ đến việc dùngmảng 2 chiều.
- Mỗi biến mảng gồm nhiều phần tử và mỗi phần tử có chỉ số: mảng 1 chiều có 1 chỉ số, mảng 2 chiều có 2 chỉ số Mỗi phần tử của mảng 1 chiều hay 2 chiều đợc tham chiếu qua tên mảng và một (hay hai) chỉ số.
Yêu cầu HS: - Vận dụng lí thuyết làm bài tập hoặc ra các câu hỏi trắc nghiệm thông tin về các dạng khai báo của mảng
1 chiều hoặc 2 chiều Lấy các ví dụ Đúng và Sai để HS phân biệt, giải thích câu lệnh.