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

Sáng kiến kinh nghiệm hướng dẫn học sinh giải bài toán sắp xếp tin học 8

31 366 0

Đ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 31
Dung lượng 3,05 MB

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

Nội dung

Trong khi đó, với học sinh bậc THCS, việc lập trình giải quyết các bài toán, đặc biệt là các bài toán sắp xếp còn rất lúng túng, phương pháp còn nghèo nàn, thuật toán còn đơn điệu, điều

Trang 1

tự, một hệ thống nhất định.

Khi xây dựng một hệ thống quản lý thông tin trên máy tính, bên cạnh các thuật toán tìm kiếm, các thuật toán sắp xếp dữ liệu cũng là một trong các chủ đề được quan tâm hàng đầu

Trong khi đó, với học sinh bậc THCS, việc lập trình giải quyết các bài toán, đặc biệt là các bài toán sắp xếp còn rất lúng túng, phương pháp còn nghèo nàn, thuật toán còn đơn điệu, điều này dẫn đến việc giải quyết các bài toán sắp xếp còn rất nhiều hạn chế

Trang 2

Xuất phát từ thực trạng của vấn đề trên, sau một thời gian dài tìm hiểu, NguyÔn ThÞ Lannghiên cứu tôi xây dựng chuyên đề: “Hướng dẫn học sinh giải bài toán sắp xếp”

với mong muốn mang lại cho các em một cái nhìn tổng thể về bài toán sắp xếp nói chung, các thuật toán sắp xếp nói riêng, từ đó có thể tiếp cận được với các bài toán quản lý thông tin sau này

2 Đối tượng nghiên cứu và phạm vi nghiên cứu

a) Đối tượng nghiên cứu

- Học sinh lớp 8 trường THCS Trần Cao

b) Phạm vi nghiên cứu:

Tìm hiểu và vận dụng các lý thuyết cơ bản về một số phương pháp sắp xếp như: phương pháp chọn trực tiếp (Selection Sort), chèn trực tiếp (Insertion Sort), sắp xếp nổi bọt (Bubble Sort), sắp xếp kiểu vun đống (Heap Sort), sắp xếp nhanh (Quick Sort), sắp xếp với độ dài bước giảm dần (Shell Sort),…

Áp dụng đối với:

- Phần: Câu lệnh lặp (xác định); Lặp với số lần chưa biết trước; Làm việc với dãy số; Kiểu dữ liệu mảng

- Bộ môn Tin học lớp 8

II PHƯƠNG PHÁP TIẾN HÀNH

Chuyên đề chủ yếu sử dụng các phương pháp nghiên cứu sau:

- Phương pháp nghiên cứu lí luận: Nghiên cứu các vấn đề mang tính lí luận có liên quan đến đề tài (Muốn học tốt lập trình phải có thuật toán tốt, muốn

có thuật toán tốt đòi hỏi học sinh phải tiếp cận với nhiều dạng bài toán, nhiều cách giải quyết bài toán, )

- Phương pháp điều tra: Với phương pháp này tôi tiến hành điều tra học sinh bằng các phiếu trắc nghiệm (chỉ rõ tính đúng, sai của thuật toán, dự đoán kết quả của thuật toán), các bài thực hành trên phòng máy để nắm chắc trình độ nhận thức, kỹ năng thực hành của từng đối tượng học sinh Trên cơ sở đó làm nền tảng đối chiếu kết quả trước và sau khi thực hiện chuyên đề

Trang 3

- Phương pháp phỏng vấn: Thông qua việc trao đổi trực tiếp thẳng thắn NguyÔn ThÞ Lan

với học sinh về các biện pháp giúp các em thực hành tốt bộ môn, tôi đã nhận được những mong muốn, những băn khoăn, , và cả những ý kiến đóng góp của các em Cũng từ đây tôi hình thành nên các giải pháp cho chuyên đề

- Phương pháp tạo tình huống: Thông qua các bài tập tạo tình huống, các bài tập có tính chất minh chứng tôi dần dần dẫn các em vào vấn đề và hướng dẫn các em tìm cách giải quyết

- Phương pháp quan sát, đánh giá, tổng hợp: Thông qua quá trình quan sát học sinh thực hành, đánh giá, tổng hợp kết quả thực hành giúp tôi có giải pháp

để thực hiện và điều chỉnh chuyên đề của mình cho phù hợp và có hiệu quả nhất

Phần II NỘI DUNG

I MỤC TIÊU CỦA ĐỀ TÀI

- Trình bày được ý tưởng, thuật giải (thuật toán) của một số phương pháp sắp xếp thông dụng

