MỤC LỤC

Chương 1. TỔNG QUAN

1.1. Lý do chọn sáng kiến kinh nghiệm

Tin học đang phát triển ngày ngày càng nhanh và trở thành nhân tố vô cùng cần thiết trong mọi lĩnh vực. Trong đó tin học được sử dụng phổ biến và đặc biệt quan trọng trong giáo dục. Tin học được đưa vào chương trình tin học nhà trường cũng như hỗ trợ giảng dạy. Cùng với đó, Trong những năm học gần đây Bộ GD&ĐT đang tiến hành đổi mới phương pháp dạy học và một trong những phương pháp đó là phát triển khả năng tư duy, sáng tạo của học sinh; lấy học sinh làm trung tâm; tránh tình trạng thầy đọc trò chép một cách thụ động; hướng học sinh đến việc tự làm chủ kiến thức của mình, tự tìm tòi khám phá kiến thức cho bản thân mình.

Theo phương pháp trên thì ngoài việc cung cấp kiến thức cho học sinh người thầy còn phải biết phát huy khả năng tư duy cho học sinh. Trong quá trình dạy học tôi nhận thấy một điểm hạn chế của học sinh là khi các em tiếp xúc với ngôn ngữ lập trình pascal thì hầu hết các em đều thấy nó khó, khó nhớ, khó áp dụng. Chính vì lí do đó mà khi học nội dung này các em chỉ học cho xong, học đối phó với thầy cô, các em cố tìm những đoạn mã lệnh rồi gõ theo và chạy chương trình cho có kết quả mà cũng không cần biết những đoạn mã lệnh đó làm việc như thế nào. Đôi với những học sinh khá hơn thì khi các em có tìm ra lời giải cho một bài toán thì các em đã vội hài lòng với kết quả mình đạt được mà không tìm hiểu thêm liệu có cách giải nào hay hơn không? Có thể cải tiến chương trình cho hiệu quả, ngắn học hơn không?

Từ những thắc mắc đó, và sau một thời gian giảng dạy nội dung lập trình pascal cho đối tượng là học sinh lớp 8 tôi đã rất băn khoăn. Phải làm gì để học sinh của tôi có thể thay đổi cách nhìn nhận với môn học và cách học với môn lập trình này. Sau một thời gian suy nghĩ tôi cho rằng muốn thay đổi được các em thì trước tiên người thầy phải thay đổi, thay đổi cách tiếp cận nội dung, thay đổi phương pháp. Phải làm thế nào để các em có thể yêu thích môn học này, có yêu thích hứng thú thì các em mới có thể tập trung học tập nghiêm túc được, các em sẽ không còn học đối phó nữa. Khi các em yêu thích thì hãy hướng các em đi từ việc đơn gian tới phức tạp, nhìn nhận vấn đề hay giải các bài toán bằng nhiều cách để từ đó các em lĩnh hội được đầy đủ và chủ động kiến thức môn học. Từ những lí do

trên tôi quyết định nghiên cứu và thực hiện sáng kiến “ RÈN LUYỆN TƯ DUY THUẬT TOÁN TRONG HỌC LẬP TRÌNH PASCAL - TIN HỌC 8 TẠI TRƯỜNG PT THỰC HÀNH CHẤT LƯỢNG CAO NGUYỄN TÁT THÀNH” nhằm giúp học sinh lớp 8 khắc phục được những hạn chế nêu trên và tạo sự ham mê yêu thích của học sinh với môn học lập trình này.

1.2. Cơ sở lý luận 1.2.1. Khái niệm thuật toán

Trong bài viết này tôi không đi sâu vào lí thuyết thuật toán, do vậy không đề cập đến khái niệm hình thức chính xác của thuật toán. Chúng ta hãy xem xét một số định nghĩa (không hình thức) ít nhiều khác nhau của khái niệm thuật toán nhưng cùng nêu bản chất mô tả một cách thức mà một nhiệm vụ hay một tiến trình được thực hiện như thế nào của thuật toán. Xét một số định nghĩa về thuật toán sau:

Định nghĩa 1 (K.Rosen): Một thuật toán là một thủ tục xác định để giải một bài toán, sử dụng một số hữu hạn bước. Mỗi bước có thể gồm một hoặc một số thao tác/phép toán.

Định nghĩa 2 (G.Brookshear): Một thuật toán là một tập hợp có thứ tự các bước không nhập nhằng, thực hiện được, xác định một tiến trình có kết thúc.

Định nghĩa 3 (A.V. Aho, J.E.Hopcroft,J.D.Ullman): Thuật toán là một dãy hữu hạn các câu lệnh, mỗi câu lệnh đều có một ý nghĩa rõ rằng và có thể được thực hiện với một lượng công sức hữu hạn trong một thời gian hữu hạn.

Qua một số định nghĩa nêu trên, có thể thấy các thuật toán có các

tính chất chung như sau:

Đầu vào: Một thuật toán có các giá trị đầu vào được lấy từ một tập

xác định.

Đầu ra: Từ một tập các giá trị đầu vào, thuật toán sản sinh ra các giá trị đầu ra thuộc một tập xác định. Các gía trị đầu ra chứa lời giải của bài toán.

Tính xác định: Các bước trong thuật toán phải được định nghĩa

chính xác.

Tính hữu hạn: Một thuật toán phải cho kết quả mong đợi sau một

số hữu hạn bước với mọi đầu vào thuộc tập các dữ liệu vào hợp lệ.

Tính hiệu quả: Phải có khả năng thực hiện mỗi bước của thuật toán

một cách đúng đắn và trong một thời gian chấp nhận được.

Tính tổng quát (Phổ dụng): Thuật toán phải được áp dụng cho mọi bài toán có chung một dạng mà không phải chỉ cho riêng một tập các dữ liệu vào đặc biệt.

1.2.2. Đánh giá thuật toán

Một bài toán có thể có nhiều thuật toán khác nhau để giải. Có các câu hỏi nảy sinh một cách tự nhiên: “Thuật toán nào tốt hơn trong số các thuật toán cùng giải quyết một bài toán đó?.” hoặc “Thuật toán nào là chấp nhận được”. Những câu hỏi như vậy liên quan đến việc ước lượng tài nguyên máy tính cần thiết để thực hiện một thuật toán. Các tài nguyên máy tính được quan tâm là thời gian, dung lượng nhớ, phần cứng.

Đứng trước một bài toán cho máy tính thì thuật toán cần phải được thiết kế hay xây dựng như thế nào để thực hiện nhiệm vụ. Việc xây dựng một thuật toán là một công việc khó khăn không chỉ đối với học sinh mà đôi khi ngay cả với giáo viên cũng khó xây dựng được một thuật toán tối ưu. Công việc này đòi hỏi phải có sáng tạo, sự am hiểu lĩnh vực của bài toán và không thể đưa ra một tập các quy tắc chung. Nói cách khác, không có thuật toán nào cho việc thiết kế thuật toán. Do đó việc rèn luyện tư duy thuật toán cho học sinh là hết sức cần thiết. Ở cấp học trung học cơ sở thì việc các em tự thiết kế một thuật toán để giải quyết bài toán mới mẻ là khó khăn, chúng ta chỉ có thể hướng dẫn các em làm quen với các bài toán mẫu với thuật toán có sẵn để hình thành tư duy thuật toán, từ đó hình thành thói quen lập trình giải quyết bài toán khi đã xây dựng được thuật toán.

1.3. Phương pháp tiếp cận để tạo ra sáng kiến

- Nghiên cứu lý thuyết : Tìm hiểu các tài liệu, giáo trình liên quan tới nhiệm vụ nghiên cứu.

