Tải bản đầy đủ (.doc) (31 trang)

Bài soạn Tin 11 (Tu tuan 21 den 26)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (382.53 KB, 31 trang )

Ngày soạn:.../01/2011
Ngày giảng:.../....../2011 Lớp: 11B1 Sĩ số:..
Tiết 19: bài tập và thực hành 2 (1/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.
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:
Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
GV hớng dẫn và giải đáp các thắc mắc của hs
về một số BT ở nhà.
- Giáo viên chia nhóm HS - Thảo luận tại từng
nhóm (4 nhóm)
GV yêu cầu HS nhóm 1 trả lời câu hỏi 1-
SGK/50
Hãy cho biết sự giống và khác nhau của hai
dạng câu lệnh IF - THEN
-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:
+ Giống nhau: Cùng là lệnh tổ chức rẽ nhánh,
khi gặp một điều kiện nào đó hì chọn lựa thực


hiện thao tác thích hợp.
+ Khác nhau: Trong câu lệnh IF - THEN dạng
thiếu, nếu điều kiện không đúng thì thoát khỏi
tổ chức rẽ nhánh, thực hiện câu lệnh tiếp theo
của chơng trình; còn trong câu lệnh IF - THEN
dạng đủ, nếu điều kiện không đúng thì thực
hiện lệnh thứ hai, sau đó mới thoát khỏi tổ chức
rẽ nhánh, thực hiện câu lệnh tiếp theo của ch-
ơng trình.
GV yêu cầu HS nhóm 2 trả lời câu hỏi 2-
SGK/50
Câu lệnh ghép là gì? Tại sao phải có câu lệnh
ghép?
- 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ép
nhằm thực hiện thao tác gồm nhiều thao tác
thành phần. Mỗi thao tác thành phần tơng ứng
với một câu lệnh thành phần hoặc câu lệnh
ghé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ơng
trì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ệnh
FOR - DO bằng đoạn chơng trình chứa câu
lệ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+y
else z:=0.5;
1
nếu x
2
+y
2

1
nếu x
2

+y
2
> 1 và y

x
nếu x
2
+y
2
>1 và y<x
Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
a)





+
+
=
5,0
22
yx
yx
z
GV yêu cầu HS nhóm 4 và các nhóm 1,2,3 làm
BT. Gọi đại diện nhóm 4 lên trình bày. Các
nhóm khác quan sát, nhận xét.
GV: khẳng định lại.
GV yêu cầu HS đọc đề bài 4 trong SGK/51

b)



+
+
=
yx
yx
z
||||
GV yêu cầu HS nhóm 1 và các nhóm 2,3,4 làm
BT. Gọi đại diện nhóm 1 lên trình bày. Các
nhóm khác quan sát, nhận xét.
GV: khẳng định lại.
Bài tập 4: SGK/51
b) if (sqr(x-a)+sqr(y-b) < sqr(z) then
z:= abs(x)+abs(y)
Else z:=x+y;
GV yêu cầu HS đọc đề bài 5 trong SGK/51
Lập trình tính: a)

=
+
=
50
1
1
n
n

n
Y
GV yêu cầu HS nhóm 2 và các nhóm 1,3,4 làm
BT. Gọi đại diện nhóm 2 lên trình bày. Các
nhóm khác quan sát, nhận xét
GV: khẳng định lại.
Bài tập 5: SGK/51
a) uses CRT;
Var y: real;
N: Byte;
Begin
Clrscr;
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).
b) e(n) =
...,1
!
1
...
!2
1

!1
1
1
+++++
n
cho đến
khi
6
102
!
1

ì<
n
Đa giá trị e(n) ra màn hình.
Bài tập 5: SGK/51
b) uses CRT;
Var N: longint; e,sh: Real;
Begin
Clrscr;
sh:=1/2; n:=2; e:=2+sh;
While sh>=2*1E-6 do
Begin
inc(n); sh:= sh*(1/n);
e:=e+sh; End;
Writeln(' Gia tri cua e(n) la: ',e :10:6);
Readln;
End.
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.

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ị và làm bài tập 6,7, 8 - SGK/51
.................., Ngày ...... tháng ......năm 2011......
2
nếu điểm (x,y) nằm trong
đường tròn bán kính r
(r>0), tâm (a;b)
trong trường hợp còn lại
Ngà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:
Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
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
3
Hoạ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
không đợc cộng vào vốn.
GV hớng dẫn HS cách làm BT.
uses CRT;
const laisuat = 0.003;
Var tiengui, tienrutve,luu: Real;
thang: integer;
BEGIN

