1. Trang chủ
  2. » Luận Văn - Báo Cáo

skkn phát triển tư duy thuật toán qua một số bài toán lập trình THPT yên định 2

21 559 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 21
Dung lượng 157,5 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Ơ SỞ LÝ LUẬN Trong các bài toán có những lúc chúng ta tỏ ra bế tắc trước những hướng đi để tìm lời giải cho bài toán, vấn đề tìm ra một hướng đi đúng đắn cho bài toánthực sự là một vấn

Trang 1

SỞ GD & ĐT THANH HÓA TRƯỜNG THPT YÊN ĐỊNH 2

- -SÁNG KIẾN KINH NGHIỆM

Tên đề tài:

PHÁT TRIỂN TƯ DUY THUẬT TOÁN

Họ và tên: Lương Trung Dũng Chức vụ: TTCM

Đơn vị công tác: Trường THPT Yên Định 2 SKKN thuộc môn: Tin học

THANH HOÁ, NĂM 2013

Trang 2

A ĐẶT VẤN ĐỀ

I CƠ SỞ LÝ LUẬN

Trong các bài toán có những lúc chúng ta tỏ ra bế tắc trước những hướng

đi để tìm lời giải cho bài toán, vấn đề tìm ra một hướng đi đúng đắn cho bài toánthực sự là một vấn đề khó đối với học sinh nói chung và đối với học sinh họcmôn tin học THPT nói riêng Khi đứng trước một bài toán lạ, không chỉ học sinhthường tỏ ra lúng túng, mà đối với các giáo viên cũng tỏ ra rất lúng túng khôngbiết lựa chọn phương pháp nào để đưa ra lời giải cho bài toán Có nhiều lúcnhững bài toán hết sức đơn giản nhưng chúng ta chưa khôn khéo đưa bài toán đó

về dạng quen thuộc để giải bài toán, cuối cùng dẫn tới con đường bế tắc khôngtìm ra được lời giải hay thuật toán đúng đắn Nhìn chung chính học sinh và cảchúng ta nữa, chúng ta chưa có phương pháp đúng để đưa một bài toán đó từ bàitoán mà chúng ta chưa hề hay biết về bài toán chúng ta đã biết Với những bàitoán ta luôn hướng tới sự hoàn thiện tư duy và phát triển khả năng thuật toán chohọc sinh Đặc biệt đối với học sinh khá giỏi ta cần phát triển sự tư duy cho họcsinh để các em có thể phát triển khả năng thuật toán và kỷ thuật lập trình Chính

vỳ lý do đó mà tôi chọn đề tài “Phát triển tư duy thuật toán qua một số bài toán lập trình” nhằm xây dựng cho các em kỷ năng tư duy và phát triển tốt

nhất

II CƠ SỞ THỰC TIỄN.

Qua 8 năm giảng dạy bộ môn tin học trong một trường phổ thông, qua các

kỳ thi học sinh giỏi tin học trong những năm vừa qua với một số vấn đề khi đưa

ra một số bài toán khó trong tin học, yêu cầu học sinh tìm lời giải cho bài toánthì học sinh thường không tìm ra được thuật toán một cách nhanh chóng, cóchăng các em cũng đưa ra được một vài ý tưởng cho thuật toán nhưng chưa thực

sự sát để mang lại kết quả Thêm vào đó trong chương trình tin học 11 chỉ dừnglại ở một số kỷ năng cơ bản và đơn giản qua các bài toán Do đó sử dụngphương pháp xây dựng kỷ năng và kỷ thuật lật trình để đi tìm lời giải cho cácbài toán

Bài toán 1: Cho dãy gồm N phần tử a 1 , a 2 , a n Sắp xếp dãy theo trật tự

không giảm (hoặc không giảm)

Dữ liệu: Vào từ tệp SAPXEP.INP gồm;

- Dòng đầu ghi số N là số phần tử của mảng.

- Dòng tiếp theo ghi các phần tử của mảng từ a 1 đến a n , các phần tử cách nhau bởi 1 dấu cách.

