Giáo án giảng dạy môn Tin học 11 - Tiết 22 đến tiết 25

Giáo án giảng dạy môn Tin học 11 - Tiết 22 đến tiết 25

I. MỤC TIÊU:

 1. Kiến thức

 - Biết được một kiểu dữ liệu mới là kiểu mảng hai chiều.

 - Biết cấu trúc tạo kiểu mảng hai chiều, cách khai báo mảng 2 chiều, cách tham chiếu tới từng phần tử của mảng 2 chiều.

 2. Kỹ năng

 - Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng.

 - Tạo được kiểu mảng hai chiều và sử dụng biến mảng hai chiều trong ngôn ngữ lập trình Pascal để giải quyết 1 số bài toán cụ thể.

 

doc 11 trang Người đăng quocviet Lượt xem 3741Lượt tải 1 Download
Bạn đang xem tài liệu "Giáo án giảng dạy môn Tin học 11 - Tiết 22 đến tiết 25", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Ngày soạn: 03/01/2010	
Ngày dạy:
Tiết 22, 23: Bài 11: Kiểu mảng
I. Mục tiêu:
	1. Kiến thức
	- Biết được một kiểu dữ liệu mới là kiểu mảng hai chiều. 
	- Biết cấu trúc tạo kiểu mảng hai chiều, cách khai báo mảng 2 chiều, cách tham chiếu tới từng phần tử của mảng 2 chiều.
	2. Kỹ năng
	- Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng.
	- Tạo được kiểu mảng hai chiều và sử dụng biến mảng hai chiều trong ngôn ngữ lập trình Pascal để giải quyết 1 số bài toán cụ thể.
II. Phương pháp, phương tiện dạy học:
Phương pháp: Thuyết trình, vấn đáp
Phương tiện: Máy tính, máy chiếu, phông chiếu và bảng
III. Nội dung bài giảng:
	1. ổn định lớp và kiểm tra sĩ số
 	2. Kiểm tra bài cũ:
 Câu1: Viết cấu trúc khai báo mảng một chiều. Giải thích?
 Câu 2: Viết cấu trúc đoạn chương trình nhập giá trị của từng phần tử trong mảng 1 chiều và in mảng 1 chiều ra màn hình.
	3. Bài mới.
Hoạt động của giáo viên và học sinh
Nội dung ghi bảng
- GV: Giới thiệu ví dụ trong sgk: Xét bài toán và đưa ra bảng nhân
- Hỏi: Với kiến thức đã học về mảng 1 chiều, em hãy đưa ra cách sử dụng kiểu mảng đó để lưu trữ bảng nhân?
- HS: Sử dụng 9 mảng 1 chiều, mỗi mảng lưu 1 hàng của bảng nhân
- Hỏi: Vậy với cách lưu trữ như vậy, ta phải khai báo bao nhiêu biến mảng một chiều?
- HS: Phải khai báo 9 mảng 1 chiều.
- Hỏi: Vâỵ khai báo như vậy, có khó khăn gì?
- HS: Phải khai báo nhiều biến mảng 1 chiều, chương trình phải viết nhiều lệnh để tạo và in giá trị của mảng.
* Diễn giải: Để khắc phục khó khăn đó, ta có thể mô tả dữ liệu của bảng nhân là kiểu mảng một chiều gồm 9 phần tử, mỗi phần tử là một mảng1 chiều có 10 phần tử. Như vậy ta có thể biểu diễn bảng nhân bằng kiểu dữ liệu mảng 2 chiều.
* Nếu xem mỗi hàng của mảng 2 chiều là một phần tử thì ta có thể nói mảng 2 chiều là mảng một chiều mà mỗi phần tử của nó là mảng 1 chiều.
- Hỏi: vậy mảng 2 chiều là gì?
- Hỏi: Hãy cho biết các yếu tố của mảng 1 chiều là gì?
- HS trả lời
- Gv: Cũng như mảng 1 chiều, các yếu tố liên quan đến mảng2 chiều như: tên mảng, kiểu phần tử, cách truy cập tới phần tử...
- Hỏi: Nêu cách khai báo mảng một chiều?
 Có mấy cách?
