Mở rộng một số bài toán cơ sở trong Tin Học

I. ĐẶT VẤN ĐỀ

Việc nắm vững giả thiết, kết luận và cách giải một bài toán cơ sở rất quan trọng trong việc nhận dạng, mở rộng phạm vi bài toán từ đó học sinh xác định, xây dựng được cách giải các bài toán cùng dạng hoặc mở rộng. Cũng từ đó khuyến khích khả năng tự học, tự nghiên cứu của học sinh.

Trong tin học việc xác định chính xác bài toán( Input, Output) và thuật toán giải một bài toán cơ sở nào đó cũng giúp học sinh trong việc nhận dạng, mở rộng một số bài toán và xác định được hoặc xây dựng được thuật toán giải các bài toán đó.

Thực tế, đa phần các em học sinh khi học chương trình tin học lớp 11 đều rất bỡ ngỡ và yếu khi xây dựng thuật toán cho các bài toán. chính vì vậy, ở SKKN này tôi xin trích giới thiệu các bài toán mở rộng phạm vi của một số bài toán tiêu biểu trong sách giáo khoa, rất phù hợp với đa số các em có lực học trung bình và khá nhằm mục đích giúp các em nắm vững được kiến thức trong Sách Giáo Khoa và xử lý tốt các bài toán trong cuốn “Bài tập Tin học lớp 11”.

 

doc14 trang | Chia sẻ: myhoa95 | Lượt xem: 1641 | Lượt tải: 2Download
Bạn đang xem tài liệu "Mở rộng một số bài toán cơ sở trong Tin Học", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓA
TRƯỜNG THPT BỈM SƠN
 SÁNG KIẾN KINH NGHIỆM