Kết quả: Ghi ra tệp SAPXEP.OUT

Trang 3

Ghi dãy ã s p x p trên dòng v các s cách nhau 1 d u cáchđã sắp xếp trên dòng và các số cách nhau 1 dấu cách ắp xếp trên dòng và các số cách nhau 1 dấu cách ếp trên dòng và các số cách nhau 1 dấu cách à các số cách nhau 1 dấu cách ố cách nhau 1 dấu cách ấu cách

4

3 8 5 4

3 4 5 8

Cơ sở sắp xếp: Với dãy N phần tử ta có thể có nhiều cách để xếp Thuật

toán tráo đổi dễ hiểu đối với học sinh tuy nhiên chưa tối ưu Ta có thể sử dụng

thuật toán Quicksort để tăng hiệu quả sắp xếp lên nhiều và ta kết hợp sử dụng

nó bằng đề qui

Đây là một bài toán quen thuộc đối với học sinh trong khi giải bài toántìm kiếm Ta có thể nâng lên sắp xếp chỉ mục để tăng khả năng xắp sếp cho mụctin lớn

Chúng ta vận dụng bài toán này để giải các bài toán sau:

Bài toán 2: Dãy FAREY.

Ứng với số tự nhiên N>0, ta có dãy Farey gồm các phân số tối giản có giá trị lớn hơn 0 và nhỏ hơn 1 theo thứ tự tăng dần

Ví dụ: Với N=4 ta có dãy phân số 1 1 1 2 3; ; ; ;

4 3 2 3 4

Yêu cầu: Cho số tự nhiên N (0<N<100) Hãy tìm dãy Farey tương ứng.

Dữ liệu: Vào từ file văn bản FAREY.INP chứa duy nhất số N.

Kết quả: Ghi ra File văn bản FAREY.OUT gồm:

Dòng đầu tiên ghi các tử số của dãy số.

Dòng tiếp theo ghi các mẫu số của dãy số.

Ví d :ụ:

5 4 3 5 2 5 3 4 5

Bài toán 3: BĂNG NHẠC.

Người ta cần ghi N bài hát, được mã số từ 1 đến N, vào một băng nhạc có

thời lượng tính theo phút đủ chứa toàn bộ các bài đã cho Với mỗi bài hát ta biếtthời lượng phát của bài đó Băng sẽ được lắp vào một máy phát nhạc đặt trongmột siêu thị Khách hàng muốn nghe bài hát bào chỉ việc nhấn phím ứng với bài

đó Để tìm và phát bài thứ i trên băng, máy xuất phát từ đầu cuộn băng, quay băng để bỏ đi i-1 bài ghi trước bài đó Thời gian quay băng bỏ qua mỗi bài và

thời gian phát bài đó được tính là như nhau Tính trung bình, các bài hát trongmột ngày được khách hàng lựa chọn với số lần (tần suất) như nhau Hãy tìmcách ghi các bài hát trên băng sao cho tổng thời gian quay băng trong mỗi ngày

là ít nhất

Trang 4

Dữ liệu: Vào từ file BANGNHAC.INP

- Dòng đầu ghi số N.

- Dòng tiếp theo ghi thời lượng các bài hát tương ứng mỗi số cách nhau 1 dấu cách.

Kết quả : Ghi ra tệp BANGNHAC.OUT

- Các dòng trên ghi 2 số j và d là mã số bài hát và thời gian tìm phát bài.

- Dòng cuối ghi tổng thời gian quay băng nếu mối bài phát một lần.

Bài 1 : phát 7 phútBài 2 : phát 2 phútBài 3 : phát 3 phút

BANGNHAC.OUT

Tìm và phát bài 2 cần 2 phút

Tìm và phát bài 3 cần 5 phút

Tìm và phát bài 1 cần 12 phút

Tổng thời gian phát mỗi bài 1 lần : 19 phút

Bài toán 4: CHỌN VIỆC.

Có N công việc cần thực hiện trên một máy tính, mỗi việc đòi hỏi 1 giời

