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

Sử dụng cấu trúc rẽ nhánh và lặp để giải một số bài toán trong toán học và trong thực tiễn

16 2,2K 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 16
Dung lượng 142 KB

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

Nội dung

Sử dụng cấu trúc rẽ nhánh và lặp để giải bài toán tìm nghiệm của hệ phương trình ……….………... Để đảm bảo được điều đó, nhất định phải thực hiện thành công việc chuyển từ phương pháp dạy họ

Trang 1

MỤC LỤC

A PHẦN MỞ ĐẦU ……….……… 2

I LÝ DO CHỌN ĐỀ TÀI ……….…… ……… 2

II MỤC ĐÍCH NGHIEN CỨU ……… ….……… 3

III ĐỐI TƯỢNG NGHIÊN CỨU ……… ……….……… 3

IV PHƯƠNG PHÁP NGHIEN CỨU ……….……… ……… 3

B PHẦN NỘI DUNG ……… ……… … 3

I GIỚI THIỆU CẤU TRÚC RẼ NHÁNH VÀ LẶP TRONG PASCAL … … 3

1 Cấu trúc rẽ nhánh IF-THEN ……….…… 3

2 Câu lệnh lặp ……… ………… 4

II SỬ DỤNG CẤU TRÚC RẼ NHÁNH VÀ LẶP ĐỂ GIẢI BÀI TOÁN HỆ PHƯƠNG TRÌNH ……… ……… 5

1 Bài toán hệ phương trình bậc nhất hai ẩn ……….………… 5

2 Sử dụng cấu trúc rẽ nhánh và lặp để giải bài toán tìm nghiệm của hệ phương trình ……….……… 5

III SỬ DỤNG CẤU TRÚC RẼ NHÁNH VÀ LẶP ĐỂ GIẢI BÀI TOÁN TRUY HỒI ……….……… 8

1 Bài toán truy hồi ……….……… 8

2 Sử dụng cấu trúc lặp để giải bài toán truy hồi ……….…… 9

3 Kết quả thu được ……… 14

C PHẦN KẾT LUẬN ……… ……….………… 15

D TÀI LIỆU THAM KHẢO ……… ……… 16

Trang 2

A PHẦN MỞ ĐẦU

I LÝ DO CHỌN ĐỀ TÀI

Giáo dục phổ thông nước ta đang thực hiện bước chuyển từ chương trình giáo dục tiếp cận nội dung sang tiếp cận năng lực của người học, nghĩa là từ chỗ quan tâm đến việc học sinh học được cái gì đến chỗ quan tâm học sinh vận dụng được cái

gì qua việc học Để đảm bảo được điều đó, nhất định phải thực hiện thành công việc

chuyển từ phương pháp dạy học theo lối "truyền thụ một chiều" sang dạy cách học,

cách vận dụng kiến thức, rèn luyện kỹ năng, hình thành năng lực và phẩm chất cho học sinh;

Việc dạy CNTT theo chủ đề tích hợp với môn học khác còn giúp người học tự nhận thấy nhu cầu học tập CNTT để đáp ứng nhiệm vụ học tập

Dạy học tích hợp cũng được thực hiện đối với dạy học khoa học máy tính với các chủ đề dạy học liên quan đến thực tiễn, sử dụng tin học để giải quyết các tình huống trong thực tiễn như bài toán quản lí, bài toán khoa học Đồng thời cần tiến hành xây dựng các chủ đề tích hợp nội tại môn tin học để tăng cường sự liên kết các kiến thức, kĩ năng và hình thành năng lực giải quyết bài toán tin học

Xuất phát từ thực tiễn giảng dạy bộ môn Tin học tại trường THPT Như Thanh tôi nhận thấy rằng, để đạt hiệu quả cao trong mỗi phần học, tiết học cần có cách thiết kế bài giảng cho phù hợp với nội dung kiến thức; phương pháp, phương tiện dạy học phải phù hợp với từng đối tượng học sinh Để qua mỗi phần học, tiết học, học sinh thích thú với kiến thức mới, qua đó hiểu được kiến thức đã học trên lớp Đồng thời học sinh thấy được tầm quan trọng của vấn đề và việc ứng dụng của kiến thức trước hết để đáp ứng những yêu cầu của môn học, sau đó là việc ứng dụng của

nó vào các công việc thực tiễn trong đời sống xã hội

Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Sử dụng cấu trúc rẽ nhánh và lặp