- Nghiên cứu thực tiễn: Thông qua việc trực tiếp giảng dạy, trao đổi, phóng vấn trực tiếp với học sinh qua từng bài dạy để nắm được mức độ nhận thức của các em, biết được vấn đề khó khăn mà các em đang gặp phải từ đó tìm cách giải quyết vấn đề.

1.4. Mục tiêu của sáng kiến kinh nghiệm

Thông qua việc trình bày về thuật toán, cách xác định bài toán để hình thành thói quen tư duy lập trình cho mỗi học sinh. Từ việc học sinh rất khó xác định bài toàn, bỡ ngỡ khi gặp một bài toán hoặc khi đã có thuật toán thì học sinh cũng không biết ngôn ngữ hóa thuật toán thế nào để thành một bài toán trên ngôn ngữ lập trình Pascal, Thì học sinh có thể hình thành tư duy thuật toán, biết cách xác định rõ một bài toán trước khi chuyển hóa bài toán thành ngôn ngữ lập trình. Mong muốn của tác giả là sau khi hướng dẫn các em học sinh cách xác định một bài toán. Cụ thể là thông qua một số ví dụ cụ thể thì các em từng bước hình thành được kỹ năng lập trình với ngôn ngữ lập trình pascal.

Chương 2. MÔ TẢ SÁNG KIẾN

2.1. Vấn đề của sáng kiến

Tin học là một môn học mới do đó học sinh còn bỡ ngỡ, chưa thấy hết tầm quan trọng của môn học. Nội dung học lập trình tin học 8 lại là nội dung mới lạ đối với hầu hết học sinh với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu đối với học sinh mới tiếp cận lần đầu. Chính vì vậy khi gặp một bài toán học sinh không biết phải giải quyết bài toán thế nào. Học sinh hoàn toàn xa lạ với những khái niệm như “xác định bài toán” hay “Xây dựng thuật toán”. Học sinh hoàn toàn bỡ ngỡ với việc chuyển hóa các bước giải bài toán thông thường trong toán học sang ngôn ngữ lập trình Pascal trong tin học. Bên cạnh những khó khăn đó thì cũng có nhiều mặt thuận lợi như đối tượng học sinh ngoan, nhiều em ham học hỏi. Nhà trường cũng đầu tư trang thiết bị dạy học hiện đại, phòng máy đáp ứng được nhu cầu thực hành của các em học sinh.

Đối với giáo viên: Tính tới năm nay thì mới là khóa học thứ 2 của trường học nội dung lập trình pascal. Do đó, bản thân tôi cũng còn thiếu kinh nghiệm trong quá trình giảng dạy, đôi khi còn phụ thuộc nhiều vào sách giáo khoa và giáo án, chính vì thế mà khi tiếp cận một bài toán nào đó thì thường là hướng dẫn cho học sinh lời giải bài toán đó theo một phương pháp nhất định, cơ bản nhất để các em có thể hiểu và giải được bằng ngôn ngữ lập trình Pascal. Tuy nhiên với cách làm đó tôi nhận thấy học sinh bị phụ thuộc nhiều vào lời giải của thầy và không phát huy được khả năng tư duy và sáng tạo. Các em cố gắng học thuộc cấu trúc một số câu lệnh và các ví dụ áp dụng mà không tự tìm hiểu thêm các dạng bài khác, hoặc cách giải khác hiệu quả hơn, thú vị hơn. Trong tiết thực hành một số em gõ chương trình một cách máy móc các nội dung của bài thực hành từ sách giáo khoa chứ không thực sự tìm hiểu xem tại sao lại viết câu lệnh này, câu lệnh này mục đích để làm gì, câu lệnh này sẽ cho chúng ta kết quả gì, các học sinh hầu như chưa ý thức việc học của mình, hay nói cách khác học sinh chưa có động cơ, thái độ học tập đúng đắn. Để dẫn tới điều này có thể do các em chưa tìm thấy niềm vui và sự đam mê đối với môn học, các em nghĩ môn tin học là môn phụ. Mặt khác nội dung môn tin học 8 lại đòi hỏi khá cao. Nếu học sinh chỉ dừng lại ở nội dung kiến thức trong chương trình sách giáo khoa thì sẽ

không đáp ứng được yêu cầu đặt ra như thi học sinh giỏi văn hóa lớp 9, thi tin học trẻ, thi vào trường chuyên tin lớp 10.

2.2. Các biện pháp nâng cao hiệu quả 2.2.1. Thay đổi cách nhìn và tạo niềm đam mêm của học sinh với môn

học.

- Vì sao môn Pascal lại khó?

Một thói quen khó thay đổi của học sinh đó là cách nhìn nhận về môn tin học, theo các em thì môn tin học là học những thao tác sử dụng đơn giản như: cách sử dụng internet, sử dụng hệ điều hành window, chương trình soạn thảo văn bản MS Word, chương trình soạn thảo trình diễn MS PowerPoint … Đây là những phần học ít đòi hỏi ở học sinh tư duy, mà chỉ cần học kĩ và nhớ thao tác, thực hành nhiều lần thì sẽ thành kỹ năng và thành thạo.

Nhưng khi học bộ môn lập trình Passal chương trình lớp 8 ở THCS thì hầu như các em bị “choáng” vì bộ môn rất “mới”, và cách học cũng “mới”. Học những thao tác và thực hành nhiều dường như không còn phù hợp nữa. Học thuộc bài theo kiểu thuộc lòng chỉ phù hợp với nội dung là các cấu trúc câu lệnh chứ không thể áp dụng điều đó vào từng bài toán được. Lúc này các em cần phải học cách tư duy logic, tìm hiểu thuật toán, và viết những dòng lệnh máy tính trên cơ sở thuật toán đã xây dựng và hơn thế nữa các câu lệnh cần phải có độ chính xác tuyệt đối đến từng đấu chấm, dấu phẩy.

Với tâm lí thông thường các em học sinh coi tin học là môn phụ không quan trọng nên nhiều em chủ quan không dành đủ thời gian để học nên không hiểu bài và dần bị mất căn bản. Đây cũng là lí do mà nhiều em luôn kêu học lập trình pascal khó quá. - Tại sao lại học Pascal?

Pascal là một ngôn ngữ lập trình cấp cao do Niklaus Wirth, giáo sư điện toán trường đại học Kỹ thuật Zurich (Thụy sĩ) thiết kế và công bố vào năm 1971 và đặt tên là Pascal để tưởng niệm nhà Toán học và Triết học nổi tiếng Blaise Pascal. Đây là một ngôn ngữ lập trình có cấu trúc đơn giản, rõ ràng, cấu trúc chặt chẽ, dễ viết, dễ hiểu cũng như dễ sửa chữa, cải tiến. Do đó Pascal được nhiều quốc gia trong đó có Việt Nam đưa vào

chương trình giảng dạy tin học ở các trường phổ thông và đại học như một môn học cơ sở, đại cương.

Ở cấp học phổ thông chúng ta không chú trọng học chuyên sâu về ngôn ngữ lập trình để tạo ra các phần mềm máy tính mà tập trung rèn luyện kĩ năng tư duy logic, tư duy hệ thống và sáng tạo không chỉ để giải quyết những vấn đề trong tin học mà đây còn là những kĩ năng vô cùng quan trọng để giải quyết nhiều vấn đề trong cuộc sống.

Học Pascal giúp cho ta hiểu được cách làm việc của máy tính, cách giao tiếp để ra lệnh cho máy tính làm việc theo sự điều khiển của con người thông qua ngôn ngữ lập trình. Các em có thể tạo ra các chương trình thú vị bằng cách sử dụng các câu lệnh Pascal. Cũng giống như những môn học khác như toán học, vật lý, hóa học … khi các em đã thực sự hiểu và yêu thích bộ môn tin học các em sẽ tìm thấy nhiều niềm vui, sự đam mê khi tìm hiểu và khám phá những điều mới mẻ nhưng đầy hấp dẫn trong bộ môn tưởng chừng như khô khan này. - Tạo sự yêu thích khi học lập trình Pascal