- HS: Có 2 cách: trực tiếp và gián tiếp
- GV: Khai báo mảng 2 chiều cũng có thể khai báo trực tiếp hoặc gián tiếp.
- Hỏi: Nêu cách tham chiếu đến từng phần tử của mảng 1 chiều?
- GV: Cho học sinh viết lại các thao tác nhập xuất dữ liệu trong mảng 1 chiều
- HS: Viết câu lệnh
- GV: Giới thiệu thao tác nhập xuất dữ liệu trong mảng 2 chiều
- Hỏi: Xác định Input và output của bài toán
- HS: Trả lời
Input: mảng 2 chiều A gồm 7 hàng, 5 cột, các phần tử có kiểu nguyên
Output: Hiển thị mảng A ra màn hình
- Hỏi: Hãy xác định các thao tác cần phải làm trong bài toán và minh hoạ bằng ngôn ngữ của Pascal
- HS: Trả lời câu hỏi:
- GV: Cho học sinh lên bảng viết chương trình hoàn thiện
- Hỏi: Xác định Input và Output cua bài toán?
- Hãy xác định các thao tác cần phải thực hiện đối với bài toán này?
- GV: Cho học sinh lên bảng viết từng thao tác,và minh hoạ bằng ngôn ngữ Pascal.
- Hỏi: Hãy xác định Input và Output của bài toán.
- Gv: Cho học sinh xác định các thao tác cần phải thực hiện.
- Hỏi: Trong bài toán này, các thao tác nào là quen thuộc.
- GV: Giới thiệu thao tác sắp xếp từng hàng của mảng theo thứ tự tăng dần
- GV: Cho học sinh hình dung lại thuật toán và thao tác sắp xếp mảng 1 chiều theo thứ tự tăng dần
* Diễn giải: Nếu phải sắp xếp mảng theo thứ tự của hàng tăng dần, thì 2 phần tử liền kề nhau là 2 phần tử phải ở cùng hàng nhưng phải khác cột. 
Ví dụ: a[1,1] và a[1,2]
- cho học sinh thấy được 2 phần tử khác cột nhau. Từ đó đưa ra giới hạn của i,j,k
- GV: Giới thiệu thao tác sắp xếp hàng theo thứ tự tăng dần.
- GV: Cho học sinh viết hoàn thiện một chương trình.
- Hỏi: Nếu bài toán quay về sắp xếp cột theo thứ tự tăng dần thì sẽ có sự thay đổi như thế nào?
- HS: Hai phần tử liền kề sẽ cùng ở một cột và khác hàng nhau
- GV: Yêu cầu học sinh viết nhanh đoạn chương trình sắp xếp tăng dần của 2 phần tử cùng cột và khác hàng
- Hỏi: Input và output của bài toán là gì?
- HS: Trả lời....
- Hỏi: Suy nghĩ và nêu ý tưởng để giải bài toán này?
- Gợi ý: Tổng các phần tử theo từng hàng lại tạo thành một mảng 1 chiều.
- Lấy một mảng 1 chiều T lưu các phần tử là tổng các phần tử của một hàng hoặc một cột 
- Trong bài toán này phải dùng một biến mảng 1 chiều để lưu trữ giá trị tổng các phần tử theo hàng, và mảng 2 chiều A ban đầu.
- GV: Gợi ý thao tác tính tổng các phần tử theo từng hàng và lưu các phần từ của tổng vào mảng T
- GV: Yêu cầu học sinh viết đoạn chương trình tính tổng các phần tử theo từng cột 
1. Kiểu mảng hai chiều
a. Khái niệm mảng 2 chiều
- Là bảng các phần tử cùng kiểu (Là mảng một chiều mà mỗi phần tử của nó lại là mảng một chiều.)
b. Các yếu tố liên quan đến mảng 2 chiều
- Tên kiểu mảng hai chiều
- Số lượng các phần tử trên từng hàng và cột
- Kiểu dữ liệu của các phân tử
- Cách khai báo biến mảng 2 chiều
- Cách truy cập và từng phần tử của mảng 2 chiều.
2. Khai báo mảng 2 chiều
Cách 1: Khai báo trực tiếp
Var : Array[kiểu chỉ số dòng,kiểu chỉ số cột] of 
Cách 2: khai báo gián tiếp thông qua khai báo kiểu mảng 
Type = Array[kiểu chỉ số dòng,kiểu chỉ số cột] of ;
Var : 
* Cách tham chiếu đến từng phần tử của mảng 2 chiều:
[chỉ số dòng, chỉ số cột]
VD: Tham chiếu tới phần tử ở hảng 2 cột 3 của mảng 2 chiều B là B[2,3]
Ví dụ: Khai báo mảng 2 chiều A gồm 3 hàng và 4 cột, các phần tử có kiểu nguyên. Tham chiếu tới phần tử ở hàng 3 và cột 4 của mảng A.
C1: Khai báo trực tiếp
Var A: array [1..3,1..4] of byte;
C2: Khai báo gián tiếp
Type MA=array[1..3,1..4] of byte;
Var A:MA;
Cách tham chiếu: A[3,4]
3. Các thao tác nhập xuất dữ liệu trong mảng hai chiều.
a. Nhập số hàng và số cột cho mảng 2 chiều
write(‘nhap so hang m=’);
readln (m);
write(‘nhap so cot cho mang n=’);
readln(n);
b. Nhập giá trị cho từng phần tử mảng 2 chiều.
 For i:=1 to m do
 For j:=1 to n do 
 Begin
 Write(‘nhap a[‘,I,’,’,j,’]=’);
 Readln( a[I,j]);
 End;
