SKKN Một số giải pháp giúp học sinh xây dựng chương trình dựa trên ý tưởng và các thuật toán cơ bản trong lập trình pascal - Tin học 11

SKKN Một số giải pháp giúp học sinh xây dựng chương trình dựa trên ý tưởng và các thuật toán cơ bản trong lập trình pascal - Tin học 11

Bài toán trong tin học là bài toán xuất phát từ bài toán thực tế, việc xây dựng giải thuật để giải bài toán tin học bằng máy tính phải bảo đảm những tính chất cơ bản của thuật toán, trong các tính chất cơ bản đó thì yêu cầu về thuật toán sau khi đã được cài đặt chương trình trên máy tính bằng ngôn ngữ lập trình thì thuật toán đó là tối ưu. Đây là yêu cầu rất quan trọng đối với người lập trình.

Trong việc giảng dạy lập trình cho HS, ngoài việc giúp HS lĩnh hội những kiến thức cơ bản. Giáo viên còn phải biết kích thích tính tích cực, sự sáng tạo say mê học hỏi của HS trong việc học tập của các em. Bởi vì, việc học tập tự giác, tích cực, chủ động và sáng tạo đòi hỏi HS phải có ý thức về những mục tiêu đặt ra và tạo được động lực bên trong thúc đẩy bản thân họ hoạt động để đạt các mục tiêu đó.

Chương trình Tin học lớp 11 là một môn học khó, kiến thức thì trải rộng nhưng đòi hỏi các em phải biết vận dụng kiến thức của từng bài sắp xếp một cách lôgic để lập trình giải một bài toán hoàn chỉnh. Tuy nhiên trong thực tế rất ít HS làm được điều đó. Hầu hết các em vận dụng câu lệnh, cú pháp không phù hợp cho yêu cầu của bài tập.

Là một giáo viên giảng dạy môn Tin học ở trường THPT mà cơ sở vật chất của trường còn thiếu thốn, tuy nhiên để hưởng ứng đổi mới phương pháp giảng dạy nên nhà trường đã đầu tư rất mạnh về trang thiết bị như máy tính, máy chiếu, , tạo cơ hội cho giáo viên tìm hiểu, ứng dụng vào dạy học. Các cách thiết kế bài giảng hiện nay nhằm mục đích áp dụng phương pháp hiện đại để bồi dưỡng cho học sinh năng lực ham muốn học hỏi, tư duy sáng tạo, năng lực tự giải quyết vấn đề, rèn luyện và phát triển năng lực tự học sáng tạo, nghiên cứu, nghĩ và làm việc một cách tự chủ,

Xuất phát từ thực tiễn giảng dạy tại trường THPT Mai Anh Tuấn tôi 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 (nếu có).

Qua nhiều năm giảng dạy tại trường, đa số các HS là con em thuần nông vì điều kiện kinh tế của gia đình còn khó khăn nên phương tiện học tập bộ môn (máy vi tính) hầu như rất ít. Mặt khác, đa số các em chưa có kỹ năng lập trình hay kỹ năng phân tích, thiết kế về lập trình chưa được tốt nên tôi chọn đề tài “ Một số giải pháp giúp học sinh xây dựng chương trình dựa trên ý tưởng và các thuật toán cơ bản trong lập trình pascal- tin học 11”

 

