1. Trang chủ
  2. » Giáo án - Bài giảng

detai thuat toan

12 420 2

Đ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

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 156 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

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

Trang 2

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:

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 3

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= 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 4

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=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 5

Dạ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 6

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

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 7

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

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 8

Bà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 9

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 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 10

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 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 11

Begin 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 12

III.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

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

Xem thêm

HÌNH ẢNH LIÊN QUAN

Hình chữ nhật - detai thuat toan
Hình ch ữ nhật (Trang 2)
Hình tổng - detai thuat toan
Hình t ổng (Trang 8)

TỪ KHÓA LIÊN QUAN

w