Clrscr;
write(' Nhap vao so tien gui : ');
readln(tiengui);
luu:=tiengui;
write('So tien co khi rut ve : ');
readln(tienrutve);
thang:=0;
while tiengui<tienrutve do
begin
tiengui:= tiengui + luu * laisuat;
thang:=thang+1;
end;
write('Gui ', luu:10:4,' dong', 'sau ', thang, '
thang ');
writeln(' se nhan duoc so tien ', tienrutve:10:4,'
dong');
readln
END.
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.
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......
4
Ngà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
5
Hoạ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ằng
hoặ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 đợc
xác định bởi tên mảng cùng với chỉ số, đợc viết
trong cặp ngoặc [ ].
Ví dụ:
hocsinh[20]; tham chiếu tới học sinh thứ 20.
Hoạt động 2:
Gv Hớng dẫn và giảng giải hs làm:
BT ví dụ: kiểu mảng một chiều - bài tập tính
nhiệt độ N ngày.
SGK - 54
Giáo viên đa ra một số cách khai báo kiểu
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;
* Một số ví dụ:
Ví dụ về mảng 1 chiều:
Chơng trình tính nhiệt độ tuần ở mục 1- kiểu
mảng một chiều có thể cài đặt nh sau:
Program Tinh_nhiet_do_N_ngay;
const Max=366;

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,': ');
readln(nhietdo[i]);
tong:=tong+nhietdo[i];
end;
tb:=tong/N; dem:=0;
For i:=1 to n do
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......

6
Ngà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 22
Đ11 - kiểu mảng (2/4)
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 của Giáo viên và Học sinh Nội dung kiến thức
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 a
1
, ... a
N
, 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 a
1
, ... a
N
;
B2: Max a
1
; i 2;
B3: Nếu i>N thì đa ra giá trị Max rồi kết thúc;
B4.
B4.1: Nếu a
i
> Max thì Max a
i
;
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;
7
Hoạ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
trình có thêm chỉ số csmax để ghi nhận chỉ số
của phần tử đạt giá trị lớn nhất tìm đợc Max
trong chơng trình).
a: daynguyen;
BEGIN
clrscr;
write('Nhap so luong phan tu cua day so, N = ');
readln(N);
For i:=1 to N do
Begin
write('phan tu thu ',i,' = '); readln(a[i]);
end;
Max := a[1];
csmax := 1;

For i := 2 to N do
If a[i] > Max then
Begin
Max := a[i];
csmax := i;
end;
writeln('Gia tri cua phan tu max: ',Max);
writeln('Chi so cua phan tu max: ', csmax);
readln
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
gồm N số nguyên dơng a
1
, a
2
, ... a
N
, mỗi
số đều không vợt quá 500.
Output: Dãy số A đợc sắp xếp thành dãy
không giảm.
Thuật toán:
B1: Nhập N và các số hạng a
1
,a
2
, ... a
N
;

B2: M N;
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 a
i
> a
i
+ 1 thì tráo đổi a
i
và a
i +1
cho
nhau;
B8: Quay lại B5;
Chơng trình
Program Sapxep;
uses CRT;
Const Nmax=250;
type daynguyen = array[1 ..Nmax] of integer;
var N, i, j, t: integer;
a: daynguyen;
BEGIN
clrscr;
8
Hoạ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
chơng trình.
- Gv: có thể gợi ý Hs cách sắp xếp lại dãy số
thành dãy không tăng.