MỞ RỘNG MỘT SỐ BÀI TOÁN CƠ SỞ
TRONG TIN HỌC
Người thực hiện: Đặng Văn Mạnh
Chức vụ: Giáo viên
Đơn vị công tác: Trường THPT Bỉm Sơn
SKKN thuộc lĩnh vực: Tin học
THANH HÓA NĂM 2013
I. ĐẶT VẤN ĐỀ
Việc nắm vững giả thiết, kết luận và cách giải một bài toán cơ sở rất quan trọng trong việc nhận dạng, mở rộng phạm vi bài toán từ đó học sinh xác định, xây dựng được cách giải các bài toán cùng dạng hoặc mở rộng. Cũng từ đó khuyến khích khả năng tự học, tự nghiên cứu của học sinh.
Trong tin học việc xác định chính xác bài toán( Input, Output) và thuật toán giải một bài toán cơ sở nào đó cũng giúp học sinh trong việc nhận dạng, mở rộng một số bài toán và xác định được hoặc xây dựng được thuật toán giải các bài toán đó.
Thực tế, đa phần các em học sinh khi học chương trình tin học lớp 11 đều rất bỡ ngỡ và yếu khi xây dựng thuật toán cho các bài toán. chính vì vậy, ở SKKN này tôi xin trích giới thiệu các bài toán mở rộng phạm vi của một số bài toán tiêu biểu trong sách giáo khoa, rất phù hợp với đa số các em có lực học trung bình và khá nhằm mục đích giúp các em nắm vững được kiến thức trong Sách Giáo Khoa và xử lý tốt các bài toán trong cuốn “Bài tập Tin học lớp 11”. 
II. NỘI DUNG.
Bài toán 1. Xây dựng thuật toán kiểm tra tính nguyên tố của số nguyên dương N.
Xác định bài toán.
+/ Input: Số nguyên dương N
+/ Output: Thông báo “ N là số nguyên tố” hoặc “N không là số nguyên tố”
Thuật toán:
B1. Nhập số nguyên dương N
B2. Nếu tồn tại ước của N trong phạm vi [2, N div 2] thì thông báo”N không là số nguyên tố" ngược lại thông báo “ N là số nguyên tố”
B3. Kết thúc.
Từ bài toán cơ sở này chúng ta có thể mở rộng ra các bài toán sau:
Bài toán 1.1
Cho số nguyên dương M và dãy số nguyên dương a1, a2, , aM. Tính và đưa ra màn hình tổng các số nguyên tố có trong dãy. Nếu không có số nguyên tố nào thì đưa ra màn hình số 0.
Xác định bài toán:
+/ Input: Số nguyên dương M và dãy số nguyên dương a1, a2, , aM.
+/ Output: Tổng các số nguyên tố có trong dãy hoặc số 0.
Rõ ràng bài toán này có thể được xem là mở rộng của bài toán cơ sở nêu trên nếu chúng ta xem mỗi ai ( i:1àM) như số nguyên dương N trong bài toán cơ sở. Vấn đề tính tổng các số nguyên tố có trong dãy được thực hiện một cách rất đơn giản là khai báo thêm biến tổng và khi gặp một ai là số nguyên tố thì cộng ai vào cho tổng.
Thuật toán:
B1. Nhập số nguyên dương M và dãy các số nguyên dương a1, a2, , aM.
tổng ß 0;
B2. Duyệt từ a1 đến aM nếu ai (i=1;M) là số nguyên tố thì tổng ß tổng +ai
B3. Đưa tổng ra màn hình rồi kết thúc.
Bài toán 1.2
Cho số nguyên dương M và dãy số nguyên dương a1, a2, , aM. Đếm và đưa ra màn hình số lượng các số nguyên tố có trong dãy. Nếu không có số nguyên tố nào thì đưa ra màn hình số 0.
Xác định bài toán:
+/ Input: Số nguyên dương M và dãy số nguyên dương a1, a2, , aM.
+/ Output: Số lượng các số nguyên tố có trong dãy hoặc số 0.
Rõ ràng bài toán này cũng có thể được xem là mở rộng của bài toán cơ sở nêu trên nếu chúng ta xem mỗi ai ( i:1àM) như số nguyên dương N trong bài toán cơ sở. Vấn đề đếm số lượng các số nguyên tố có trong dãy được thực hiện một cách rất đơn giản là khai báo thêm biến đếm và khi gặp một ai là số nguyên tố thì tăng đếm thêm 1 đơn vị.
Thuật toán:
B1. Nhập số nguyên dương M và dãy các số nguyên dương a1, a2, , aM.
đếm ß 0;
B2. Duyệt từ a1 đến aM nếu ai (i=1;M) là số nguyên tố thì đếm ß đếm +1
B3. Đưa đếm ra màn hình rồi kết thúc.
Bài toán 1.3
Cho số nguyên dương M và dãy số nguyên dương a1, a2, , aM. Đưa ra màn hình các số nguyên tố có trong dãy theo thứ tự đã nhập. Nếu không có số nguyên tố nào thông báo ra màn hình “Trong dãy không có số nguyên tố”.
Xác định bài toán:
+/ Input: Số nguyên dương M và dãy số nguyên dương a1, a2, , aM.
+/ Output: các số nguyên tố có trong dãy theo thứ tự đã nhập hoặc thông báo.
Từ kết quả xác định bài toán ta thấy bài toán này có thể được xem là mở rộng của bài toán cơ sở nêu trên vì vấn đề chủ chốt trong bài này cũng là kiểm tra mỗi số nguyên dương ai (với i nhận giá trị từ 1 đến M) có phải lá số nguyên tố hay không? Vấn đề đưa ra màn hình các số nguyên tố có trong dãy theo thứ tự đã nhập hoặc thông báo “trong dãy không có số nguyên tố nào” được thực hiện đơn giản như sau. Ta sử dụng biến kt:byte. Ban đầu kt ß 0 với giả sử rằng trong dãy không có số nguyên tố nào sau đó ta duệt từ a1 đến aM nếu ai là số nguyên tố thì đưa ai ra màn hình đồng thời tăng kt lên 1 đơn vị. Cuối cùng ta kiểm tra lại kt = 0? Nếu đúng thì thông báo “ trong dãy không có số nguyên tố nào”
Thuật toán:
B1. Nhập số nguyên dương M và dãy các số nguyên dương a1, a2, , aM.
kt ß 0;
B2. Duyệt từ a1 đến aM nếu ai (i=1;M) là số nguyên tố thì:
2.1 Đưa ai ra màn hình;
2.2 Tăng kt lên 1 đơn vị :inc(kt)
B3. Nếu kt=0 thì thông báo “trong dãy không có số nguyên tố nào”
B3. Kết thúc.
 Chúng ta có thể xét thêm bài toán sau( đề thi hsg tỉnh Hưng Yên).