doc 19 trang thuychi01 6975
Bạn đang xem tài liệu "SKKN Một số giải pháp giúp học sinh xây dựng chương trình dựa trên ý tưởng và các thuật toán cơ bản trong lập trình pascal - Tin học 11", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
1. MỞ ĐẦU
1.1. Lý do chọn đề tài
Bài toán trong tin học là bài toán xuất phát từ bài toán thực tế, việc xây dựng giải thuật để giải bài toán tin học bằng máy tính phải bảo đảm những tính chất cơ bản của thuật toán, trong các tính chất cơ bản đó thì yêu cầu về thuật toán sau khi đã được cài đặt chương trình trên máy tính bằng ngôn ngữ lập trình thì thuật toán đó là tối ưu. Đây là yêu cầu rất quan trọng đối với người lập trình.
Trong việc giảng dạy lập trình cho HS, ngoài việc giúp HS lĩnh hội những kiến thức cơ bản. Giáo viên còn phải biết kích thích tính tích cực, sự sáng tạo say mê học hỏi của HS trong việc học tập của các em. Bởi vì, việc học tập tự giác, tích cực, chủ động và sáng tạo đòi hỏi HS phải có ý thức về những mục tiêu đặt ra và tạo được động lực bên trong thúc đẩy bản thân họ hoạt động để đạt các mục tiêu đó. 
Chương trình Tin học lớp 11 là một môn học khó, kiến thức thì trải rộng nhưng đòi hỏi các em phải biết vận dụng kiến thức của từng bài sắp xếp một cách lôgic để lập trình giải một bài toán hoàn chỉnh. Tuy nhiên trong thực tế rất ít HS làm được điều đó. Hầu hết các em vận dụng câu lệnh, cú pháp không phù hợp cho yêu cầu của bài tập.
Là một giáo viên giảng dạy môn Tin học ở trường THPT mà cơ sở vật chất của trường còn thiếu thốn, tuy nhiên để hưởng ứng đổi mới phương pháp giảng dạy nên nhà trường đã đầu tư rất mạnh về trang thiết bị như máy tính, máy chiếu, , tạo cơ hội cho giáo viên tìm hiểu, ứng dụng vào dạy học. Các cách thiết kế bài giảng hiện nay nhằm mục đích áp dụng phương pháp hiện đại để bồi dưỡng cho học sinh năng lực ham muốn học hỏi, tư duy sáng tạo, năng lực tự giải quyết vấn đề, rèn luyện và phát triển năng lực tự học sáng tạo, nghiên cứu, nghĩ và làm việc một cách tự chủ, 
Xuất phát từ thực tiễn giảng dạy tại trường THPT Mai Anh Tuấn tôi 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 (nếu có).
Qua nhiều năm giảng dạy tại trường, đa số các HS là con em thuần nông vì điều kiện kinh tế của gia đình còn khó khăn nên phương tiện học tập bộ môn (máy vi tính) hầu như rất ít. Mặt khác, đa số các em chưa có kỹ năng lập trình hay kỹ năng phân tích, thiết kế về lập trình chưa được tốt nên tôi chọn đề tài “ Một số giải pháp giúp học sinh xây dựng chương trình dựa trên ý tưởng và các thuật toán cơ bản trong lập trình pascal- tin học 11”
Qua đề tài này, tôi muốn chia sẻ một số kinh nghiệm nho nhỏ của mình đến các đồng nghiệp cũng như các em HS có niềm đam mê lập trình qua đó hình thành một số kỹ năng về lập trình cho tốt hơn.
1.2. Mục đích nghiên cứu:
Như ta đã biết 1 thuật toán đưa ra thì chỉ có thể giải được một bài toán, nhưng một bài toán thì có thể có nhiều cách (thuật toán) để giải nó. Chính vì vậy đứng trước một bài toán chúng ta phải hướng cho học sinh lựa chọn được thuật toán tối ưu nhất để viết chương trình.
Trong đề tài này tôi muốn đưa ra một số phương pháp dẫn dắt học sinh tìm ra những giải pháp để có thể lập trình tốt hơn một số bài tập trong sách giáo khoa tin học 11 dựa trên ý tưởng và các thuật toán cơ bản. 
1.3. Đối tượng nghiên cứu:
Đối tượng nghiên cứu: HS lớp 11 bậc trung học phổ thông tại trường THPT Mai Anh Tuấn.
Phạm vi nghiên cứu: Một số mảng kiến thức lý thuyết và bài tập đã được nêu trong các bài học của chương IV, V và VI từ trang 52 đến trang 117 sách giáo khoa Tin học 11 bậc trung học phổ thông.
1.4. Phương pháp nghiên cứu:
Sáng kiến kinh nghiệm của tôi dựa theo các phương pháp: Nghiên cứu sách giáo khoa, các tài liệu liên quan đến chuyên môn, đối chiếu, so sánh, phân tích và tổng hợp kết quả đánh giá kết quả học tập của HS.
2. NỘI DUNG SÁNG KIẾN KINH NGHIỆM
2.1. Cơ sở lí luận của sáng kiến kinh nghiệm:
Hiện nay trong lý luận dạy học nói chung và lý luận dạy học môn Tin học nói riêng yêu cầu sử dụng khá nhiều phương pháp: thảo luận, chia nhóm, hỏi đáp,  Các cách thiết kế bài giảng hiện nay nhằm mục đích áp dụng phương pháp hiện đại để bồi dưỡng cho HS năng lực tư duy sáng tạo, năng lực giải quyết vấn đề,  rèn luyện và phát triển năng lực tự học sáng tạo. Phương pháp dạy học hiện nay, người thầy chủ yếu là người định hướng, người cố vấn giúp HS tự đánh giá và phát triển năng lực của mình theo phương pháp định hướng và phát triển năng lực của HS.
Khi tiếp xúc với một bài toán trong tin học, HS thường cố gắng tìm ra thuật toán tốt nhất để giải quyết trọn vẹn bài toán, đối với những bài toán đơn giản HS có thể tìm ra ngay thuật toán nhưng đối với những bài toán khó đặc biệt là những bài toán có dữ liệu đầu vào lớn thì việc tìm ra thuật toán tối ưu nhất để đạt được số điểm tối đa thường là rất khó. HS không nghĩ được rằng nếu sử dụng những giải thuật đơn giản để giải quyết các bài toán khó thì cho dù không đạt được số điểm tối đa nhưng cũng có được một điểm số ở một mức độ nào đó phù hợp với khả năng của mình để tránh điểm không.
Để rèn luyện kỹ năng tiếp cận bài toán nhằm giúp HS có được kinh nghiệm tiếp cận bài toán khó bằng nhiều thuật toán theo từng bước từ đơn giản đến phức tạp phù hợp với khả năng của mình để có được điểm số tốt nhất đòi hỏi người giáo viên cần rèn luyện kỹ năng tiếp cận bài toán để làm giảm độ phức tạp của bài toán.
Khi giải một bài toán trong Tin học, chúng ta cần chọn một trong số các thuật toán tốt nhất để giải bài toán đó.
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm:
Mặc dù HS có ý thức học tốt, ham học hỏi nhưng đa số HS của trường được tuyển sinh vào lớp 10 với chất lượng đầu vào chưa thật sự cao dẫn đến tư duy của các em còn nhiều hạn chế đối với những môn học đòi hỏi tư duy cao. Đặc thù của môn tin học là một môn có kiến thức trừu tượng, đặc biệt là môn tin học lớp 11 với một số phần như kiểu mảng, kiểu xâu và chương trình con nên các em HS còn tiếp thu chậm và tư duy học lập trình chưa được tốt. Để giúp các em HS tiếp thu tốt và rèn luyện cho các em HS về kỹ năng phân tích bài toán cũng như lập trình thì sáng kiến kinh nghiệm của tôi sẽ đưa ra một số biện pháp như sau:
Để giải một bài toán tin học trên máy tính chúng ta thường phải thực hiện theo từng bước:
Bước đầu tiên (Xác định bài toán) đây là bước quan trọng nhất để hiểu rõ nội dung bài toán.
Đây là yêu cầu quen thuộc đối với những người làm toán. Để hiểu bài toán theo cách tiếp cận của tin học ta phải xây dựng một số ví dụ phản ánh đúng các yêu cầu đề ra của đầu bài rồi thử giải các ví dụ đó để hình thành dần những hướng đi của thuật toán.
Bước thứ hai (Ý tưởng) là dùng một ngôn ngữ quen thuộc, tốt nhất là ngôn ngữ toán học đặc tả các đối tượng cần xử lí ở mức độ trừu tượng, lập các tương quan, xây dựng các hệ thức thể hiện các quan hệ giữa các đại lượng cần xử lí để có được thuật toán tốt nhất có thể.
Bước thứ ba (Xây dựng thuật toán)là bước xác định cấu trúc dữ liệu để biểu diễn các đối tượng cần xử lí cho phù hợp với các thao tác của thuật toán.
Trong những bước tiếp theo ta tiếp tục làm mịn dần các đặc tả theo trình tự từ trên xuống, từ trừu tượng đến cụ thể, từ đại thể đến chi tiết.
Bước cuối cùng là sử dụng ngôn ngữ lập trình đã chọn để viết chương trình hoàn chỉnh. Ở bước này ta tiến hành theo kĩ thuật đi từ dưới lên, từ những thao tác nhỏ đến các thao tác tổ hợp.
Sau khi nhận được chương trình ta cho chương trình chạy thử với các dữ liệu lấy từ các ví dụ đã xây dựng ở bước đầu tiên. 
Chúng ta sẽ vận dụng cách tiếp cận trên để giải một số bài tập cụ thể được nêu trong sách giáo khoa tin học 11.
2.3. Các giải pháp đã sử dụng để giải quyết vấn đề:
2.3.1. Hệ thống một số nội dung lý thuyết cần nghiên cứu bài tập:
2.3.1.1. Kiểu mảng một chiều
a. Khái niệm: Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu. Mảng được đặt tên và một phần tử của nó có một chỉ số. Để mô tả mảng một chiều cần xác định kiểu của các phần tử và cách đánh số các phần tử của nó.
Các quy tắc, cách thức khi làm việc với mảng một chiều trong ngôn ngữ lập trình:
Tên kiểu mảng một chiều;
Số lượng phần tử mảng;
Kiểu dữ liệu của phần tử;
Cách khai báo biến mảng;
Cách tham chiếu đến phần tử;
b. Khai báo:Tổng quát, khai báo biến một chiều gồm có hai dạng:
Cách 1: Khai báo trực tiếp
Var : Array [] of ;
Cách 2: Khai báo gián tiếp
Type = Array [] of ;
Var : ;
Trong đó:
+ Kiểu chỉ số: thường là một đoạn số nguyên liên tục có dạng n1 .. n2 với n1, n2 là các hằng hoặc biểu thức số nguyên xác định chỉ số đầu và chỉ số cuối (n1 ≤ n2).
+ Kiểu phần tử: là kiểu của các phần tử mảng
Ví dụ 1: Hãy viết câu lệnh khai báo biến A là dãy số thực có 15 phần tử;
Ví dụ 2: Hãy viết câu lệnh khai báo các biến M, N, P là dãy số nguyên có 25 phần tử;
Trong quá trình giảng dạy trên lớp, tôi đã hướng dẫn và giải thích cho HS lúc nào thì khai báo biến theo cách 1 (Trực tiếp), lúc nào thì khai báo biến theo cách 2 (Gián tiếp) để HS khỏi thụ động trong lúc khai báo biến thuộc kiểu mảng một chiều.
Trong 2 ví dụ ở trên, tôi đã hướng dẫn HS khai báo biến như sau:
Ví dụ 1:
	Var A : Array [1..15] of Real;