Lập trình là môn học đòi hỏi học sinh phải giải các bài toán bằng cách viết chương trình trên máy tính. Đây là môn học mới đối với học sinh nên phần đông các em không nắm bắt được kiến thức để vận dụng vào giải bài tập. Về ngôn ngữ lập trình Pascal đang gây khó khăn cho các học sinh mới bắt đầu tìm hiểu học lập trình. Vì Pascal có nhiều hạn chế về mặt hình thức như: Giao diện là dòng lệnh, khó nhớ và không thân thiện, dễ gây sự nhàm chán cho học sinh, về cú pháp thì chặt chẽ chỉ cần thiếu một dấu cũng báo lỗi sai trong chương trình, toàn bộ thông báo lại bằng ngôn ngữ tiếng anh đó cũng là hạn chế và khó khăn cho học sinh.

Qua một thời gian giảng dạy ở bộ môn này, tôi nhận thấy khi học Pascal học sinh thường không thích thú với môn học này vì nhiều lý do như khó hiểu, đòi hỏi tư duy, … nên việc viết được một chương trình chạy được trên máy tính đối với các em rất khó khăn. Do đó để học tốt đòi hỏi học sinh phải có hứng thú. Cốt lõi của việc đổi mới phương pháp dạy học là giúp học sinh yêu thích, hứng thú với môn học, hướng tới việc học tập chủ động, chống lại thói quen học tập thụ động. Để khắc phục điều này thì chúng ta cần giải quyết được các vấn đề sau: * Vấn đề 1: Học sinh chúng ta vừa đọc xong đề bài là kêu khó, không chịu tìm hiểu xem đề bài yêu cầu gì. Nói cụ thể hơn là sau khi đọc xong bài toán

thì học sinh không định hướng được là phải bắt đầu từ đâu, phải sử dụng cấu trúc dữ liệu nào hay cấu trúc lệnh nào để giải quyết. Để giúp học sinh vấn đề này thì sau khi đọc đề bài xong giáo viên hướng dẫn các em xác định rõ bài toán (xác định thành phần Input và Output của bài toán). Từ Inphut và Output của bài toán giáo viên yêu cầu học sinh gạch ra giấy chỉ ra từng bước để giải quyết bài toán rồi từ đó đưa ra các thuật toán, từng bước tinh chỉnh thuật toán tìm được thuật toán đúng đắn nhất cuối cùng là viết chương trình hoàn chỉnh. VD: Khi yêu cầu học sinh lập trình tính chu vi và diện tích hình tròn với bán kính nhập vào từ bàn phím. - Để giải bài này giáo viên yêu cầu học sinh nêu rõ Input vào Output bài toán. Input: Bán kính hình tròn Output: Diện tích và chu vi của hình tròn - GV yêu cầu HS gạch ra các công việc cần làm để giải quyết bài tập này ? Các công việc cần làm để giải quyết bài tập này : + Nhập bán kính R, + Tính diện tích hình tròn + Tính chu vi hình tròn + In ra diện tích và chu vi hình tròn – Gv gợi ý yêu cầu HS nêu công thức tính diện tích và chu vi hình tròn? Diện tích S = Pi*R^2 Chu vi Cv = 2*Pi*R – Với những yêu cầu cụ thể đó, giáo viên yêu cầu học sinh gõ các câu lệnh để hoàn thành bài toán. Có thể gợi ý cụ thể trong bài toán này: Cần thực hiện lệnh nhập dữ liệu như thế nào? Dùng lệnh gán để tính chu vi và diện tích với các công thức toán học đã có. Sau khi tính toán xong thì dùng lệnh in kết quả ra màn hình. * Vấn đề 2: Hầu như các em học sinh khi thực hành lập trình đều đùn đẩy cho nhau vì thiếu tự tin và không biết phải gõ gì vào máy, sợ gõ sai lỗi chính tả các câu lệnh hay từ khóa. Để giúp các em vấn đề này thì giáo viên nên khuyến khích các em cứ mạnh dạn gõ, một lần sai, hai lần sai,… rồi từ từ các em sẽ gõ đúng câu lệnh, có như vậy các em mới nhớ được câu lệnh, từ khóa và chủ động hơn trong việc gõ các câu lệnh giải quyết bài toán. Lúc đầu giám sát quá trình làm việc của các em, sửa các lỗi sai, về sau để các em tự làm việc chỉ sửa lỗi khi các em gặp khó khăn thực sự, không giải quyết được bắt buộc cần có hướng dẫn của giáo viên. Khi các

em tự gõ chương trình các em mới thực sự hiểu chương trình đó hoạt động thế nào chứ không thể nhìn mà hiểu được. Chỉ có tự gõ các lệnh thì mới nhớ được và hiểu từ đó sẽ tự tin khi ngồi lập trình trước máy tính. Khi tự tin làm việc với máy tính thì các em mới say mê và yêu thích môn học.

* Vấn đề 3: Khi thực hành các em chỉ gõ cho xong nội dung của bài thực hành, hoặc tìm kiếm những bài mẫu có sẵn và gõ theo, sau đó các em kiểm soát lỗi chính tả rồi chạy thử, hiện kết là coi như xong bài tập. Học như vậy các em hoàn toàn thụ động, chứ không thực sự tìm hiểu xem tại sao lại có câu lệnh đó, tại sao phải dùng cấu trúc điều khiển này mà không dùng cấu trúc điều khiển kia, tới câu lệnh này thì kết quả sẽ như thế nào, … Chính vì vậy mà các em không hiểu bài và không thể tự sửa lỗi nếu gõ sai. Hướng dẫn các em cách chạy chương trình từng bước và cách quan sát giá trị các tham số cần thiết. Hướng dẫn các em “Biến mình thành cái máy tính” để thực hiện lần lượt các câu lệnh từ trên xuống dưới xem nếu là máy thì tại bước này sẽ thực hiện công việc gì, kết quả sẽ là gì? Có như vậy học sinh mới thực sự hiểu vấn đề, hiểu cách làm việc của ngôn ngữ lập trình pascal.

ớ ệ ệ ậ ỹ 2.2.2. Các cách tiếp cận bài toán 2.2.2.1. Rèn luy n k  năng l p trình v i câu l nh đi u ề  ki n ệ

ố ớ ọ ớ ấ ỳ ộ ấ ệ

ử ụ ể ọ ư ế ấ ỡ ề   Đ i v i h c sinh, khi làm quen v i b t k  m t c u trúc l nh nào cũng đ u ể t cách s  d ng c u trúc đó. Đ  h c sinh có th ỡ b  ng  vì các em ch a quen và bi

ậ ụ ề ầ ụ ể ể ệ ấ ừ hi u và v n d ng các c u trúc l nh vào t ng bài toán c  th  thì đi u đ u tiên giáo

ộ ấ ẽ ư ể ệ ả ấ ệ viên ph i giúp các em hi u rõ c u trúc l nh, thu c c u trúc l nh sau đó s  đ a ra

ạ ố ế ể ủ ứ ụ ệ ậ ấ

ế ả ề ặ ấ ự ả   các d ng bài t p áp d ng c u trúc l nh đ  c ng c  ki n th c cho các em. Ph i ừ    đó ữ ậ t c  v  m t c u trúc ngôn ng  l p trình và phân tích bài toán t ệ th c hi n chi ti

ẽ ấ ụ ẽ ế ả ị ử ụ   xác đ nh rõ bài toán s  cho k t qu  là gì?  Chúng ta s  l y ví d  bài toán s  d ng