để giải một số bài toán trong toán học và trong thực tiễn”, giúp các em nắm được

cấu trúc của câu lệnh rẽ nhánh và lặp một cách chính xác và sử dụng cấu trúc rẽ nhánh và lặp trong các bài toán đạt hiệu quả cao nhất (Chương III, Tin học 11)

Trang 3

II MỤC ĐÍCH NGHIÊN CỨU

Cấu trúc rẽ nhánh và lặp là cấu trúc thường được sử dụng để lập trình giải các bài toán, trong đó có các bài toán giải hệ phương trình, các bài toán truy hồi Tuy nhiên một số học sinh khi gặp các bài toán hệ phương trình và truy hồi các em khó xác định được công thức giải đúng của bài toán, đồng thời không biết nên dùng cấu trúc nào để giải bài toán đó Chính vì vậy, học sinh cảm thấy chán nản, không muốn tìm hiểu và rèn luyện kĩ năng lập trình Mặt khác với một số đối tượng học sinh khá, giỏi, đa phần các em rất hào hứng với việc học lập trình, cụ thể là ngôn ngữ lập trình Turbo Pascal Do đó các em muốn tìm hiểu sâu hơn về một số bài toán hệ phương trình và bài toán truy hồi mà có thể áp dụng cấu trúc rẽ nhánh và lặp để giải Giáo viên nên tích cực khai thác vốn hiểu biết của học sinh để vận dụng, liên hệ một số ví

dụ mở rộng, nâng cao với đối tượng học sinh này

III ĐỐI TƯỢNG NGHIÊN CỨU

Học sinh khối 11 tại trường THPT Như Thanh

Sử dụng máy tính để chạy các chương trình về cấu trúc rẽ nhánh và lặp

IV PHƯƠNG PHÁP NGHIÊN CỨU

Kết hợp thực tiễn giáo dục ở trường THPT Như Thanh

Có tham khảo các tài liệu về ngôn ngữ lập trình Pascal và tài liệu về Đại số và giải tích lớp 10, 11

B PHẦN NỘI DUNG

I GIỚI THIỆU CẤU TRÚC RẼ NHÁNH VÀ LẶP TRONG PASCAL

1 Câu lệnh rẽ nhánh IF-THEN

Để mô tả cấu trúc rẽ nhánh, Pascal dùng câu lệnh IF - THEN Pascal có 2 dạng câu lệnh IF - THEN

a) Dạng thiếu :

If <Điều kiện> Then <Câu lệnh> ;

b) Dạng đủ :

If <Điều kiện> Then <Câu lệnh 1> Else <Câu lệnh 2> ;

Trong đó :

- Điều kiện là biểu thức logic.

Trang 4

- Câu lệnh, Câu lệnh 1, Câu lệnh 2 là một câu lệnh của Pascal.

Hoạt động :

- Ở dạng thiếu : Điều kiện sẽ được tính và kiểm tra Nếu Điều kiện đúng thì Câu lệnh sẽ được thực hiện, ngược lại thì Câu lệnh sẽ bị bỏ qua.

- Ở dạng đủ : Điều kiện cũng được tính và kiểm tra Nếu Điều kiện đúng thì Câu lệnh 1 sẽ được thực hiện, ngược lại thì Câu lệnh 2 sẽ được thực hiện.

2 Câu lệnh lặp

Tất cả các ngôn ngữ lập trình đều có câu lệnh để mô tả cấu trúc lặp Trong ngôn ngữ lập trình Pascal ta có thể sử dụng 2 loại câu lệnh mô tả cấu trúc lặp là :

 Loại 1: Lặp với số lần biết trước :

a Dạng lặp tiến :

For <Biến đếm>:= <Giá trị đầu> To <Giá trị cuối> Do <Câu lệnh>;

Trong đó:

- For, To, Do là các từ khoá.

- Biến đếm là biến đơn, thường có kiểu nguyên.

- Giá trị đầu, Giá trị cuối là các biểu thức có giá trị cùng kiểu với Biến đếm và Giá trị đầu phải nhỏ hơn hoặc bằng Giá trị cuối Nếu Giá trị đầu lớn hơn Giá trị cuối

thì vòng lặp không được thực hiện

- Câu lệnh là một câu lệnh trong Pascal, có thể là câu lệnh đơn hoặc câu lệnh

ghép

Hoạt động:

Ở dạng lặp tiến, câu lệnh viết sau từ khóa Do được thực hiện tuần tự, với Biến đếm lần lượt nhận các giá trị liên tiếp tăng từ Giá trị đầu đến Giá trị cuối.

b Dạng lặp lùi :

For <Biến đếm>:= <Giá trị cuối> Downto <Giá trị đầu> Do <Câu lệnh>;

Trong đó:

- For, Downto, Do là các từ khoá.

- Biến đếm là biến đơn, thường có kiểu nguyên.

- Giá trị đầu, Giá trị cuối là các biểu thức có giá trị cùng kiểu với Biến đếm.

Trang 5

- Câu lệnh là một câu lệnh trong Pascal, có thể là câu lệnh đơn hoặc câu lệnh

ghép

Hoạt động:

Ở dạng lặp lùi, câu lệnh viết sau từ khóa Do được thực hiện tuần tự với Biến đếm lần lượt nhận các giá trị liên tiếp giảm từ Giá trị cuối đến Giá trị đầu.

 Loại 2: Lặp với số lần chưa biết trước:

While <điều kiện> do <câu lệnh>;

* Trong đó:

- While, do là các từ khoá;

- Điều kiện là biểu thức logic;

- Câu lệnh là một câu lệnh đơn hoặc lệnh ghép.

Cấu trúc hoạt động như sau:

- Bước 1: Tính <biểu thức>;

- Bước 2: Nếu kết quả là đúng (true) thì thực hiện <câu lệnh> và quay lại bước 1, ngược lại thì chuyển sang câu lệnh tiếp theo trong chương trình

II SỬ DỤNG CẤU TRÚC RẼ NHÁNH VÀ LẶP ĐỂ GIẢI BÀI TOÁN HỆ PHƯƠNG TRÌNH

1 Bài toán hệ phương trình bậc nhất 2 ẩn

Hệ hai phương trình bậc nhất hai ẩn có dạng tổng quát là :

; c

= y b + x

a

; c

= y b + x

a

2 2

2

1 1

1

Trong đó : x,y là hai ẩn, các chữ còn lại là hệ số

Nếu cặp số (x0,y0) đồng thời thảo mãn hai phương trình của hệ thì (x0,y0) được gọi là một nghiệm của hệ phương trình

Giải hệ phương trình trên là tìm tập nghiệm của nó

2 Sử dụng cấu trúc rẽ nhánh và lặp để giải bài toán tìm nghiệm của hệ phương trình

Ví dụ 1 : Lập trình để giải bài toán cổ sau :

Vừa gà vừa chó

Bó lại cho tròn

Ba mươi sáu con

Một trăm chân chẵn (SGK Tin học 11 – Trang 51)

Trang 6

Hỏi có bao nhiêu con mỗi loại ?

Phân tích :

Với bài toán trên dễ thấy ta có hệ phương trình hai ẩn như sau:

; 100

= 4y +

2x

; 36

= y

+

x

Trong đó : gọi x là số gà và y là số chó

Từ dữ kiện của bài toán ta có :

1<=x<=36 ;

1<=y<=25 ;

Từ đó ta có chương trình:

* Sử dụng cấu trúc lặp với số lần đã biết :

Program gacho;

Var

x,y:byte;

Begin

For x:=1 to 36 do

For y:=1 to 25 do

If (x+y=36) and (2*x+4*y=100) then

Begin

Writeln('So ga la: ',x);

Writeln('So cho la: ',y);

End;

Readln

End

* Sử dụng cấu trúc lặp với số lần chưa biết trước :

Program gacho;

Var

x,y:byte;

Begin

x :=1;

y :=36-x ;

While (2*x+4*y<>100)do

Begin

x :=x+1 ;

y :=36-x ; End ;

Writeln('So ga la: ',x);

Writeln('So cho la: ',y);

Readln

End

Kết quả của chương trình : Số gà là 22, Số chó là 14.

Trang 7

Ví dụ 2 : Trong kho tàng văn hóa dân gian Việt Nam có bài toán “Trăm trâu trăm

cỏ” sau đây : (SGK Đại số 10 – Trang 67)

Trăm trâu trăm cỏ

Trâu đứng ăn năm

Trâu nằm ăn ba

Lụ khụ trâu già

Ba con một bó

Hỏi có bao nhiêu trâu đứng, bao nhiêu trâu nằm, bao nhiêu trâu già ?

Phân tích :

Với bài toán trên dễ thấy ta có hệ hai phương trình bậc nhất 3 ẩn như sau:

; 100