Ví dụ 2:
	Type songuyen = Array [1 .. 25] of Integer;
	Var M, N, P : songuyen;
Tham chiếu phần tử của mảng một chiều được xác định bởi tên biến mảng cùng với chỉ số, được viết trong cặp ngoặc [ và ].
Ví dụ 3: Tham chiếu phần tử thứ 10 của dãy số nguyên M như ví dụ 2 được viết là M[10] 
Chỉ số phần tử 
1
2
10
24
25
Mảng M
2
6
15
-9
14
M[10]
Hình 1: Minh họa tham chiếu tới mảng một chiều
2.3.1.2. Kiểu xâu
a. Khái niệm
Xâu là dãy các ký tự trong bộ mã ASCII, mỗi ký tự là một phần tử của xâu. Số lượng ký tự trong xâu được gọi là độ dài của xâu. Xâu có độ dài bằng 0 được gọi là xâu rỗng.
Bản chất của kiểu xâu là kiểu mảng một chiều mà mỗi phần tử là một kí tự. Dựa vào điều này giáo viên cần gợi ý để HS nhận xét và thấy rõ được đặc điểm của kiểu xâu.
Từ cách dẫn dắt đặt vấn đề trên HS có thể hiểu và xem xâu kí tự là một mảng một chiều mà mỗi phần tử là một kí tự. Điều đó sẽ có ích rất nhiều trong việc sử dụng các câu lệnh lặp để duyệt qua các kí tự để tham chiếu đến một kí tự nào đó trong xâu.
Mặc dù xâu có thể xem như mảng một chiều, tuy nhiên khi làm việc với dãy hữu hạn các kí tự mà xem như một xâu thì người lập trình được sử dụng rất nhiều câu lệnh cũng như các thủ tục và hàm, điều này sẽ thuận lợi hơn rất nhiều trong khi viết chương trình. Từ đó có thể nhấn mạnh để HS hiểu rõ hơn về vai trò của kiểu xâu
b. Khai báo
Biến kiểu xâu được khai báo như sau:
Var : String [];
Trong đó: Độ dài lớn nhất của xâu không vượt quá 255. Trong mô tả xâu có thể bỏ qua phần khai báo độ dài, khi đó độ dài lớn nhất của xâu sẽ nhận giá trị ngầm định là 255.
Ví dụ: 
	Var 	S : String [30];
	S1: String; {Nghĩa là S1 có độ dài ngầm định là 255}
