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

De tai tot nghiep dh su pham tin

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 (213.69 KB, 30 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
================

ĐỀ TÀI
GỢI ĐỘNG CƠ HOẠT ĐỘNG
TRONG VIỆC GIẢNG DẠYDỮ LIỆU Cể
CU TRC MNG MT CHIU
TRONG NH TRNG PH THễNG
TRUNG HC

Đào Tố Mai
Hoàng Đức Giang

Giáo viên hớng dẫn:
Ngời thực hiện:

Phỳ Th, tháng 8 năm 2005.


2
Lời cảm ơn
Tôi xin chân thành gửi lời cảm ơn tới các bạn đồng nghiệp lớp Đại học sư
phạm tin K1 - Phú thọ các thầy giáo Cô giáo giảng viên khoa công nghệ thông
tin trường Đại học sư phạm Hà nội Đặc biệt Cô giáo Đào Tố Mai giảng viên
trường Đại học sư phạm Hà nội đã tận tình giúp đỡ và cộng tác, tạo điều kiện để
giúp tôi trong quá trình tìm hiểu nghiên cứu đề tài.
Vì thời gian và năng lực có hạn mặc dù đã cố gắng hết sức mình, song đề
tài của tơi chức chắn cịn nó nhiều thiếu sót. Tơi rất mong được sự đóng góp ý
kiến q báu của các Thầy giáo Cơ giáo và các bạn.
Tôi xin chân thành cảm ơn !



Tác giả

Hoàng Đức Giang

Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


3
MỤC LỤC
PHẦN I : MỞ ĐẦU
I. Lý do chọn đề tài:
II- Định hướng nghiên cứu:
III- Phương pháp nghiên cứu:
PHẦN II: NỘI DUNG ĐỀ TÀI
CHƯƠNG I: GỢI ĐỘNG CƠ MỞ ĐẦU
1. Đáp ứng nhu cầu xóa bỏ một thực tế:
2. Hướng tới sự tiện lợi hợp lý hóa cơng việc:
3. Chính xác hóa một khái niệm.
4. Hướng tới sự hồn chỉnh và hệ thống:
5. Lật ngược vấn đề:
6. Xét tương tự:
7. Khái qt hóa.
8. Tìm sự liên hệ phụ thuộc.
CHƯƠNG II: GỢI ĐỘNG CƠ TRUNG GIAN
1. Hướng đích cho học sinh:
2. Quy lạ vấn đề.
3. Xét tương tự.
4. Khái quát hóa.
5. Xét sự biến thiên và phụ thuộc.

CHƯƠNG III: GỢI ĐỘNG CƠ KẾT THÚC

CHƯƠNG IV
PHỐI HỢP NHIỀU CÁCH GỢI ĐỘNG CƠ
TẬP TRUNG VÀO NHỮNG TRỌNG ĐIỂM
PHẦN III: KẾT LUẬN
I- Lý do chọn đề tài:

Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


4
Kiểu mảng là 1 kiểu dữ liệu có cấu trúc, rất cần thiết và hữu ích trong
nhiều chương trình Pascal. Nói tới mảng ta nghĩ ngày tới mảng 1 chiều (M1C)
vì nó là một bộ phận quan trọng trong chương trình mơn tin lớp 11 trong nhà
trường trung học phổ thông (THPT).
Khi ta cần làm việc với 1 số biến cùng kiểu dữ liệu mà số lượng biến này
nhiều thì vấn đề xử lý trên một loạt các biến đó với các phép toán tương tự nhau
là một vấn đề hết sức phức tạp, cồng kềnh, khi ta làm việc trên M1C thì vấn đề
trở lên rất đơn giản, thuận tiện.
Khi học về M1C học sinh được củng cố kiến thức về các kiểu dữ liệu đơn
giản chuẩn, cấu trúc rẽ nhánh và lặp. Bên cạnh đó học sinh học các kiến thức từ
tốn, lý, hóa kết hợp giữa logíc (kiến thức giải quyết vấn đề) với điều kiện áp dụng
thành phần logích để giải quyết vấn đề để xây dựng giải thuật cho chương trình.
Qua hoạt động sử dụng dữ liệu cấu trúc M1C trong lập trình, tạo điều kiện
cho học sinh khả năng phát triển tư duy sáng tạo, rèn luyện tính độc lập tự giác,
tích cực và tính kỷ luật.
Do đó việc sử dụng cấu trúc dữ liệu M1C, chiếm vị trí đặc biệt quan trọng
trong quá trình dạy tin ở lớp 11 trong trường PTTH hiện nay chưa hoàn toàn đạt
được kết quả như mong muốn vì:

Học sinh chưa xác định được rõ kiểu phần tử của M1C, chưa linh hoạt
trong việc sử dụng các cấu trúc lặp, rẽ nhánh vào việc xây dựng giải thuật
chương trình.
Học sinh chưa có khả năng sáng tạo linh hoạt trong việc vận dụng các cấu
trúc dữ liệu M1C trong kiến thức cơ bản nói chung, trong các ứng dụng tin học
nói riêng và trong cuộc sống.
Nguyên nhân dẫn đến tình trạng này là phương pháp dạy học chưa được
thực hiện theo định hướng hoạt động hóa người học. Tức là chưa tổ chức cho
học sinh học tập trong hoạt động và bằng hoạt động tự giác trong khi dạy học
nội dung cấu trúc dữ liệu M1C.
Những tri thức mới đối với học sinh được kiến tạo nhờ quá trình khêu gợi
được hoạt động học tập. Tác dụng phát triển năng lực trí tuệ của việc gợi hoạt
động học từ ở chỗ học sinh được cách khám phá, tức là rèn luyện học sinh cách
thức phát hiện, tiếp cận và giải quyết vấn đề 1 cách khoa học. Nếu không chú ý
tới việc gợi động cơ hoạt động học tập sẽ làm cho hoạt động học tập kém hiệu
quả. Không xác định yêu cầu của vấn đề cần đạt được cho mỗi đối tượng học
sinh sau khi tiến hành hoạt động sử dụng cấu trúc dữ liệu M1C vào bài tập lập
trình là nguyên nhân chủ yếu dẫn đến tình trạng trên.

Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


5
Để giải quyết mâu thuẫn chủ yếu cần giảng dạy M1C với tình hình thực tế
dạy học nội dung này ở trường THPT. Em chọn đề tài “Gợi hoạt động trong việc
giảng dạy dữ liệu có cấu trúc mảng 1 chiều” lớp 11 ở trường THTP.
II- Định hướng nghiên cứu:
1. Mục đích nghiên cứu:
- Mục đích nghiên cứu là góp phần nâng cao hiệu quả của quá trình dạy
học M1C ở lớp 11 THPT.

- Giúp người học hướng quyết định và hoạt động vào mục đích đặt ra động
thời tạo động cơ cho học sinh có ý thức về ý nghĩa của những hoạt động và
những đối tượng hoạt động từ đó học sinh có thể liên hệ chặt chẽ giữa những
kiến thức đã học với kiến thức cuộc sống, giữa nhà trường, gia đình và xã hội.
2. Nhiệm vụ nghiên cứu :
- Làm sáng tỏ vai trò và vị trí của việc gợi động cơ hoạt động trong việc
giảng dạy M1C ở lớp 11.
- Xây dựng hệ thống bài tập lập trình với dữ liệu cấu trúc M1C có sử dụng
phương pháp gợi đọng cơ hoạt động từ đó vạch rõ bản chất và những quan điểm
cơ bản của phương hướng ứng dụng phương pháp gợi động cơ hoạt động.
III- Phương pháp nghiên cứu:
- Để giải quyết những nhiệm vụ trên, em sử dụng những biện nghiên cứu
sau đây :
Nghiên cứu lý luận :
+ Người nghiên cứu dựa vào những tài liệu sẵn có, những lý thuyết đã
được khẳng định, những thành tựu của nhân loại trên những lính vực khác nhau.
+ Những hình thức thường được dùng trong nghiên cứu lý luận là phân tích
tài liệu lý luận, so sách quốc tế và phân tích trên nghiệm.
Quan sát điều tra:
Giúp ta theo dõi hiện tượng giáo dục theo trình tự thời gian, phát hiện
những biến đổi số lượng, chất lượng gây ra do tác động giáo dục.
Quan sát điều tra cần có mục đích cụ thể, có nội dung cụ thể và có tiêu
chuẩn đánh giá cụ thể.
Tổng kết kinh nghiệm:

Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


6
Thực chất là đánh giá và khái quát kinh nghiệm, từ đó nghiên cứu hoặc

khám phá ra những mối liên hệ có tính qui luật và những hiện tượng giáo dục.
Tổng quátư kinh nghiệm được tiến hành theo qui trình như sau :
Liệt kê sự kiện
Mơ tả q trình
Tước bỏ những yếu tố ngẫu nhiên làm bộc lộ cả bản chất
Phát hiện mối liên hệ nhân quả
Dùng lý luận soi sáng
Dùng thực nghiệm kiểm chứng
Thực hiện giáo dục :
Cho phép tạo nên những tác động sư phạm từ đó xác định và đánh giá kết
quả của những tác động đó. Đặc trung của thực nghiệm giáo dục là nó khơng
diễn ra một cách tự phát mà là dưới sự điều kiển của nhà nghiên cứu.
Trong thực nghiệm giáo dục ta cần giải thích kết quả, làm rõ nguyên nhân
bằng lý luận hoặc bằng sự phân tích q trình thực nghiệm.
Thơng thường những phương pháp nghiên cứu được sử dụng kết hợp với
nhau làm các kết quả thu được vừa có tính lý luận vừa có tính thực tiễn.

PHẦN II : NỘI DUNG ĐỀ TÀI
GỢI ĐỘNG CƠ HOẠT ĐỘNG TRONG VIỆC GIẢNG DẠY DỮ LIỆU
CĨ CẤU CHÚC MẢNG MỘT CHIỀU

Hồng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


7

Trước khi nghiên cứu dữ liệu cấu trúc M1C trong chương trình lớp 11, học
sinh đã đi qua các phần kiến thức với các kiểu giữ liệu cơ bản, các câu lệnh từ
đơn giản đến phức tạp như : Câu lệnh gán, thủ tục vết ra màn hình, thủ tục nhập
giữ liệu từ bản phím, cấu trúc rẽ nhánh dùng IF cấu trúc rẽ nhánh dùng CASE..

OF, cấu trúc lặp xác định FOR… TO… DO, cấu trcs lặp không xác định
WHILE.. DO, REPEAT.. UNTIL. Học sinh trong một trừng mực nào đó đã nắm
được một số bài tập với các bài tốn đã được học trong lập trình. Với trình độ
gợi động cơ xuất phát từ nội dung hướng và những nhu cầu nhận thức, nhu cầu
của đời sống, trách nhiệm đối với xã hội ngày càng trở nên quan trọng. Gợi động
cơ không phải là việc làm ngắn ngủi lúc bắt đầu dậy một tri thức vào đó mà phải
thường xuyên suốt quá trình dạy học. Vì vậy đối với dữ liệu có cấu trúc mảng
một chiều em thực hiện gợi động cơ theo 4 giai đoạn : Gợi động cơ mở đầu, gợi
động cơ trung gian và gợi động cơ kết thúc và phối hợp nhiều cách gợi động cơ
tập trung vào những trọng điểm.

Chương I
GỢI ĐỘNG CƠ MỞ ĐẦU
1. Đáp ứng nhu cầu xóa bỏ một hạn chế:
Chẳng hạn do việc phải duyệt đi duyệt lại các giá trị của các biến cùng kiểu
để lưu trữ nhiều biến cùng kiểu và xử lý chúng theo một vòng lặp nào đó ta đưa
vào dạng dữ liệu có cấu trúc mảng.
Ví dụ:
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 độ trung bình của tuần và số lượng ngày trong tuần có nhiệt độ cao
hơn nhiệt độ trung bình của tuần.
Ta có thể mơ tả 7 biến thực để nhận biết nhiệt độ của các ngày trong tuần
như sau:
Var T1, t2, t3, t4, t5, t6, t7, tb, real; Dem: integer:
Begin
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;


Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


8
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 trung binh tuan: tb);
Writeln (so ngay nhiet do cao hon nhiet do trung binh: dem)
Readln;
End.
Lúc này nếu như cần giải quyết bài toán trên với n ngày (n có thể khá lớn)
thì cách làm như vậy khơng những địi hỏi một khối lượng khai báo q lớn, mà
sau đó đoạn chương trình tính cũng q dài. Để khắc phục điều đó trong pacsl ta
sử dụng mảng một chiều. (M1C).
Chương trình có thể được viết như sau:
Const Max = 100 {giả thiết Nlon nhat la 100]
Type mang = array [1..max] of real;
Var
nhiet do : mang;
dem,i, N: integer;
tb: real;
Begin
Write (‘Nhap nhiet do ngay, ,i,;)
Readln (nhiet do [i];
tb : = tb + nhiet do [i];
end;

tb: = tb /N;
dem: = 0;
Fori: = 1 to Ndo.
If nhiet do [i] . tb then dem : = dem + 1;
Writeln (Nhiet do trung binh N ngay , tb):
Writeln (so ngay co nhiet do cao hon nhiet do trung binh : dem); Readln;
End.

Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


9
2. Hướng tới sự tiện lợi, hợp lý hóa cơng việc.
Ví dụ:
Viết chương trình cho máy tính nhận vào một dãy có N phần tử là những
ngun khơng âm. Hãy viết ra màn hình tất cả các phần tử của dãy lớn hơn tất
cả các phần tử trước nó.
Để làm bài này học sinh khai báo mảng M có N phần tử là số nguyên
không âm. Sau khi nhận vào các phần tử của mảng M, các em dùng 2 vòng lặp
For lồng nhau và dùng kỹ thuật đánh dấu để viết ra màn hình tất cả các phần tử
của dãy lớn hơn tất cả các phần tử đứng trước nó như chương trình dưới đây.
Usescrt;
Var M: array [1.55] of Word; D, N, K, J: Byte;
Begin
Clrsrc;
Wrieln (nhap so phan tu cua day); Readln (N);
Writeln (nhap so phan tu cua day, 45,# 10);
Fork: = 1 to N do
Begin
Readln (M[k]); Gotoxy (9* (k mod8), Where Y - 1);

end;
Whriteln (Cac phan tu nho hon cac phan tu truoc no); Readln (N);
Fork: = 2 to N do.
Begin
d:=0;
For j: = 1tok - 1 do
if M [j] . M [k] then
begin
d: = 1; break;
end;
end;
If d = 0 then Write (M [k]); Readln;
End.
Nếu ta bám theo quá trình thực hiện chương trình trên thì ta thấy rằng nếu 1
phần tử được in ra tiếp theo thì nó phải nhỏ hơn phần tử vừa được in ra liền
trước. Vậy để tiện lợi, hợp lý trong việc giải quyết bài tốn này, ta cải tiến
chương trình chỉ dùng 1 vịng For như sau:
Hồng Đức Giang - trường THCS Xn Viên – Yên Lập – Phú Thọ


10
Usescrt;
Var M: array [1..55] of Word;
D, N, K, J: Byte;
Begin
Clrser;
Writeln (Nhap so phan tu cua day): Readln (N);
Writeln (Nhap cac phan tu cua day: , 45,#10);
For k : = 1 to N do
begin

Readln (M[k]);
Gotoxy (9* (k mod 8), Where Y - 1);
end;
Writeln (Cac phan tu nho hon noi phan tu truoc no) ; d: = 1;
Fỏ k: = 2 to N do
If M [k] . M [d] then Begin Write (M [k] : 6); d: = k; end;
Readln;
End.
3.Chính xác hóa một khái niệm:
Có những khái niệm mà học sinh đã biết ở từng bài riêng lẻ chưa thể đưa ra
ngày những nhận xét, những kết luận chính xác liên quan đến khái niệm đó, tới
một thời điểm nào đó có đủ điều kiện thì giáo viên gợi lại vấn đề và giúp học
sinh chính xác hóa khái niệm đó.
Ví dụ 1:
Viết chương trình tính tổng bình phương của các số âm trong một mảng các
số nguyên.
Như ta đã biết hàm Random là hàm giá trị ngẫu nhiên. Chẳng hạn Random
(100) - 50 tức là giá trị lấy ngẫu nhiên trong khoảng (-50, 49).
Hàm SQR lấy bình phương của các phần tử trong mảng. Để tính tổng bình
phương các số âm trong mảng trước tiên ta phải dùng vòng lặp for ..to..do để duyệt
từng phần tử của mảng sau đó dùng biểu thức điều kiện if….then để tính tổng.
Sau khi đã gợi lại cho học sinh những kiến thức cần thiết, học sinh sẽ hiểu
chính xác hơn những khái niệm đó và có thể viết được chương trình.
Const
N = 50;
Hồng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


11
Var MT: array [1..N] ò Integer; i, s: Integer;

Begin
[Tao ngau nhien trong khoang - 50 …49]
For i: = 1 to N do MT [i]: = Random (100) - 50;
S:=0;
For i: = 1 to Ndo Ì MT [i] < = 0 then S: = S + SQR (MT[i]; Writeln (Tong, S);
Readln;
End.
Ví dụ 2:
Đếm trong 100 lần gõ kí tự vào qua bàn phím, số lần xuất hiện ký tự A đến
Z là bao nhiêu.
Gợi ý cho học sinh khai báo biến MC đóng vai trị là bộ đếm, biến ký tự
được dùng như là biên chỉ dẫn. Hàm upcase biến chữ thường thành chữ hoa.
Dùng vòng for duyệt các phần tử của mảng từ A đến Z. Dùng biểu thức
điều kiện if….then để kiểm tra: Nếu MC [ch] . 0 thì mới được in ra màn hình.
Khi học sinh đã hiểu chính xác khái niệm trên thì có thể viết được chương trình
như sau:
Var
i: Integer; ch: Char:
MC: Array [A….Z] of Integer;
Begin
{Xoa mang MC ve khong}
For chi: = A to Z do MC [CH] : = 0;
{Doc 100 ky tu va dem}
For i:=1 to 100 do
begin
Readln(CH);
{Ham Upcase bien chu thuong thanh chu hoa}
Ch:=Upcase(CH);
{Dem so lan suat hien tung ky tu}
MC[ch]:=M[ch] + 1

End;
{Chi in ket qua ra man hinh nhung chu da xuat hien}
For Ch:=’A’ to ‘Z’ do

Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


12
If MC[ch]>0 then Writeln(‘So chu’, ch, ‘=’, MC[ch]:4);
Readln;
END.
4. Hướng tới sự hoàn chỉnh và hệ thống.
Trước khi dạy về kiểu dữ liệu có cấu trúc M1C giáo viên ơn lại cho học
sinh những kiểu dữ liệo đơn giản chuẩn: Kiểu số nguyên, kiểu số thực,kiểu
logic, kiểu ký tự. Và ôn lại cho học sinhnhững câu lệnh rẽ nhánh và câu lệnh
lặp. khi dạy về M1C đầu tiên cần dạy chp học sinh biết khai báo kiểu dữ liệu
mảng, sau đó nhập dữ liệu cho mảng, đưa ra màn hình chỉ số và giá trị của phần
tử của mảng và cuối cùng là duyệt qua tất cả các phần tử của mảng để xử lý từng
phần tử của mảng.
Ví dụ:
Viết chương trình cho máy nhận vào mảng A[1…10] mà các phần tử là các
số tự nhiên. Xác định số lượng các phần thỏa mãn điều kiện.
Là chính phương.
a[i]Trước tiên ta phải báo biên mảng. Vì các phần tử của mảng là các số tự
nhiên nên mảng có kiểu phần tử là Integer. Sau đó nhập vào phần tử của mảng
theo điều kiện obằng vòng For…to….do. Bước cuối cùng là xử lý mảng theo yêu cầu của bài toán:
Các phần tử thỏa mãn điều kiện:
+ Là số chính phương.

+ a[i] Ta phải dùng các hàm đã học như:
Hàm SQR (x): cho giá trị x2
Hàm Round (x): làm tròn số thực x.
Hàm SQRT (x): Tính căn bậc 2 của x.
Chương trình được viết như sau:
Use crt;
Var a:array [1..10] of integer;
i,n,dem:integer;
Begin
Clrscr;
Write (Nhap vao phan tu cua mang); readln (n)
For i:=1 to do
Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


13
Begin
Write (a[,i,]=):readln (a[i]);
End;
{Kiem tra xem phan tu cua mang co phai la so chinh phuong hay khong}
dem:=0;
For i:=1 to n do
Begin
If sqr(round(sqrt(a[[i]])=a[i]then
dem:=dem+1;
End;
Writeln (Trong day co, dem, la so chinh phuong);
{In ra so luong cac phan tu thoa man dieu kien(a[i]Readln;

End.
5.Lật ngược vấn đề:
Sau khi đã giải quyết được một vấn đề, một câu hỏi tự nhiên thường được
đặt ra là vấn đề ngược lại sẽ giải quyết như thế nào? Chính những câu hỏi này
được thầy giáo và học sinh cùng suy nghĩ và đưa ra cách giải quyết thì kiến thức
sẽ được học sinh khắc sâu hơn.
Ví dụ:
Dùng mảng một chiều để lưu trữ một số nguyên dương lớn (có thể có hàng
ngàn chữ số). Lập trình:
1. Thực hiện phép cộng hai số nguyên dương cỡ lớn.
2.Thực hiện phép trừ hai số nguyên dương cỡ lớn.
6.Xét tương tự :
Khi dạy đến vấn đề xét tương tự trong việc gợi động cơ giảng dạy mảng
một chiều trước tiên ta phải làm rõ được vấn đề cần làm sáng tỏ với học sinh, có
nghĩa là đưa ra một bài tốn cho học sinh làm, khi làm xong thì giáo viên cần có
những liên hệ móc nối với bài tốn khác để tạo cho học sinh suy nghĩ có tính tư
duy lơ gíc.
Ví dụ1:
Tính tổng n số tự nhiên với n nhập từ bàn phím.
Var
N,i: integer; tong: real;
Begin
Hồng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


14
tong:=0
For i:=1 to n do tong:=tong+i;
Writeln(Tong la, tong);
Readln;

End.
Để tính tổng mảng X gồm n phần tử là các số thực nhập từ bàn phím ta dựa
vào thuật tốn tính tổng n số tự nhiên. Ta thấy cách đưa ra hướng thực hiện giải
thuật là giống nhau nhưng đối tượng khác nhau
Chương trình được viết như sau:
Const n=10;
Var
i:integer; tong : real;
X: array [1…10] of real;
Begin
Clrscr;
Writeln (Vao mang X);
For i:=1 to n do
Begin
Writeln (X[,i,]=); Readln (X[i]);
End;
Tong:=0;
For i:=1 to n do
tong:=tong+X[i];
Writeln(Tong=, tong:10:2);
Readln;
End.
Ví dụ 2:
Viết chương trình nhập vào từ bàn phím một dãy số có n phần tử và một số X.
Dị tìm xem trong dãy có hai phần tử liên tiếp nào mà tổng của chúng bằng
X khơng.
Ta đã biết tính tổng mảng bây giờ ta phải tính tổng sao cho a[i]+a[i+1]=X.
Nói đến đây học sinh sẽ hình dung ra thuật giải để giải quyết bài tốn trên.
7. Khái qt hóa:
Ví dụ 1:


Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


15
Cho mảng A gồm n phần tử. Viết chương trình tạo mảng B[1…n] trong đó
B[i] là tổng của i phần tử đầu tiên của A.
Học sinh đã được học cách khai báo một mảng A gồm n phần tử, ta khái
quát nên là tạo mảng B [1…n] là tổng của i phần tử đầu tiên của A. Vấn đề ở bài
toán này là học sinh phải biết gán B[1]:=A[i] và dùng vịng for.
For i:= 2 to n do B[i]:=B[i-1]+A[i]
Chương trình được viết như sau:
Const n = 100;
Type mang= array [1..n] ò integẻ;
Var
A,B: mang; n,i,j: integer;
or i:= 1 to n do
Begin
Write (Nhap n =); Readln(n);
or i:=1 to do
Begin
Write (A[,i,]=) readln A[i];
End.
B[1]:=A[1];
For i=2 to n do B[i]:=B[i-1]+A[i];
For i:=1 to n do Write(B[i]:6);
Readln;
End.
Ví dụ 2:
Tìm số ngun tố khơng vượt số ngun dương N cho trước.

Học sinh đã biết tìm số nguyên tố trong mảng, ta khái quát lên là tìm số
nguyên tố khơng vượt q số ngun dương N cho trước.
Chương trình được viết như sau:
Const n=2500;
Var a:array [1..n] of boolean; i, j: integer;
Begin
Clrscr;
a[1]:=false;
For i=2 to n do a[1] :=true;

Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


16
For i:=2 to n div 2 do.
For i:= to n div i do a[i*j] := False;
For i= 1 to n do.
If a[i] then Write (i:5);
Readln;
End.
8. Tìm sự liên hệ phụ thuộc:
Khi gợi động cơ trong việc giảng dạy mảng một chiều, cụ thể là khi dạy
học sinh về một kiến thức hay một bài tập nào đó giáo viên tìm được sự liên hệ
và phụ thuộc móc xích thì học sinh sẽ tích cực tìm tịi suy nghĩ liên hệ với phần
kiến thức đã học, khi đó học sinh sẽ dễ dàng tiếp thu kiến thức mới.
Ví dụ:
Cho mảng A [1…100] mà các phần tử là các số tự nhiên với a[i] = i 2 = 2.
Tính tổng các căn bậc 2 của các phần tử chia cho 7 dư 3.
Theo bài a[i] = i2 =2->a[i] ln dương ->a[i] có căn bậc hai, khi đó ta tính
tổng các căn bậc hai của a[i] thỏa mãn điều kiện chia cho 7 dư 3.

Chương trình được viết như sau:
Var a: array [1..100] of integer;
tong: real; n,i: integer;
Begin
Clrscr;
Repeat
Write (nhap vao so phan tu cua mang) ; Readln(n);
Until (n.0) and (n,100);
{Gan gia tri tung phan tu cua mang theo i*+2}
For i: = 1 to n do
Begin
a[u]: =i*i+2;
End;
{Hien thi ra man hinh cac phan tu cua mang}
Writeln (Gia tri ban dau cua mang A);
For i: =1 to do
Begin
Writeln (a[,i,]=,, a(i);

Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


17
End;
{Tinh tong can bac hai}
Tong: =0;
For i:=1 to n do
Begin
If (a[i] mod 7) = 3 then
Begin

Tong: = Tong+sqrt(a[i]);
End;
Rradln;
End.
CHƯƠNG II
GỢI ĐỘNG CƠ TRUNG GIAN
Gợi động cơ trung gian là gợi động cơ cho những bước trung gian hoặc cho
những hoạt động tiến hành trong những bước đó để đạt được mục tiêu.
1. Hướng đích cho học sinh:
Hướng đích cho học sinh là hướng vào những mục tiêu đặt ra, vào hiệu quả
dự kiến của những hoạt động của họ nhằm đạt những mục tiêu đó.
Hướng đích là làm sao cho đối với tất cả những gì học sinh nói và làm, họ
đều biết rằng những cái đó nhằm mục tiêu gì trong q trình tìm hiểu và mơ tả
con đường đi tới đích, họ ln biết hướng tới những quyết định và hoạt động của
mình vào mục đích đã đặt ra.
Ví dụ:
Lập một chương trình sắp xếp một dãy số n nguyên khác nhau theo thứ
tăng dần.
Ta định hướng chương trình bằng ngơn ngữ Pascsl thì bước đầu tiên sẽ như sau:
For i: = 1 to n do begin
- Xét từ a đến an để tìm số nhỏ nhất aj
- Đổi chỗ giữa và aj
end;

Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


18
Tới đây ta thấy có hai nhiệm vụ con cần làm rõ thêm:
1. Tìm số nguyên nhỏ nhất a trong các số từ ai đến an.

2. Đổi chỗ giữa aj và ai
Nhiệm vụ đầu có thể hồn thành bằng cách “Thoạt tiên coi ai là “số nhỏ
nhất” tạm thời; lần lượt so sánh ai với ai+1, ai + 2,…Khi thấy số nào nhỏ hơn thì
lại coi đó là “số nhỏ nhất mới”. Khi đã so sánh với số an rồi thì số nhỏ nhất sẽ
được xác định”.
Nhưng xác định bằng cách nào?
- Có thể bằng cách chỉ ra chỗ của nó, nghĩa là nắm được chỉ số của phần tử
ấy. Ta có các bước sau:
j:=i;
For k:=i+1 to n do
If akVới nhiệm vụ thứ hai thì có thể giải quyết theo các tương tự như khi ta
muốn chuyển hai thứ rượu trong hai ly, từ ly nọ sang ly kia ta sẽ phải dùng một
ly thứ 3 (không đựng gì) để làm ly trung chuyển.
Ta có bước ba: tg:=ai; ai:=aj; aj:=tg;
Sau khi đã chỉnh lại cách viết biến chỉ số theo đúng quy ước ta có chương
trình sắp xếp như sau:
Const n=5;
Var
a:array [1…n] of integer;
tg,k,i,j: integer;
Begin
Write (‘nhap vao cac phan tu cua mang’);
For i:=1 to n do
Begin
Write (‘a[,i,,’]=’); Readln (a[i]);
End;
for i:= to n-1 do
Begin
J:=i

For k:= i+1 to n do
If a[k] If J<>i then
Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


19
Begin
tg:=a[i];
a[i]:=a[j];
a[j]:= tg;
End;
End;
For i:= 1 to n do Write (a[i]: 6);
Readln;
End.
1. Quy lạ về quen.
Gợi động cơ trung gian với các quy lạ về quen là một yếu tố quan trọng vì
khi đưa vấn đề mới nào đó dựa trên cơ sở của kiến thức đã học để học sinh có
suy nghĩ lô gic và cuối cùng là đưa được vấn đề mới này về dạng quen thuộc để
học sinh nhận dạng. Khi đó kiến thức mới này sẽ được học sinh tiếp thu một
cách dễ dàng
Ví dụ 1 : Đối với bài toán sắp xếp mảng một chiều theo thứ tự tăng dần.
- Giáo viên đưa ra tình huống: Giả sử có mảng A có n phần tử là các số
thực (n=8)
A

12
45
56

34
3
47
67
6
1
2
3
4
5
6
7
8
Giáo viên gợi vấn đề: các em đã biết cách tìm phần tử nhỏ nhất của mảng ở
vị trí nào và giá trị của nó là bao nhiêu. Bây giờ các em hãy tráo đổi giá trị của
phần tử nhỏ nhất với giá trị phần tử đầu tiên của mảng để đưa phần tử nhỏ nhất
về đầu mảng. Học sinh dễ dàng hoàn thành nhiệm vụ này với những kiến thức
đã biết. Lúc này có hình ảnh về mảng A như sau:
A

3
45
56
34
12
47
67
6
1
2

3
4
5
6
7
8
Giáo viên nên là sắp xếp mảng A theo thứ tự tăng dần của các phần tử đã
được nhận vào.
Giáo viên gợi ý cho học sinh quy lạ về quen. Các em đã thực hiện cơng
việc tìm phần tử nhỏ nhất trong các phần tử từ phần tử thứ nhất đến phần tử thứ
n rồi đưa nó về vị trí thứ nhất (ta gọi là bước1).
Tương tự như vậy, bước 2 chúng ta tìm phần tử nhỏ nhất trong các phần tử
thứ 2 đến phần tử thứ n rồi đưa nó về vị trí thứ 2.

Hồng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ


20
Tương tự cho các bước tiếp theo từ bước 3 đến bước thứ n sẽ sắp xếp được
mảng A theo thứ tự tăng dần theo cách mà chúng ta vừa nói ở trên.
Giáo viên viết lại kiến thức mà học sinh đã dùng trong trường hợp đưa
phần tử nhỏ nhất về đầu mảng.
K:=j
For k:=1 to n do If a[k] > a[k] then j:=k;
tg:=a[1];
a[1]:=a[j];
a[j]:=tg;
Giáo viên gợi ý cho học sinh dúng biến i để điều khiển câu lệnh For ở vịng
ngồi, tức là dùng i để chỉ ra các bước như đã nói ở trên. Từ đó dẫn đến việc sử
dụng hai vịng For lồng nhau.

Chương trình sắp xếp mảng hồn chỉnh được trình bày ở trên.
Ví dụ 2:
Có n người xếp hàng để mua hàng. Thời gian người bán hàng phục vụ
khách hàng thứ i là ti. Viết chương trình nhận vào các ti và tính thời ci mà
khách hàng thứ i phải chờ để bắt đầu đến lượt mình.
Để giải bài toán này trước tiên ta phải khai báo 2 mảng 1 chiều t,c. Sau đó
tính thời gian ci mà khách hàng thứ i phải chờ để bắt đầu đến lượt mình. Nếu gán
cho c[i]=0 và dùng vịng For…to..do cho i chạy từ 2 đến n thì khi đó để tính ci ta
trở lại bài tốn quen thuộc là cộng hai mảng đã được học c[i]:=c[i-1]=t [i-1].
Chương trình được viết như sau:
Var i, n:integer;
t,c:array [1…50] pf real;
Begin
Repeat
Clrscr;
Until (n>0) and(n<50);
For i:=1 to n do
Begin
Write (‘Nhap vao thoi gian cua nguoi thu ‘’ i, la:’); Readln(t[i]);
End;
{Tinh thoi gian ma khach hang phai tro den luot minh}
c[1]:=0;
For i:=1 to n do
Hoàng Đức Giang - trường THCS Xuân Viên – Yên Lập – Phú Thọ



×