thực hiện trên máy tính Với mỗi việc ta biết thời hạn phải nộp kết quả thực hiệnsau khi hoàn thành việc đó và tiền thưởng thu được nếu nộp kết quả trước hoặcđúng thời điểm quy định Chỉ có một máy tính trong tay, hãy lập lịch thực hiện

đủ N công việc trên máy tính sao cho tổng số tiền thưởng thu được là lớn nhất và

thời gian hoạt động của máy là nhỏ nhất Giả thiết rằng máy được khởi động vào

đầu ca, thời điểm t = 0 và chỉ tắt máy sau khi đã hoàn thành đủ N công việc.

Dữ liệu : Vào từ tệp VIEC.INP

- Dòng đầu ghi số N

- N dòng tiếp theo gồm 2 số t và th, t là thời hạn nộp, th là mức thưởng.

Kết quả : Ghi ra tệp VIEC.OUT

- i dòng đầu ghi thời gian việc i được làm.

- Dòng cuối ghi tổng tiền thưởng thu được

Trang 5

Ví dụ

Ý nghĩa : Cho biết 4 việc

- Việc thứ nhất nộp không muộn hơn 1 giờ thưởng 15 ngàn

- Việc thứ hai nộp không muộn hơn 3 giờ thưởng 10 ngàn

- Việc thứ ba nộp không muộn hơn 5 giờ thưởng 100 ngàn

- Việc thứ tư nộp không muộn hơn 1 giờ thưởng 27 ngàn

III ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU

1 Đối tượng nghiên cứu: Bài toán lập trình sắp xếp, phương pháp indexsort, phương pháp đệ quy

2 Phạm vi nghiên cứu: Trong các trường THCS, THPT Dành cho các họcsinh khá giỏi ở các phổ thông

3 Bố cục đề tài.

Phần A: Phần mở đầuPhần B: Nội dung

- Phân tích bài toán

+ Bài toán 1: sắp xếp cơ bản+ Bài toán 2: Dãy FAREY+ Bài toán 3: Băng nhạc+ Bài toán 4: Chọn việc

- Giải quyết bài toánPhần C: Kết luận

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

- Phương pháp sắp xếp, phương pháp đệ quy

- Kỷ thuật phân tích thuật toán

- Phát triển tư duy học sinh

- Tìm hiểu và phát triển kỹ năng

Trang 6

B GIẢI QUYẾT VẤN ĐỀ.

I PHÂN TÍCH BÀI TOÁN

Bài toán cơ bản: Cho dãy gồm N phần tử a 1 , a 2 , a n Sắp xếp dãy theo trật

tự không giảm (hoặc không giảm)

Phân tích: Dựa trên cơ sở sắp xếp đã học cơ bản ta dễ dàng giải được bài

toán này bằng cách tráo đổi vị trí các phần tử, tìm phần tử nhỏ nhấp đưa về đầu,loại bỏ phần tử đó khỏi dãy, tìm tiếp phần tử nhỏ nhất trong dãy còn lại đưa vềđầu, lặp lại công việc cho tới khi dãy chỉ còn 1 phần tử

Sử dụng phương pháp “chia để trị” Thực hiện bằng cách phân hoạch dãythành 2 phần, sau đó sắp xếp trên từng phần riêng biệt lấy vị trí giữa làm khóa

để chia, ta chọn được một nửa là các phần tử nhỏ hơn khóa, nửa còn lại là cácphần tử lớn hơn khóa Thực hiện lặp lại như vậy trên các dãy con

Để sử dụng thuật toán quicksort ở đây ta dùng đệ quy để thực hiện sắpxếp Đối với ngôn ngữ Pascal thì Free Pascal đã làm tăng khả năng rất nhiều

Thuật toán: Ta sử dụng thuật toán tráo đổi và Quicksort; so sánh sắp xếp

trên khoá và sắp xếp theo theo chỉ mục

- Mảng a lưu tất cả các phần tử từ a 1 đến a n

- Mảng b lưu chỉ mục của các phần tử của mảng a.

- Biến tg là biến trung gian để hoán đổi giá trị cho 2 phần tử a i và a j