- Giới thiệu được Code diễn đạt thuật giải

- Mô tả được thuật toán của phương pháp bằng ví dụ cụ thể

II CÁC GIẢI PHÁP THỰC HIỆN

Một số thuật toán sắp xếp:

1 Sắp xếp chọn trực tiếp (Selection Sort)

2 Sắp xếp chèn trực tiếp (Insertion Sort)

3 Sắp xếp nổi bọt (Bubble Sort)

4 Sắp xếp phân hoạch (Quick Sort)

5 Sắp xếp với bước giảm dần (Shell Sort)

6 Sắp xếp vun đống (Heap Sort)

1 Sắp xếp chọn trực tiếp (Selection Sort)

 Ý tưởng:

Trang 4

- Chọn phần tử nhỏ nhất trong n phần tử đầu, đưa phần tử này về vị trí đầu NguyÔn ThÞ Lan

của dãy Tiếp tục quá trình với n-1 phần tử còn lại và bắt đầu từ vị trí thứ 2 Lặp lại quá trình trên cho dãy gồm n-1 phần tử còn lại

- Thuật toán thực hiện n-1 lần để lần lượt đưa phần tử nhỏ nhất trong dãy

a- mảng đã được sắp xếp tăng dầnBước 1: i = 0

Bước 2: Tìm phần tử a[min] nhỏ nhất trong dãy hiện hành từ a[i] đến a[n-1]Bước 3: Hoán vị a[i] với a[min]

Bước 4:

• nếu i<n-1 thì i = i+1 và lặp lại bước 2

• ngược lại thì n-1 phần tử đã được sắp xếp => Dừng thuật toán

 Cài đặt (code):

Type mang:array[1 20] of integer;

Function SelectionSort(a:mang, n:integer): integer;

Var i, j, vtmin, tam: integer;

Begin

Writeln(‘ -SAP XEP CHON TRUC TIEP -’);

For i≔1 to n-1 doBegin

Vtmin≔i;

Trang 5

NguyÔn ThÞ LanFor j≔i+1 to n do

If a[vtmin]>a[j] then vtmin≔j;

{Hoan doi vi tri cua a[i] va a[vtmin]}

Tam≔a[i];

A[i]≔a[vtmin];

A[vtmin]≔tam;

End;

Writeln(‘Day so sau khi sap xep la:’);

For i≔1 to n do Write(a[i],’ ’);

Yêu cầu: Sắp xếp dãy số tăng dần

Mô tả các bước chạy khi thực hiện thuật toán với dãy trên:

i=0 => j = 1 ÷ 7 và vtmin = 4 => Hoán đổi a[0] và a[4]

Trang 6

NguyÔn ThÞ Lan

Trang 8

Nguyên tắc sắp xếp như sau: đoạn gồm phần tử aNguyÔn ThÞ Lan

Bước 1: i=1 //giả sử a[0] đã được sắp xếp

Bước 2: x=a[i], tìm vị trí pos thích hợp trong đoạn từ a[0] đến a[i-1] để chèn a[i] vào

Bước 3: đổi chỗ các phần tử từ a[pos] đến a[i-1] sang phải một vị trí để được vị trí chèn a[i] vào

Bước 4: chèn a[i] vào vị trí pos tìm được bằng cách gán a[pos]=a[i]

Bước 5: i=i+1

Nếu i<n => lặp lại bước 2

Ngược lại => Dừng thuật toán

 Cài đặt:

…Type mang:array[1 20] of integer;

Function InsertionSort(a:mang, n:integer): integer;

Var i, j, pos, x: integer;

Begin

Writeln(‘ -SAP XEP CHEN TRUC TIEP -’);

For i≔2 to n do Begin

X≔a[i]; {Luu gia tri cua phan tu a[i] de tranh khi de khi roi cho}

Trang 9

Pos≔i-1;NguyÔn ThÞ Lan

While (pos >= 1) and (a[pos]>x) do Begin

Writeln(‘Day so sau khi sap xep la:’);

For i≔1 to n do Write(a[i],’ ’);

Trang 10

NguyÔn ThÞ Lan

Trang 11

khi dãy không còn phần tử nào nữa

 Thuật toán:

Bước 1: i = 0

Bước 2: j = n-1 //duyệt từ cuối đến ptử thứ i

Trong khi j>i thực hiện

nếu a[j] < a[j-1] thì hoán đổi hai phần tửj=j-1

Bước 3: i=i+1

Nếu i>=n-1 => Hết dãy và dừng thuật toán

Trang 12

NguyÔn ThÞ Lan

Ngược lại lặp lại bước 2

 Cài đặt:

Type mang = array[1 20] of integer;

Function BubbleSort(a:mang, n:integer): integer;

Trang 13

NguyÔn ThÞ Lan

Trang 14

NguyÔn ThÞ Lan

Trang 15

NguyÔn ThÞ Lan

4 Sắp xếp dựa trên phân hoạch – Quick Sort

Ý tưởng:

+ Phân hoạch dãy a1 a2 …an thành 3 thành phần :

- Dãy con 1 : Gồm các phần tử a1 …ai có giá trị không lớn hơn x.(<x)

- Dãy con 2 : Gồm các phần tử aj …an có giá trị không nhỏ hơn x.(>x)

- Dãy con 3: ai, aj=x

+ Với x là giá trị của một phần tử tuỷ ý trong dãy ban đầu

+ Sau khi phân hoạch, dãy ban đầu được chia làm 3 phần :

ak < x, vớI k=1 i

ak = x, vớI k=i j

ak > x, vớI k=j N

 Thuật toán:

Giải thuật để sắp xếp một dãy al…ar

Bước 1 : Phân hoạch dẫy al…ar thành các dãy con :

 Dãy con 1 : al…aj < x

 Dãy con 2 : aj+1…ai-1 = x

Trang 16

 Dãy con 3 : ai…ar > x NguyÔn ThÞ Lan

Bước 2 :

 Nếu (l<j) Phân hoạch dãy al…aj

 Nếu (i<r) Phân hoạch dãy ai…ar

Giải thuật để phân hoạch một dãy al…ar thành 2 dãy con:

Bước 1 : Chọn tuỳ ý a[k] làm giá trị mốc l<=k<=r

X = a[k]; i=l, j=r Bước 2 : Phát hiện và hiệu chỉnh cặp phần tử a[i], a[j] nằm sai chỗ:

Bước 2a : Trong khi a[i] <x i++;

Bước 2b : Trong khi a[j]>x j ;

Bước 2c : Nếu i<j Hoán vị (a[i],a[j])

Type mang = array[1 20] of integer;

{ - Ham hoan vi gia tri hai bien -}

Trang 17

Y≔tam; NguyÔn ThÞ Lan

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

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

Trang 18

NguyÔn ThÞ Lan

Mô tả các bước của thuật toán:

• Phân hoạch đoạn l=1; r=8; x=a[4]=5

• Phân hoạch đoạn l=1; r=3; x=a[2]=2

• Phân hoạch đoạn l=5; r=8; x=a[6]=6

• Phân hoạch đoạn l=7; r=8; x=a[7]=12

Trang 19

NguyÔn ThÞ Lan

Dừng

5 Sắp xếp với bước giảm dần (Shell Sort)

 Ý tưởng:

Dựa trên ý tưởng sắp xếp theo phương pháp chèn

- Phân chia dãy ban đầu thành những dãy con các phần tử ở cách nhau h vị trí

- Dãy ban đầu : a1 a2 … an được xem như sự xen kẽ các dãy con sau :

Bước 1 : Chọn k khoảng cách h[1], h[2],…,h[k] và i=1

Bước 2 : Phân chia dãy ban đầu thành các dãy con cách nhau h[i] khoảng cách Sắp xếp từng dãy con bằng phương pháp chèn trực tiếp

Procedure ShellSort (a: mang, n:integer, h:mang, k: integer);

Var step, i, j, x, len: integer;

Trang 20

Begin NguyÔn ThÞ Lan

for step:=0 to k-1 doBegin

Len:=h[step];

for i:=len to n-1 doBegin

Trang 21

ai <= a2i.NguyÔn ThÞ Lan

ai <= a2i+1{(ai, a2i), (ai, a2i+1) là các cặp phần tử liên đới}

Giải thuật Heapsort trải qua 2 giai đoạn:

- Giai đoạn 1:Hiệu chỉnh dãy số ban đầu thành heap;

- Giai đoạn 2:Sắp xếp dãy số dựa trên heap:

Bước 1: Ðưa phần tử nhỏ nhất về vị trí đúng ở cuối dãy

Hoán vị(a1,aN);

Bước 2:Loại bỏ phần tử nhỏ nhất ra khỏi dãy:

N = N-1;

Trang 22

NguyÔn ThÞ LanHiệu chỉnh phần còn lại của dãy từ a1, a2,…, an thành một

heap

Bước 3: Nếu N > 1 (heap còn phần tử ): lặp lại bước 1

Ngược lại: Dừng

Trang 23

NguyÔn ThÞ Lan

Trang 24

Procedure Shift(a: mang; l,r: integer);

