detai thuat toan

12 420 2
detai thuat toan

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

I. 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. 1 II.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: Các kí hiệu Ý nghĩa 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. 2 b.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= x 2 + y 2 ,thông báo giá trị A B3: B=x+y + A, thông báo giá trị B B4: C=xy + A – B 2 , 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) 3 Nhập x, y A<-x 2 +y 2 B<- x+y+A C<- xy+A - B In A, B, C Bà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=b 2 -4ac; B4: nếu d<0, ptvn, sang B7 B5:nếu d=0 , pt có n kép x=-b/2a, B6: x 1 =(-b- acb 4 2 − )/2a, x 2 =(-b+ acb 4 2 − )/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 x 1= ’,(-b-sqrt(d))/ (2*a):3:4, ‘x 2 =', (-b+sqrt(d))/(2*a):2:4); readln End. 4 Dạng 3: Giải hệ    =+ =+ 222 111 cybxa cybxa 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=a 1 *b 2 -a 2 *b 1 ; D x =b 1 *c 2 -b 2 *c 1 ; D y =c 1 *a 2 -c 2 *a 1 ; Nếu d=d x =d y =0 thì hệ có vssn Nếu d=0 và hoặc d x ≠0 hoặc d y ≠0 thì hệ có vn Nếu d≠0 thì hệ có nghiệm x=d x /d, y=d y /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= yx yx yx yx xy x + − + + + + 22 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/s 2 5 Có 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 zyx zyx 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 zyx zyx 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. 6 Bà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 11 + ++ + + + + aaaa 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ị Na + 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; 7 Bài 2: Tính và đưa ra màn hình tổng S = 1 2 1 . 1 11 + + ++ + + + + Naaaa Cho đến khi Na + 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à: Na + 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 a 1 ,a 2 , … a N B2:Max=a 1 , i=1; B3:Nếu i>N thì đưa ra max, kết thúc B4: 4.1 Nếu max<a i thì max=a i 4.2i=i+1; quay lại B3; 3.Chương trình: Const m=100; Var a:aray[1 m] of integer; 8 Bài2: Sắ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 a 1 ,a 2 , … a N 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 a i >a i+1 thì đổi chổ a i cho a i+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:’); 9 Bà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 a 1 ,a 2 ,… a và khoá k; B2:dau=1,cuoi=n; B3:giua= 2 cuoidau + ; B4:Nếu a giua =k thì thông báo chỉ số giưa kết thúc; B5:Nếu a giua >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; 10

Ngày đăng: 23/01/2015, 19:00

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan