Đề tài Nâng cao kết quả học tập chương IV môn Tin học lớp 11 thông qua phương pháp giao việc cho học sinh về nhà

Chương IV: KIỂU DỮ LIỆU CÓ CẤU TRÚC

BÀI TẬP VÀ THỰC HÀNH 3

1. Mục tiêu:

 a. Kiến thức:

– Củng cố những hiểu biết về kiểu dữ liệu mảng.

– Biết thuật toán cơ bản và đơn giản thường gặp với dữ liệu kiểu mảng: tính tổng các phần tử, đếm số các phần tử thỏa mãn điều kiện nào đó.

– Biết hàm random(N) dùng để lấy giá trị ngẫu nhiên một số nguyên dương trong khoảng 0 đến N-1.

 b. Kĩ năng:

– Thành thạo việc khai báo kiểu dữ liệu mảng.

– Biết nhập dữ liệu cho mảng.

– Biết duyệt qua tất cả các phần tử của mảng để xử lí từng phần tử.

 c. Thái độ

– Tích cực học tập, thích tìm hiểu, hình thành và rèn luyện tư duy lập trình, tác phong của người lập trình.

 

doc48 trang | Chia sẻ: dung89st | Lượt xem: 1408 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Nâng cao kết quả học tập chương IV môn Tin học lớp 11 thông qua phương pháp giao việc cho học sinh về nhà, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
ông vượt quá 300.
Khai báo mảng A
Sử dụng hàm randomize để tạo cơ chế sinh số ngẫu nhiên.
Tính tổng các phần tử của mảng:
Khởi tạo biến tổng s và gán giá trị bằng 0.
Xuất giá trị tổng s tìm được.
Điểm khác bài 1 SGK/63: Chỉ tính tổng các phần tử là số chẵn nghĩa là chia hết cho 2.
if A[i] mod 2 = 0 then s := s + A[i];
Viết chương trình: Tạo mảng A gồm n (n ≤ 100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là số lẻ.
Gợi ý: 
 Điểm tương tự bài 1 SGK/63:
Mảng A gồm n (n ≤ 100) số nguyên, mỗi giá trị có trị tuyệt đối không vượt quá 300.
Khai báo mảng A
Sử dụng hàm randomize để tạo cơ chế sinh số ngẫu nhiên.
Tính tổng các phần tử của mảng:
Khởi tạo biến tổng s và gán giá trị bằng 0.
Xuất giá trị tổng s tìm được.
Điểm khác bài 1 SGK/63: Chỉ tính tổng các phần tử là số lẻ nghĩa là không chia hết cho 2.
if A[i] mod 2 0 then s := s + A[i];
Viết chương trình: Viết chương trình tìm phần tử có giá trị nhỏ nhất của mảng và đưa ra màn hình chỉ số và giá trị của phần tử tìm được. Nếu có nhiều phần tử có cùng giá trị nhỏ nhất thì đưa ra phần tử có chỉ số nhỏ nhất.
Gợi ý: 
Điểm tương tự bài 2 SGK/64:
Mảng A gồm n (n ≤ 100) số nguyên
Khai báo mảng A
Đoạn chương trình nhập các phần tử của mảng A.
Khởi tạo biến j := 1.
Cho biến i chạy từ 2 đến n.
Xuất chỉ số j và giá trị A[j].
Điểm khác bài 2 SGK/64: Tìm phần tử có giá trị nhỏ nhất của mảng.
if A[i] < A[j] then j := i;
Bài tập và thực hành 4:
Viết chương trình: Sắp xếp dãy số nguyên theo thứ tự giảm dần bằng thuật toán tráo đổi.
Gợi ý: 
Điểm tương tự bài 1 SGK/65:
Mảng A gồm n (n ≤ 250) số nguyên, mỗi giá trị có trị tuyệt đối không vượt quá 300.
Khai báo mảng A
Thực hiện thuật toán tráo đổi.
In mảng A đã tráo đổi vị trí.
Điểm khác bài 1 SGK/63: 
Nhập mảng A gồm n phần tử.
Sắp xếp mảng A theo thứ tự giảm dần.
if A[i] < A[i+1] then tráo đổi
Viết chương trình: Viết chương trình nhập vào mảng có n số nguyên dương và đưa ra màn hình số các số lẻ có trong mảng.
Gợi ý: 
Điểm tương tự bài 3:
Mảng A gồm n (n ≤ 100) số nguyên
Khai báo mảng A
Đoạn chương trình nhập các phần tử của mảng A.
 Điểm khác bài 3: Tìm phần tử lẻ mảng.
if A[i] mod 2 0 then xuất phần tử lẻ
Viết chương trình: Viết chương trình nhập vào mảng có n số nguyên dương và đưa ra màn hình tổng các số chẵn có trong mảng.
Gợi ý: 
Điểm tương tự bài 3:
Mảng A gồm n (n ≤ 100) số nguyên
Khai báo mảng A
Đoạn chương trình nhập các phần tử của mảng A.
 Điểm khác bài 3: 
Tìm phần tử chẵn trong mảngmảng.
if A[i] mod 2 = 0 then.
Tính tổng các phần tử chẵn:
Khởi tạo biến tổng s :=0
Nếu là phần tử chẵn thì tính tổng các phần tử đó.
Do thời gian tiết dạy có hạn giáo viên chỉ có thể kiểm tra miệng học sinh bằng cách cho điền khuyết vào chương trình đã cho về nhà làm.
Bước 3: Kiểm tra, xử lý học sinh vi phạm:
Giáo viên cho học sinh điền khuyết vào các chương trình đã cho về nhà. Nếu học sinh trả lời đúng và tập soạn bài đầy đủ giáo viên nên tuyên dương trước lớp và cho điểm tối đa.
Nếu học sinh không thuộc bài: Giáo viên cần tìm hiểu nguyên nhân, lý do để có biện pháp uốn nắn kịp thời, nếu lý do là lười học giáo viên có biện pháp sau:
Cho học bài tại lớp và kiểm tra ngay và báo cho giáo viên chủ nhiệm.
Nếu tái phạm (lần 2, 3) giáo viên phối hợp với giáo viên chủ nhiệm, cha mẹ học sinh đến thông báo kết quả học tập và tìm cách giải quyết.
PHỤ LỤC 2: Kế hoạch bài dạy: Bài tập và thực hành 3; Bài tập và thực hành 4.
Tuần: 11	
Tiết PPCT: 22	
Chương IV: KIỂU DỮ LIỆU CÓ CẤU TRÚC	
BÀI TẬP VÀ THỰC HÀNH 3
1. Mục tiêu:
	a. Kiến thức:
Củng cố những hiểu biết về kiểu dữ liệu mảng.
Biết thuật toán cơ bản và đơn giản thường gặp với dữ liệu kiểu mảng: tính tổng các phần tử, đếm số các phần tử thỏa mãn điều kiện nào đó.
Biết hàm random(N) dùng để lấy giá trị ngẫu nhiên một số nguyên dương trong khoảng 0 đến N-1.
	b. Kĩ năng: 
Thành thạo việc khai báo kiểu dữ liệu mảng.
Biết nhập dữ liệu cho mảng.
Biết duyệt qua tất cả các phần tử của mảng để xử lí từng phần tử.
	c. Thái độ
Tích cực học tập, thích tìm hiểu, hình thành và rèn luyện tư duy lập trình, tác phong của người lập trình.
2. Nội dung bài học:
Thành thạo việc khai báo kiểu dữ liệu mảng.
Biết nhập dữ liệu cho mảng.
Biết duyệt qua tất cả phần tử của mảng để xử lí từng phần tử.
Tính tổng các phần tử, đếm số các phần tử thỏa mãn điều kiện nào đó.
3. Chuẩn bị:
a. Giáo viên: phòng máy, projector.
b. Học sinh: chuẩn bị bài trước ở nhà, tập vở.
4. Tiến trình:
4.1 Ổn định tổ chức và kiểm diện: lớp trưởng báo cáo sĩ số lớp.
4.2 Kiểm tra miệng: không. 
4.3 Tiến trình bài học:
Hoạt động của giáo viên và học sinh
Nội dung
Hoạt động 1 (25 phút): Thực hành bài 1 SGK trang 63.
GV: Trình bày nội dung bài 1. Yêu cầu HS xác định Input và Output.
HS: Trả lời.
GV: Nhận xét và bổ sung. Yêu cầu HS nhắc lại hàm lấy trị tuyệt đối và cho biết thế nào là bội của một số.
HS: Trả lời. Hàm abs(x) dùng để lấy trị tuyệt đối của đối số x và bội của số k là số chia hết cho k.
GV: Nhận xét và bổ sung. Thủ tục randomize khởi tạo bộ lấy số ngẫu nhiên trước khi thực hiện lệnh random(n) để lấy một số ngẫu nhiên trong phạm vi từ 0 đến n – 1. Yêu cầu HS cho biến MyArray là tên một kiểu dữ liệu hay tên một biến?
HS: Trả lời: Tên kiểu dữ liệu mảng.
GV: Nhận xét. Vai trò của biến nmax và n khác nhau như thế nào? Có thể bỏ khai báo biến nmax và viết n thay cho nmax trong khai báo kiểu mảng được không? Vì sao?
HS: Biến nmax để cho biết số phần tử tối đa của mảng, biến n để người dùng xác định số phần tử cụ thể của mảng (n ≤ nmax). Số phần tử của mảng là hữu hạn nên không thể bỏ khai báo biến nmax và viết n thay vào đó.
GV: Nhận xét và bổ sung. Những dòng lệnh nào khởi tạo giá trị cho các phần tử của mảng A?
HS: Trả lời.
GV: Nhận xét. Dòng lệnh A[i]:= random(300) – random(300); có ý nghĩa gì?
HS: Dùng để tạo ra giá tri âm.
GV: Nhận xét. Câu lệnh for – do cuối cùng thực hiện nhiệm vu nào trong những nhiệm vụ đặt ra cho chương trình? Giải thích?
HS: Dùng để tính tổng các phần tử của mảng là bội số của k. Biến s dùng để lưu giá trị của tổng, câu lệnh if để chọn ra các phần tử là bội của k.
GV: Nhận xét. Câu lệnh s:= s + A[i]; được thực hiện bao nhiêu lần?
HS: Bao nhiêu là tùy theo mảng A có bao nhiêu phần tử thỏa mãn điều kiện là bội của số k.
GV: Giao bài tập về nhà: Tạo mảng A gồm n (n ≤ 100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là số chẵn.
HS: Ghi chép và làm.
GV: Giao bài tập về nhà: Tạo mảng A gồm n (n ≤ 100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là số lẻ.
HS: Ghi chép và làm.
Hoạt động 2 (15 phút): Thực hành ví dụ b).
GV: Trình bày yêu cầu ví dụ b/. Yêu cầu HS xác định câu lệnh đầu tiên dùng để làm gì?
HS: Trả lời: khai báo hai biến posi và neg có kiểu dữ liệu là integer.
GV: Hãy cho biết biến posi và neg dùng để làm gì?
HS: Biến posi dùng để đếm số lượng phần tử có giá trị dương trong mảng, biến neg dùng đếm số lượng phần tử có giá trị âm trong mảng.
GV: Vì sao biết biến posi dùng để đếm số lượng phần tử có giá trị dương trong mảng?
HS: Do điều kiện so sánh A[i] > 0 tức là có phần tử mang giá trị âm thì tăng biến đếm posi lên một đơn vị.
GV: Chương trình ở câu a kiểm tra từng phần tử của mảng để quyết định có cộng tích lũy không, còn chương trình ở câu b này kiểm tra từng phần tử của mảng để quyết định đếm tăng cho số các số dương hay đếm tăng cho số các số âm.
HS: Nghe giảng và ghi bài.
GV: Yêu cầu HS lưu ví dụ a/, rồi sau đó vào File à Save as để lưu với tên khác và tiến hành đặt các câu lệnh theo yêu cầu bài toán vào chương trình để thực hiện yêu cầu đặt ra.
HS: Thực hành trên máy.
GV: Quan sát và giải đáp thắc mắc của HS.
BÀI TẬP VÀ THỰC HÀNH 3
1/ Tạo mảng A gồm n (n ≤ 100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là bội số của một số nguyên dương k cho trước.
- Hàm abs(x) à | x |.
- A là bội số của k à A chia hết cho k
* Xác định yêu cầu bài toán:
- Input: Số nguyên dương n, mảng A gồm n số nguyên và số nguyên dương k.
- Output: S.
* Chương trình: SGK trang 63.
- Biến nmax để cho biết số phần tử tối đa của mảng.
- Biến n để người dùng xác định số phần tử cụ thể của mảng (n ≤ nmax).
- Số phần tử của mảng là hữu hạn nên không thể bỏ khai báo biến nmax và viết n thay vào đó.
b/ Đưa các lệnh SGK trang 64 vào những vị trí cần thiết nhằm sửa đổi chương trình trong câu a) để có được chương trình đưa ra số các số dương và số các số âm trong mảng.
Chương trình:
Var 	A: MyArray;
	S, n, i, k: integer;
	posi: integer; neg: integer;
Begin
s := 0; posi := 0; neg := 0;
For I := 1 to n do
	Begin
	If A[i] mod k = 0 then s := s + A[i];
	If A[i] > 0 then posi := posi + 1
	Else
	If A[i] < 0 then neg := neg + 1;
	End;
Writeln(‘Tong can tinh la:’, s);
Writeln(posi:4, neg:4);
Readln
End.
5. Củng cố và hướng dẫn học ở nhà:
5.1 Củng cố:
- Sử dụng hàm random(n) để lấy giá trị ngẫu nhiên tử 0 đến n – 1, để có thể tạo ra giá trị âm thì dùng random(n) – random(n).
- Cấu trúc chương trình:
{Khai báo biến}
Phần thân:
	Nhập giá trị N cho biết số lượng phần tử của mảng.
	Khởi tạo giá trị cho tất cả các phần tử của mảng (sử dụng vòng lặp for-do và lệnh readln hoặc hàm random).
	Các câu lệnh xử lý các phần tử của mảng.
	Xuất ra dữ liệu theo đề bài yêu cầu.
5.2 Hướng dẫn học tập:
- Xem lại các chương trình đã được lập trình.
- Viết chương trình: Tạo mảng A gồm n (n ≤ 100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là số chẵn. (thể hiện phần phụ lục 1)
 - Viết chương trình: Tạo mảng A gồm n (n ≤ 100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là số lẻ. (thể hiện phần phụ lục 1)
- Chuẩn bị bài 2 của Bài tập và thực hành 3.
Gợi ý: 
 Input: Số nguyên dương n, mảng A gồm n số nguyên.
 Output: Chỉ số phần tử lớn nhất.
6. Rút kinh nghiệm:
Tuần: 12	
Tiết PPCT: 23	
Chương IV: KIỂU DỮ LIỆU CÓ CẤU TRÚC
BÀI TẬP VÀ THỰC HÀNH 3 (tt)
1. Mục tiêu:
	a. Kiến thức:
Củng cố những hiểu biết về kiểu dữ liệu mảng.
Biết thuật toán cơ bản và đơn giản thường gặp với dữ liệu kiểu mảng: tìm phần tử lớn nhất (nhỏ nhất) của mảng cùng với vị trí của nó trong mảng.
	b. Kĩ năng: 
Thành thạo việc khai báo kiểu dữ liệu mảng.
Biết nhập dữ liệu cho mảng.
Biết duyệt qua tất cả các phần tử của mảng để xử lí từng phần tử.
	c. Thái độ
Tích cực học tập, thích tìm hiểu, hình thành và rèn luyện tư duy lập trình, tác phong của người lập trình.
2. Nội dung bài học:
Tìm phần tử lớn nhất của mảng cùng với vị trí của nó trong mảng.
3. Chuẩn bị:
a. Giáo viên: phòng máy, projector.
b. Học sinh: chuẩn bị bài trước ở nhà, tập vở.
4. Tiến trình:
4.1 Ổn định tổ chức và kiểm diện: lớp trưởng báo cáo sĩ số lớp.
4.2 Kiểm tra miệng: Gọi 2 học sinh lên bảng điền khuyết lại chương trình: 
Câu 1: Tạo mảng A gồm n (n ≤ 100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là số chẵn.
Đáp án:
Program	Sum1;
Uses 	crt;
Const	nmax = 100;
Type	baitap = array [ 1 . . nmax] of integer;
Var	A : baitap;
	s, n, i : integer;
begin
	clrscr; randomize;
	write (‘ nhap n’);
	readln( n );
	for i:= 1 to n do A[i]:= random (300) – random (300);
	for i:= 1 to n do write (A[i]);
writeln;
s:=0;
for i:= 1 to n do 
if A[i] mod 2 = 0 then s := s + A[i];
writeln (‘Tong can tinh la:’, s);
readln;
end.
Câu 2: Tạo mảng A gồm n (n ≤ 100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là số lẻ.
Đáp án:
Program	Sum1;
Uses 	crt;
Const	nmax = 100;
Type	baitap = array [ 1 . . nmax] of integer;
Var	A : baitap;
	s, n, i : integer;
begin
	clrscr; randomize;
	write (‘ Nhap n =’);
	readln( n );
	for i:= 1 to n do A[i]:= random (300) – random (300);
	for i:= 1 to n do write (A[i]);
writeln;
s:= 0;
for i:= 1 to n do 
if A[i] mod 2 0 then s := s + A[i];
writeln (s);
readln;
end.
4.3 Tiến trình bài học:
Hoạt động của giáo viên và học sinh
Nội dung
Hoạt động 1 (20): Lập trình bài toán 2 SGK trang 64.
GV: Trình bày nội dung bài toán tìm phần tử lớn nhất. Yêu cầu HS xác định phần khai báo kiểu dữ liệu mảng và đoạn lệnh dùng để khởi tạo mảng.
HS: Trả lời. 
GV: Nhận xét. Yêu cầu HS cho biết ý nghĩa của biến j dùng để làm gì?
HS: Trả lời: Dùng để lưu giá trị của chỉ số i (chỉ số của phần tử lớn nhất).
GV: Tại sao gán giá trị ban đầu cho biến j là 1?
HS: Trả lời: chúng ta giả sử phần tử đầu tiên là phần tử lớn nhất.
GV: Nhận xét. Cho học sinh chạy thử chương trình với bộ dữ liệu: 6 3 8 5 10
HS: Thực hiện trên giấy nháp.
GV: Tại bước lặp thứ i trong câu lệnh for – do, phần tử A[i] được so sánh với phần tử lớn nhất tìm được trong phạm vi các phần tử đã được duyệt qua ở trước bước này.
HS: Nghe giảng và ghi chép.
GV: Yêu cầu HS trình bày cách sửa để có chương trình tìm phần tử nhỏ nhất.
HS: Sửa dấu > thành dấu <.
GV: Nhận xét. Yêu cầu HS tiến hành sửa và chạy thử trên máy.
HS: Thực hành trên máy.
GV:Giao bài tập về nhà: Viết chương trình tìm phần tử có giá trị nhỏ nhất của mảng và đưa ra màn hình chỉ số và giá trị của phần tử tìm được. Nếu có nhiều phần tử có cùng giá trị nhỏ nhất thì đưa ra phần tử có chỉ số nhỏ nhất.
HS: Ghi bài 
Hoạt động 2 (20 phút): Thực hành yêu cầu ví dụ 2b/.
GV: Trình bày nội dung của ví dụ b/. Đặt câu hỏi: Chương trình có cần giữ lại đoạn tìm phần tử lớn nhất không?
HS: Trả lời. Cần giữ lại để xác định phần tử có giá trị lớn nhất.
GV: Nhận xét. Để đưa ra tất cả các chỉ số của các phần tử đạt giá trị lớn nhất đó có cần duyệt lại tất cả các phần tử trong mảng không?
HS: Cần phải duyệt lại các phần tử trong mảng.
GV: Những chương trình có được ở bài 1 cũng duyệt qua tất cả các phần tử của mảng, mỗi phần tử duyệt đến đã được kiểm tra theo một điều kiện để quyết định một xử lí liên quan đến phần tử này. Điều đó có gợi cho em cách giải quyết câu b hay không?
HS: Trả lời và thực hành trên máy.
GV: Quan sát và trả lời các thắc mắc.
BÀI TẬP VÀ THỰC HÀNH 3 (tt)
Bài toán 2: Viết chương trình tìm phần tử có giá trị lớn nhất của mảng và đưa ra màn hình chỉ số và giá trị của phần tử tìm được. Nếu có nhiều phần tử có cùng giá trị lớn nhất thì đưa ra phần tử có chỉ số nhỏ nhất.
* Xác định yêu cầu bài toán:
- Input: Số nguyên dương n, mảng A gồm n số nguyên.
- Output: Chỉ số phần tử lớn nhất.
* Chương trình: SGK trang 64.
b/ Chỉnh sửa chương trình trên để đưa ra chỉ số của các phần tử có cùng giá trị lớn nhất.
* Chương trình: 
Program MaxElement;
Const 	Nmax = 100;
Type 	MyArray = array[1..Nmax] of integer;
Var 	A: MyArray;
	n, i, j: integer;
Begin
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;
j:=1;
for i:=2 to N do if A[i] > A[j] then j:=I;
write(‘Phan tu lon nhat la ‘, A[j]);
write(‘Cac chi so la’);
for i:=1 to N do 
	if A[i] = A[j] then writeln(i);
Readln
End.
5. Củng cố và hướng dẫn học ở nhà:
5.1 Củng cố:
- Cấu trúc chương trình:
{Khai báo biến}
Phần thân:
	Nhập giá trị N cho biết số lượng phần tử của mảng.
	Khởi tạo giá trị cho tất cả các phần tử của mảng (sử dụng vòng lặp for-do và lệnh readln).
	Các câu lệnh xử lý các phần tử của mảng.
	Xuất ra dữ liệu theo đề bài yêu cầu.
5.2 Hướng dẫn học tập:
- Xem lại các chương trình bài tập về nhà và bài toán 2 đã được lập trình.
- Học lý thuyết bài Kiểu mảng.
- Viết chương trình: Viết chương trình tìm phần tử có giá trị nhỏ nhất của mảng và đưa ra màn hình chỉ số và giá trị của phần tử tìm được. Nếu có nhiều phần tử có cùng giá trị nhỏ nhất thì đưa ra phần tử có chỉ số nhỏ nhất. (thể hiện phụ lục 1)
- Chuẩn bị Bài 1 của Bài tập và thực hành 4.
Gợi ý: 
 Input: Số nguyên dương n, mảng A gồm n số nguyên.
 Output: Mảng sắp xếp không giảm.
6. Rút kinh nghiệm:
Tuần: 12	
TIẾT PPCT: 23	
Chương IV: KIỂU DỮ LIỆU CÓ CẤU TRÚC
BÀI TẬP VÀ THỰC HÀNH 4
1. Mục tiêu:
	a. Kiến thức:
Củng cố những kiến thức đã có khi lập trình với kiểu dữ liệu mảng.
Củng cố thuật toán sắp xếp các phần tử của một dãy (bằng tráo đổi).
	b. Kĩ năng: 
Củng cố những kĩ năng đã có khi lập trình với kiểu dữ liệu mảng.
Biết diễn đạt thuật toán sắp xếp bằng chương trình sử dụng dữ liệu kiểu mảng.
	c. Thái độ
Có ý thức viết chương trình với khối lượng tính toán ít nhất có thể được.
2. Nội dung bài học:
Thuật toán sắp xếp các phần tử của một dãy (bằng tráo đổi).
3. Chuẩn bị:
a. Giáo viên: phòng máy, projector.
b. Học sinh: chuẩn bị bài trước ở nhà, tập vở.
4. Tiến trình:
4.1 Ổn định tổ chức và kiểm diện: lớp trưởng báo cáo sĩ số lớp.
4.2 Kiểm tra miệng: Gọi 2 học sinh lên bảng điền khuyết lại chương trình
 Câu 1: Viết chương trình tìm phần tử có giá trị nhỏ nhất của mảng và đưa ra màn hình chỉ số và giá trị của phần tử tìm được. Nếu có nhiều phần tử có cùng giá trị nhỏ nhất thì đưa ra phần tử có chỉ số nhỏ nhất.
Đáp án:
Program	btvn;
Const	nmax = 100;
Type	baitap = array [ 1 . . nmax] of integer;
Var	A : baitap;
	n, i, j : integer;
begin
	write (‘nhap n’);
	readln( n );
	for i:= 1 to n do
begin
write ( ‘phan tu thu’, i, ‘=’);
write (A[i]);
	end;
	j := 1;
	for i:= 2 to n do if A[i] < A[i+1]then j := i;
	write ( ‘chi so:’, j, ‘gia tri’, A[j]);
readln;
end.
4.3 Tiến trình bài học:
Hoạt động của giáo viên và học sinh
Nội dung
Hoạt động 1: Kiểm tra 15 phút.
GV: Phát đề.
HS: Thực hiện theo yêu cầu.
Đề kiểm tra (xem phụ lục)
Hoạt động 2: Thực hành bài 1.
GV: Trình bày nội dung bài 1 và xác định Input và Output. Yêu cầu HS gõ chương trình.
HS: Thực hành trên máy.
GV: Yêu cầu HS sửa lại một chỗ để có chương trình sắp xếp các phần tử theo thứ tự không tăng.
HS: Thực hành và chạy thử trên máy.
GV: Quan sát và giải đáp thắc mắc.
GV: Giao bài tập về nhà: Sắp xếp dãy số nguyên theo thứ tự giảm dần bằng thuật toán tráo đổi.
HS: Ghi chép và theo dõi.
BÀI TẬP VÀ THỰC HÀNH 4
1/ Hãy tìm hiểu và chạy thử chương trình thực hiện thuật toán sắp xếp dãy số nguyên bằng thuật toán tráo đổi với các giá trị khác nhau của n dưới đây. Qua đó, nhận xét về thời gian chạy của chương trình.
* Xác định yêu cầu bài toán:
- Input: Số nguyên dương n, mảng A gồm n số nguyên.
- Output: Mảng sắp xếp không giảm.
* Chương trình: SGK trang 65.
Hoạt động 2: Thực hành ví dụ b).
GV: Trình bày yêu cầu ví dụ b/. Yêu cầu HS xác định đoạn nào thể hiện một lần tráo đổi giá trị hai phần tử liền kề của mảng?
HS: Trả lời.
GV: Nhận xét và bổ sung. Khai báo biến Dem như thế nào? Nếu dãy có n phần tử tính xem số lần tráo đổi không thể vượt quá số nào?
HS: Trả lời: Biến Dem có kiểu là integer, số lần tráo đổi không thể vượt quá n!.
GV: Nhận xét. Khởi tạo biến Dem như thế nào? Và đặt ở đâu?
HS: Trả lời. Khởi tạo Dem := 0; và đặt trước câu lệnh đầu tiên của đoạn lệnh sắp xếp.
GV: Nhận xét. Qua bài thực hành 3 em đã biết cách đếm số lượng các số trong mảng thỏa mãn một điều kiện nào đó, bằng cách tăng biến đếm mỗi lần gặp một phần tử như vậy khi đã duyệt tất cả các phần tử. Ở đây chúng ta có thể tăng biến Dem để đếm mỗi khi ra lệnh tráo đổi hay không? Để làm điều đó phải đặt câu lệnh tăng biến Dem ở đâu?
HS: Trả lời: Chúng ta có thể tằng biến Dem để đếm mỗi khi ra lệnh tráo đổi bằng cách đặt câu lệnh tăng biến Dem ở ngay sau câu lệnh cuối cùng của đoạn lệnh tráo đổi.
GV: Nhận xét. Và yêu cầu HS gõ vào chương trình trên máy. 
HS: Thực hành trên máy.
GV: Quan sát và giải đáp thắc mắc.
GV: 
b/ Khai báo thêm biến nguyên Dem và bổ sung vào chương trình những câu lệnh cần thiết để biến Dem tính số lần thực hiện tráo đổi trong thuật toán. Đưa kết quả tìm được ra màn hình.
- Thực hiện tráo đổi: t := A[i]; A[i] := A[i+1]; A[i+1] := t;
* Chương trình:
Var 	A: ArrInt;
	n, i, j, y: integer;
	dem: integer;
Begin
Dem := 0;
For j := N downto 2 do
	For i:= 1 to j–1 do 
	Begin
	If A[i] > A[i+1] then 
	Begin
	t:= A[i};
	A[i]:=A[i+1];
	A[i+1]:=A[i];
	Dem:=Dem+ 1;
	End;
Writeln(‘Day so duoc sap xep: ’);
For i:= 1 to n do write(A[i]: 7);
Writeln(‘So lan hoan doi la: ‘, Dem);
Writeln;
Readln
End.
5.

File đính kèm:

  • docgpkh3.doc
  • xlsPhan tich diem so.xls
  • docphieu danh gia de tai.doc
  • docTrang Bia.doc
Giáo án liên quan