Var x, i, j, cont: integer;

If (j <r) then {nếu có đủ 2 phần tử liên đới}

If (a[j]>a[j+1) then {xác định phần tử liên đới nhỏ nhất a[j]}

J:=j+1;

{thỏa quan hệ liên đới ,dừng hiệu chỉnh}

if (a[j]>x) then

cont: = 0

Trang 25

NguyÔn ThÞ Lanelse

Thủ tục hiệu chỉnh dãy ban đầu a[1], a[2],…, a[n] thành Heap:

Procedure CreateHeap(a:mang, n:integer);

Var i:integer;

Begin

i := n div 2;

while (i > 0) doBegin

Dec(i);

Shift(a,i,n-1);

End;

• Sắp xếp dãy a[1], a[2], …,a[n] bằng Heap

void Heapsort(float a[ ],int N)

Var r: integer;

Begin

r := n-1;

Trang 26

while (r > 0) doNguyÔn ThÞ Lan

Phần III KẾT LUẬN

I NHẬN ĐỊNH CHUNG

Sau gần 2 năm học thực hiện chuyên đề (Năm học 2013 – 2014 và học kỳ

I năm học 2013 – 2014), kinh nghiệm Hướng dẫn học sinh giải bài toán sắp xếp

đã giúp tôi có được những kết quả đáng ghi nhận như:

- Đại đa số học sinh biết cách thực hiện và thực hiện được bài toán sắp xếp dữ liệu trên kiểu dữ liệu mảng

- Học sinh không còn sợ bài toán sắp xếp nữa, nhiều học sinh còn mở

rộng áp dụng sắp xếp Họ và tên theo nguyên tắc sắp xếp a, b, c,… và trong một

số bài toán quản lý thông tin khác

- Đặc biệt các em nhận thấy rõ một chân lí: Máy tính là một công cụ lao động tuyệt với nhưng tất cả những khả năng mà máy tính có được đều do con người chỉ dẫn cho nó thông qua các câu lệnh Và bây giờ chính các em là người

Trang 27

NguyÔn ThÞ Lan

viết ra các câu lệnh đó Đây là thành công lớn nhất mà tôi thu được vì đó chính

là niềm say mê của các em đối với môn học

Sau một thời gian thực hiện chuyên đề kiến thức và kỹ năng thực hành của học sinh tiến bộ lên rõ rệt, điều này được thể hiện rõ nhất trong các bài kiểm tra (lý thuyết và thực hành), kết quả kiểm tra ngày một nâng lên

Kết quả cụ thể như sau:

Kinh nghiệm này sẽ được tôi tiếp tục áp dụng và ngày một hoàn thiện hơn nữa trong năm học 2014 – 2015 và những năm học tiếp theo

II KINH NGHIỆM ÁP DỤNG GIẢI PHÁP

Để chuyên đề “Hướng dẫn học sinh giải bài toán sắp xếp - Tin học 8”

được thực hiện thực sự hiệu quả, giáo viên và học sinh cần thực hiện tốt một số nội dung sau:

1 Đối với giáo viên:

- Nắm chắc kiến thức về bài toán sắp xếp, ý tưởng, thuật toán, độ phức tạp

của các phương pháp sắp xếp

Trang 28

- Nắm chắc cơ sở vật chất phòng máy vi tính (gồm máy tính và các thiết NguyÔn ThÞ Lan

bị khác) để có kế hoạch tham mưu với Ban giám hiệu nhà trường cùng các tổ chức khác mua sắm tu bổ để đảm bảo điều kiện thực hành cho học sinh

- Có kế hoạch thực hành cụ thể chi tiết ngay từ đầu năm học Đảm bào 100% các tiết thực hành các em được thực hiện trên máy tính

- Nắm chắc chương trình, chuẩn kiến thức kỹ năng của từng phần học, từng bài và từng tiết (đặc biệt là tiết thực hành)

- Chuẩn bị chu đáo hệ thống bài tập thực hành, bài kiểm tra thực hành để đánh giá chất lượng thực hành bộ môn của học sinh Hệ thống các câu hỏi bài tập này ngoài việc đảm bảo chính xác về mặt nội dung kiến thức còn phải có tính liên hệ, ứng dụng thực tiễn để gây hứng thú cho học sinh

- Chuẩn bị sổ theo dõi kết quả thực hành và thực hiện đánh giá kết quả thực hành thường xuyên, có hiệu quả

- Tận tâm hướng dẫn học sinh thực hành, quan tâm động viên các em để học sinh tiến bộ

2 Đối với học sinh:

III ĐIỀU KIỆN THỰC HIỆN GIẢI PHÁP

Trang 29

- Chuyên đề này được thực hiện đối với môn tin học lớp 8 (phần lập trình NguyÔn ThÞ Lan

cơ bản) trong phần: Câu lệnh lặp (xác định); Lặp với số lần chưa biết trước; Làm việc với dãy số và Kiểu dữ liệu mảng

- Giáo viên và hoc sinh đều có sự chuẩn bị chu đáo cho tiết học, phần học

IV KIẾN NGHỊ

Đề nâng cao chất lượng dạy và học bộ môn tin học nói chung và nâng cao chất lượng giờ thực hành môn tin học 8 nói riêng, với vai trò là người phụ trách phòng vi tính, người trực tiếp giảng dạy bộ môn tin học trong nhà trường, tôi có một số kiến nghị như sau:

* Với Nhà trường:

- Có kế hoạch tu bổ, mua sắm máy tính, trang thiết bị để đảm bảo số lượng máy tính có chất lượng cho học sinh thực hành (đảm bảo 1 – 2 hs/ 1 máy tính)

- Tăng cường thêm sách tham khảo bộ môn Tin học, đặc biệt là sách tham khảo về phần lập trình

- Có kế hoạch và tổ chức các cuộc thi như: Tin học trẻ (cấp trường) hay Thi viết phần mềm sáng tạo, … để tạo ra một sân chơi bổ ích cho các em, giúp các em có động lực học tập, sáng tạo Đặc biệt các cuộc thi này sẽ giúp các em nhận ra rằng Tin học là môn khoa học có nhiều ứng dụng to lớn trong đời sống

xã hội và chiếc máy tính là một công cụ lao động tuyệt vời nhưng tất cả những

khả năng mà máy tính có được đều do con người ban cho nó Tin học nói chung

và máy tính điện tử nói riêng hiện có những việc chưa thể làm được nhưng một

ngày không xa nữa chính các em – thế hệ trẻ tương lai của đất nước – sẽ là

những người giải mã được điều đó, các em sẽ biến điều chưa thể thành có thể

bằng quyết tâm học tập của mình

* Với Phòng giáo dục đào tạo:

Trang 30

- Tin học là môn học mà đòi hỏi giáo viên giảng dạy phải cập nhật kiến NguyÔn ThÞ Lan

thức mới liên tục Do đó viêc tự tích lũy kinh nghiệm cho bản thân tôi vẫn thực hiện thường xuyên, tuy nhiên cơ hội học hỏi kinh nghiệm của các đồng nghiệp cùng chuyên ngành khác là không có nhiều Chính vì vậy bản thân tôi rất mong muốn nếu có thể hàng năm Phòng giáo dục nên tổ chức các chuyên đề liên quan đến bộ môn Tin học để những giáo viên Tin như chúng tôi có cơ hội mở rộng kiến thức

- Bên cạnh việc tiếp tục tổ chức cuộc thi Tin học trẻ như hàng năm vẫn thực hiện, tôi thấy nên bổ sung thêm một nội dung bắt buộc là thi viết phần mềm sáng tạo để động viên khích lệ học sinh cũng là để học sinh huyện Phù Cừ phát huy khả năng lập trình sáng tạo ngang tầm với các huyện khác trong tỉnh

KẾT LUẬN CHUNG:

Trên đây là nội dung chuyên đề Hướng dẫn học sinh giải bài toán sắp

xếp- Tin học 8 mà tôi đã nghiên cứu và áp dụng Sau một thời gian cũng khá dài

để thực hiện bản thân tôi cũng gặt hái được một số kết quả đáng khích lệ, chính

vì vậy xin được trao đổi cùng đồng nghiệp Rất mong được sự quan tâm, đóng góp ý kiến tận tình của đồng nghiệp, đặc biệt là đồng nghiệp cùng chuyên ngành Tin học để giải pháp này của tôi ngày được hoàn thiện hơn nữa Để qua những thuật toán đơn giản mà hiệu quả này sẽ chắp cánh ước mơ sáng tạo của các em bay cao bay xa hơn nữa, để một tương lai không xa kia các em sẽ biến những

điều chưa thể thành có thể.

Xin trân trọng cảm ơn!

LỜI CAM ĐOAN:

Tôi xin cam đoan sáng kiến kinh nghiệm này là do tôi đúc rút được trong quá trình trực tiếp giảng dạy, không sao chép nội dung của người khác.

Trần Cao, ngày 24 tháng 3 năm 2015

Trang 31

NguyÔn ThÞ Lan Người viết

Nguyễn Thị Lan

Ngày đăng: 18/03/2016, 11:27

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