Cũng như những môn học khác, việc dạy học Tin học cần được thực hiện trong hoạt động và bằng hoạt động tự giác, tích cực, chủ động sáng tạo của người học.. Do đó việc liên hệ thưc tiễn v
Trang 1I Mở đầu
1 Lý do chọn đề tài
Dạy học là một hoạt động đặc trưng của loài người nhằm truyền lại cho thế hệ sau những kinh nghiệm xã hội mà loài người tích luỹ được biến chóng thành vốn liếng, kinh nghiệm và phẩm chất năng lực của cá nhân người học
Để tiếp thu được tri thức, kỹ năng, kinh nghiệm nhằm sử dụng chúng trong hoạt động thực tiễn, người họ cần thông qua hoạt động tích cực của bản thân, tham gia vào quá trình tái tạo lại chúng, chiếm lĩnh chúng Cũng như những môn học khác, việc dạy học Tin học cần được thực hiện trong hoạt động và bằng hoạt động tự giác, tích cực, chủ động sáng tạo của người học
Đặc thù môn Tin học ra đời sau các môn học khác và được xây dựng trên các khái niệm trừu tượng và tổng quát hoá từ những bài toán cụ thể để giải cả lớp bài toán Do đó việc liên hệ thưc tiễn và bắt đầu từ những bài toán dễ, quen thuộc trong Toán học, Vật lý để học sinh có lời giải bài toán cụ thể từ đó hình thành khái niệm thuật toán và chương trình giải bài toán đó trong Tin học thông qua ngôn ngữ lập trình cụ thể
2.Đối tượng:
Tin học 10,11
3.Phương pháp:
Tình huống có vấn đề, giao tiếp và dạy học trong hoạt động và bằng hoạt động khi dạy phần thuật toán và lập trình Pascal
Trang 2II.nội dung
A.một số khái niệm
1.Bài toán:
Trong Toán học:Bài toán là từ một giả thiết nào đó tìm cách chứng minh
có kết luận đưa ra không ?
Trong Tin học :Bài toán là việc nào đó ta muốn máy tính thực hiện Hay nói cách khác từ input của bài toán (thông tin đã có ) đưa vào máy tính thực hiện ta được output (các thông tin cần tìm)
2.Thuật toán
Trong Toán học : Thuật toán được hiểu là các bước giải bài toán
Trong Tin học : Là dãy hữu hạn các thao tác được sắp xếp theo một trình
tự xác định sao cho sau khi thực hiện các thao tác đó, từ input của bài toán này ta thu được output cần tìm
Để biểu diễn thuật toán có hai cách hoặc là sơ đồ khối hoặc là tuàn tự các bước
Với cách sö dụng sơ đồ khối ta có các quy ước sau:
Hình thoi
Hình chữ nhật
Hình ô van
Các mũi tên
Khối điều kiện Khối thao tác Khối nhập xuất DL Quy trình, trình tự thực hiện các thao tác
3.Ngôn ngữ lập trình:
Diễn tả thuật toán bằng một ngôn ngữ mà máy tính có thể thực hiện được, ngôn ngữ đó được gọi là ngôn ngữ lập trình
Trong phạm vi THPT ta sử dụng ngôn ngữ lập trình Pascal để lập trình
Trang 3b.Một số thuật toán phù hợp Bậc thpt
Bài1: Một số bài toán toán học đơn giản
Cỏc dạng bài toỏn thuật toỏn và chương trỡnh
Dạng 1: Tính
A= x 2 + y 2
B=x+y + A
C=xy + A – B 2
Nhận xét bài toán trên và nêu
cách giải trong toán học ?
Ngoài ra có thể diễn tả thuật toán
bằng sơ đồ khối:
Dạng 2: Giải
ax + b =0 (1)
ax 2 + bx + c=0 (2)
Nhận xét các bài toán trên và nêu
cách giải trong toán học ?
1.í tưởng:
Nhập vào giá tị của x, y tính được A= x 2 + y 2, sau
đó tính được
B=x+y + A
rồi tính được C=xy + A – B
2.Thuật toán:
B1:Nhập x B2: A= x2 + y2 ,thông báo giá trị A B3: B=x+y + A, thông báo giá trị B B4: C=xy + A – B2 , thông báo giá trị C, kết thúc
3. chương trình
Var A,B,C,x:real;
Begin Write(‘nhap vao gia tri x:’);
Readln(x);
A:= x*x + y*y;
writel(‘gia tri A=’,A);
B:=x+y + A;
writel(‘gia tri B=’,B);
C:=x*y + A – B*B;
writel(‘gia tri C=’,C);
readn End
1 ý tưởng:
(1) là bài toán giải à biện luận pt bậc nhất (2) là giải và biện luận pt bậc hai, ta thấy khi a=0 thì (2) trở thành bài toán (1)
Nhập x, y
A<-x 2 +y 2
B<- x+y+A
C<- xy+A - B
In A, B, C
Trang 4Bài tập:diễn tả thuật toán này
bằng sơ đồ khối 2.Thuật toán:B1:Nhập a,c,b
B2:nếu a=0, 1.1 nếu b=0, 2.1.1: nếu c=0, pt vssn, sang B7 2.1.2: pt vn, sang B7
2.2 pt có n x=-b/a, sang B7 B3: d=b2-4ac;
B4: nếu d<0, ptvn, sang B7 B5:nếu d=0 , pt có n kép x=-b/2a, B6: x1=(-b- b2 − 4ac)/2a, x2=(-b+ b2 − 4ac)/2a B7: Đưa ra nghiệm, kết thúc
3.Chương trình:
Var a,b,c,d:real;
Begin Writeln(‘nhap vao he so pt a,b,c:’);
Readln(a,b,c);
If a=0 then
If b=0 then
If c=0 then
Write(‘ptvssn’) Else Write(‘ptvn’) Else Write(‘pt co n x=’,-b/c) Else d:=b*b- 4*a*;
If d< 0 then Write(‘ptvn’) Else
if d=0 then
Write(‘ptvssn’) Else
Write(‘pt co n x1=’,(-b-sqrt(d))/ (2*a):3:4,
‘x2 =', (-b+sqrt(d))/(2*a):2:4); readln
End
Trang 5Dạng 3:
Giải hệ
= +
= +
2 2 2
1 1
1
c y b
x
a
c y b
x
a
Bài tập:
1 Trình bày thuật toán giải hệ
trên bằng 2 cách
2 Viết chương trình giải hệ
bằng ngôn ngữ lập trình
Pascal
1.ý tưởng:
Với các hệ số bất kỳ ta biện luận qua định thức D=a1*b2-a2*b1;
Dx=b1*c2-b2*c1;
Dy=c1*a2-c2*a1; Nếu d=dx=dy=0 thì hệ có vssn Nếu d=0 và hoặc dx≠0 hoặc dy≠0 thì hệ có vn Nếu d≠0 thì hệ có nghiệm x=dx/d, y=dy/d
2.Thuật toán:
3.Chương trình:
Bài tập đề nghị
1.Lập chương trình tính diện tích của hình chữ nhật khi biết độ dài hai
cạnh bên
2 Lập chương trình tính diện tích của hình thang khi biết độ dài hai cạnh
đáy đường cao
3.Lập trình tính biểu thức: p=
y x
y x y x
y x
xy x
+
− + + + + 2 2
2
,với x,y thực 4.Lập trình tính vận tốc khi chạm đất củavật rơi từ độ cao h, vật rơi với gia tốc g=9,8m/s2
Trang 6Có rất nhiều bài toán mà bằng kiến thức THPT chưa thể giải được bằng Toán học nhưng với Tin học thì có thể giải quyết một cách dễ
dàng Hay một số bài toán rất Tin học Sau khi học sinh đã nắm được
khái niệm thuật toán và viết chương trình từ các bài toán đơn giản quen
thuộc sẽ dễ dàng tiếp thu những bài toán Tin học mang tính chuyên
nghiệp về lập trình hơn
Bài 2 Một số bài toán Tin học
Các dạng bài toán Thuật toán và chương trình
Dạng 1:
Bài toán cổ
Bài1.Trăm trâu trăm cỏ
Trâu đứng ăn ba
Trâu nằm ăn một
Lụ khụ trâu già ba con một
bó
Tính số trâu mỗi loại?
Bài tập:diễn tả thuật toán này
bằng sơ đồ khối
1.ý tưởng:
Giải bài toán bằng phương pháp lập phương trình Gọi x
là số trâu đứng,y là số trâu nằm, z là số trâu già
Ta có hệ
= + +
= + +
100 3
1 3
100
z y x
z y x
Cho x,y,z chạy từ 0 tới 100 nếu có cặp nào thoả mãn thì
đó là nghiệm
2.Thuật toán:
B1: x=0,y=0,z=0;
B2:x=x+1
B3:Nếu
= + +
= + +
100 3
1 3
100
z y x
z y x
thì
X,y,z,là số trâu cần tìm, kết thúc B4:Nếu x<=100 quay lại B2 B5: y=y+1,quay lại B3 B6:Nếu y<=100,quay lại B5 B7: z=z+1, quay B3
B8:Nếu z<=100 thì quay lại B7 B9:Không có nghiệm thoả mãn, kết thúc
3.Chương trình
Var x,y,z:byte;
Begin For x:= 1 to 100 do
For y:= 1 to 100 do
For z:= 1 to 100 do
If (x+y+z=100) and(3*x+y+z div 3=100) then
Writeln(‘nghiem la:’);
write(‘x=’,x:3.’y=’,y:3,’z=’,z:3);
End
Trang 7Bài 2.Vừa gà vừa chó bó
lại cho tròn một trăm chân
chẵn Tính số gà và số chó?
Hoàn toàn tương tự bài1
Bài tập:
Trình bày thuật toán bằng
một trong hai cách và hoàn
thành chương trình này
Dạng 2:
Chu trình lặp đơn bài toán
tính tổng
Với N, a nguyên, nhập vào từ
bàn phím
Bài 1.Tính và đưa ra màn hình
tổng
S=
100
1
2
1 1
1
1
+ + + +
+ +
+
a a
a
a
Bài tập:diễn tả thuật toán này
bằng sơ đồ khối
1.ý tưởng:
2.Thuật toán:
3.Chương trình
1.ý tưởng:
Xuất phát ta gán s =
a
1 , N=0, sau mỗi lần tăng N một đơn
vị ta cộng vào s một giá trị
N
1
Việc làm này lặp cho tới khi N=100
2.Thuật toán:
B1:nhập a B2:s =1/a; n=0;
B3: N=N+1;
B4:Nếu n>100 thì đưa ra S, kết thúc B5:S = S+1/(a+N); quay lại B3
3.Chương trình:
Var N,a:integer; S:real;
Begin Write(‘nhap a:’);
Readln(a);
S:=1.0/a; N=0;
while n<= 100 do begin
N:=N+1;
Trang 8Bài 2: Tính và đưa ra màn
hình tổng
S =
1
2
1
1
1
+ + + +
+
+
+
N a a
a
a
Cho đến khi
N
1
<0,0001
Hoàn toàn tương tự bài1
Bài tập:
Trình bày thuật toán bằng
một trong hai cách và hoàn
thành chương trình này
Dạng 3:
một số bài toán tìm kiếm và
thay thế
Bài 1:
Tìm phần tử lớn nhất của dãy
N số nguyên
Bài tập: Hãy trình bày thuật
toán bên bằng sơ đồ khối
S:=S+1.0/(a+N);
End;
Write(‘S=’,S:1:3) readln
End
1.ý tưởng
2.Thuật toán:
3.Chương trình:
*Lưu ý: điều kiện ở đây là:
N
1
<0,0001
1.ý tưởng:
Duyệt từ đầu đến hết dãy, ban đầu gán max cho phần tử đầu tiên, kiểm tra các phần tử kế sau nó nếu lớn hơn thì đổi max cho phần tử đó
2.Thuật toán:
B1:Nhập N và dãy a1,a2, … aN
B2:Max=a1, i=1;
B3:Nếu i>N thì đưa ra max, kết thúc B4:
4.1 Nếu max<ai thì max=ai
4.2i=i+1; quay lại B3;
3.Chương trình:
Const m=100;
Var a:aray[1 m] of integer;
Trang 9Sắp xếp dãy số nguyên bằng
thuật toán tráo đổi
Bài tập: Hãy trình bày thuật
toán bên bằng sơ đồ khối
I,n,max,csmax:integer;
Begin Write(‘nhap so luong day:’);
Readln(n);
For i:=1 to n do
Begin writeln(‘a[’,i,’]’);
Readln(a[i]);
End;
Max:=a[1]; csmax:=1;
Forni:=2 to n do
If a[i]> max then Begin
Max:=a[i];
Csmax:=i;
End
Writeln(‘gia tri phan tu lon nhat:’,max:4,’ vi tri’,csmax); Readln
End
1.ý tưởng
Với mỗi cặp đngs liền nhau trong dãy số, nếu số trước lớn hơn số sau ta đổi chổ cho nhau Công việc này được lặp cho tới khi không có sự đổi chổ nữa
2.Thuật toán:
B1:Nhập N và dãy a1,a2, … aN
B2:m=n;
B3:Nếu m<2 thì đưa ra dãy đã sắp xếp, 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 ai>ai+1 thì đổi chổ ai cho ai+1 cho nhau;
B8:quay lại B5
3.Chương trình:
Const m=100;
Var
a:aray[1 m] of integer;
I,j,n,m:integer;
Begin Write(‘nhap so luong day:’);
Trang 10Bài3: Tìm kiếm nhị phân
Cho dãy số sắp xếp tăng dần,
tìm trong dãy có số k không?
Bài tập: Hãy trình bày thuật
toán bên bằng sơ đồ khối
Readln(n);
For i:=1 to n do
Begin writeln(‘a[’,i,’]’);
Readln(a[i]);
End;
For i:=n downto 2 do
For j:=1 to i-1 do
If a[j]>a[i] then
Begin A[j]:=tg;
A[j]:=a[i];
A[i]:=tg;
End;
Writen(‘dãy d xap xep’);
For i:=1 to n do write(a[i]);
Readln End
1.ý tưởng:
Ta chia đôi dãy rồi so sánh với khoá k, nếu a(giữa) =k thi
đó là giá trị cần tìm, còn nếu a(giữa)> k thì ta tìm dãy từ đầu đến giữa ngược lại tìm từ vị trí giữa đến cuối
2.Thuật toán:
B1:nhập N, dãy a1,a2,… a và khoá k;
B2:dau=1,cuoi=n;
B3:giua=
2
cuoi
; B4:Nếu agiua=k thì thông báo chỉ số giưa kết thúc;
B5:Nếu agiua>k thì cuoi=giua – 1; sang B7;
B6: dau = giua +1;
B7:Nêu dau> cuoi thì thông báo dãy không có khoa k, kết thúc
B8:quay lại B3
3.Chương trình:
Const m=100;
Var
a:aray[1 m] of integer;
k,I,n,dau,cuoi,giua:integer;
kt:boolean;
Trang 11Begin Write(‘nhap so luong day va khoa k’);
Readln(n,k);
For i:=1 to n do
Begin writeln(‘a[’,i,’]’);
Readln(a[i]);
End;
Dau:=1; cuoi:=n kt:=false;
While (dau<=cuoi) and not(kt) do
Begin Giua:=(dau+cuoi) div 2;
If a[giua]=k then kt:=true Else
If a[giua]>k then cuoi:=giua -1 Else dau:=giua+1;
End;
If kt then writeln(‘tim thay o vi tri’,giua)
Else writeln(‘khong tim thay’);
Readln End
Bài tập đề nghị:
1.lập trình tìm số k trong day chưa sắp xếp
2.Đếm các số âm, dương, chia hết cho 3 trong dãy số
3.Tìm phần tử lớn nhất trên đường chéo chính của ma trận cấp m,n 4.sắp xếp trong dãy n số thành hai phần, phần đầu là các số âm phần sau là các số dương,phần sau được sắp xếp giảm dần hoặc tăng dần 5.Tính p= x+ x+ + x , với x là số thực và có n dấu căn
6.Lập trình tính
Y= ∑
= +
100
n
7.tính N!, áp dụng lập trình tính
S= 1+ 1!
! 3
1
! 2
1
! 1
1
n
+ + + +
Trang 12III.kết luận
Trên đây chỉ là kinh nghiệm rất ít của tôi khi làm công tác giảng dạy môn Tin học 10,11 Phần thuật toán và lập trình có thể xem là khó diễn đạt giảng dạy cũng như trình bày nhất trong Tin học nói chung và trong chương trình Tin học phổ thông nói riêng vì nó đòi hỏi tư duy thực sự Cách bố trí tiếp cận bài toán, thuật toán, chương trình được trình bày ở trên chỉ mang tính chủ quan với mong muốn bài học có hiệu quả hơn
Tôi xin chân thành cảm ơn các đồng nghiệp đã giúp đỡ tôi trong quá trình thực hiện đề tài này !
Kính mong các đồng chí góp ý chân tình và có gì sai sót mong các đồng nghiệp thông cảm !
IV.Tài liệu
1.Sgk,sbt,sgv Tin học 10,11
2.Giáo trình lý thuyế và lập trình Pascal , tác giả Nguyễn Đình
Tê và Hoàng Đức Hải
3.Ngôn nhữ lập trình Pascal của Quách Tuấn Ngọc
4.Bài tập Tin học chọn lọc, tác giả Nguyễn Thanh Hùng và Hoàng Kiếm