c. In mảng vừa nhập ra màn hình
writeln(‘mang A vua nhap la;);
 for i:=1 to m do
 begin
 for j:=1 to n do write (a[i,j],’ ‘); 
 writeln;
 end;
4. Ví dụ: 
Ví dụ 1: Viết chương trình tạo mảng 2 chiều A gồm 7 hàng, 5 cột, các phần tử có kiểu nguyên. Hãy hiển thị mảng A vừa nhập ra màn hình.
 Thao tác cần phải thực hiện
+ Nhập giá trị cho từng phần tử
 For i:=1 to 7 do
 For j:=1 to 5 do
 Begin
 Write(‘ nhap a[‘,I,’,’,j,’]=’);
 Readln(a[i,j]);
 End;
+ Hiển thị mảng A vừa nhập ra màn hình
 Writeln(‘mang A vua nhap la ’);
For i:=1 to 7 do
 Begin 
 For j:=1 to 5 do write (a[i,j],’ ‘);
 Writeln;
 End;
+ Chương trình
Var a:array[1..7,1..5] of byte;
 i, j: byte;
begin
for i:=1 to 7 do
for j:=1 to 5 do 
 begin
 Write(‘ nhap a[‘,I,’,’,j,’]=’);
 Readln(a[i,j]);
 End;
Writeln(‘mang A vua nhap la ’);
For i:=1 to 7 do
 Begin 
 For j:=1 to 5 do write (a[i,j],’ ‘);
 Writeln;
 End;
readln;
end.
Ví dụ 2: Viết chương trình tạo mảng 2 chiều gồm m hàng, n cột các phần tử có kiểu nguyên. Hãy hiển thị mảng vừa nhập ra màn hình. Hãy tính tổng các phần tử trong mảng?
Input: Mảng 2 chiều A gồm m hàng, n cột. nhập giá trị cho các phần tử
Output: Hiển thị mảng ra màn hình. Tính tổng và hiển thị giá trị của tổng ra màn hình.
+ Thao tác nhập số hàng và số cột của mảng
+ Thao tác nhập giá trị cho từng phần tử của mảng
+Thao tác in mảng vừa nhập ra màn hình
+ Thao tác tính tổng cácphần tử trong mảng
s:=0
for i:= 1 to m do
 for j:=1 to n do s:= s+a[i,j];
+ Thao tác hiển thị tổng vừa nhập ra màn hình
4. Bài tập mảng 2 chiều
Bài tập 1: 
Viết chương trình nhập vào mảng 2 chiều A gồm m hàng và n cột ( m<=100, n<=100, a[i,j]<= 200) các phần tử có kiểu nguyên. Hãy hiển thị mảng A ban đầu ra màn hình và mảng A đã được sắp xếp hàng (hoặc cột) theo thứ tự tăng dần
Input: Mảng A gồm m hàng và n cột. Nhập giá trị cho các phần tử trong mảng. 
Output: Hiển thị mảng ban đầu và mảng sau khi sắp xếp hàng hoặc cột theo thứ tự tăng dần.
for i:=1 to m do
for j:=1 to n-1 do
 begin
 for k:=j+1 to n do
 if [i,j]>a[i,k] then
 begin
 tg:= a[i,j];
 a[i,j]:=a[i,k];
 a[i,k]:=tg;
 end;
for j:=1 to n do
for i:=1 to m-1 do
 begin
 for k:=i+1 to m do
 if a[i,j]> a[k,j] then 
 begin
 tg:=a[i,j];
 a[i,j]:=a[k,j];
 a[k,j]:=tg;
 end;