2.3.1.3. Chương trình con 
Ngoài các nội dung đã giới thiệu ở trên thì chương trình con là một nội dung mà HS khó tiếp cận nhất trong nội dung tin học 11. Vì đây là phần lập trình có cấu trúc. Vì vậy, hiểu chi tiết biến, về cấu trúc của chương trình con dạng thủ tục và hàm, về lời gọi chương trình con cũng như cách truyền tham số cho chương trình con sẽ mang tính quyết định trong việc viết chương trình có sử dụng chương trình con. Ta sẽ xét cụ thể từng phần như sau:
Cấu trúc của chương trình con
Cấu trúc của chương trình con tương tự như cấu trúc của một chương trình, nhưng nhất thiết phải có tên và phần đầu để khai báo tên, nếu là hàm thì phải khai báo kiểu dữ liệu trả về của hàm. Cấu trúc của chương trình con như sau:
[]
Tham số hình thức
Các biến được khai báo cho dữ liệu vào/ra được gọi là tham số hình thức của chương trình con.
Các biến được khai báo để dùng riêng trong chương trình con được gọi là biến cục bộ.
Biến toàn cục là biến được dùng trong chương trình chính và các chương trình con đều được sử dụng biến toàn cục.
Tham số thực sự
Để thực hiện một chương trình con, ta cần phải có lệnh gọi nó gồm tên chương trình con với tham số (nếu có) là các hằng và các biến chứa dữ liệu vào và ra tương ứng với các tham số hình thức được đặt trong cặp ngoặc (và). Các hằng và biến này được gọi là các tham số thực sự.
Sau khi chương trình con kết thúc, lệnh tiếp theo lệnh gọi chương trình con sẽ được thực hiện.
Cấu trúc của thủ tục
Thủ tục có cấu trúc như sau:
	Procedure [()];
	[]
	Begin
	[]
	End;