= z 3 + 3y

+

5x

100;

= z + y

+

x

Trong đó : gọi x là số trâu đứng, y là số trâu nằm và z là số trâu già

Từ dữ kiện của bài toán ta có :

1<=x<=20 ;

1<=y<=33 ;

1<=z<=100 ;

Từ đó ta có chương trình:

program trauco;

var x,y,z:byte;

begin

for x:=1 to 20 do

for y:=1 to 33 do

for z:=1 to 100 do

if (5*x+3*y+1/3*z=100) and (x+y+z=100) then

Begin

writeln('So trau dung la: ',x);

Writeln('So trau nam la: ',y);

Writeln('So trau gia la: ',z);

end;

readln

end

Kết quả của chương trình : Bài toán có 3 tập nghiệm

; 78

; 18

y

4;

z

x

; 81 z

; 11 y

8;

x

; 84

z

; 4 y

; 12

x

Trang 8

Ví dụ 3 : Một công ti có 85 xe chở khách gồm 2 loại, xe chở được 4 khách và xe

chở được 7 khách Dùng tất cả số xe đó, tối đa công ti chở 1 lần được 445 khách

Hỏi công ti đó có mấy xe khách mỗi loại ? (SGK Bài tập Đại số 10 – Trang 77)

Phân tích :

Với bài toán trên dễ thấy ta có hệ hai phương trình bậc nhất 2 ẩn như sau:

; 445

= 7y

+

4x

85;

= y

+

x

Trong đó : gọi x là số xe chở được 4 khách, y là số xe chở được 7 khách

Từ dữ kiện của bài toán ta có :

1<=x<=85 ;

1<=y<=63 ;

Từ đó ta có chương trình:

Program xekhach;

Var

x,y:byte;

Begin

x :=1;

y :=85-x ;

While (4*x+7*y<>445)do

Begin

x :=x+1 ;

y :=85-x ; End ;

Writeln('So xe cho 4 khach la: ',x);

Writeln('So xe cho 7 khach la: ',y);

Readln

End

Kết quả của chương trình : Số xe khách 4 chổ ngồi là 50, Số xe khách 7 chổ ngồi

là 35

III SỬ DỤNG CẤU TRÚC RẼ NHÁNH VÀ LẶP ĐỂ GIẢI BÀI TOÁN TRUY HỒI

1 Bài toán truy hồi

Trong khoa học tính toán ngày nay, phép truy hồi là thuật toán cơ bản để giải một số bài toán Ưu điểm của phương pháp truy hồi là ở chỗ nó dùng một công thức nhất định để diễn tả những phép tính lặp đi lặp lại bất chấp số lần lặp lại là bao nhiêu Chẳng hạn với bài toán cấp số cộng là một ví dụ :

Trang 9

Cho 0

1

U

( n 1)

n n

a

 với a là một số cho trước và d là hằng số cố định (công sai)

- Nếu n là biết trước thì việc xác định số Un phải được thực hiện thông qua n bước lặp theo công thức truy hồi

- Nếu n là không được biết trước mà Un cần phải thỏa mãn một điều kiện nào

đó thì việc xác định Un là quá trình lặp với số lần chưa biết trước nhưng thỏa mãn điều kiện

Nhiều bài toán truy hồi có thể phải thực hiện rất nhiều lần và các số tính toán

có thể rất lớn, nếu thực hiện việc tính toán mà không sử dụng đến máy tính là vô cùng khó khăn Một trong những đặc trưng của việc lập trình trên máy tính là có khả năng thực hiện có hiệu quả các thao tác lặp trong thời gian rất nhanh

2 Sử dụng cấu trúc lặp để giải bài toán truy hồi

a Sử dụng cấu trúc For … To Do

Ví dụ 1: Với a là số nguyên và a > 2, tính tổng:

S

Phân tích:

Với bài toán trên dễ thấy ta có công thức truy hồi để tính giá trị S như sau:

0

1

S

a

1

1

n n

a n

 Với n = 1→100

Việc cộng vào tổng S được lặp lại 100 lần, giá trị n khi tham gia vòng lặp là 1

và sau mỗi lần lặp n tăng lên 1 cho đến khi n > 100 thì dừng Như vậy số lần lặp là biết trước, biến n được sử dụng là một biến đếm từ 1 đến 100

Từ đó ta có chương trình:

program vidu_1;

var s:real;

n,a : integer;

begin

Trang 10