end;
Bài tập 2: 
Viết chương trình nhập vào mảng 2 chiều A gồm m hàng và n cột ( m<=100, n<=100, a[i,j]<= 200) các phần tử có kiểu nguyên. Hãy hiển thị mảng A ban đầu ra màn hình và Tính và hiển thị tổng các phần tử theo từng hàng hoặc cột.
t[i]:=0;
for i:=1 to m do
for j:=1 to n do t[i]:=t[i] + a[i,j];
for i:=1 to m do
 begin
 write(t[i]:2,’ ‘);
 writeln;
 end;
IV: Củng cố
1. Nội dung bài học
	- Cách khai báo biến mảng 2chiều
	- Cách truy cập vào từng phần tử của mảng 2 chiều
2. Bài tập về nhà
Viết chương trình nhập vào một mảng 2 chiều gồm m hàng, n cột các phần tử có kiểu nguyên và m<=10, n<=10, a[i,j] < 250.. Hãy tìm giá trị lớn nhất, nhỏ nhất theo từng hàng hoặc từng cột của mảng vừa nhập Hiển thị kết quả ra màn hình
Ngày soạn: 7/1/2010
Ngày dạy: ..............
Tiết 24-25: 	Bài tập và thực hành số 3
I. Mục tiêu:
	1. Kiến thức:
	- Củng cố lại các kiến thức có bản về kiểu dữ liệu mảng
	2. Kỹ năng:
 - Nâng cao kỹ năng sử dụng một số lệnh kiểu dữ liệu mảng một chiều trong lập trình cụ thể.
	 + Khai báo kiểu dữ liệu mảng 1 chiều
	 + Nhập xuất dữ liệu cho mảng
	 + Duyệt qua tất cả các phần tử của mảng để xủa lý từng phần tử.
 	- Biết giải quyết một sô bài toán cơ bản thường gặp:
 + Tính tổng các phần tử thoả mãn điều kiện nào đó
 + Đếm số các phần tử thoả mãn điều kiện nào đó
 + Tìm phần tử nhỏ nhất, lớn nhất cuàng với vị trí của nó trong mảng.
 	- Giới thiệu hàm Random(N)
II. Đồ dùng dạy học:
	1. Chuẩn bị của giáo viên: 
	- Phòng máy tính và máy chiếu minh hoạ
	2. Chuẩn bị của học sinh.
	- Vở ghi, sgk.
	3. Nội dung bài mới
Hoạt động 1: Tìm hiểu cách sử lệnh và kiểu dữ liệu mảng một chiều qua một chương trình đã có sẵn
Hoạt động của giáo viên và học sinh
Nội dung ghi bảng
- GV: Cho học sinh quan sát chương trình đã chuẩn bị trước và chạy thử chương trình
- HS: Chú ý kết quả khi chạy chương trình
- GV: Chiếu chương trình lên bảng
Hỏi: Khai báo uses Crt; có ý nghĩa gì?
- HS: Khai báo thư viện chương trình con Crt để sử dụng thủ tục xoá mà hình Clrscr;
Hỏi: Myarray là gì?
HS: Là tên kiểu mảng
- Hỏi: Vai trò của nmax là gì , n và Nmax có ý nghĩa như thế nào?
- HS: trả lời
- Hỏi: Những dòng lệnh nào để khai báo biến mảng A? dùng cách nào? trực tiếp hay gián tiếp
- HS: trả lời
- GV: Chạy thử chương trình cho hpcj sinh quan sát thật kỹ
- Hỏi: Trong chương trình này ta có phải nhập giá trị cho từng phần tử trong mảng hay không?
- HS: Không phải nhập giá trị cho từng phần tử trong mảng mà giá trị đó đựơc sinh ngẫu nhiên, giá trị đó trong khoảng -299 đến 299.
- GV: Sở dĩ giá trị trong mảng A được sinh ngẫu nhiên do ta dùng hàm Random(N) và phụ thuộc vào thủ tục Randomize
- Hỏi: Giá trị của các phần tử được sinh ngẫu nhiên qua lệnh nào?
- Hỏi: quan sát kết quả chương trình đã chạy và cho biết : Lệnh gán a[i]:= random(300)- random(300) có ý nghĩa gì?
- Hỏi: Lệnh in ra mà hình mảng A
- HS trả lời
- Hỏi: Lệnh a[i] mod k=0 có ý nghĩa gì?
- HS: Kiểm tra xem phần tử thứ i của mảng A có là bội của K hay không.
- Lệnh s:=s+a[i] có ý nghĩa như thế nào?
- HS: Tính tổng các phần tử trong mảng A là bội của k
- Hỏi: Câu lệnh S: = S + A[i]; được thực hiện bao nhiêu lần.
- HS: bao nhiêu lần là phụ thuộc mảng A có bao nhiêu phần tử thoả mãn Đk là bội số của k
- GV: Thực hiện lại chương trình một lần cuối
- HS: quan sát lại một lần nữa kết quả của chương trình.
Nhận xét:
- Uses crt: khai báo thư viên
- Clrscr: Lệnh xoá màn hình
- Myarray: tên biến mảng, do người dùng đặt
- Nmax: là số phần tử tối đa của mảng 1 chiều
- n: số phần tử thực tế của mảng 1 chiều và giá trị của n được nhập vào từ bàn phím
- Thủ tục Randomize: thủ tục khởi động sinh số ngẫu nhiên
- Hàm Random(N): sinh ngẫu nhiên các giá trị của N 
- a[i]:= random(300)- random(300)
- Lệnh gán a[i]:= random(300)- random(300) có ý nghĩa sinh số ngẫu nhiên cho các phần tử trong mảng A có giá trị từ 
-299 đến 299 (có giá trị tuyệt đối < 300, gồm cả số âm và số dương)
Hoạt động của giáo viên
Hoạt động của học sinh
- Yêu cầu học sinh thực hiện câu b trong sách giáo khoa. 
- GV: Chiếu lên mành hình chương trình sau khi đã sửa ở câu a.
- Hỏi: ý nghĩa của lệnh posi và neg?
- Quan sát chương trình và cho biết lệnh 
If A[i] > 0 then posi:= posi + 1 
 Else if A[i] < 0 then neg: = neg + 1;