Trong đó:
Danh sách tham số có thể có hoặc không.
Phần khai báo: dùng để xác định các hằng, kiểu, biến và cũng có thể là các chương trình con khác được sử dụng trong thủ tục.
Cấu trúc của hàm
Hàm có cấu trúc như sau:
	Function [()]:;
	[]
	Begin
	[]
	 := ;
	End;
Cũng giống như thủ tục, nếu hàm không có tham số hình thức thì không cần có danh sách tham số.
Để làm rõ những nội dung đã trình bày ở trên, SKKN giới thiệu một số bài tập và các bước tiến hành để lập trình giải một số bài toán cụ thể sau:
2.3.2. Một số bài tập
Bài tập 1: Viết chương trình nhập vào dãy số nguyên gồm n phần tử. Tìm chỉ số (vị trí) và giá trị lớn nhất của dãy số vừa nhập rồi đưa kết quả ra màn hình.
	Đối với bài toán này, tôi yêu cầu học sinh nhắc lại các bước: xác định bài toán, ý tưởng và thuật toán (đã được nghiên cứu trong chương trình tin học 10). Sau đó học sinh dựa vào thuật toán để đưa ra những câu lệnh cơ bản phải sử dụng để lập trình và cuối cùng là chỉnh sửa để được một chương trình hoàn chỉnh.
*. Xác định bài toán:
- Input: Nhập n (n Î Z+) và dãy số nguyên: a1, a2, , an
- Output: Chỉ số và giá trị lớn nhất trong dãy số đã cho.
*. Ý tưởng:
Khởi tạo Max = a1, vt =1
Lần lượt với i từ 2 đến n, so sánh giá trị số hạng ai với giá trị Max, nếu ai > Max thì Max nhận giá trị mới là ai và vt = i.
*. Thuật toán:
Bước 1: Nhập n và dãy số a1, a2, , an 
Bước 2: Max ¬ a1, vt ¬ 1, i ¬ 2;
Bước 3: Nếu i > N thì đưa ra giá trị Max và vt rồi kết thúc;
Bước 4:
Bước 4.1. Nếu ai > Max thì Max ¬ ai;
Bước 4.2. i ¬ i +1 rồi quay lại bước 3; [1]
*. Chương trình:
Program baitap1;
Uses crt;
Var 	a: Array [1..100] of Integer;
	i, n, max, vt: integer;
