Trước hết cần khẳng định rằng Pascal là một ngôn ngữ lập trình tốt và đặc biệt, được tạo ra với mục đích dùng cho giảng dạy vì các lý do: Có cú pháp rõ ràng, dễ dạy dễ học; Pascal được viết theo lý thuyết chuẩn về lập trình cấu trúc nên một mặt nó minh hoạ cho lý thuyết về ngôn ngữ lập trình, mặt khác nhiều tài liệu khoa học máy tính cũng dùng Pascal để minh hoạ; Có thể sử dụng Pascal để viết các ứng dụng chuyên sâu, can thiệp vào phần cứng của máy tính và các thiết bị điện tử khác và cuối cùng là do trình biên dịch Pascal nhỏ gọn, có thể chạy tốt trên các máy tính cấu hình yếu, rất phù hợp với khả năng đầu tư cho học tập của học sinh, sinh viên. Tuy nhiên ngày nay công nghệ thông tin đã có nhiều thay đổi. Một trong những thay đổi cơ bản đó là môi trường hệ điều hành đã thay đổi từ DOS sang Windows nên khó có thể sử dụng Pascal để viết các chương trình ứng dụng dưới Windows. Để lập trình được dưới Windows với giao diện đồ hoạ, người lập trình bắt buộc phải học thêm một ngôn ngữ khác chẳng hạn DELPHI, Visual Basic, C, C++,… Dĩ nhiên nếu người lập trình nắm vững ngôn ngữ Pascal thì việc học thêm các ngôn ngữ này là dễ dàng theo kiểu “21 ngày lập trình được…”. Để giúp học sinh dễ dàng hơn trong việc lập trình giải quyết các bài toán mang tính lặp, trong nội dung của bài sáng kiến này tôi đưa ra những tóm lược cơ bản nhất của các câu lệnh lặp và một số ví dụ mẫu vận dụng cấu trúc lặp để giải quyết có hiệu quả.
Trang 1PHÒNG GIÁO DỤC VÀ ĐÀO TẠO HUYỆN ………
trong pascal hiệu quả
Tác giả sáng kiến: ………
* Mã sáng kiến: 40
Trang 2BÁO CÁO KẾT QUẢ NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN
1 LỜI GIỚI THIỆU:
Ngày nay, sự bùng nổ CNTT đã tác động lớn đến công cuộc phát triểnkinh tế xã hội người Đảng và Nhà nước đã xác định rõ ý nghĩa và tầm quantrọng của tin học và CNTT, truyền thông cũng như những yêu cầu đẩy mạnh củaứng dụng CNTT, đào tạo nguồn nhân lực đáp ứng yêu cầu CNH, HĐH, mở cửa
và hội nhập, hướng tới nền kinh tế tri thức của nước ta nói riêng - thế giới nóichung
Chính vì xác định được tầm quan trọng đó nên Nhà nước ta đã đưa môntin học vào trong nhà trường và ngay từ tiểu học học sinh được tiếp xúc với môntin học để làm quen dần với lĩnh vực CNTT, tạo nền móng cơ sở ban đầu để họcnhững phần nâng cao trong các cấp tiếp theo
Môn tin học ở trường phổ thông nhằm mục đích trang bị cho học sinhnhững hiểu biết ban đầu ở mức phổ thông về công nghệ thông tin và kĩ năng sửdụng máy tính phục vụ học tập và cuộc sống Tin học có ý nghĩa to lớn đối với
sự phát triển trí tuệ, tư duy thuật toán, góp phần làm tăng hiệu quả giáo dục
Đổi mới phương pháp dạy học theo hướng phát huy tính tích cực, tự giác,sáng tạo của học sinh là yêu cầu quan trọng trong việc thực hiện chương trình –sách giáo khoa hiện nay; đẩy mạnh ứng dụng công nghệ thông tin là một trongnhững biện pháp giúp thực hiện các mục tiêu trên khá chất lượng, hiệu quả.Hiện nay, các phần mềm phục vụ việc dạy và học môn Tin khá phong phú; trong
đó PASCAL, nó là một phần mềm dùng để học trong chương trình trung họcphổ thông và rèn luyện tư duy thuật toán cũng như viết chương trình cực kỳ hữuhiệu
Trước hết cần khẳng định rằng Pascal là một ngôn ngữ lập trình tốt và đặcbiệt, được tạo ra với mục đích dùng cho giảng dạy vì các lý do: Có cú pháp rõràng, dễ dạy dễ học; Pascal được viết theo lý thuyết chuẩn về lập trình cấu trúcnên một mặt nó minh hoạ cho lý thuyết về ngôn ngữ lập trình, mặt khác nhiềutài liệu khoa học máy tính cũng dùng Pascal để minh hoạ; Có thể sử dụng Pascal
để viết các ứng dụng chuyên sâu, can thiệp vào phần cứng của máy tính và cácthiết bị điện tử khác và cuối cùng là do trình biên dịch Pascal nhỏ gọn, có thểchạy tốt trên các máy tính cấu hình yếu, rất phù hợp với khả năng đầu tư chohọc tập của học sinh, sinh viên
Tuy nhiên ngày nay công nghệ thông tin đã có nhiều thay đổi Một trongnhững thay đổi cơ bản đó là môi trường hệ điều hành đã thay đổi từ DOS sang
Trang 3Windows nên khó có thể sử dụng Pascal để viết các chương trình ứng dụng dướiWindows Để lập trình được dưới Windows với giao diện đồ hoạ, người lậptrình bắt buộc phải học thêm một ngôn ngữ khác chẳng hạn DELPHI, VisualBasic, C, C++,… Dĩ nhiên nếu người lập trình nắm vững ngôn ngữ Pascal thìviệc học thêm các ngôn ngữ này là dễ dàng theo kiểu “21 ngày lập trìnhđược…”
Để giúp học sinh dễ dàng hơn trong việc lập trình giải quyết các bài toánmang tính lặp, trong nội dung của bài sáng kiến này tôi đưa ra những tóm lược
cơ bản nhất của các câu lệnh lặp và một số ví dụ mẫu vận dụng cấu trúc lặp đểgiải quyết có hiệu quả
2 TÊN SÁNG KIẾN:
“SỬ DỤNG HỆ THỐNG CÂU LỆNH LẶP ĐỂ GIẢI MỘT SỐ BÀI TẬP
TRONG PASCAL CÓ HIỆU QUẢ”.
3 TÁC GIẢ SÁNG KIẾN:
- Họ và tên:
- Địa chỉ tác giả sáng kiến:
- Số điện thoại:
4 CHỦ ĐẦU TƯ TẠO RA SÁNG KIẾN:
Chủ đầu tư tạo ra sáng kiến là cá nhân tác giả sáng kiến
5 LĨNH VỰC ÁP DỤNG SÁNG KIẾN:
Có thể áp dụng sáng kiến và vấn đề mà sáng kiến giải quyết đó là:
- Giáo dục.
- Lĩnh vực công nghệ thông tin và truyền thông.
6 NGÀY SÁNG KIẾN ĐƯỢC ÁP DỤNG LẦN ĐẦU HOẶC ÁP DỤNG THỬ: 20/08/2014
Trang 47 MÔ TẢ BẢN CHẤT CỦA SÁNG KIẾN:
7.1- VỀ NỘI DUNG CỦA SÁNG KIẾN:
7.1.1 CƠ SỞ LÝ LUẬN:
* Cơ sở lý luận về lý thuyết:
- Muốn học tập đạt kết quả tốt, ngoài việc bản thân HS tích cực học tập,không thể thiếu vai trò hướng dẫn dìu dắt của người thầy
- Để giúp học sinh dễ dàng hơn trong việc lập trình giải quyết các bài toánmang tính lặp ở bộ môn Tin học vừa đúng với nguyên tắc dạy học ở trường PhổThông, vừa đúng theo tinh thần đổi mới phương pháp dạy học hiện nay, nhằmhình thành cho học sinh tính tích cực, độc lập, sáng tạo, nâng cao năng lực pháttriển và giải quyết vấn đề, rèn luyện kỹ năng vận dụng kiến thức vào thực tiễn,tác động đến tình cảm, đem lại niềm tin và thích thú học tập cho HS Hiện nay,không ít học sinh lười, học tập thụ động và có không ít phụ huynh thiếu sự quantâm đến việc học của con em mình Vì vậy, việc hệ thống các kiến thức về câulệnh lặp để giải một số bài tập của giáo viên phải được chú ý đúng mức
* Cơ sở lý luận về thực tiễn:
Trong quá trình giảng dạy, tôi nhận thấy Pascal là môn học khó đối vớicác em học sinh Khối 8,9, vì có một số thuật toán các em chưa được học ở bộmôn Toán, thêm vào đó là các em chỉ sử dụng các câu lệnh bằng Tiếng Anh đểthể hiện khi lập trình Do đó việc học tập của học sinh vẫn còn mang tính mơ hồ,như bị ép buộc, có nhiều học sinh rất sợ môn Tin học 8,9 vì tính chất khô khan,khó hiểu trong khi học
Từ thực tế đó tôi không ngừng học hỏi để tìm ra biện pháp khắc phục.Bằng kinh nghiệm khiêm tốn trong những năm qua, tôi đã đưa ra những tómlược cơ bản nhất của các câu lệnh lặp và một số ví dụ mẫu vận dụng cấu trúc lặp
để giải quyết có hiệu quả là nhằm giúp học sinh tiếp thu bài nhanh, nhớ kiếnthức lâu hơn và cảm thấy thích thú trong học tập
7.1.2 THỰC TRẠNG:
*Thuận lợi:
- Xã hội ngày càng phát triển, công nghệ thông tin ngày càng được ứngdụng rộng rãi
Trang 5trong nhiều ngành then chốt, đặc biệt là ngành Giáo dục và Đào tạo Chính nhờđiều đó thầy cô giáo và các em học sinh có rất nhiều thuận lợi trong việc thuthập tài liệu học tập và tham khảo nói chung, môn tin học nói riêng.
- Tin học là môn khoa học tự nhiên, nó là cơ sở, là nền tảng của nhiềulĩnh vực khoa học Nhu cầu học tập, nâng cao kiến thức và say mê khám phákhoa học của học sinh ngày càng nâng cao Vì vậy, môn tin học ngày càng đượcnhiều em học sinh quan tâm, lựa chọn là môn học ưa thích và cần thiết chomình
- Được sự quan tâm của các cấp lãnh đạo huyện, cũng như sự quan tâm
của từng địa phương nên đời sống của nhân dân trong huyện, thị trấn ngày càngnâng cao Đa số các gia đình đã có điều kiện để đầu tư cho con em mình học tậptốt hơn
-Lãnh đạo Phòng Giáo dục và Đào tạo, ban giám hiệu trường luôn quantâm đến chất lượng giáo dục và đặc biệt quan tâm, chú trọng đến môn tin học
- Đa số các em HS nhà chưa có máy tính để thực hành nên kỹ năng sửdụng máy còn nhiều hạn chế và làm giảm chất lượng học tập của các em
* Đối tượng nghiên cứu:
Học sinh lớp 8,9
* Phương pháp nghiên cứu:
Trang 6- Phương pháp điều tra.
- Phương pháp phân tích
- Phương pháp tổng hợp kinh nghiệm trong giảng dạy
- Phương pháp trò chuyện trao đổi
- Phương pháp đọc sách và tổng hợp tư liệu
7.1.3 ĐỀ XUẤT GIẢI PHÁP:
7.1.3.1 Xây dựng KHGD ngay từ đầu năm học :
- Ngay từ đầu năm học, GV phải hướng dẫn phương pháp học tập và nềnếp học ở phòng máy cho học sinh
- GV chia nhóm học tập cho từng HS, phân nhóm trưởng, hướng dẫn cáchhoạt động nhóm và trang bị sổ tay ghi chép cá nhân của HS
- GV soạn bài trước thực dạy 2 tiết nhằm giúp việc nghiên cứu kiến thứcsâu hơn và chủ động hơn trong việc soạn các bài kiểm tra
- GV cần đầu tư nghiên cứu, mỗi năm cập nhật những cách hay của đồngnghiệp để tích luỹ cho việc giảng dạy
- GV cần dành một thời lượng thích hợp cho việc mấu chốt và hướng dẫn
HS cách nhớ kiến thức cơ bản vừa học ở các tiết học lý thuyết Cũng như cáchtìm hiểu ý nghĩa của mỗi lệnh trong các bài thực hành
- HS phải chuẩn bị những gì mà GV đã dặn ở tiết trước
7.1.3.2 MỘT SỐ GIẢI PHÁP THỰC HIỆN :
* Rèn luyện tư duy thuật toán cho học sinh THCS khi viết chương trình Pascal.
CHƯƠNG TRÌNH= THUẬT TOÁN +CẤU TRÚC DỮ LIỆU
Như vậy thuật toán là phần quan trong bậc nhất để tạo nên một chươngtrình Một học sinh muốn tiến sâu, tiến xa trong tương lai phải có tư duy thuậttoán tốt
Làm quen và rèn luyện tư duy thuật toán cho học sinh mới bắt đầu học lậptrình là một yêu cầu thiết yếu Không nên vội vàng cho học sinh làm việc trênmáy tính luôn khi mới bắt đầu học Khi dạy tin học chú ý dành nhiều thời giandạy thuật toán
Trang 7* Xây dựng phong cách lập trình tốt cho HS
Thứ nhất phải tuân theo các quy chuẩn và các quy ước
Cơ sở cho việc viết một chương trình hiệu quả là: Cách trình bày rõ ràng,sáng sủa nổi bật được cấu trúc logic của chương trình
Lợi ích của việc trình bày cẩn thận:
- Thể hiện tốt cấu trúc lôgic của mã lệnh
- Cải thiện khả năng đọc
- Bảo đảm sự chính xác trong các thay đổi
- Các lợi ích hệ quả của các lợi ích trên
+ Chương trình ít mắc lỗi và dễ sửa chữa khi mắc lỗi
+ Tiết kiệm thời gian sửa lỗi
+ Tăng khả năng làm việc theo nhóm
* Phong cách viết chương trình.
+ Quy tắc trình bày tổng thể chương trình:
- Chương trình nên tách thành nhiều đơn thể (mô _ đun), mỗi đơn thể thựchiện một công việc, càng độc lập với nhau càng tốt (chương trình con) Điều này
sẽ giúp cho chương trình dễ cải tiến và khi đọc chương trình ta sẽ dễ hình dungđược vấn đề đang được thực hiện
- Nên sử dụng các tham số khi truyền thông tin cho các chương trình con.Tránh sử dụng các biến toàn cục để truyền thông tin giữa các chương trình con
vì như vậy sẽ làm mất đi tính độc lập giữa các chương trình con và rất khó khănkhi kiểm soát giá trị của chúng khi chương trình con thi hành
- Cách trình bày chương trình càng nhất quán càng dễ đọc, dễ hiểu
- Chương trình nên giữ được tính đơn giản, rõ ràng
- Chương trình nên thực hiện như một dòng chảy từ trên xuống:
+ Sau đó đến khai báo đơn vị, khai báo hằng, khai báo kiểu, khai báo biếntoàn cục, khai báo chương trình con
+ Không nên sử dụng Goto vì sẽ phá vỡ tính tuần tự của việc thực hiệnchương trình
Trang 8- Viết chú thích cho chương trình: Biến, hàm khi định nghĩa nên viết chú thích
ý nghĩa và chức năng rõ ràng Đôi khi các đoạn lệnh thực thi cũng cần giải thíchnếu chúng quá phức tạp Nên viết chú thích ngắn gọn nhưng đầy đủ và dễ hiểu.Tuy nhiên không phải bất cứ lệnh nào cũng chú thích, việc chú thích tràn lanngay cả với câu lệnh đơn giản không có ý nghĩa gì mà còn làm chương trình khónhìn hơn
- Nên viết biểu thức điều kiện mang tính tự nhiên: Biểu thức nên viết dướidạng khẳng định, việc viết dưới dạng phủ định sẽ làm khó hiểu
+ Qui tắc khai báo tên tệp dữ liệu dùng trong chương trình
Dùng tệp nên khai báo tên têp trước trong phần khai báo hằng:
Ví du:
Const fi=’BAI3.INP’;
Fo=’BAI3.OUT’ ;
* Tối ưu sự thực thi mã nguồn
Mục đích của việc tối ưu mã nguồn là nâng cao tốc độ xử lý và hạn chếkhông gian bộ nhớ mà chương trình chiếm dụng Thông thường có thể mâuthuẫn giữa tốc độ và không gian lưu trữ, do đó tùy theo điều kiện cụ thể màngười lập trình có sự lựa chọn thích hợp Một số thủ thuật sau có thể giúp ngườilập trình hình thành nên phong cách lập trình tốt
- Lưu tạm giá trị thường sử dụng: Nếu một biểu thức tính toán được dùngnhiều lần thì nên tính kết quả một lần rồi lưu vào một biến và dùng lại
- Thay thế một biểu thức bằng một biểu thức tương đương nhưng lợi về thựcthi
- Dùng số nguyên thay cho số thực: Do việc xử lý số thực chậm hơn xử lý sốnguyên nên ta có thể dùng số nguyên thay cho số thực có phần lẻ nhỏ
Vì dụ: Điểm trung bình của học sinh là số thực ta có thể thay bằng số nguyên:DTB là 7.85 thì lưu số nguyên là 785, khi xuất ra thì chia cho 100
- Thoát khỏi vòng lặp khi sớm nhất: Một số trường hợp không cần thiết phảilặp hết toàn bộ mà đã đạt được mục đích thì có thể thoát khỏi vòng lặp
- Hạn chế sử dụng câu lệnh rẽ nhánh: Lệnh rẽ nhánh làm chậm chương trình dongắt luồng thực thi
- Tránh lãng phí bộ nhớ: Bằng cách sử dụng kiểu dữ liệu nhỏ nhất đủ để lưutrữ Việc sử dụng tài nguyên nhiều hơn mức đòi hỏi của chương trình là một thóiquen xấu mà người lập trình hay mắc phải Hơn nữa tốc độ chương trình sẽnhanh hơn khi sử dụng kiểu dữ liệu nhỏ hơn
Trang 9- Khai báo biến cục bộ trong phạm vi gần nhất: Khai báo biến cục bộ gần vớiđiểm sử dụng nhất Việc khai báo ở phạm vi rộng hơn chỉ làm lãng phí và khókiểm soát.
- Giảm số lượng tham số truyền vào hàm: Việc sử dụng hàm có quá nhiềutham số được truyền vào có thể làm ảnh hưởng đến ngăn xếp dành cho việc gọihàm Nhất là trường hợp tham số là kiểu dữ liệu có cấu trúc Sử dụng con trỏhay tham chiếu trong trường hợp này để đơn giản hóa
* Kiểm nghiệm chương trình với các bộ test đầy đủ nhất
- Test đầu bài,
- Các test đơn giản
- Test các trường hợp đặc biệt
- Test lớn
- Xem lại đề để không bỏ sót trường hợp
* GIẢI PHÁP VIẾT CHƯƠNG TRÌNH VỚI CẤU TRÚC LẶP FOR TO DO:
- ĐVĐ: trong lập trình chúng ta gặp trường hợp phải lặp đi lặp lại mộtcông việc một số lần xác định nào đó Ví dụ: viết ra màn hình các số từ 0 đến 24mỗi số chiếm một dòng Nếu như chỉ dùng các lệnh viết ra màn hình thì chúng
ta phải dùng 25 lệnh Writeln Cách viết này rõ ràng là không thể chấp nhậnđược, do vậy PASCAL cung cấp một cấu trúc lặp dựa vào số bước lặp xác địnhFOR TO DO
- Tác dụng: Dùng để xây dựng chu trình với số lần lặp xác định dựa vào
sự biến thiên của một biến đếm
+ for, to, do là các từ khóa
+ Biến đếm có kiểu nguyên
Trang 10+ Giá trị đầu và giá trị cuối là các biểu thức có cùng kiểu với biến đếm vàgiá trị cuối phải lớn hơn hoặc bằng giá trị đầu.
+ Câu lệnh có thể là câu lệnh đơn giản hay câu lệnh ghép
Nguyên lý hoạt động cấu trúc For dạng tiến:
1, Biến đếm nhận giá trị của giá trị đầu
2, Máy kiểm tra xem giá trị của biến đếm còn nhỏ hơn giá trị của biểu thức giátrị cuối hay không (biến đếm ≤ giá trị cuối)
3 Nếu việc kiểm tra:
- Cho giá trị sai câu lệnh sẽ bị bỏ qua
- Cho giá trị đúng:
+Máy sẽ thực hiện câu lệnh sau từ khóa do
+ Tăng giá trị của biến đếm lên giá trị đứng liền sau của nó (biếnđếm:=succ(b))
- Quay trở lại bước 2
- Ta có thể minh hoạ vòng lặp for bằng sơ đồ khối sau
Trong cấu trúc For dạng tiến, câu lệnh được thực hiện lặp đi lặp lại chođến khi giá trị của biến đếm lớn hơn giá trị cuối Mỗi lần thực hiện xong câulệnh, giá trị của biến đếm được tăng lên đến giá trị liền sau của nó
* Nguyên lý hoạt động cấu trúc For dạng lùi:
Begin
Biến đếm := giá trị đầu
Biến đếm > giá trị cuối
Biến đếm := Succ(Biến đếm)
Đúng
Sai
Trang 111 Biến đếm nhận giá trị cuối.
2 Máy kiểm tra xem giá trị của biến đếm còn lớn hơn giá trị đầu không?
3 Nếu việc kiểm tra:
- Cho giá trị sai: máy bỏ qua câu lệnh
- Cho giá trị đúng:
+ Máy sẽ thực hiện câu lệnh
+ Giảm giá trị của biến đếm b đến giá trị đứng liền trước của nó (biếnđếm:=pred(b))
- Quay trở lại bước 2
- Ta có thể minh hoạ vòng lặp for bằng sơ đồ khối sau
Trong cấu trúc For dạng lùi, câu lệnh được thực hiện lặp đi lặp lại cho đếnkhi giá trị của biến đếm nhỏ hơn giá trị của giá trị đầu Mỗi lần thực hiện xongcâu lệnh, giá trị của biến đếm được giảm đi đến giá trị liền trước của nó
* GIẢI PHÁP VỚI CẤU TRÚC LẶP WHILE DO:
Begin
Biến đếm := giá trị đầu
Biến đếm < giá trị cuối
Biến đếm := Pred(Biến đếm)
Đúng
Sai
Trang 12• Tác dụng: Dùng để xây dựng chu trình với số lần lặp chưa xác địnhtrước.
• Cú pháp: While <Biểu thức Boolean> do <câu lệnh>;
Câu lệnh là thân chu trình và có thể là câu lệnh đơn hoặc câu lệnh ghép
* Nguyên lý hoạt động:
1 Máy tính xác định giá trị của <Biểu thức Boolean>
2 Tuỳ thuộc vào giá trị của <Biểu thức Boolean>:
- Nếu <Biểu thức Boolean> có giá trị đúng (TRUE), máy tính sẽ thực hiệncâu lệnh sau đó quay lại bước 1
- Nếu <Biểu thức Boolean>có giá trị sai (FALSE), câu lệnh sẽ bị bỏ qua
và việc thực hiện lệnh lặp kết thúc
• Nhận xét:
- Câu lệnh được thực hiện lặp đi lặp lại cho đến khi <Biểu thức Boolean>nhận giá trị sai (FALSE) Câu lệnh sẽ không được thực hiện lần nào nếu <Biểuthức Boolean> nhận giá trị sai (FALSE) ngay từ khi bắt đầu vào chu trình
- Trong thân chu trình phải có câu lệnh làm thay đổi giá trị của <Biểu thứcBoolean> để tránh xảy ra vòng lặp vô tận dẫn đến hiện tượng cheo máy
* GIẢI PHÁP VỚI VÒNG LẶP REPEAT UNTIL
End
Biểu thức Boolean
Công việc
Begin
Sai
Đúng