Lập trình giải bài toán sau:
Cho một mảng số nguyên gồm 30 phần tử, hãy tìm tất cả các phần tử là số nguyên tố và tính tổng của chúng.
Bài toán 2. Nhập từ bàn phím toạ độ của 2 điểm M, N trong mặt phẳng. Tính và đưa ra màn hình độ dài đoạn MN. Nếu chúng trùng nhau thì thông báo “M trùng với N”.
Xác định bài toán:
+/ Input: Bốn số x1,y1,x2,y2
+/ Output: Độ dài đoạn MN hoặc thông báo “M trùng với N”
Thuật toán:
B1. Nhập 4 số x1, y1, x2, y2; d ß0;
B2. d ß
B3. Nếu d=0 thì thông báo “M trùng với N”, ngược lại đưa d ra màn hình rồi kết thúc.
Bài toán 2.1 Xây dựng thuật toán nhập từ bàn phím toạ độ của các đỉnh của một tam giác trong mặt phẳng. Tính và đưa ra màn hình chu vi, diện tích của tam giác đó.
Xác định bài toán:
+/ Input: Các số x1, y1, x2, y2, x3, y3.
+/ Output: Chu vi, diện tích tam giác
 Ta thấy việc tính chu vi của tam giác trong bài toán này xuất phát từ bài toán cơ sở đã nêu tức là tính độ dài các cạnh khi biết toạ độ các điểm. 
Thuật toán:
B1. Nhập 6 số x1, y1, x2, y2, x3, y3; 
B2. a ß
 b ß
 c ß
 p ßa+b+c; sß
b3. Đưa p, s ra màn hình rồi kết thúc.
Bài toán 2.2 Xây dựng thuật toán nhập từ bàn phím toạ độ của các đỉnh của một đa giác N đỉnh. Tính và đưa ra màn hình chu vi của đa giác đó.
Xác định bài toán:
+/ Input: Các cặp số (xi, yi), với i nhận giá trị từ 1 đến N.
+/ Output: Chu vi của đa giác.
 Từ kết quả xác định bài toán ta thấy đây cũng là một bài toán được mở rộng từ bài toán cơ sở 2 nêu trên vì thực chất đây cũng là bài toán tính độ dài các đoạn thẳng khi biết toạ độ các điểm. Từ đó học sinh dễ dàng xây dựng thuật toán để giải bài toán này.
Thuật toán:
B1. Nhập toạ độ của N đỉnh;
B2. Tính độ dài các các cạnh, tính chu vi;
B3. Đưa chu vi ra màn hình, rồi kết thúc.
	Ta có thể mở rộng bài toán tính chu vi của đa giác N đỉnh trong không gian.
Bài toán 3. Xây dựng thuật toán tìm max trong 2 số a, b. Nếu chúng bằng nhau thì đưa ra màn hình một trong hai số đó.
Xác định bài toán:
+/ Input: Hai số a, b.
+/ Output: Max của hai số a, b.
Thuật toán:
B1. Nhập a, b
B2. Max ß a;
B3. Nếu Max < b thì Max ßb
B4. Đưa Max ra màn hình rồi kết thúc.
 Từ việc tìm max của 2 số ta có thể mở rộng bài toán tìm max của N số trong bài toán sau:
Bài toán 3.1 Xây dựng thuật toán tìm max của N số nguyên a1, a2, , aN.
Xác định bài toán:
+/ Input: Số nguyên dương N và dãy số nguyên a1, a2, , aN
+/ Output: Max của dãy số đã cho.
 Bằng quy luật như trong bài toán cơ sở, ban đầu ta tìm max của a1, a2 ta sẽ được 1 số đó là max. Sau đó ta lại tìm max của max với a3, quá trình sẽ được tiếp diễn cho đến khi tìm max của max với aN.
Thuật toán:
B1. Nhập số nguyên dương N và dãy số nguyên a1, a2, , aN
B2. Max ßa1; iß 2;
B3. Nếu i>N thì sang B5
B4. Nếu ai>max thì maxß ai, ißi+1, quay lại B3.
B5. Đưa Max ra màn hình rồi kết thúc.
 Ngoài ra, với bài toán cơ sở này học sinh dễ dàng xây dựng được thuật toán tìm min của 2 số, Tìm min của N số.