Begin
	Clrscr;
	Write(‘Nhap so luong phan tu: ’); Readln(n);
	For i := 1 to n do
	Begin
	Write(‘a[’, i, ‘] = ’);
	Readln(a[i]);
	End;
	Max := a[1]; 
	vt := 1;
	For i := 2 to n do
	If a[i] > max Then
	Begin
	Max := a[i];
	Vt := i;
	End;
	Write(‘Gia tri lon nhat cua day la: ’, max);
	Write(‘Gia tri lon nhat o tai vi tri: ’, vt);
Readln;
End. [ 2]
Bài tập 2: Viết chương trình nhập vào từ bàn phím một xâu S. Thay thế tất cả các cụm kí tự ‘anh’ bằng cụm kí tự ‘em’ rồi đưa kết quả ra màn hình.
Đối với bài toán này, tôi yêu cầu học sinh làm các bước: xác định bài toán, ý tưởng và thuật toán. Sau đó học sinh dựa vào thuật toán để đưa ra những câu lệnh cơ bản có thể sử dụng để lập trình và cuối cùng là chỉnh sửa để được một chương trình hoàn chỉnh.
*. Xác định bài toán:
Input: Nhập một xâu S
Output: Thay thế tất cả các cụm kí tự ‘anh’ bằng cụm kí tự ‘em’.
*. Ý tưởng:
Tìm vị trí xâu con ‘anh’ trong xâu S đã cho;
Xóa xâu con này đi rồi chèn xâu ‘em’ vào vị trí đó
Lặp lại quá trình này cho đến khi không tìm thấy xâu ‘anh’ cần thay thế trong xâu S nữa.
*. Thuật toán:
Bước 1: Nhập xâu S
Bước 2: Chừng nào còn tìm thấy xâu con ‘anh’ trong xâu S thì còn làm các công việc sau:
Bước 2.1: Tìm vị trí bắt đầu của xâu ‘anh’ trong xâu S;
Bước 2.2: Xóa xâu ‘anh’ vừa tìm thấy;
Bước 2.3: Chèn xâu ‘em’ vào xâu S tại vị trí trước đây xuất hiện xâu ‘anh’
Bước 3: In kết quả
*. Chương trình:
Program Baitap2;
Uses crt;
Var	s: string;
	Vt: byte;
Begin
	Write(‘Nhap xau S: ’); Readln(s);
	While pos (‘anh’, s) 0 Do
	Begin
	Vt := pos(‘anh’, s);
Delete(s,vt,3)
	Insert(‘em’,s,vt);
	End;
	Write(‘Xau sau khi duoc thay the la: ’, s);
Readln;
End. [2] [3]
Bài tập 3: Viết chương trình nhập vào dãy số nguyên có n phần tử. Ghi dãy số nguyên vừa nhập vào tệp có tên là VIDU.INP
Đối với bài toán này, tôi yêu cầu học sinh làm các bước: xác định bài toán, ý tưởng và thuật toán. Sau đó học sinh dựa vào thuật toán để đưa ra những câu lệnh cơ bản có thể sử dụng để lập trình và cuối cùng là chỉnh sửa để được một chương trình hoàn chỉnh.
*. Xác định bài toán:
Input: Nhập N và dãy số nguyên a1, a2, , a3
Output: Tệp VIDU.INP chứa dãy số vừa nhập. 
*. Ý tưởng:
Gắn tên tệp và mở tệp để ghi;
Nhập n (số lượng phần tử) 
Nhập dãy số và ghi dữ liệu vào tệp
Đóng tệp
* Thuật toán:
Bước 1: Gắn tên tệp Assign(f1, ‘C:\VIDU.INP’);
Bước 2: Mở tệp để ghi Rewrite(f1);
Bước 3: Nhập n (số lượng phần tử);
Bước 4: i ¬ 1;
Bước 5: Nếu i > n thì sang bước 7
Bước 6: 
Bước 6.1: Nhập giá trị cho dãy số và ghi vào tệp f1;
Bước 6.2: i ¬ i + 1 quay lại bước 5;
Bước 7: Đóng tệp
*. Chương trình:
Program Baitap3;
Uses crt;
Var	f: text;
	a : Array[1..100] of Integer;
	i, n : Integer;
Begin
	Clrscr;
	Assign(f, ‘C:\VIDU.INP’);
	Rewrite(f);
	Write(‘Nhap so luong phan tu: ’);
	Readln(n);
	For i := 1 to n do
	Begin
	Write(‘a[’, i , ‘]= ’);
	Readln(a[i]);
	Write(f, a[i]:4); 
	End;