có ý nghĩa là gì?
* Diễn giải: (khi gặp số A[i] > 0 thì chỉ số Posi tăng lên và tương tự A[i]< 0 thì chỉ số neg cũng tăng lên đến khi kết thúc i=n thì dừng) kết quả cuối cùng đưa ra Posi và neg là số đếm. Chính là kết quả cần tìm.
-Quan sát chương trình sau khi đã thực hiện sửa
- Dùng để lưu số lượng đếm các phần tử âm và dương trong mảng A
- Kiểm tra điều kiện của phần tử A[i] nếu là dương thì thực hiện đếm dương qua Posi ngược lại là đếm âm qua neg
Hoạt động 2: Rèn luyện kỹ năng lập trình
Hoạt động của giáo viên
Hoạt động của học sinh
- Yêu cầu học sinh thực hiện bài tập 2
- Hỏi: Trong bài này các em có nhận xét gì so với phần 1a.
- yêu cầu học sinh nhắc lại thuật toán tìm giá trị lớn nhất đã học ở lớp 10.
- Chiếu chương trình lên màn chiếu
- Hỏi: vai trò của biến j trong chương trình?
- Hỏi: Trong thuật toán ở lớp 10 không xuất hiện biến j vậy biến j xuất hiện trong chương trình này có vai trò gì? 
Yêu cầu: Viết chương trình đưa ra chỉ số của các phần tử lớn nhất
- Hỏi: Trong chương trình này cần thêm lệnh nào? 
- yêu cầu học sinh viết chương trình hoàn thiện
- Về cấu trúc không khác nhiều lắm.
- Khi thực hiện chương trình phải nhập các phần tử từ bàn phím mà không được đưa ra tự do nữa.
- suy nghĩ và trả lời
- Giữ lại chỉ số có phần tử lớn nhất
- Giá trị lớn nhất không được gán ngay từ đầu như ở lớp 10 max:= A[1] sau đó lần lượt đi so sánh với các số khác trong mảng.
- Theo dõi yêu cầu và đưa ra định hướng giải quyết.
- Lệnh để in ra các chỉ số có giá trị bằng giá trị lớn nhất
- Thực hiện yêu cầu
iv. Củng cố kiến thức:
Hs nhắc lại một số phần rút được từ việc thực hiện chương trình bài 1, bài 2.
- Nhận xét, tổng kết lại một số phần chú ý.
- Giao bài tập về nhà:
Dựa vào kiến thức bài 1. Viết chương trình thực hiện tạo mảng gồm n phần tử nguyên (n<=100), mỗi số có giá trị tuyệt đối không vượt quá 200. Tính tổng các phần tử thoả mãn điều kiện là số có 2 chữ số.
Dựa vào kiến thức bài 2: Viết chương trình đưa ra phần tử nhỏ nhất của mảng cùng vị trí của phần tử đó.

Tài liệu đính kèm:

  • doctin1 tiet2223.doc