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

tinh tong cac phan tu tren duong cheo chinh va duong cheo phu mang hai chieu

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 (86.62 KB, 9 trang )

Sở GD&ĐT Bắc giang
Trờng thpt yên dũng số 2

Tổ: toán
Sáng kiến kinh nghiệm :
tính tổng các phần tử trên đờng chéo chính
và đờng chéo phụ của mảng hai chiều.

Giáo viên: Hà Ngọc Thơng
1


A. Đặt vấn đề
1. Lý do chọn sáng kiến kinh nghiệm:
Công nghệ thông tin là một ngành khoa học đang phát triển rất mạnh mẽ. Sự bùng
nổ thông tin trong thời đại ngày nay, tốc độ phát triển của công nghệ thông tin khiến cho
ngời thầy không thể chuyền đạt hết mọi điều cho học trò, mà dù có kéo dài thời gian để
dạy hết mọi điều thì rồi các kiến thức đó cũng nhanh chóng trở nên lạc hậu.
Do đó ngời thầy cần phải tìm ra phơng pháp dạy học tích cực hơn để tăng hiệu
quả dạy và học. Dạy học sinh cách chủ động, phơng pháp học, cách học những điều mà
thực tế đòi hỏi thay vì chuyển tải một lợng kiến thức quá nhiều đến mức chúng không
thể nhớ nổi hoặc có nhớ lúc học, còn lúc cần vận dụng thì quên sạch.
Môn Tin học là một môn học mới mẻ của học sinh THPT, học sinh cha có khái
niệm về công nghệ thông tin, khái niệm thuật toán trong các ngôn ngữ lập trình, vì vậy
rất khó cho việc dạy và học.
Vậy cần phải có phơng pháp dạy và học cho một môn học hoàn toàn mới.
2. Mục đích yêu cầu:
Việc làm các bài tập về mảng hai chiều là một việc rất khó.
Vậy trớc hết học sinh phải hình dung đợc 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 đợc đánh số liên tục 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 hai chiều đợc hình dung nh giá trị của một ô của bảng, mỗi ô có chỉ số
dòng và chỉ số cột.
Giống nh mảng một chiều, có thể tham chiếu trên mỗi phần tử của mảng hai
chiều, nhng khác ở chỗ mỗi phần tử của mảng hai chiều có hai chỉ số ( chứ không phải
có một chỉ số nh mảng một chiều) và do vậy nó đợc xác định bởi tên mảng và hai chỉ số
của nó.
Mảng hai chiều là mảng một chiều mà mỗi phần tử của nó lại là một mảng một
chiều.

2


3. Phạm vi nghiên cứu, phơng pháp nghiên cứu.
Nội dung bài tập về mảng hai chiều có nhiều phần, trong phạm vi nghiên cứu này
chỉ đề cập đến một phần nhỏ của bài tập về mảng hai chiều, nhng lại là một phần rất
quan trọng, đó là : tính tổng các phần tử nằm trên đờng chéo chính, tính tổng các phần
tử nằm trên đờng chéo phụ của mảng hai chiều có N cột và N hàng.
Để thực hiện đợc mục tiêu trên, yêu cầu học sinh cần nắm vững đợc kiến thức sau:
- Cách khai báo kiểu dữ liệu mảng hai chiều
+ Khai báo gián tiếp
+ Khai báo trực tiếp
* Tên kiểu mảng hai chiều
* Số lợng phần tử của mỗi chiều
* Kiểu dữ liệu của phần tử
* Cách khai báo biến
* Cách tham chiếu đến phần tử
- Các kỹ năng
* Nhận biết đợc các thành phần trong khai báo kiểu mảng hai chiều
* Nhận biết đợc định danh của một phần tử mảng hai chiều xuất hiện trong một
chơng trình. Cách tham chiếu đến một phần tử của mảng hai chiều.

* Viết đợc khai báo mảng hai chiều với các chỉ số thuộc kiểu nguyên.
4. Đối tợng, phạm vi và kế hoạch nghiên cứu:
Đối tợng là học sinh lớp 11A1 trờng THPT Yên Dũng số2, thực hiện kế hoạch
nghiên cứu trong phạm vi chơng 4 - Kiểu dữ liệu có cấu trúc.