write('Nhap so luong phan tu cua day so, N = ');
readln(N);
For i:=1 to N do (* Nhap cac phan tu *)
Begin
write('phan tu thu ',i,' = '); readln(a[i]);
end;
For j := N downto 2 do
For i := 1 to j - 1 do
If a[i] > a[i + 1] then
Begin ( * trao doi a[i] va a[i + 1] *)
t := a[i];
a[i] := a[i+1];
a[i+1] := t;
end;
writeln('Day so duoc sap xep la: ');
For i := 1 to N do write(a[i]: 3);
readln
END.
3. Củng cố:
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à:
Bài 5: Lấy d=A[2] - A[1] Khi đó: dãy A là cấp số cộng nếu nó thỏa mãn điều kiện
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......
9
Ngà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 23
Đ11 - kiểu mảng (3/4)
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 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 ô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 a
1
, a
2
,... a
N
và số nguyên k.
Output: Chỉ số i mà a
i
= 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 a
1
, a
2
... a

N
và khóa k;
B2: Dau 1; Cuoi N;
B3: Giua
;
2






+
CuoiDau
B4: Nếu a
giua
=k thì thông báo chỉ số Giua, rồi
kết thúc;
B5: Nếu A
giua
> 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
10
Hoạ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
N,i,k: integer;
dau, cuoi, giua: integer;
A: dnguyen;
tim_thay:boolean;
BEGIN

clrscr;
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 do
begin
write(' phan tu thu ', i,' = ');
readln(a[i]);
end;
write(' Nhap gia tri k = ');
readln(k);
Dau:=1; cuoi:=n;tim_thay:= false;
Whlie (dau<=cuoi) and
not(tim_thay) do
begin
giua:=(dau+cuoi)div 2;
if a[giua]=k then
tim_thay:=true;
else if a[giua] > k then
cuoi:= giua-1;
else dau:= giua+1;
end;
if tim_thay then
writeln('chi so tim duoc la:
',giua)
else
writeln(' khong tim thay');
readln;

END.
Hoạt động 2
GV: Yêu cầu HS làm bài tập :
+ Cho 1 mảng gồm 8 số nguyên dơng.
Hãy sắp xếp mảng đó thành dãy số tăng dần.
- Giáo viên hớng dẫn HS làm BT. Sử dụng thuật
toán tráo đổi.
Chơng trình
program sapxep;
uses crt;
var j,i,tam:integer;
a:array[1..8] of integer;
begin;
clrscr;
for i:=1 to 8 do
begin
write('vao mang
a[',i,']=');readln (a[i]);
end;
for i:=1 to 7 do
for j:=7 downto i do
if a[j]>a[j+1] then
begin
tam:=a[j];
11
Hoạt động của Giáo viên và Học sinh Nội dung kiến thức
a[j]:=a[j+1];
a[j+1]:=tam;
end;
write('mang a sau khi sap xep

la:');
for i:=1 to 8 do
write(a[i]:3);
readln;
end.
3. Củng cố:
Giáo viên: - Tóm tắt lại các kiến thức đã học trong bài.
* Yêu cầu HS cần nắm đợc:
- Kiểu mảng là một kiểu DLcó cấu trúc đợc dùng nhiều trong lập trình, những bài toán tìm kiếm sắp xếp dãy
các phần tử là những bài toán thờng gặp và có ý nghĩa quan trọng.
- Cấu trúc của kiểu DL mảng 1 chiều, cách khai báo và cách tham chiếu đến một phần tử của mảng
4. Hớng dẫn học ở nhà:
BTVN: - Làm các bài tập 7 - 8 trong SGK /79;
Hớng dẫn làm bài tập 7 (SGK/79)
Program BT7_trang79;
uses crt;
var n,i, f1, f2, f: word;
BEGIN
Clrscr;
write(' TIm so hang thu N cua day Phi-bo- na - xi , N = ');
readln (N);
f1:=1;
f2:=1;
for i:=3 to N do
begin
f:=f1+f2;
f1:=f2;
f2:=f;
end;
writeln(f);

readln;
END.
Ghi chú:
Chơng trình trên chỉ chạy đợc với N=24 vì số Phi-bô- na-xi thứ 25 là 75025, vợt quá phạm vi của
kiểu word.
.................., Ngày ...... tháng ......năm 2011......
12

×