- Biến m để xác định phần tử ở giữa của mảng a.

- Biến d, c là đầu và cuối của dãy con được chọn để sắp xếp.

- Thủ tục Procedure sapxep dùng để sắp xếp bằng thuật toán tráo đổi cơ bản

- Thủ tục Procedure quicksort dùng để xếp nhanh.

* Ta xét thuật toán tráo đổi cơ bản:

Var a:array[1 1000] of integer;

End;

End;

Trang 7

Thuật toán sắp xếp bằng Quicksort:

Var a:array[1 1000] of integer;

While a[i]<m do inc(i);

While a[j]>m do dec(j);

If i<=j then

Begin Tg:=a[i];A[i]:=a[j];A[j]:=tg;

Sau khi giới thiệu thuật toán Quicksort học sinh đã năm được cách thức

sử dụng thuật toán Ta hướng tới việc dùng chỉ mục để sắp xếp mảng ở đây ta

sử dụng mảng b để lưu vị trí (chỉ số) của phần tử trong mảng a Ta tiến hành càiđặt thuật toán như sau:

Trang 8

Begin

I:=d; j:=c; M:= a[b[(i+j) div 2]];

While i<=j do

Begin

While a[b[i]]<m do inc(i);

While a[b[j]]>m do dec(j);

If i<=j then

Begin Tg:=b[i];b[i]:=b[j];b[j]:=tg;

Toàn văn chương trình sắp xếp chỉ mục bằng Quicksort

Var a:array[1 1000] of integer;

Trang 9

While a[b[i]]<m do inc(i);

While a[b[j]]>m do dec(j);

If i<=j then

Begin Tg:=b[i];b[i]:=b[j];b[j]:=tg;

nó chỉ thay đổi về mặt chỉ số của các bản ghi bằng một mảng phụ b, do đó khi tathay đổi kích thước của các mẫu tin thì chỉ số của các phần tử trong mảng vẫnkhông bị thay đổi (không tăng)

- Chúng ta hoàn toàn có thể áp dụng việc sắp xếp này cho mảng có cácphần tử phức hợp Ta xét các bài toán tiếp theo để là rõ thêm việc sắp xếp chỉmục và ứng dụng của nó

II GIẢI QUYẾT CÁC BÀI TOÁN

Bài toán 2: Dãy FAREY.

Trang 10

Ứng với số tự nhiên N>0, ta có dãy Farey gồm các phân số tối giản có giá trị lớn hơn 0 và nhỏ hơn 1 theo thứ tự tăng dần.

Ví dụ: Với N=4 ta có dãy phân số 1 1 1 2 3; ; ; ;

4 3 2 3 4

Yêu cầu: Cho số tự nhiên N (0<N<100) Hãy tìm dãy Farey tương ứng.

Dữ liệu: Vào từ file văn bản FAREY.INP chứa duy nhất số N.

Kết quả: Ghi ra File văn bản FAREY.OUT gồm:

Dòng đầu tiên ghi các tử số của dãy số.

Dòng tiếp theo ghi các mẫu số của dãy số.

Ví d :ụ:

5 4 3 5 2 5 3 4 5

Phân tích: Khi định hình nhìn vào bài toán, mới nhìn ta thực sự thấy bài

toán này chưa thể dùng 1 mảng 1 chiều để sắp xếp nó Nhưng ta hãy nghiên cứu

kỷ một chút trong bài toán và có thể rút ra nhận xét quan trọng cho bài toán từ

đó chúng ta có thể nhìn thấy bài toán trở nên quen thuộc hơn

- Xét một phần tử của dãy ta thấy phần tử của dãy gồm phức hợp 3 giá trị:

tử số, mẫu số và thương của tử và mẫu Vậy ta có thể tổ chức kiểu bản ghi đểcho phần tử đó trên cơ sở này ta có thể tạo mảng 1 chiều kiểu bản ghi để lưu cácgiá trị, sau đó sắp xếp mảng này theo trật tự không giảm

- Các tử số của phần tử i sẽ nhận giá trị từ 1 đến N-1; Các giá trị của mẫu