Bài toán 4. Xây dựng thuật toán tìm số lần xuất hiện của kí tự “ch” trong xâu s
Xác định bài toán:
+/ Input: Kí tự “ch” và xâu s
+/ Output: Số lần xuất hiện của kí tự “ch” trong xâu s.
Thuật toán:
B1. Nhập xâu s và kí tự ch; dem ß0;
B2. Duyệt từ đầu đến cuối xâu s, nếu s[i]=ch thì tăng biến đếm lên 1 đơn vị dem ßdem+1
B3. Đưa dem ra màn hình rồi kết thúc.
Ta xét bài toán sau:
Bài toán 4.1. Xây dựng thuật toán tính tần số xuất hiện của mỗi kí tự trong xâu s.
Xác định bài toán:
+/ Input: Xâu s
+/ Output: Số lần xuất hiện của mỗi kí tự trong xâu s.
 Rõ ràng ta thấy đây cũng là bài toán tìm số lần xuất hiện của một kí tự trong xâu. Vấn đề được mở rộng ở đây là có thể có nhiều hơn một kí tự cần phải tìm số lần xuất hiện của chúng trong xâu s. Việc nắm vững thuật toán giải bài toán cơ sở nêu trên sẽ giúp học sinh có thể xây dựng được thuật toán để giải bài toán 4.1 bằng cách xem mỗi kí tự chưa được tìm số lần xuất hiện của chúng trong xâu s như kí tự “ch” trong bài toán cơ sở. Khi tìm được số lần xuất hiện của mỗi kí tự rồi thì đưa kí tự đó cùng số lần xuất hiện của nó ra màn hình. Một vấn đề nảy sinh ở đây là làm thế nào để bỏ qua các kí tự đã được tìm số lần xuất hiện trong xâu s. Vấn đề này có nhiều cách giải quyết nhưng cách đơn giản nhất là xoá hết các kí tự đã tìm được tần số xuất hiện. Khi xoá hết xâu thì công việc tìm số lần xuất hiện của các kí tự cũng kết thúc.
Thuật toán:
B1. Nhập xâu s;
B2. Trong khi chưa hết xâu thực hiện:
Tìm số lần xuất hiện của kí tự s[1] trong xâu;
Đưa kí tự s[1] cùng số lần xuất hiện của nó ra màn hình
Xoá các kí tự s[1] trong xâu
B3. Kết thúc.
Bài toán 4.2 . Xây dựng thuật toán tìm kí tự xuất hiện ít nhất trong xâu
Xác định bài toán:
+/ Input: Xâu s
+/ Output: Kí tự xuất hiện ít nhất trong xâu s .
Bài toán này được phát triển từ bài toán cơ sở 4 vì vấn đề chính ở đây cũng là đi tìm số lần xuất hiện của một kí tự trong xâu. Tuy nhiên nó được nâng cao hơn một mức đó là sau khi đếm số lần xuất hiện của mỗi kí tự lại phải kiểm tra xem kí tự đó có phải xuất hiện ít nhất không? Sẽ đơn giản hơn nếu ta xem đây là bài toán mở rộng của bài toán 4.1. Thật vậy, ta sẽ sử dụng một biến kiểu kí tự(minchar) để lưu kí tự xuất hiện ít nhất trong xâu và ban đầu giả thiết rằng số lần xuất hiện của kí tự ít nhất trong xâu là(min=length(s)), minchar=s[1] . Sau đó mỗi lần đếm được số lần xuất hiện của một kí tự trong xâu ta lại so sánh với min. Nếu min lớm hơn số lần xuất hiện của kí tự vừa đếm thì ta gán lại min và minchar, cuối cùng ta sẽ giải quyết được bài toán
Thuật toán:
B1. Nhập xâu s; minchar=s[1]; min=length(s)
B2. Trong khi chưa hết xâu thực hiện:
Tìm số lần xuất hiện của kí tự s[1] trong xâu;
So sánh số lần tìm được đó với min. Nếu min lớn hơn thì thực hiện:
	- Min nhận giá trị mới là số lần xuất hiện của kí tự vừa đếm được;
	- Minchar:=s[1]