3


b. nội dung
Khi thực hiện tính tổng các phần tử trên đờng chéo chính và đờng chéo phụ của mảng
hai chiều thì mảng hai chiều này phải có số cột và số hàng bằng nhau (mảng hai chiều
cấp n x n).
{phần khai báo mảng hai chiều }
Program mang_2_chieu;
type mang=array[1..100,1..100] of integer;
var i,j,n:integer;
a:mang;
Begin
{ Mảng hai chiều với số hàng bằng số cột bằng N }
write(' nhap so hang va so cot n='); readln(n);
{Nhập các phần tử của mảng hai chiều với số hàng bằng số cột bằng N}
for i:=1 to n do
for j:=1 to n do
Begin
write(' nhap phan tu thu a[ ',i,' , ',j,']:='); readln(a[i,j]);
end;
{ Đa ra màn hình các phần tử đã nhập của mảng ra màn hình}
for i:=1 to n do
begin
for j:=1 to n do

write(a[i,j]:4);
writeln;
writeln;
end;
Readln;
End.
Trên đây là các thủ tục nhập phần tử cho mảng hai chiều và đa ra các phần tử đã
nhập của mảng theo N hàng và N cột. Sau đây là các bài toán tính tổng các phần tử của
mảng nằm trên đờng chéo chính và đờng chéo phụ:

4


Trớc hết ta phải xác định xem các phần tử nằm trên đờng chéo chính giữa hàng và
cột có quy luật gì không: Ví dụ 1 mảng sau: Các phần tử nằm trên đờng chéo chính nằm
ở ô có mầu sẫm
Hàng = cột = 4 Hay I = J = 4
A[Hàng, Cột]
I=1
I=2
I=3
I=4

J=1
8
-21
5
-89

J=2

9
68
23
21

J=3
13
34
56
6

J=4
5
9
0
7

I là chỉ số hàng trong mảng, J là chỉ số cột trong mảng, ta thấy mảng trên gồm I hàng và
J cột và I = J = 4.
Ta xét phần tử đầu tiên (từ trái sang phải) của đờng chéo chính: I:=1 ; J:=1;
Hàng 1 cột 1
Phần tử thứ hai của đờng chéo chính:

I:=2 ; J:=2;

Hàng 2 cột 2
Phần tử thứ ba của đờng chéo chính:

I:=3 ; J:=3


Hàng 3 cột 3
Phần tử thứ t của đờng chéo chính:

I:=4 ; J:=4;