sẽ nhận các giá trị từ i+1 đến N (vì tử số phải nhỏ hơn mẫu số).

- Các phân số có thể chưa tối giản, ta phải thực hiện tối giản cho phân số

ở mỗi phần tử

- Sau khi tối giản có thể một số phần tử trong mảng sẽ bị trùng nhau Tathực hiện lấy 1 phần tử trong các phần tử trùng, các phần tử còn lại ta sẽ loại bỏ.Kết quả thu được sẽ là dãy Farey

Trang 11

- Hàm Function UCLN(a,b:word); để tìm UCLN của tử số và mẫu số của mỗi

phần tử i trong mảng a.

- Thủ tục Procedure Toigian; dùng để tối giản các phân số, trong đó cần sử

dụng tới hàm tìm UCLN để chia cả tử và mẫu cho UCLN thu được phân số tối giản.

- Thủ tục Procedure Quicksort; có nhiệm vụ sắp xếp mảng bằng chỉ mục theo

giá trị thương số của các phần tử trong a.

- Thủ tục Procedure Ghikq; còn có nhiệm vụ loại bỏ các phần tử trùng nhau

Trang 12

A[i].t:=a[i].t div UCLN(a[i].t,a[i].m);

A[i].m:=a[i].m div UCLN(a[i].t,a[i].m);

While a[b[i]].th<m do inc(i);

While a[b[j]].th>m do dec(j);

If i<=j then

Begin Tg:=b[i];b[i]:=b[j];b[j]:=tg;

Trang 13

- Việc sắp xếp bài toán mang lại phương án tìm ra kết quả dễ dàng

Bài toán 2: BĂNG NHẠC.

Người ta cần ghi N bài hát, được mã số từ 1 đến N, vào một băng nhạc có

thời lượng tính theo phút đủ chứa toàn bộ các bài đã cho Với mỗi bài hát ta biếtthời lượng phát của bài đó Băng sẽ được lắp vào một máy phát nhạc đặt trongmột siêu thị Khách hàng muốn nghe bài hát bào chỉ việc nhấn phím ứng với bài

đó Để tìm và phát bài thứ i trên băng, máy xuất phát từ đầu cuộn băng, quay băng để bỏ đi i-1 bài ghi trước bài đó Thời gian quay băng bỏ qua mỗi bài và

thời gian phát bài đó được tính là như nhau Tính trung bình, các bài hát trongmột ngày được khách hàng lựa chọn với số lần như nhau Hãy tìm cách ghi cácbài hát trên băng sao cho tổng thời gian quay băng trong mỗi ngày là ít nhất

Dữ liệu : Vào từ file BANGNHAC.INP

- Dòng đầu ghi số N.

- Dòng tiếp theo ghi thời lượng các bài hát tương ứng mỗi số cách nhau 1 dấu cách.

Kết quả : Ghi ra tệp BANGNHAC.OUT

- Các dòng trên ghi 2 số j và d là mã số bài hát và thời gian tìm phát bài.

- Dòng cuối ghi tổng thời gian quay băng nếu mối bài phát một lần.

Ví dụ :

Trang 14

BANGNHAC.INP BANGNHAC.OUT 3

1 12 19

BANGNHAC.INP : 3 bài

Bài 1 : phát 7 phút Bài 2 : phát 2 phút Bài 3 : phát 3 phút

BANGNHAC.OUT

Tìm và phát bài 2 cần 2 phút

Tìm và phát bài 3 cần 5 phút

Tìm và phát bài 1 cần 12 phút

Tổng thời gian phát mỗi bài 1 lần : 19 phút