Xoá các kí tự s[1] trong xâu
B3. Đưa minchar và min ra màn hình và kết thúc.
Bài toán 4.3 . Xây dựng thuật toán tìm kí tự xuất hiện nhiều nhất trong xâu
Xác định bài toán:
+/ Input: Xâu s
+/ Output: Kí tự xuất hiện nhiều nhất trong xâu s .
Ta thấy đây là bài toán tương đương của bài toán 4.2. Thuật toán giải bài toán này như sau:
Thuật toán
B1. Nhập xâu s; maxchar=s[1]; max=0;
B2. Trong khi chưa hết xâu thực hiện:
Tìm số lần xuất hiện của kí tự s[1] trong xâu;
So sánh số lần tìm được đó với max. Nếu max lớn hơn thì thực hiện:
	- Max nhận giá trị mới là số lần xuất hiện của kí tự vừa đếm được;
	- Maxchar:=s[1]
Xoá các kí tự s[1] trong xâu
B3. Đưa maxchar và max ra màn hình và kết thúc.
Bài toán 5. Xây dựng thuật toán tạo xâu đảo của một xâu cho trước.
Xác định bài toán:
+/ Input: Xâu s;
+/ Output: Xâu đảo của xâu s.
Thuật toán:
B1. Nhập xâu s, khởi tạo xâu x ß’’; i ßlength(s)
B2. Nếu i < 1 thì sang B4
B3. x ß x+s[i]; i ßi-1, quay lại B2;
B4. Đưa x ra màn hình rồi kết thúc.
Bài toán 5.1. Xây dựng thuật toán kiểm tra xem một xâu cho trước có phải là xâu đối xứng không? Xâu đối xứng là xâu mà xâu đảo của nó bằng chính nó.
Xác định bài toán:
+/ Input: Xâu s;
+/ Output: Kết luận “xâu s có phải xâu đối xứng” hoặc “xâu s không phải xâu đối xứng”.
 Từ khái niệm xâu đối xứng, ta dễ dàng nhận thấy bài toán này được mở rộng từ bài toán 5 và chúng ta chỉ cần tạo xâu đảo của s rồi so sánh với chính nó là sẽ cho kết quả.
Thuật toán:
B1. Nhập xâu s
B2.Tạo xâu đảo của s
B3. So sánh s với xâu đảo của s. Nếu chúng bằng nhau thì thông báo “xâu s có phải xâu đối xứng”, nếu chúng không bằng nhau thì thông báo “xâu s không phải xâu đối xứng”. Kết thúc.
Bài toán 5.2. Xây dựng thuật toán kiểm tra xem một xâu cho trước có phải là xâu đảo của một xâu cho trước khác không? 
Xác định bài toán:
+/ Input: Xâu s, x;
+/ Output: Kết luận “xâu s, x là hai xâu đảo của nhau” hoặc “xâu s, x không phải là hai xâu đảo của nhau”.
 Đây cũng là bài toán mà việc giải quyết nó dễ dàng được thực hiện khi tạo được xâu đảo của hai xâu đã cho. Sau đây là thuật toán.
Thuật toán:
B1. Nhập xâu s, x
B2.Tạo xâu đảo của s, xâu đảo của x
B3. So sánh s với xâu đảo của x, x với xâu đảo của s. Nếu có ít nhất một cặp bằng nhau thì thông báo “xâu s, x là hai xâu đảo của nhau” ,ngược lại thì thông báo “xâu s, x không phải là hai xâu đảo của nhau”. Kết thúc.
Bài toán 5.3 (Bài 4.42 sbt tin 11).
Người ta xâu N viên đá quý kích thước giống nhau thầnh một vòng đeo cổ, mỗi viên có một màu trong số các màu đánh số từ 1 đến 9. Để tăng tính độc đáo cho vòng trang sức quý này, người ta định lắp khoá đeo vào vị trí sao cho khi mở vòng ta được một dây đá quý có tính chất: không phụ thuộc vào việc cầm đầu dây nào bên tay phải và đầu kia bên tay trái, ta đều được một chuỗi hạt giống nhau, tức là viên đá thứ i từ trái sang luôn có màu j không phụ thuộc vào cách cầm. Cho sâu s gồm các màu của các viên đá quý, hãy xác định số vị trí đặt khoá.
Xác định bài toán:
+/ Input: Xâu s
+/ Output: Số vị trí đặt khoá
Chẳng hạn: Cho s=’222222335533’, ta sẽ có 2 vị trí đặt khoá là giữa vị trí thứ 3 và vị trí thứ 4 hoặc giữa vị trí thứ 9 và vị trí thứ 10.
Thuật toán:
 Ta thấy từ tính chất của cách đặt khoá, mỗi cách đặt khoá sẽ cho ta một xâu đá quý có tính chất đối xứng khi đó ta sẽ cố một xâu màu sắc đối xứng tương ứng. Chẳng hạn:
Ở vị trí đặt khoá giữa vị trí thứ 3 và thứ 4 ta được xâu đối xứng 222335533222; Ở vị trí đặt khoá giữa vị trí thứ 9 và 10 ta có xâu đối xứng 533222222335.
 Vậy xét về bản chất đây cũng là bài toán xâu đối xứng. Việc đếm số vị trí đặt khoá được thực hiện bằng cách sau: Cho i chạy từ đầu xâu đến cuối xâu s( i:1-->L, với L là độ dài của xâu s). Với mỗi i ta kiểm tra xem xâu s1=copy(s,i,L-i+1)+copy(s,1,i-1) có phải là xâu đối xứng không? Nếu đúng thì tăng đếm lên 1 đơn vị. Cuối cùng ta sẽ tìm được số vị trí đặt khoá. Sau đây là thuật toán giải bài toán này.
B1. Nhập xâu s, demß0; iß1; Lß độ dài xâu s;
B2. Nếu i> L thì đưa dem ra màn hình, sang B4
B3. s1ß’’ ( s1 gán bằng xâu rỗng);
 s1ßcopy(s,i,L-i+1)+copy(s,1,i-1).
Nếu s1 là xâu đối xứng thì demßdem+1; ißi+1, quay lại B2.
B4. Kết thúc.
Bài toán 6. Xây dựng thuật toán tính N!.
Xác định bài toán:
+/ Input: Số nguyên dương N
+/ Output: N!.
Thuật toán:
B1. Nhập số nguyên dương N; gtß1; iß2;
B2. Nếu i> N thì sang bước 4
B3. gtßgt*i, ißi+1, quay lại B2
B4. Đưa gt ra màn hình rồi kết thúc. 
 Từ bài toán cơ sở trên ta có thể mở rộng các bài toán sau:
Bài toán 6.1 (Đề thi hsg tin học lớp 12 thành phố Đà Nẵng năm 2001-2002)
 Nhập vào một số tự nhiên N. Lập chương trình đưa ra màn hình số hoán vị của N số 1,2,3,...,N. (N<10).