ệ ệ ề câu l nh đi u ki n sau:

ế ươ ậ ố ươ ụ Ví d : Vi t ch ng trình nh p vào 3 s  nguyên d ng a, b, c khác nhau.

ấ ấ ố ố ớ In ra màn hình s  l n nh t và nh ỏ nh t trong 3 s  trên.

ươ * Ph ng pháp 1:

ị ­ Xác đ nh bài toán:

ố ự ậ . Input: Nh p vào máy tính 3 s  t nhiên a, b, c

ố ớ ấ ấ ỏ ố . Output: In ra màn hình s  l n nh t, nh  nh t trong 3 s  a, b, c

ưở ­ Ý t ng:

ố ớ ấ ấ ớ + Tìm s  l n nh t: (a>b) và (a>c) thì a l n nh t; (b>a) và (b>c) thì b l ớn nh t;ấ

ớ ất;

ấ ấ (c>a) và (c>b) thì c l n nh + Tìm s  ố nh  ỏ nh t: (a

(c

Var a,b,c:Integer;

Begin

Writeln(‘Nhap a, b, c:’);

Readln(a,b,c);

If (a>b) and (a>c) Then Writeln(a,’ lon nhat’)

Else If (b>a) and (b>c) Then Writeln(b,’ lon nhat’)

Else Writeln(c,’ lon nhat’) ;

If (a

Else If (b

Else Writeln(c,’ nho nhat’) ; Readln; End.

ươ * Ph ng pháp 2:

ưở ư ộ ọ ị ­ Ý t ng: Cũng là m t bài toán nh  trên, chúng ta cũng xác đ nh cho h c sinh

ể ả ữ ứ ầ ấ ị th y rõ yêu c u bài toán t c là xác đ nh Input và output, nh ng có th  gi ế   i quy t

ư ộ bài toán theo m t cách khác nh  sau:

ế + N u a>b thì ta gán a cho Max, b cho Min, ng ượ ạ c l i thì ta gán Max cho

ố ớ ự ấ ấ ố b, Min cho a {Tìm s  l n nh t và nh ỏ nh t trong hai s  a, b. Sau khi th c hi ện

ậ ượ ị ớ ậ ượ ấ ệ ẽ nh n đ c giá tr  l n nh t, Min s ẽ nh n đ c giá tr ị nhỏ

dòng l nh trên Max s   nhất}.

ế ượ ạ ế + N u c>Max thì ta gán c cho Max, ng i n u c

ị ớ ấ ấ ớ Min {So sánh c v i giá tr  l n nh t (Max) và nh ỏ nh t (Min)}.

ươ ­ Ch ng trình:

Var a,b,c,Max,Min:Integer;

Begin

Write(‘Nhap lan luoc 3 so a, b, c:’);Readln(a,b,c);

If (a>b) Then Begin Max:=a; Min:=b; End

Else Begin Max:=b; Min:=a; End;

If (c>Max) Then Max:=c Else If (c

Write(‘So lon la:’,Max,’ So nho la:’,Min);

Readln;

End.

ươ * Ph ng pháp 3:

ưở ­ Ý t ng:

ế ổ ổ ị ị ị + So sánh giá tr  a và b, n u a>b thì đ i giá tr  a và b. {Sau khi đ i giá tr

ẽ ả ế thì s  cho k t qu  a 

ế ổ ổ ị ị ị + So sánh giá tr  b và c, n u b>c thì đ i giá tr  b và c. {Sau khi đ i giá tr

ế ẽ ạ ư ị ượ ả thì s  cho k t qu  a, b b hay b>a }.

ế ạ ổ ổ ị ị + L i so sánh giá tr  a và b, n u a>b thì đ i giá tr  a và b. {Sau khi đ i giá

ế ẽ ả ị tr  thì s  cho k t qu  a < b và b < c}.

ươ ­ Ch ng trình:

Var a,b,c,tam:Integer;

Begin

Write('Nhap gia tri a, b, c tuong ung: '); Readln(a,b,c);

If a>b Then

begin

Tam:=a; a:=b; b:=tam

end;

If b>c Then

begin

Tam:=b; b:=c; c:=tam

end;

If a>b Then

begin

Tam:=a; a:=b;b:=tam

end;

Write('So nho la:’,a,’ so lon la’,c);

Readln;

End.

ậ ươ ỗ ươ ề =>  Nh n xét: Trong 3 ph ng pháp trên thì m i ph ộ ư   ng pháp đ u có m t  u

ế ể ạ đi m và h n ch  riêng:

ươ ề ệ ệ ạ ọ ­ Ph ủ ồ   ớ ng pháp 1: Giúp h c sinh làm quen v i câu l nh đi u ki n d ng đ  l ng

ề ệ ề ệ nhau và đi u ki n ghép ((a>b) ệ and  (a>c)) trong câu l nh đi u ki n thông qua

phép

toán and.

ươ ớ ệ ử ụ ế ọ ­ Ph

ệ ệ ng pháp 2: Giúp h c sinh làm quen v i l nh gán, s  d ng bi n trung gian   ều Begin Max:=a; Min:=b; End) trong câu l nh đi Max, Min và câu l nh ghép (

kiện.  ươ ề ệ ệ ạ ọ ớ ­ Ph ng pháp 3: Giúp h c sinh làm quen v i câu l nh đi u ki n d ng thi ếu và

ạ ứ ắ ứ ự ế ế ế ị ặ ả ầ ôn l i ki n th c s p x p giá tr  hai bi n theo th  t tăng ho c gi m d n

begin Tam:=a; a:=b; b:=tam end;

ạ ỗ ớ ế ậ ế ể ề Tóm l

ể ở ộ ể ọ ươ ế i: V i m i bài toán n u có th  hãy tìm ra nhi u cách ti p c n khác   ả ng trình khác nhau đ  h c sinh có th  m  r ng kh t ch nhau, các cách vi

ư ư ạ ự ề ấ ở ỗ năng t duy cũng nh  t o s  yêu thích khi tìm th y ni m vui m i cách xây

ạ ơ ỗ ấ ẽ ọ ớ ự   d ng bài toán. Qua đó h c sinh s  có cách nhìn linh ho t h n v i m i c u trúc

ệ ạ ọ ự câu l nh, phát huy tính tích c c và sáng t o cho h c sinh.

ệ ặ   2.2.2.2. Rèn luy n k  năng l p trình v i câu l nh l p

ệ ệ ỹ ặ ậ ấ ớ ơ ả ữ ậ ấ C u trúc l nh l p là c u trúc c  b n trong ngôn ng  l p trình pascal và

ọ ả ộ ượ ớ ấ ấ c u trúc này cũng là c u trúc giúp h c sinh gi ế i quy t m t l ạ   ng l n các d ng

ế ậ ệ ậ ặ ọ ạ bài t p. Tuy nhiên khi ti p c n câu l nh l p này thì h c sinh l i khó hình dung ra

ạ ộ ấ ặ ệ ọ ệ ấ ủ ừ cách ho t đ ng c a t ng c u trúc, đ c bi t là h c sinh khó phân bi

ớ ố ầ ặ ộ ỗ ặ ị ị ặ l p xác đ nh và l p v i s  l n l p không xác đ nh. M t l ọ i mà h c sinh th t c u trúc   ườ   ng

ệ ớ ấ ặ ị ượ ề ặ g p khi làm vi c v i c u trúc l p đó là không xác đ nh đ

ể ừ   ệ c đi u ki n đ  d ng ặ ấ ữ ặ ạ ọ vòng l p. Chính vì nh ng lý do trên mà khi d y cho h c sinh c u trúc l p giáo

ầ ụ ể ể ọ ụ ử ụ ự ể

ả ạ ậ ớ ớ ấ viên c n xây d ng các ví d  s  d ng c u trúc này c  th  đ  h c sinh hi u rõ và   ử ụ   ghi nh  sau đó các em m i hình thành ph n x  và kĩ năng l p trình có x  d ng

ặ ấ c u trúc l p.

ể ể ể ọ ệ ượ ấ ặ Đ  h c sinh có th  hi u rõ và phân bi c c u trúc l p chúng ta có th t đ ể

ọ giao cho h c sinh bài toán sau:

Ví dụ 1: Viết chương trình tính tổng số nguyên từ 1 tới n, n là số nguyên nhập từ bàn phím bằng cách sử dụng cấu trúc lặp For..do, While..do và cấu trúc Repeat ..until.

Với bài toán này cho dù dùng cấu trúc lệnh lặp nào thì cũng cần xác định rõ bài toán với Input: Nhập vào số tự nhiên n, Output: in ra màn hình tổng của các chữ số từ 1 tới n vừa nhập vào.

+ Cấu trúc For..do ta có thể xây dựng chương trình như sau: var i, n: integer; s: real; Begin writeln('nhap so n de tinh tong'); readln(n); s:=0; for i:=1 to n do s:=s+i; writeln('tong tu 1-n la: =',s:2:0); readln; end. + Cấu trúc While ..do ta có chương trình như sau: var i: integer; s: real; begin writeln('nhap so n de tinh tong tu 1-n'); readln(n); s:=0;i:=0; while i<=n do begin i:=i+1; s:=s+i; end; writeln('tong tu 1- ' , n , ' la= ' ,s:5:2); readln; end. + Cấu trúc lệnh lặp Repeat ..until ta có chương trình như sau: var i:integer; s:real; begin write('n= '); readln(n); s:=0; i:=0; repeat i:=i+1; s:=s+i; until i=n; writeln('tong 1- ' , n, '=',s:0:2); readln; end. Trong bài toán nêu trên về cơ bản thì cả 3 cách viết đều cho một kết quả nhưng khi dạy làm quen với cấu trúc lặp thì chúng ta cần khuyên khích

học sinh viết chương trình giải quyết cùng một bài toán nhưng dùng cả 3 cấu trúc lặp. Đối với câu lệnh lặp For .. do thì đại đa số học tiếp cận nhanh hơn và không bị nhầm lẫn, chỉ khi các em chuyển bài toán từ dùng Ror..do sang dùng while ..do và Repeat ..until thì hầu hết các em đều không hiểu rõ vẫn đề là điều kiện gì để vòng lặp có thể dừng. Chính vì lý do đó mà khi giúp các em xây dựng bài toán theo hướng While..do và Repeat..until giáo viên nên nhấn mạnh điểm này. Có thể cho học sinh rơi vào vòng lặp không dừng như ta có thể bỏ qua lệnh làm thay đổi giá trị của biến i (i:=i+1). Khi học sinh chạy thử chương trình sẽ bị lặp và dẫn tới không thoát được, khi đó mới phân tích điều kiện dừng vòng lặp và yêu cầu học sinh gõ lại chương trình, khi đó học sinh mới hiểu rõ được bản chất của hai câu lệnh dạng này đồng thời đó cũng là một kinh nghiệm cho các em khi lập trình mà sử dụng cấu trúc lặp không xác định này.

ố ự ướ ố ớ ỉ ơ  nhiên l n h n 1, ch  có hai c là 1 và chính nó. là s  t

Mặt khác của vấn đề là khi dạy cho học sinh các cấu trúc lệnh lặp thì ngoài việc dạy các em cấu trúc còn phải giúp các em nhận diện bài toán để có thể áp dụng được tốt các cấu trúc lệnh sao cho phù hợp. Khi các em nhận diện được cấu trúc lệnh để giải quyết bài toán thì vấn đề đặt ra là các bài toán đó các em đã giải quyết tốt chưa? Tức là chương trình các em xây dựng đã hoàn hảo chưa? Đến lúc này giáo viên cần giúp các em tinh chỉnh bài toán của các em sao cho tối ưu nhất. Chúng ta sẽ xem xét vấn đề này qua một số ví dụ sau: Ví dụ 2: S  nguyên t ố ố ươ ể ậ ầ ả ố ng N. Ki m tra xem N có ph i là s  nguyên Yêu c u: Nh p vào s  nguyên d

ố ể ả t ế  hay không, thông báo k t qu  sau khi ki m tra.

ị Xác đ nh bài toán:

ộ ố ự ậ ả ố ố Input: Nh p vào m t s  t nhiên N, Output: N có ph i là s  nguyên t hay

không.

ươ * Ph ng pháp 1:

ưở ­ Ý t ng:

ạ ừ ườ ế ợ ế + Cho bi n i ch y t ế  2 đ n n­ 1 {Ta xét tr ng h p n có chia h t cho i hay

ế ộ ơ ế ế ế ế ầ ị

ị ằ không}, n u n chia h t cho i thì ta tăng bi n đ m lên m t đ n v  {ban đ u bi n  ậ đếm nh n giá tr  b ng 0}.

ị ằ ế ể ế ế ế ế ậ ứ + Ki m tra bi n đ m, n u bi n đ m nh n giá tr  b ng không {t c n không chia

ả ố ừ ậ ố ố ế h t cho s  nào trong kho ng t ế  2 đ n n­ 1} v y n là s  nguyên t , ng ượ ại  c l

ị ớ ứ ế ề ế ế ậ ặ ơ ộ ị bi n đ m nh n giá tr  l n h n 0{t c n chia h t cho cho m t ho c nhi u giá tr

ả ậ ả ố ố trong kho ng [2..n­1]} v y n không ph i là s  nguyên t .

ươ

(cid:0) Ch

ng trình:

Var n,i,dem:Integer;

Begin

Write('Nhap gia tri N: ');Readln(n);

If n<2 Then Write(n, Khong phai la so nguyen to') Else

Begin

dem:=0;

For i:=2 To n­1 Do

If n Mod i = 0 Then Inc(dem);

If dem=0 Then Writeln(n, ' La so nguyen to')

Else Writeln(n, ' Khong phai So nguyen to');

End; Readln;

End.

ươ * Ph ng pháp 2:

ứ ế ổ ­ B  sung ki n th c:

ố ố ị ố + N là s  Nguyên t ế  khi n>=2 và n không chia h t cho s  nào có giá tr  trong

ừ ế ự ế ỉ ầ ế ả kho ng t 2 đ n n – 1. Tuy nhiên trên th c t thì ch  c n n không chia h t cho s

ế ố ư ầ ấ ớ ả ừ ố  ỏ ơ    2 đ n s  nguyên g n v i căn n nh t nh ng nh  h n ị nào có giá tr  trong kho n t

n {Trunc(Sqrt(n))}.

ưở ­ Ý t ng:

ư ố ươ ở ế + Gi ng nh  ph ng pháp 1 tuy nhiên

ươ ủ ấ ườ ứ ợ ph ể ng pháp đánh d u c a ki u boolean. T c ta xét tr ử ụ    đây chúng ta không đ m mà s  d ng ế   ng h p n có chia h t

ế ế ấ ả ử ế cho i hay không, n u n chia h t cho i thì ta đánh d u là False {Gi s  bi n KT có

ữ ệ ế ế ể ầ bi u d  li u là Boolean thì n u n chia h t cho i thì KT:=False, ban đ u ta gán

KT:=True}.

ậ ấ ả ứ ế ế ế ể + Ki m tra bi n KT, n u KT là True {t c bi n KT nh n t t c  là True} thì n là

ố ả ố ố ứ ế ố s  nguyên t , ng ượ ạ c l i n không ph i s  nguyên t ậ ớ    {t c bi n KT có nh n l n

ặ ằ ộ ị ơ h n ho c b ng m t giá tr  False}.

ươ ­ Ch ng trình:

Var i,n:Integer; Kt:Boolean;

Begin

Write('Nhap gia tri N: ');Readln(n);

Kt:=True;  If n < 2 Then Kt:=False Else

For i:=2 To Trunc(Sqrt(n)) Do

If n Mod i = 0 Then Kt:=False;

If Kt Then Write(n,' la so nguyen to')

Else Write(n,' Khong la so nguyen to'); Readln;

End.

ậ => Nh n xét:

ươ ọ ổ ơ ị ­ Ph

ứ ế ươ ả ố ng pháp 1: Giúp cho h c sinh có cái nhìn t ng quan h n khi xác đ nh n có   ế   ố ầ ng th c đ m s  l n n có chia h t hay không thông qua ph ố ph i là s  nguyên t

ả ị ừ ố ị cho giá tr  nào trong kho ng t [2..n­1] hay không, theo đ nh nghĩa thì s  nguyên

ố ứ ế ế ố ố ỉ ố ỉ t là s  ch  chia h t cho 1 và chính nó {t c n u N là s  nguyên t ch  khi n chia

ế ậ ả ố ế ế h t cho 1 và n}. V y n u n còn chia h t cho s  nào trong kho ng [2..n­1] thì n

ố ả không ph i nguyên t .

ươ ươ ể ượ ế ề ­ Ph ng pháp 2: Ph ọ ng giáp này giúp h c sinh tìm hi u đ

ứ ủ ề ươ ừ ạ ế ơ h n  trên  n n  ki n  th c  c a  ph ng  pháp  1.  Khi  cho  i  ch y  t ứ   c nhi u ki n th c ế     2  đ n

ố ầ ự ệ ặ ượ ộ ữ ả trunc(sqrt(n)) thì   s  l n th c hi n vòng l p   đ c gi m đi   m t n a, s  ti

ượ ạ ờ ươ ặ ọ ạ ệ ki m đ c th i gian khi ch y ch ng trình; m t khác giúp h c sinh ôn l ẽ ế   t ế   i ki n

ứ ấ ữ ệ ữ ệ ủ ế ể ể ả ộ th c l y k t qu  phép so sánh c a ki u d  li u Boolean, m t ki u d  li u mà

ử ụ ấ ạ ặ chúng ta cũng r t hay s  d ng trong các bài t o vòng l p.

ế ươ ậ ố ươ t ch ng trình nh p vào 2 s  nguyên d ng a, b khác nhau. Tìm

ấ ủ ấ ớ ộ ỏ ố Ví d  3ụ : Vi ướ c chung l n nh t và b i chung nh  nh t c a 2 s  trên.

ị ­ Xác đ nh bài toán:

ậ ố ươ Input: Nh p vào hai s  nguyên d ng a, b

Output: In ra màn hình UCLN(a,b) và BCNN(a,b)

ươ * Ph ng pháp 1:

ưở ­ Ý t ng:

ơ ả ầ ấ ặ ồ ấ ố ớ   Đ u tiên, là cách c  b n nh t. Đó là dùng vòng l p WHILE, r i l y s  l n

ừ ữ ế ằ ạ ỏ ọ tr ế    nh  cho đ n khi chúng b ng nhau. Cách này dành cho nh ng b n h c y u,

ề ế ế ả ạ ố ỡ đ  ph i suy nghĩ nhi u. Tuy nhiên cách này có h n ch  là n u mà 2 s  chênh

ẽ ặ ấ ề ầ ố ớ ề ớ ọ nhau quá l n thì nó s  l p r t nhi u l n, đi u này không quan tr ng đ i v i các

ẽ ố ư ệ ế ọ ạ b n h c sinh, nh ng n u đi sâu vào chuyên ngành thì vi c làm này s  t n dung

ượ ộ ớ ượ ố ư l ậ ng b  nh  và thu t toán này cũng đ c đánh giá là kém t i  u.

ụ ủ ằ ươ ậ Ví d  tìm UCLN và BCNN c a 17 và 3 (b ng ph ấ   ng pháp đoán nh n ta th y

ượ ủ ố đ c UCLN c a 2 s  này là 1 và BCNN là 51).

ư ể ể ỏ ọ ậ Giáo viên có th  mô ph ng thu t toán cho h c sinh hi u nh  sau:

ẽ ấ ­ UCLN : ta s  l y 17 ­ 3 = 14, 14 ­ 3 =11, 11­ 3 = 8; 8 ­ 3 = 5; 5 ­ 3 = 2; 3­2=1; 2­1

ằ ằ =1; Lúc này chúng đã b ng nhau và b ng 1. Và 1 cũng chính là UCLN.

ủ ằ ấ ầ ố ­ BCNN : b ng tích c a 2 s  chia cho UCLN l y ph n nguyên.

ủ ố + Tích c a 2 s  là 17x3 = 51

ầ ằ ấ + Chia 1 l y ph n nguyên là b ng 51.

var x,y,UCLN,BCNN:integer;

Begin

readln(x,y);

BCNN:=x*y;

While x<>y do

If x>y then x:=x­y else y:=y­x;

UCLN:=x;

BCNN:=BCNN div UCLN;

write(UCLN,' ',BCNN);

end.

ư ươ ọ ặ ị ng trình xong giáo viên cho h c sinh test c p giá tr  a,

ầ ằ ậ ậ ươ (cid:0)   L u ý: Sau khi test ch ọ b b ng nhau. Yêu c u h c sinh nh n xét, nêu thu t toán và vi ế ạ t l i ch ng trình

ệ ề ố ớ trên v i đi u ki n a, b là hai s  nguyên.

ươ * Ph ng pháp 2:

ưở ­ Ý t ng:

ầ ư ằ ủ ừ ệ ế + N u a chia b có ph n d  b ng 0 thì b là UCLN c a a và b. T  khái ni m này ta

ự ư ậ ươ ế xây d ng thu t toán nh  sau: du:= a mod b, a:=b; b:=du, ch ng trình k t thúc

khi b=0 và UCLN là a.

ế + Vi t ra UCLN, BCNN

ươ ­ Ch ng trình:

Var a,b,p,du:Integer;

Begin

Write('Nhap gia tri a, b tuong uong : ');Readln(a, b);

P:=a*b;

While b<>0 Do

Begin  Du:=a mod b; a:=b:b:=du;  End;

Writeln('UCLN la: ',a,' BCNN la: ',P Div a); Readln;

End.

ươ * Ph ng pháp 3:

ưở ­ Ý t ng:

ạ ừ ệ ế ề ế ỏ ờ ế + Ta cho bi n i ch y t ồ  1 đ n a, n u th a mãn đ ng th i 2 đi u ki n (a

ủ mod i =0) và (b mod i =0) thì i là UCLN c a a và b.

ế + Vi t ra UCLN, BCNN

ươ ­ Ch ng trình:

Var a,b,p,d:Integer;

Begin

Write('Nhap gia tri a, b tuong uong : ');Readln(a, b);

P:=a*b;

For i:=1 To a Do if (a mod i=0) and (b mod i=0) then d:=i

Writeln('UCLN la: ',d, ‘BCNN la: ',p Div d);

Readln;

End.

ươ * Ph ng pháp 4:

ưở ­ Ý t ng:

ế ạ ừ ệ ề ế ế ỏ ờ + Ta cho bi n i ch y downto t ồ  a đ n 1, n u th a mãn đ ng th i 2 đi u ki n (a

ờ ế ủ ệ ồ mod i =0) và (b mod i =0) thì i là UCLN c a a và b đ ng th i k t thúc vi c tìm

ế ế ặ ki m {k t thúc vòng l p}.

ế + Vi t ra UCLN, BCNN

ứ ế ệ ổ ­ B  sung ki n th c: L nh break

+ Cú pháp: Break

ạ ộ ạ ộ ệ ượ ặ ặ + Ho t đ ng: L nh break ho t đ ng khi đ c đ t trong thân các vòng l p for,

ặ ệ ủ ẽ ặ ỏ while, repeat. Khi g p l nh break thì máy s  thoát kh i chu trình c a vòng l p,

ặ ồ ứ ệ ề ẽ ấ ặ ế n ucó nhi u vòng l p l ng nhau s  thoát vòng l p trong nh t ch a l nh break;

ươ ­ Ch ng trình:

Var a,b,p,d:Integer;

Begin

Write('Nhap gia tri a, b tuong uong : '); Readln(a, b);

P:=a*b;

For i:=a Downto 1 Do

if (a mod i=0) and (b mod i=0) then d:=i;

Writeln('UCLN la: ',d, ‘BCNN la: ',p Div d);

Readln;

End.

ậ => Nh n xét:

ươ ự ế ệ ­ Ph

ặ ể ế ươ ươ ho c Repeat .. Until đ  vi ọ ng pháp 1, 2: N u chúng ta cho h c sinh th c hi n vòng While .. Do   ơ ả   ng pháp trên thì c  b n ng trình cho hai ph t ch

ử ụ ậ ổ ỉ ươ thu t toán không thay đ i ch  khác nhau là s  d ng ph ế   ng pháp chia liên ti p

ừ ở ử ụ ươ ế hay tr  liên ti p. Tuy nhiên đây chúng ta s  d ng While .. Do cho ph ng pháp

ươ ụ ể ớ 1 và Repeat .. Until cho ph ng pháp 2 v i m c đích giúp các em tìm hi u thêm

ệ ặ ề ế ệ ừ ầ ự s  khác nhau trong đi u ki n l p và k t thúc hai câu l nh trên, t đó yêu c u các

ừ ử ế ệ ỉ ậ em ch nh s a câu l nh, thu t toán chia, tr  liên ti p ng ượ ạ c l i trong hai ph ươ   ng

ứ ơ ế ể ắ pháp đ  kh c sâu ki n th c h n.

ươ ươ ạ ộ ­ Ph ng pháp này giúp các em ôn l ng pháp 3, 4: Ph

ứ ề ệ ệ ề ặ ộ ế   i 2 n i dung ki n ớ ố ầ   ệ th c, m t là đi u ki n ghép trong câu l nh đi u ki n, hai là vòng l p v i s  l n

ự ệ ể ặ ạ bi ế ướ t tr ề   ế c. Khi th c hi n vòng l p d ng ti n For i:=1 To a thì có th  có nhi u

ị ỏ ư ươ ậ ượ ế ố ị giá tr  th a mãn nh ng ch ẽ ng trình s  nh n đ c giá tr  cu i cùng khi k t thúc

ị ị ươ ầ ặ l p, giá tr  này là giá tr  ta c n tìm trong bài toán. Trong ph

ượ ớ ề ứ ế ệ ệ ể còn tìm hi u thêm đ c ki n th c m i v  câu l nh Break. L nh này th ng pháp 4 các em   ườ   ng

ượ ụ ấ ớ ề ệ ể ấ ỏ ỏ ị đ

ữ ố ươ ươ ế ấ ố ỏ c áp d ng đ  tìm giá tr  nh  nh t, l n nh t th a mãn các đi u ki n nào đó.   ế   t ng T nh  nh t có N ch  s , bi ng trình tìm s  nguyên d t ch ụ Ví d  Vi

ư ư ằ r ng khi chia T cho 19 thì d  13 và khi chia T cho 31 thì d  12.

ệ ậ ỹ

ộ  chi u.ề   2.2.2.3. Rèn luy n k  năng l p trình v i m ng m t ọ ọ ậ ể ả ọ ớ ả ọ Trong quá trình h c l p trình, khi h c sinh h c bài: Ki u m ng h c sinh

ề ữ ệ ể ả ạ ớ

ư ậ ể ặ ấ ọ ọ ậ   ặ ấ g p r t nhi u khó khăn v i ki u d  li u này. Qua quá trình gi ng d y tôi nh n ữ ễ   th y h c sinh g p khó khăn nh  v y vì h c sinh khó hình dung ra ki u d  li u

ể ớ ượ ấ ữ ể ư ư m i này, không hi u rõ đ ả c c u trúc l u tr  ki u m ng cũng nh  các cách làm

ầ ử ệ ớ ể ọ ể ả ậ ượ vi c v i các ph n t trong m ng. Đ  h c sinh hi u và l p trình đ c các bài

ả ướ ả ơ ệ ẫ ọ toán đ n gi n, giáo viên ph i h ế   ng d n h c sinh các công vi c liên quan đ n

ư ề ề ề ả ả ậ ả ộ ộ ồ ộ m ng m t chi u nh : khai báo m ng m t chi u, nh p m ng m t chi u g m các

ầ ử ư ử ả ả ố ộ ơ ổ ph n t ầ   ề  theo ý mu n, x  lý m ng m t chi u đ n gi n nh : tính t ng các ph n

ử ủ ầ ử ủ ầ ử ủ ế ả ả t ế  c a m ng, đ m các ph n t c a m ng, tìm ki m các ph n t ả  c a m ng hay

ấ ầ ử ủ ừ ề ệ ả ỏ ọ xu t các ph n t

ế ắ ầ ặ ả ầ ố ả ể ậ    c a m ng th a đi u ki n nào đó. T  đó h c sinh có th  l p ầ   i bài toán s p x p dãy s  nguyên (tăng d n ho c gi m d n), tìm ph n trình gi

ử ớ ủ ấ ặ ấ ả ỏ ố ộ ơ t l n nh t (ho c nh  nh t) c a dãy s  nguyên m t cách đ n gi n.

ạ ỏ ữ ể ạ ứ ể ọ Đ  t o h ng thú cho h c sinh, giúp các em g t b  nh ng khó khăn k  trên

ạ ừ ề ầ ả ầ ầ ộ

ướ ệ ệ ẳ ạ ầ ả ộ ớ ọ thì khi d y ph n m ng m t chi u giáo viên c n bóc tách riêng t ng ph n công   ớ c tiên c n ph i ghi nh  cho h c sinh vi c ghi nh vi c m t. Ch ng h n, tr

ệ ầ ệ ả ả ộ ầ đ u tiên đó là vi c khai báo m ng. Khai báo m ng là m t công vi c g n nh  c

ớ ấ ả ệ ớ ả ọ ộ ư ố  ề ị đ nh v i t ố t c  các bài toán làm vi c v i dãy s  hay còn g i là m ng m t chi u:

ư ự ể ệ + Đ  khai báo ta th c hi n nh  sau:

ầ ử ỉ ố ế ể ể ả Var  : array [ki u ch  s ] of ;

+ Sau khi đã khai báo kiểu dữ liệu mảng thì cần hướng dẫn học sinh

cụ thể công việc nhập các phần tử của mảng:

Write(‘Nhap so phan tu cua mang n =’); Readln(n); For i:= 1 to n do Begin Write(‘ Phan tu a[’,i,‘]=’); Readln(a[i]); End;

Đây là đoạn lệnh thực hiện việc nhập vào từ bàn phím số phần tử của mảng và sau đó nhập từng giá trị của mảng.

+ Việc tiếp sau mà giáo viên yêu cầu học sinh ghi nhớ là việc in các phần tử của mảng vừa nhập được ra màn hình để học sinh quan sát dãy số vừa nhập qua câu lệnh:

For i := 1 to n do write(a[i]:10);

Sau khi học sinh đã nắm vững được 3 công việc tạm gọi là cố định của việc lập trình với mảng một chiều thì giáo viên mới mở rộng một số bài toán liên quan tới mảng một chiều theo từng cấp độ từ dễ tới khó để học sinh dần từng bước giải quyết. Chẳng hạn một số bài tập liên quan dạng:

+ In ra các phần tử chẵn của mảng: For i:=1 to do If a[i] mod 2 =0 then write(a[i]); + Tính tổng các phần tử của mảng: S:=0; For i:=1 to n do S:=s+a[i]; Write(‘ Tong cac phan tu mang:’,s); + In ra màn hình phần tử lớn nhất của mảng:

max := a[1]; For i := 2 to n do If max <= a[i] then max := a[i]; Writeln(‘ Phan tu lon nhat cua mang la:’, max:10);

Từ bài toán này giáo viên yêu cầu học sinh làm bài tương tự như tìm phần tử nhỏ nhất của mảng hay đếm xem trong mảng có bao nhiêu phần tử bằng phần tử K nhập vào từ bàn phím. Khi đã giải quyết được các bài toán này thì học sinh đã dần hình thành được kỹ năng làm việc với kiểu mảng, các em đã thông thuộc các công việc như khai báo, nhập mảng và xử lý các phần tử trong mảng thì phải thực hiện như thế nào.

2.3. Khả năng áp dụng, nhân rộng sáng kiến

Học lập trình pascal nói riêng và học tin học nói chung đối với học sinh phổ thông cơ sở trong những năm vừa qua đã được nhà trường quan tâm, được đầu tư trang thiết bị phục vụ công tác giảng dạy tương đối đầy đủ. Tuy nhiên, với học sinh thì môn học này đối với các em chỉ là môn học phụ, các em tuy có yêu thích môn học nhưng chỉ ở những nội dung đơn giản như soạn thảo văn bản, sử dụng các phần mềm ứng dụng… Mặt khác, khi được tiếp cận máy tính các em thường bị thu hút bởi mạng Intenet và Game hấp dẫn. Để từng bước thay đổi được suy nghĩ cũng như ý thức học tập của học sinh thì người giáo viên phải nhẫn lại và kiên trì chỉ bảo các em. Đặc biệt khi các em học nội dung lập trình pascal thì hầu hết các em đều thấy khó khăn, khó hiểu và lười tư duy.

Để giúp các em khắc phục được điều này, bản thân tôi đã áp dụng các biện pháp nêu trong sáng kiến thì nhận thấy rằng: Khi giáo viên tận tâm với học sinh thì cũng tác động tới ý thức của phần lớn các học sinh, các em đã thay đổi và ý thức hơn khi lên học tại phòng máy, các em đã chịu khó tư duy và chủ động trong việc lập trình các bài toán bằng ngôn ngữ pascal. Từ việc trước đây các em chỉ gõ theo những bài mẫu, hay các ví dụ trong sách rồi chạy chương trình là xong, kể cả các em không hiểu bản chất, không hiểu các câu lệnh làm việc gì trong chương trình thì nay các em đã chịu khó hỏi và tìm hiểu các cấu trúc câu lệnh. So sánh sự khác nhau giữa các câu lệnh lặp để hiểu rõ hơn về câu lệnh.

Chương 3. KẾT LUẬN VÀ KIẾN NGHỊ

3.1. Kết luận

Tin học nói chung đóng vai trò rất quan trọng trong việc xây dựng các chương trình ứng dụng công nghệ để phục vụ cho cuộc sống. Nhờ sự phát triển của tin học mà hiện nay hầu hết các lĩnh vực trong xã hội đã ứng dụng được tin học để giải quyết công việc nhanh chóng, hiệu quả và chính xác hơn. Hơn thế, đó là việc học tập môn tin học nói chung và lập trình pascal nói riêng còn rèn luyện cho mỗi học sinh một tác phong làm việc nghiêm túc khoa học, một tư duy logic và sáng tạo trong môn học cũng như các môn học khác.

Khi người giáo viên lên lớp mục tiêu đặt ra trong mỗi tiết dạy là rèn luyện cho các em kỹ năng sống, tác phong chuẩn mực và đạt được chuẩn kiến thức kỹ năng của bài học. Trong các mục tiêu kể trên thì mục tiêu giúp học sinh tích lũy kiến thức là mục tiêu mà bất kể người giáo viên nào cũng mong muốn và tìm mọi cách để đạt được. Sau một thời gian thực hiện SKKN tôi nhận thấy học sinh đã thay đổi và đạt được một số điểm như sau:

- Thứ nhất: Giúp cho học sinh phát triển khả năng tư duy sáng tạo, tự chiếm lĩnh tri thức, khắc sâu kiến thức đã học, phát huy tính chủ động, tích cực trong việc tiếp thu kiến thức mới, khả năng suy luận khi giải quyết một vấn đề, qua đó giúp cho học sinh tìm ra được các phương pháp giải hay và ngắn gọn cho bài toán.

- Thứ hai: Rèn luyện cho học sinh tính kiên trì, sáng tạo trong học tập, dần dần hoàn thiện kỹ năng và tự chủ, tự tin để viết chương trình trong quá trình học tập chứ không còn thụ động như trước. Từ điều này cũng giúp cho các em say mê và yêu thích môn học hơn, không còn thấy sợ khi nói tới lập trình pascal nữa.

- Thứ ba: Tuy chưa có một con số thống kê cụ thể tính hiệu quả khi thực hiện SKKN nhưng tôi nhận thấy sự thay đổi lớn từ thái độ học tập của các em với môn học, đó là một tín hiệu tích cực và đáng mừng. Tôi nghĩ nếu có đủ thời gian và áp dụng sáng kiến này cho các năm học tới thì chất lượng học tập môn lập trình pascal sẽ được cải thiện và hy vọng các em sẽ có đủ tự tin để có thể tham gia các cuộc thi học sinh giỏi cấp thành phố và cấp tỉnh.

3.2. Kiến nghị, đề xuất

- Về phía nhà trường: Xin được quan tâm hơn nữa đối với bộ môn về mặt trnag thiết bị. Hiện nay phòng máy đã có 2 phòng và số lượng mỗi phòng khoảng 25 máy như vậy cũng tương đối đầy đủ. Tuy nhiên, mật độ sử dụng máy tương đối cao vì có cả khối tiểu học và cao đẳng. Chính vì mật độ hoạt động như vậy mà máy bị xuống cấp nhanh. Khi các em lên phòng đôi khi còn mất thời gian để khơi động máy, cài đặt phần mềm…

- Về phía chuyên môn: Mong các thầy cô trong hội đồng đóng góp ý kiến để hoàn thiện sáng kiến và cho phép thực hiện sáng kiến này vào các năm học tiếp theo. Do năm học này bị ảnh hưởng của dịch bệnh Covid-19 nên đã giảm tải nội dung cũng như thời lượng của năm học, đó cũng là lý do mà sáng kiến chưa có đủ thời gian áp dụng, chưa nhận thấy được kết quả cụ thể qua những con số cụ thể.

TÀI LIỆU THAM KHẢO [1]. Phạm Thế Long (2015). Tin học dành cho trung học cơ sở - Quyển 3, NXB

Giáo dục,Việt Nam- Bộ Giáo dục và Đào tạo.

[2]. Lê Khắc Thành- Hồ Cẩm Hà- Nguyễn Vũ Quốc Hưng (2007). Tài liệu bồi

dưỡng thường xuyên giáo viên trung học phổ thông, NXB Đại học sư phạm.

[3]. Đỗ Xuân Lôi (2006). Cấu trúc dữ liệu và giải thuật, NXB Đại học Quốc gia

Hà Nội.

[4]. Nguyễn Xuân My(2004). Lập trình, NXB Đại học Sư phạm