Close(f);
Readln;
End. [5]
Ở trong chương trình trên, khi thực hiện thủ tục rewrite(f) nếu thư mục gốc của đĩa C chưa có tệp VIDU.INP thì tệp sẽ được tạo với nội dung rỗng. Nếu đã có, thì nội dung cũ sẽ bị xóa để chuẩn bị ghi dữ liệu mới vào.
Bài tập 4: Viết chương trình nhập vào hai số nguyên dương a và b. Tính bội chung nhỏ nhất của hai số đó rồi đưa kết quả ra màn hình.
Đối với bài toán này học sinh có thể làm theo hai cách. Tuy nhiên tôi thường hướng dẫn HS những lớp tôi dạy là viết bằng cách 2.
Cách 1:
*. Xác định bài toán:
Input: Nhập a, b với a, b Î Z+
Output: BCNN(a,b) = ?
*. Ý tưởng:
Trong khi ab , nếu a>b thì aß a-b; ngược lại thì bß b-a cho đến khi a=b thì UCLNß a
BCNN được tính là tích của a*b chia cho UCLN(a,b)
*. Thuật toán:
Bước 1: Nhập a, b với a, b Î Z+;
Bước 2: Nếu a = b thì lấy giá trị chung này làm UCLN rồi chuyển sang bước 5;
Bước 3: Nếu a > b thì a ¬ a – b ngược lại b ¬ b – a;
Bước 4: Quay lại bước 2;
Bước 5: BCNN ¬ a*b / UCLN (a,b) rồi kết thúc.
*. Chương trình:
Program Baitap4-c1;
Uses crt;
Var	a, b, m, n, BCNN: integer;
Begin
	Clrscr;
	Write(‘Nhap a va b: ’); 
	Readln(a, b);
	m:= a; n:= b;
	While m n do
	If m > n Then m := m - n Else n := n – m;
	BCNN := a*b div m;
	Write(‘BCNN cua ’, a, ‘va ’, b, ‘ la: ’, BCNN)
Readln;
END. 
Với cách này, mặc dù HS xây dựng thuật toán đúng. Nhưng nếu không để ý thì đa số HS dễ bị sai kết quả khi tính tích của a*b. Vì: Nếu không lưu giá trị ban đầu của a và b thì sau quá trình tính toán giá trị của a và b bị thay đổi. Do đó, đối với bài toán này, tôi hay hướng dẫn HS những lớp tôi dạy là viết bằng cách 2 là sử dụng chương trình con.
Cách 2:
Nên viết hàm tính UCLN của hai số nguyên dương vì chương trình con cần trả về một giá trị;
Hàm tìm BCNN của hai số nguyên dương a, b cần sử dụng hàm UCLN(a,b) đã viết ở trên.
Sau đây là thứ tự các bước tiến hành để lập trình bài toán này.
*. Xác định bài toán:
Input: Nhập a, b với a, b Î Z+
Output: BCNN(a,b) = ?
*. Ý tưởng:
Trước tiên, xây dựng hàm tìm UCLN(a,b)
BCNN được tính là tích của a*b chia cho UCLN(a,b)
*. Thuật toán:
Bước 1: Nhập a, b với a, b Î Z+;
Bước 2: Nếu a = b thì lấy giá trị chung này làm UCLN rồi chuyển sang bước 5;
Bước 3: Nếu a > b thì a ¬ a – b ngược lại b ¬ b – a;
Bước 4: Quay lại bước 2;
Bước 5: BCNN ¬ a*b / UCLN (a,b) rồi kết thúc.
*. Chương trình:
Program Baitap4;
Uses crt;
Var	a, b : integer;
Function UCLN (m, n: Integer) : Integer;
Begin
	While m n do
	If m > n Then m := m - n Else n := n – m;
	UCLN := m;
End;
Function BCNN (m, n: Integer) : Integer;
Begin
	BCNN := m*n div UCLN(m, n);
End;
{Chuong trinh chinh}
BEGIN
	Clrscr;
	Write(‘Nhap a va b: ’);
	Readln(a, b);
	Write(‘BCNN cua ’, a, ‘va ’, b, ‘ la: ’, BCNN(a,b));
Readln;
END. [5] [6]
Bài tập 5: Viết chương trình xóa các ký tự chữ số trong một xâu ký tự được nhập từ 

Tài liệu đính kèm:

  • docskkn_mot_so_giai_phap_giup_hoc_sinh_xay_dung_chuong_trinh_du.doc