Xác định bài toán:
+/ Input: Số tự nhiên N
+/ Output: Số hoán vị của N số
Thuật toán:
Theo công thức tính số hoán vị của N phần tử 1, 2, 3, ..., N, ta có số hoán vị của N phần tử đó là N!. Vậy đây chính là bài toán cơ sở đã cho. Từ đó thuật toán để giải bài toán này là:
B1. Nhập số nguyên dương N; shvß1; iß2;
B2. Nếu i> N thì sang bước 4
B3. shvßshv*i, ißi+1, quay lại B2
B4. Đưa shv ra màn hình rồi kết thúc. 
Bài toán 6.2.(Đề thi tin học khối THPT tỉnh An Giang)
Một chuỗi con s1 có độ dài k được gọi là chuỗi con thực sự của s nếu:
- Nó gồm k kí tự được lập nên từ các kí tự của chuỗi s bằng cách rút bỏ tất cả các kí tự giống nhau trong chuỗi và không thêm một kí tự nào khác.
- Trong s1 các kí tự là tuân theo trật tự đã có trong s.
Viết chương trình tìm số dãy con thực sự của s với k=2, biết s được nhập từ bàn phím.
Ví dụ s=’HOI THI TIN HOC TRE TINH AN GIANG’
Sau khi rút hết các kí tự giống nhau và không thêm kí tự nào ta có s=’CRE’.
Từ đó ta có số dãy con thực sự với k=2 là 3(CR,CE, RE)
Xác định bài toán:
+/ Input: Xâu s và số k( k=2)
+/ Output: Số dãy con thực sự của s.
Thuật toán:
Ta gọi L là số kí tự còn lại trong xâu s sau khi đã rút các kí tự giống nhau và không thêm một kí tự nào. Chẳng hạn trong ví dụ trên ta có L=3. Trong s1 k kí tự được lấy theo thứ tự của nó từ trái qua phải (CR, CE, RE) mà không lấy thứ tự ngược lại( RC, EC, ER). Như vậy đây chính là bài toán tính tổ hợp chập k của L phần tử. Bài toán này sẽ được tính một cách dễ dàng sau khi chúng ta tính được các giá trị sau: L!; k!; (L-k)!. Tóm lại đây là bài toán tính giai thừa mà ta đã đề cập ở trên. Từ đó ta có thuật toán giải bài toán này như sau:
B1. Nhập xâu s và số k
B2. Xử lí xâu s( xoá các kí tự giống nhau)
B3. Tính L!, k!, (L-k)! 
B4. Tính 
B5. Đưa kết quả ra màn hình rồi kết thúc.
Thực tế cho thấy, khi tôi áp dụng các bài toán “nhẹ nhàng” và “vừa sức” này. các em học sinh đều rất thích thú, hào hứng trong các tiết lên lớp của tôi. điều này đã mang lại sức lan tỏa của bộ môn rất lớn, giúp cho người dạy và người học đều hứng thú với chương trình Tin học lớp 11. Ngoài ra học sinh có thể mở rộng bài toán cơ sở 6 để giải các bài toán chỉnh hợp và tổ hợp khác trong chương trình giải tích lớp 11. 
Sau khi tự mình xây dựng được thuật toán rồi, ngay tức khắc các em đã có thể viết chương trình giải quyết các bài toán đó bằng ngôn ngữ lập trình Pascal một cách nhanh chóng và chính xác. 
Kết quả tại 3 lớp tôi phụ trách trong năm học vừa rồi, sau khi áp dụng SKKN này, với mức độ ở các bài kiểm tra lập trình bằng ngôn ngữ Pascal lấy từ đây, các em đã làm tôi hài lòng. Cụ thể như sau:
Lớp
Ban
Tỷ lệ HS đạt loại khá trở lên
11B1
Cơ bản
68,42%
11B5
Tự nhiên
70,2%
11B9
Tự nhiên
88,64%
III. KẾT LUẬN.
 Việc nắm vững input, output và thuật toán giải một bài toán cơ bản sẽ giúp học sinh mở rộng các lớp bài toán một cách linh hoạt từ đó rèn luyện được kỹ năng giải toán cho học sinh. SKKN này tôi chỉ nêu minh hoạ một số bài toán mở rộng từ một số bài toán cơ sở và cách dẫn dắt học sinh nhận dạng, mở rộng bài toán để từ đó xây dựng được thuật toán giải các bài toán mở rộng.
 Trong khuôn khổ SKKN, các bài toán mở rộng nêu ra chỉ phù hợp với các học sinh trung bình và khá, giúp học sinh nắm vững kiến thức SGK và còn hạn chế về số lượng và cũng chưa thực sự tiêu biểu. Học sinh có thể tìm thêm các bài toán khác để vận dụng trong thực tiễn. Mặt khác các bài toán cơ sở cũng như các bài toán mở rộng có thể được giải bằng những thuật toán khác. Tuy nhiên trong đè tài này, với mỗi dạng toán tôi vẫn chỉ nêu một hướng xây dựng thuât toán duy nhất để đảm bảo tính lôgic_Mở rộng bài toán. Các thuật toán nêu trong đề tài được diễn đạt gần với ngôn ngữ lập trình Pascal sẽ gần gũi hơn với học sinh lớp 11.
Tôi tin chắc rằng đề tài này vẫn còn nhiều khiếm khuyết, kính mong đồng nghiệp cũng như học sinh cho nhiều ý kiến đóng góp. Tôi xin chân thành cảm ơn!
Bỉm sơn, ngày 15 tháng 5 năm 2013
XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN VỊ
Tôi xin cam đoan đây là SKKN của mình viết, không sao chép nội dung của người khác.
Đặng Văn Mạnh

File đính kèm:

  • docmo_rong_mot_so_bai_toan_co_so_trong_tin_hoc_4633.doc
Sáng Kiến Liên Quan