writeln(' Hay nhap gia tri a (a>2):');

readln(a);

s := 1/a;

for n := 1 to 100 do

s := s + 1/(a+n);

writeln('Tong s la: ',s:8:4);

readln;

End.

Ví dụ 2: Lập trình tính giai thừa của một số nguyên n (do giới hạn lưu trữ số nguyên

cho n<8)

Phân tích:

Giai thừa của n: n! = 1.2…n (tích các số tự nhiên từ 1 đến n) Không có công thức tổng quát để tính n! nhưng ta có công thức truy hồi sau:

)!

1 n.(n-n!

1

! 0

Đặt gn=n!, theo công thức trên ta có: 0

n n-1

g =1

g =g n

Như vậy ta có chương trình tính giai thừa như sau:

program Vidu_2;

var n, i, g : integer;

begin

writeln('Chuong trinh tinh n! ');

write('Nhap (n<8): ');

readln(n);

g := 1;

for i := 1 to n do

g := g * i;

writeln('Ket qua: ',n,'! = ',g);

end

b Sử dụng cấu trúc for downto do

Ví dụ 3 : Lập trình tính tổng sau:

50

n=1

n

Y =

n+1

(SGK Tin học 11 – Trang 51)

Phân tích:

Với bài toán trên có thể sử dụng cấu trúc lặp với số lần biết trước dạng tiến

hay lùi đều được Nếu sử dụng cấu trúc lặp For …downto … do ta có thể xây dựng

công thức truy hồi để tính giá trị Y như sau:

Trang 11

n

Y 

1

1

n

n

  

 Với n từ 50 giảm dần về 1 Việc cộng vào tổng Y được lặp lại 50 lần, giá trị n khi tham gia vòng lặp là 50

và sau mỗi lần lặp n giảm đi 1 cho đến khi n =1 thì dừng Như vậy số lần lặp là biết trước, biến n được sử dụng là một biến đếm giảm từ 50 về 1, tổng cần tính là Y0

Ta viết chương trình như sau:

program vidu_3;

var Y: real; n : integer;

begin

Y := 0;

for n := 50 downto 1 do

Y := Y + n/(n+1);

writeln('Tong Y la: ',Y:10:4);

readln;

end.

Tuy nhiên trong một số trường hợp thì chỉ có thể dùng một cấu trúc, đặc biệt là

khi tính các công thức truy hồi Ta xét một ví dụ dùng for … downto … do thích

hợp hơn:

Ví dụ 4:

Tính tổng S = 2 4 2n với n là một số tự nhiên nhập từ bàn phím

Phân tích:

Đặt

i

s  2 i  2( 1) 2n i   ta có công thức truy hồi sau:

s 0 , s 2

s 2 s

n i

Tổng cần tính là s1 Công thức truy hồi là truy hồi ngược (vì tính si qua si+1) nên dùng

for … downto … do là thích hợp nhất Có thể chương trình tính như sau:

program Vidu_4;

var

n dấu căn

Trang 12

i,n : integer;

s : real;

begin

write('Nhap mot so tu nhien n = ');

readln(n);

s:=0;

for i := n downto 1 do

s := sqrt (2 * i + s);

writeln('Ket qua can tinh: s = ',s:10:5);

readln;

end.

c Sử dụng cấu trúc While … do…

S

n

2

1 10 n



Phân tích: Phương pháp tính của chúng ta như sau:

Đặt: n 12 12 12

r =

n (n là số tự nhiên bắt đầu từ 1)

Ta có: 0

s =0

s =s +r

và Sn ≈ S khi rn <= 10-6

Quá trình tính là một quá trình lặp cho đến khi điều kiện dừng xảy ra

Toàn bộ chương trình:

program vidu_5;

var s,r : real;

n : integer;

begin

writeln(' Chuong trinh tinh tong chuoi S = 1+1/4+1/9+ ');

s := 0; n := 1; r:= sqr(1/n);

While r>= 1E-6 do

Begin

s := s + r;

n := n + 1;

r := sqr(1/n);

end;

write('Tong can tinh voi do chinh xac 1E-6 la: ',s :10:6);

readln;

end.

Ví dụ 6: Dân số hiện nay ở một quốc gia khoảng 75 triệu người, tỉ lệ tăng tự nhiên là

1.7% Hỏi sau bao nhiêu năm nữa thì dân số quốc gia đó đạt xấp xỉ 100 triệu?

Ngày đăng: 17/10/2017, 09:33

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w