Phân tích: V i b i toán n y, ta d d ng nh n th y m t i u ới bài toán này, ta dễ dàng nhận thấy một điều để xếp à các số cách nhau 1 dấu cách à các số cách nhau 1 dấu cách ễ dàng nhận thấy một điều để xếp à các số cách nhau 1 dấu cách ận thấy một điều để xếp ấu cách ột điều để xếp đã sắp xếp trên dòng và các số cách nhau 1 dấu cách ều để xếp đã sắp xếp trên dòng và các số cách nhau 1 dấu cáchể xếp ếp trên dòng và các số cách nhau 1 dấu cách x pcác b i hát v o trong b ng nh c ta có nhi u các x p Gi s ta có ba b i hátà các số cách nhau 1 dấu cách à các số cách nhau 1 dấu cách ăng nhạc ta có nhiều các xếp Giả sử ta có ba bài hát ạc ta có nhiều các xếp Giả sử ta có ba bài hát ều để xếp ếp trên dòng và các số cách nhau 1 dấu cách ả sử ta có ba bài hát ử ta có ba bài hát à các số cách nhau 1 dấu cách

v i s phút l n lới bài toán này, ta dễ dàng nhận thấy một điều để xếp ố cách nhau 1 dấu cách ần lượt như sau: ượt như sau:t nh sau:ư

Ta xét v i tình hu ng ghi b ng à các số cách nhau 1 dấu cách ố cách nhau 1 dấu cách ăng nhạc ta có nhiều các xếp Giả sử ta có ba bài hát đã sắp xếp trên dòng và các số cách nhau 1 dấu cáchể xếp rút ra k t lu n c n thi t.ếp trên dòng và các số cách nhau 1 dấu cách ận thấy một điều để xếp ần lượt như sau: ếp trên dòng và các số cách nhau 1 dấu cách

Trật tự ghi trên băng

(x, y, z) Thời gian phát T(x) +t(y)+ t(z): thời gian tìm và phát bài i

- Thủ tục Procedure Init; dùng để đọc dữ liệu và khởi tạo chỉ mục.

- Thủ tục Procedure Quicksort sắp xếp dữ liệu mảng theo chỉ mục.

- Thủ tục Procedure ghikq; Thực hiện tính thời gian tổng và ghi kết quả Toàn văn chương trình:

Var a,b:array[1 200] of integer;

Trang 15

While a[b[i]]<m do inc(i);

While a[b[j]]>m do dec(j);

If i<=j then

Begin Tg:=b[i];b[i]:=b[j];b[j]:=tg;

Inc(i);dec(j);

End;

Trang 16

vì vậy trong cùng một phương pháp mà xử lý được nhiều công việc nên ta dùngphương pháp “tham lam” Ta có thể xét thêm một bài toán nữa để thấy rõ cáchthức chọn lựa và tư duy.

Bài toán 4: CHỌN VIỆC.

Có N công việc cần thực hiện trên một máy tính, mỗi việc đòi hỏi 1 giờithực hiện trên máy tính Với mỗi việc ta biết thời hạn phải nộp kết quả thực hiệnsau khi hoàn thành việc đó và tiền thưởng thu được nếu nộp kết quả trước hoặcđúng thời điểm quy định Chỉ có một máy tính trong tay, hãy lập lịch thực hiện

đủ N công việc trên máy tính sao cho tổng số tiền thưởng thu được là lớn nhất

và thời gian hoạt động của máy là nhỏ nhất Giả thiết rằng máy được khởi độngvào đầu ca, thời điểm t=0 và chỉ tắt máy sau khi đã hoàn thành đủ N công việc

Dữ liệu : Vào từ tệp VIEC.INP

- Dòng đầu ghi số N

- N dòng tiếp theo gồm 2 số t và th, t là thời hạn nộp, th là mức thưởng.

Kết quả : Ghi ra tệp VIEC.OUT

- i dòng đầu ghi thời gian việc i được làm.

- Dòng cuối ghi tổng tiền thưởng thu được.

Ví dụ

Ý nghĩa : Cho biết 4 việc

- Việc thứ nhất nộp không muộn hơn 1 giờ thưởng 15 ngàn

- Việc thứ hai nộp không muộn hơn 3 giờ thưởng 10 ngàn

- Việc thứ ba nộp không muộn hơn 5 giờ thưởng 100 ngàn

- Việc thứ tư nộp không muộn hơn 1 giờ thưởng 27 ngàn

Ngày đăng: 19/07/2014, 17:02

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