Hàng 4 cột 4
( Nếu mảng gồm N hàng và N cột thì theo cách tính nh trên, phần tử cuối cùng
của đờng chéo chính là hàng N cột N. Từ đó suy ra các phần tử nằm trên đờng chéo
chính là các phần tử có hàng và cột bằng nhau ( nghĩa là I = J )
Vậy chơng trình tính tổng các phần tử nằm trên đờng chéo chính ta làm nh sau:
{phần khai báo mảng hai chiều }
Program Tong_duong_cheo_chinh_mang_2_chieu;
type mang=array[1..100,1..100] of integer;
var Tong_duong_CC,i,j,n:integer;
a:mang;
Begin
{ Mảng hai chiều với số hàng bằng số cột bằng N }
write(' nhap so hang va so cot n:='); readln(n);
{Nhập các phần tử của mảng hai chiều với số hàng bằng số cột bằng N}
for i:=1 to n do
5


for j:=1 to n do
Begin
write(' nhap phan tu thu a[ ',i,' , ',j,']:='); readln(a[i,j]);
end;
{ Đa ra màn hình các phần tử đã nhập của mảng ra màn hình}
for i:=1 to n do
begin

for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
Tong_duong_CC:=0;
Begin
for i:=1 to n do
for j:=1 to n do
if i=j then {phần tử có hàng bằng cột }
Tong_duong_CC:=Tong_duong_CC+A[i,j];
Writeln(' tong cac phan tu nam tren duong cheo chinh
la',Tong_duong_CC);
end;
Readln;
End.
Theo cách trên ta có thể tìm ra thuật giải của bài toán tính tổng các phần tử nằm
trên đờng chéo phụ: Với ví dụ sau ta thấy các phần tử nằm ở ô sẫm mầu:
Hàng = cột = 4 Hay I = J = 4 ( N=4)
A[Hàng, Cột]
I=1
I=2
I=3
I=4

J=1
8
-21
5
-89


J=2
9
68
23
21

J=3
13
34
56
6

J=4
5
9
0
7

Ta xét phần tử đầu tiên (từ trái sang phải )của đờng chéo phụ:
Hàng 4 cột 1
6

I:=4 ; J:=1;


Phần tử thứ hai của đờng chéo chính:

I:=3 ; J:=2;

Hàng 3 cột 2

Phần tử thứ ba của đờng chéo chính:

I:=2 ; J:=3

Hàng 3 cột 3
Phần tử thứ t của đờng chéo chính:

I:=1 ; J:=4;

Hàng 1 cột 4
( Nếu mảng gồm N hàng và N cột thì theo cách tính nh trên, phần tử cuối cùng
của đờng chéo phụ là hàng 1 cột N, phần tử đầu tiên là hàng N cột 1 Từ đó suy ra các
phần tử nằm trên đờng chéo phụ là các phần tử tổng hàng và cột
( I + J = N+1 ) suy ra J=N+1-I. Ta thấy khi I=4 (J = 4+1 - 4) => J=1, khi I=3 thì J =
2, . . .
Vậy chơng trình tính tổng các phần tử nằm trên đờng chéo phụ ta làm nh sau:
{phần khai báo mảng hai chiều }
Program Tong_duong_cheo_phu_mang_2_chieu;
type mang=array[1..100,1..100] of integer;
var Tong_duong_CP,i,j,n:integer;
a:mang;
Begin
{ Mảng hai chiều với số hàng bằng số cột bằng N }
write(' nhap so hang va so cot n:='); readln(n);
{Nhập các phần tử của mảng hai chiều với số hàng bằng số cột bằng N}
for i:=1 to n do
for j:=1 to n do
Begin
write(' nhap phan tu thu a[ ',i,' , ',j,']:='); readln(a[i,j]);
end;

{ Đa ra màn hình các phần tử đã nhập của mảng ra màn hình}
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
7


writeln;
writeln;
end;
Tong_duong_CP:=0;
Begin
for i:=1 to n do
for j:=1 to n do
if j=n+1-i then {phần tử có cshàng+cscột = n+1}
Tong_duong_CP:=Tong_duong_CP+A[i,j];
Writeln(' tong cac phan tu nam tren duong cheo phu la',
Tong_duong_CP);
end;
Readln;
End.
Qua cách tính nh trên ta có thể tính toán đợc tất cả các đờng chéo của mảng hai
chiều, tham chiếu đến các hàng, các cột của mảng hai chiều. Vì thực ra nếu tính riêng
hàng hoặc cột của mảng hai chiều thì đó chính là mảng một chiều.

8


C. Kết luận và khiến nghị

Sau khi nghiên cứu và thử nghiệm tôi thấy cần có thời gian nhiều hơn để thử
nghiệm, vì dù đối tợng là học sinh lớp chọn nhng vẫn còn 1/4 học sinh cha đạt yêu cầu.
Môn Tin học là một môn học mới mẻ của học sinh THPT, học sinh cha có khái
niệm về công nghệ thông tin, khái niệm thuật toán trong các ngôn ngữ lập trình, vì vậy
rất khó cho việc dạy và học. Cần phải có thời gian nhiều hơn cho lý thuyết và thực hành,
vì theo phân phối chơng trình nh hiện thời gian giảng dạy còn ít, học sinh cha nắm bắt đợc lý thuyết cũng nh thực hành. Đội ngũ giáo viên Tin học còn ít kinh nghiệm về giảng
dạy, cho nên bài tập thực hành còn ít, hầu nh chỉ bó gọn trong sách giáo khoa, cha có đợc những th viện về bài tập.
d. Tài liệu tham khảo:

- Cấu trúc dữ liệu và giải thuật của Đỗ Xuân Lôi
- Tin học và ứng dụng tập II của Nguyễn Bá Kim và Lê Khắc Thành

9



×