Sáng kiến kinh nghiệm Nâng cao kỹ năng lập trình pascal
Bạn đang xem 30 trang mẫu của tài liệu "Sáng kiến kinh nghiệm Nâng cao kỹ năng lập trình pascal", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
sang_kien_kinh_nghiem_nang_cao_ky_nang_lap_trinh_pascal.doc
Nội dung tài liệu: Sáng kiến kinh nghiệm Nâng cao kỹ năng lập trình pascal
- I. Điều kiện hoàn cảnh tạo ra sáng kiến: - Chúng ta đang sống trong một thời đại mới, thời đại phát triển rực rỡ của Công nghệ thông tin( CNTT). CNTT đã ở một bước phát triển cao đó là số hóa tất cả các dữ liệu thông tin, luân chuyển mạnh mẽ và kết nối tất cả chúng ta lại với nhau. Mọi loại thông tin, số liệu âm thanh, hình ảnh có thể được đưa về dạng kỹ thuật số để bất kỳ máy tính nào cũng có thể lưu trữ, xử lý và chuyển tiếp cho nhiều người. Những công cụ và sự kết nối của thời đại kỹ thuật số cho phép chúng ta dễ dàng thu thập, chia sẻ thông tin và hành động trên cơ sở những thông tin này theo phương thức hoàn toàn mới, kéo theo hàng loạt sự thay đổi về các quan niệm, các tập tục, các thói quen truyền thống, và thậm chí cả cách nhìn các giá trị trong cuộc sống. CNTT đến với từng người dân, từng người quản lý, nhà khoa học, người nông dân, bà nội trợ, học sinh tiểu học .Không có lĩnh vực nào, không có nơi nào không có mặt của CNTT. Công nghệ thông tin là một trong các động lực quan trọng nhất của sự phát triển ứng dụng và phát triển công nghệ thông tin ở nước ta nhằm góp phần giải phóng sức mạnh vật chất, trí tuệ và tinh thần của toàn dân tộc, thúc đẩy công cuộc đổi mới, phát triển nhanh và hiện đại hoá các ngành kinh tế, tăng cường năng lực cạnh tranh của các doanh nghiệp, hỗ trợ có hiệu quả cho quá trình hội nhập kinh tế quốc tế, nâng cao chất lượng cuộc sống của nhân dân, đảm bảo an ninh quốc phòng và tạo khả năng đi tắt đón đầu để thực hiện thắng lợi sự nghiệp công nghiệp hóa, hiện đại hóa đất nước (CT số 58-CT/TW ngày 17- 10- 2000 của BCT khoá VIII). Tác động của CNTT đối với xã hội loài người vô cùng to lớn, nó không chỉ thúc đẩy nhanh quá trình tăng trưởng kinh tế, mà còn kéo theo sự biến đổi trong phương thức sáng tạo của cải, trong lối sống và tư duy của con người. Trong nền kinh tế tri thức, các quy trình sản xuất đều được tự động hoá. Máy móc không chỉ thay thế con người những công việc nặng nhọc, mà thay thế con người ở những khâu phức tạp của sản xuất và quản lý, không chỉ thay thế thao tác lao động của con người mà cả thao tác tư duy. Trong nền kinh tế toàn cầu, với sự phát triển của internet, thương mại điện tử đang trở thành một lĩnh vực phát triển rất mạnh mẽ, nó thúc đẩy các ngành sản xuất dịch vụ trên phạm vi toàn thế giới, và đặc biệt 1
- quan trọng với các nước đang phát triển, nhất là đối với vùng xa xôi hẻo lánh, các nước và các vùng này có cơ hội tiếp cận thị trường quốc tế. CNTT chiếc chìa khoá để mở cánh cổng vào nền kinh tế tri thức. Mạng thông tin là môi trường lý tưởng cho sự sáng tạo, là phương tiện quan trọng để quảng bá và nhân rộng nhanh vốn tri thức, động lực của sự phát triển, thúc đẩy phát triển dân chủ trong xã hội, phát triển năng lực của con người CNTT sẽ nhanh chóng thay đổi thế giới một cách mạnh mẽ, sự chuyển đổi này có vị thế trong lịch sử như một cuộc cách mạng kinh tế - xã hội và có ảnh hưởng to lớn đến đời sống con người. - ChÝnh v× x¸c ®Þnh ®îc tÇm quan träng ®ã nªn Nhµ níc ta ®· ®a m«n Tin 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«n Tin häc ®Ó lµm quen dÇn víi máy tính, với lÜnh vùc CNTT, t¹o nÒn mãng c¬ së ban ®Çu ®Ó häc nh÷ng phÇn n©ng cao trong c¸c cÊp học tiÕp theo. - Trong chương trình lớp 8, các em làm quen với lập trình. Ngôn ngữ lập trình dường như rất xa lạ vì đây là kiến thức đầu tiên trong lập trình mà các em được học. - Qua giảng dạy môn Tin học ở trường THCS Mỹ Thịnh - Mỹ Lộc, bản thân tôi nhận thấy rằng nhiều học sinh lớp 8 thấy môn lập trình Pascal khó, khô khan và cực kỳ phức tạp. Mới đầu các em cũng rất sợ vì khi thấy giải một bài toán ở ngoài thì đơn giản và chỉ trong vòng vài giây có thể nhẩm ra kết quả còn ở trong lập trình cũng bài toán đó mà phải làm đến hàng chục phút, đưa ra thuật toán mà có thể cho kết quả sai. - Tâm lý một số em đều cho rằng môn Tin học không phải là môn học chính. Do đó không cần phải để tâm đến. - Xét ở một góc độ nào đó lập trình cũng là một phần học khó đối với học sinh THCS. Khó ở đây không phải do tính phức tạp của phần học hay phạm vi kiến thức quá rộng lớn. Nếu đem so sánh lập trình và các môn Toán học, Vật Lý, Hóa học ở trường THCS thì lập trình Pascal gọn nhỏ hơn - Lập trình Pascal "khó" đối với học sinh THCS vì môi trường lập trình Pascal có giao diện và các từ khóa đều bằng tiếng Anh, các dòng thông báo hay 2
- trợ giúp cũng vậy. Nhìn chung học sinh THCS vốn tiếng Anh không nhiều, nhiều em còn yếu về tiếng Anh - Một vấn đề nữa cũng là rào cản đối với việc các học sinh THCS tiếp cận với lập trình Pascal đó là: tư duy Toán học của các em còn hạn chế phụ thuộc vào Sách Giáo Khoa do đó kỹ năng phân tích, tổng hợp, xây dựng thuật toán cho mỗi bài toán hay vấn đề cần lập trình chưa tốt. Các em vẫn thụ động trong việc tiếp cận bài toán, sắp xếp tư duy, xây dựng thuật giải. - Từ thực tế trên, trong quá trình dạy học tôi luôn băn khoăn, trăn trở làm thế nào nâng cao chất lượng kỹ năng lập trình cho học sinh lớp 8. Việc tiếp cận với môn học rất khó khăn, phải làm rất nhiều lần và thực hành rất nhiều tiết các em mới hiểu việc nhập và xuất dữ liệu. Do đó sẽ rất khó khăn để các em hình thành kỹ năng viết chương trình. Nhất là những năm gần đây Ngành giáo dục luôn thành lập đội tuyển tham dự thi học sinh giỏi môn Tin học , . Điều đó đã thúc đẩy tôi trong quá trình giảng dạy phải nghiên cứu tìm tòi biện pháp, kinh nghiệm để giúp cho các em có sự đam mê học tập về lập trình, giúp các em biết được quy trình lập trình như thế nào và định hướng cho học sinh cách để trở thành một nhà lập trình thì cần phải nâng cao kỹ năng lập trình pascal. Giúp các em hiểu, yêu thích lập trình và học lập trình trong sự hứng thú, phấn khởi. II.Mô tả giải pháp 1. Tình hình thực tế trước khi tạo sáng kiến 1.1. ThuËn lîi: * Nhµ trêng: - Tuy m«n Tin häc míi chØ lµ m«n häc tù chän nhng nhµ trêng ®· t¹o ®iÒu kiÖn ®Ó häc sinh cã thÓ häc tõ khèi líp 6, t¹o ®iÒu kiÖn s¾m söa m¸y mãc, trang thiÕt bÞ phôc vô cho viÖc d¹y vµ häc m«n Tin häc. - §îc sù ñng hé cña c¸c cÊp Uû §¶ng, cơ quan địa phương X· Mü ThÞnh, phô huynh học sinh toµn trêng hç trî vÒ c¶ tinh thÇn còng nh c¬ së vËt chÊt cho nhµ trêng. 3
- * Gi¸o viªn: - Gi¸o viªn ®îc ®µo t¹o đúng chuyªn ngµnh vÒ tin häc ®Ó ®¸p øng yªu cÇu cho d¹y vµ häc m«n tin häc trong bËc THCS. * Häc sinh: - V× lµ m«n häc trùc quan, sinh ®éng, m«n häc kh¸m ph¸ nh÷ng lÜnh vùc míi nªn häc sinh rÊt høng thó häc, nhÊt lµ nh÷ng tiÕt thùc hµnh. - Một số gia đình có điều kiện kinh tế đã mua sắm máy vi tính, tạo điều kiện học tập thuận lợi cho con em mình đối với môn Tin học nói riêng, và các môn học khác nói chung. 1.2. Khã kh¨n: * Nhµ trêng: - Nhµ trêng ®· cã mét phßng m¸y vi tÝnh ®Ó cho häc sinh häc nhng vÉn cßn h¹n chÕ vÒ sè lîng còng nh chÊt lîng, mçi ca thùc hµnh cã tíi 3 em ngåi cïng mét m¸y nªn c¸c em kh«ng cã nhiÒu thêi gian ®Ó thùc hµnh lµm bµi tËp mét c¸ch ®Çy ®ñ. H¬n n÷a nhiÒu m¸y cÊu h×nh m¸y ®· cò, chÊt lîng kh«ng cßn tèt nªn hay háng hãc, ¶nh hëng rÊt nhiÒu ®Õn chÊt lîng häc tËp cña häc sinh. * Gi¸o viªn: - M«n Tin häc míi chØ lµ m«n tù chän trong ch¬ng tr×nh bËc THCS nªn ch¬ng tr×nh vµ sù ph©n phèi ch¬ng tr×nh bíc ®Çu cha cã sù thèng nhÊt vµ ®ang dần hoµn chØnh. H¬n n÷a khi thùc hµnh, c¸c m¸y mãc cò thêng gÆp sù cè, trôc trÆc dÉn ®Õn häc sinh thiÕu m¸y, gặp khó khăn trong quá trình thực hành. * Häc sinh: - Một bộ phận học sinh lớp 8 chưa ý thức tớiviệc học tập Tin học, một số em còn sử dụng máy vi tính không đúng mục đích của môn học. - Vẫn còn một số em học sinh tiếp thu kiến thức còn chậm, đặc biệt là kỹ năng đọc hiểu chương trình, vì đa phần dùng ngôn ngữ Tiếng Anh. 4
- - Do đặc thù kinh tế của Xã Mỹ Thịnh là địa phương thuần nông, nên sự quan tâm của phụ huynh đến việc học tập của con em còn hạn chế. Ít có điều kiện chăm sóc, giáo dục và định hướng cho con em trong việc học tập. - Một số học sinh chưa coi trọng môn học, xem đây là một môn phụ nên chưa có sự đầu tư thời gian cho việc học. Ngoài ra, ở chương trình Tin học 8, các em phải làm quen, tiếp cận với ngôn ngữ lập trình Pascal là một phần mềm có cấu trúc phức tạp, ngôn ngữ lập trình bằng tiếng anh. Mặc khác để thực hiện được một chương trình thì các em phải có một kiến thức toán học nhất định. 2. Mô tả giải pháp trong sáng kiến - Pascal là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh, được Niklaus Wirth phát triển vào năm 1970 là ngôn ngữ đặc biệt thích hợp cho kiểu lập trình có cấu trúc. - Pascal dựa trên ngôn ngữ lập trình ALGOL và được đặt tên theo nhà toán học và triết học Blaise Pascal. Wirth đồng thời cũng xây dựng Modula- 2 và Oberon, là những ngôn ngữ tương đồng với Pascal. Oberon cũng hỗ trợ kiểu lập trình hướng đối tượng. - Ở môi trường này, học sinh sở hữu một lượng tài nguyên là các kiểu dữ liệu đơn giản, cùng với các câu lệnh rõ ràng, nhất quán và rất dễ thuộc. Tuy nhiên, nó đòi hỏi người lập trình tài bố cục, thiết kế một thuật toán sao cho đúng đắn, hiệu quả và tối ưu, rồi vận dụng các quy tắc cú pháp để viết ra được những câu lệnh phù hợp. - Vì thế để giúp các em đọc hiểu được các câu lệnh, nâng cao kỹ năng lập trình, về phía giáo viên cần phải: + Nắm vững mục tiêu, đối tương, phương pháp, chưong trình Sách Giáo Khoa (SGK) lập kế hoạch dạy học, tiến hành từng tiết lên lớp + Phát huy được tính tích cực, chủ động của học sinh. 5
- + Tiến hành dạy, kiểm tra đánh giá học sinh, bồi dưỡng học sinh giỏi, giúp đỡ học sinh yếu. Hỗ trợ dạy môn Tin học thông qua giaó viên chủ nhiệm và phụ huynh học sinh. + Tiếp cận nội dung, lựa chọn phương pháp phù hợp với từng đối tượng học sinh Giỏi, Khá, Trung Bình, Yếu, Kém. + Tự thích ứng với sự thay đổi chương trình SGK môn Tin học + Gợi cho học sinh niềm yêu thích, tìm tòi với môn học. - Về phía học sinh cần xác định được SGK là phương tiện chủ yếu để học tập, phải lựa chọn các tài liệu tham khảo phù hợp, tư duy chủ động, quan sát vấn đề, vận dụng vào thực hành và làm tốt các bước sau: + Xác định bài toán + Tìm dữ liệu biểu diễn thuật toán + Xây dựng thuật toán + Viết chương trình + Chạy thử, thay đổi, kiểm tra chương trình 2.1 Xác định bài toán: - Khái niệm bài toán: Bài toán là một công việc hay một nhiệm vụ cần phải giải quyết. - Vấn đề có nghĩa rộng hơn bài toán( là một loại vấn đề mà để giải quyết phải liên quan ít nhiều đến tính toán: bài toán trong Vật lý, Hóa học, Sinh học ) - Có 2 loại vấn đề + Vấn đề được khẳng định tính đúng/ sai + Vấn đề cần tìm được giải pháp để đạt được một mục đích xác định từ những điêu kiện ban đầu nào đó. - Biễu diễn vấn đề bài toán: A → B + Trong đó A: Giả thiết, điều kiện ban đầu. B: Kết luận, mục tiêu cần đạt. - Giải quyết vấn đề bài toán: 6
- + Từ A dùng một số hữu hạn, các bước suy luận có lý hoặc hành động thích hợp để đạt được B + Trong Tin học: A là đầu vào, B là đầu ra. - Quá trình giải bài toán trên máy tính: Bài toán trên máy cũng mang đầy đủ các tính chất của bài toán tổng quát trên, nhưng nó lại được diễn đạt theo một các khác. + A : là đưa thông tin vào – thông tin trước khi xử lý (Input ) + B: là đưa thông tin ra – kết quả sau khi xử lý (Output) + : là chương trình tạo từ các câu lệnh cơ bản của máy tính cho phép xử lý từ A đến B. - Xác định bài toán: Là xác định rõ 2 thành phần Input và Output và mối quan hệ giữa chúng để có thể lựa chọn thuật toán và ngôn ngữ lập trình thích hợp. Ví dụ 1: Tính chu vi, diện tích hình tròn. Các bước xác định cho bài toán: + Thông tin vào (Input) : Bán kính hình tròn. + Thông tin ra (Output) : Kết quả chu vi, diện tích khi đưa gía trị bán kính vào. Ví dụ :: Đưa bán kính hình tròn vào( r = 6) Áp dụng công thức tính chu vi hình tròn = 2r x 3.14 Áp dụng công thức tính chu vi hình tròn = r2 x 3.14 Kết quả in ra là chu vi = 37.68, diện tích = 113.04. Ví dụ 2: Giải phương trình bậc nhất dạng tổng quát bx + c =0(SGK) Các bước xác định cho bài toán: + Input : Các số b và c + Output : Nghiệm của phương trình bậc nhất 7
- Ví dụ : Lần lượt đưa giá trị b, c vào ( b = 5,c = - 7) - Áp b = 0 và c = 0 thì phương trình có vô số nghiệm - Nếu b = 0 và c ≠ 0 thì phương trình vô nghiệm - Nếu b ≠ 0 thì phương trình có nghiệm x = -c/b; Kết quả in ra là x = 7/5 Ví dụ 3: Bài toán cổ dân gian( Bài toán gà chó) Vừa gà vừa chó Bó lại cho tròn Ba mươi sáu(36) con Một trăm(100) chân chẵn Hỏi mấy gà, mấy chó? Cách giải bằng toán học như sau: Gọi x là số chó Số gà là: 36 – x Số chân chó: 4x Số chân gà: 2(36-x) theo đề bài ta có: 4x + 2(36 – x) =100 4x + 72 – 2x = 100 2x = 100 -72 x = 14 Vậy số chó là 14 con Số gà : 36 – 14 = 22 con Bài toán vui này được lập trình như sau :Vì số con là 36 và số chân là 100. Giả sử tất cả là chó, thì số con tối đa là 100/4 = 25 (con). Tối thiểu là 36/4 = 9 (con). Như vậy chúng ta chỉ cần sử dụng vòng lặp for từ 9->25. Tối ưu hơn so với từ 0 -> 36 Các bước xác định cho bài toán: 8
- + Input : số chân gà và chó là 100, tổng số gà và chó:36 + Output : Số gà, số chó + Các dữ liệu cần xử lý để chế biến thông tin như: Chạy chương trình 9
- Ví dụ 4: Bài toán cổ dân gian(Trăm trâu trăm cỏ) Trăm trâu trăm cỏ Trâu đứng ăn năm Trâu nằm ăn ba Lụ khụ trâu già Mỗi con 1 bó. Tính số trâu mỗi loại. Cách giải bằng toán học như sau : Gọi x là số trâu đứng, y là số trâu nằm, z là số trâu già Điều kiện: x, y, z đều nhỏ hơn 100 và x,y,z ≥ 0 Vậy ta có số trâu: x + y + z = 100 (1) Và số bó cỏ : 5x + 3*y +z/3 =100 hay 15*x+ 9*y + z =100 (2) Lấy (2) - (1) ta có 14*x +8*y =200 (3) Rút gọn (3) ta có 7*x+4*y = 100 10
- => y = 25- (x*7)/4 Vì y là số tự nhiên, y ≥ 0 nên (x*7)/4 phải nhỏ hơn hoặc bằng 25 Thỏa mãn x=0, x = 4, x = 8, x =12 ; Khi đó số trâu đứng, trâu nằm, trâu già là : x= 0, y = 25, z = 75 x= 4, y = 18, z = 78 x= 8, y =11, z =81 x= 12, y =4, z =84 Các bước xác định cho bài toán: + Input : 100 con trâu, 100 bó cỏ. Trâu đứng ăn 5 bó cỏ, trâu nằm ăn 3 bó cỏ, trâu già ăn 1 bó cỏ + Output : Số con trâu đứng, trâu nằm, trâu già + Các dữ liệu cần xử lý để chế biến thông tin như: 11
- Chạy chương trình: 2.2. Tìm dữ liệu biểu diễn thuật toán: *Cấu trúc dữ liệu : - Là kiểu dữ liệu mà bên trong nó có chứa nhiều thành phần dữ liệu và các thành phần dữ liệu đấy được tổ chức theo một cấu trúc nào đó. Nó dùng để biểu diễn cho các thông tin có cấu trúc của bài toán. Cấu trúc dữ liệu thể hiện khía cạnh logic của dữ liệu. - Khi giải một bài toán, cần phải định nghĩa tập hợp dữ liệu để biểu diễn tình trạng cụ thể. Việc lựa chọn này tùy thuộc vào vấn đề cần giải quyết và những thao tác sẽ tiến hành trên dữ liệu vào. Có những thuật toán chỉ thích ứng với một cách tổ chức dữ liệu nhất định, đối với những cách tổ chức dữ liệu khác thì sẽ kém hiệu quả hoặc không thể thực hiện được. Chính vì vậy nên bước xây dựng cấu trúc dữ liệu không thể tách rời bước tìm kiếm thuật toán giải quyết vấn đề. * Các tiêu chuẩn khi lựa chọn dữ liệu: 12
- - Dữ liệu trước hết phải biểu diễn được đầy đủ các thông tin nhập và xuất của bài toán. Các kiểu dữ liệu Phạm vi sử dụng Byte Các số nguyên từ 0 đến 255 Integer Các số nguyên từ -215 đến 215-1 Real Số thực có giá trị tuyệt đối trong khoảng 2,9x10-39 đến 1,7x1038 và số 0 Char Các kí tự trong bảng chữ cái String Các dãy số tối đa 255 kí tự - Dữ liệu phải phù hợp với các thao tác của thuật toán mà ta lựa chọn để giải quyết bài toán. 2.3 Xây dựng thuật toán: - Khái niệm thuật toán: Thuật toán là dãy hữu hạn các thao tác cần thực hiện theo trình tự xác định để thu được kết quả cần thiết từ những điều kiện cho trước. - Phương pháp biểu diễn thuật toán: Khi chứng minh hoặc giải một bài toán trong toán học, chúng ta thường dùng những ngôn từ toán học như : "ta có", "điều phải chứng minh", "giả thiết", và sử dụng những phép suy luận toán học như phép suy ra, tương đương, Thuật toán là một phương pháp thể hiện lời giải bài toán nên cũng phải tuân theo một số quy tắc nhất định. Ðể có thể truyền đạt thuật toán cho người khác hay chuyển thuật toán thành chương trình máy tính, ta phải có phương pháp biểu diễn thuật toán. Có 3 phương pháp biểu diễn thuật toán : + Dùng ngôn ngữ tự nhiên. 13
- + Dùng lưu đồ - sơ đồ khối + Dùng mã giả - Các tiêu chí thuật toán cần thỏa mãn + Tính hữu hạn: Giải thuật phải dừng lại sau một số bước hữu hạn. + Tính dừng: Khi kết thúc giải thuật phải cung cấp kết quả đúng đắn. + Tính hiệu quả: Thời gian tính toán nhanh. + Sử dụng ít tài nguyên không gian như: bộ nhớ, thiết bị. + Mang tính phổ dụng: dễ hiểu, dễ cài đặt và mở rộng cho các bài toán khác. - Phân loại thuật toán + Phân loại theo cài đặt. + Phân loại theo thiết kế. + Phân loại theo lĩnh vực nghiên cứu. a. Ngôn ngữ tự nhiên - Trong cách biểu diễn thuật toán theo ngôn ngữ tự nhiên, người ta sử dụng ngôn ngữ thường ngày để liệt kê các bước của thuật toán. - Ưu điểm: + Đơn giản + Không yêu cầu người viết và người đọc có kiến thức nền tảng - Nhược điểm + Dài dòng + Không làm nổi bật cấu trúc thuật toán + Khó biểu diễn với các bài toán phức tạp Ví dụ: Bài toán giải phương trình bậc nhất 1 ẩn ax+b=0 14
- Bước 1: Nhập a, b. Bước 2: Nếu a = 0 thì Bước 2.1 . Nếu b = 0 thì phương trình vô số nghiệm. Bước 2.2. Nếu b ≠ 0 thì phương trình vô nghiệm Bước 3. Nếu a ≠ 0 thì phương trình có nghiệm x= - b/a. Bước 4. Đưa ra giá trị nghiệm x. Bước 5. Kết thúc. b. Lưu đồ - sơ đồ khối - Lưu đồ hay sơ đồ khối là một công cụ trực quan để diễn đạt các thuật toán. Biểu diễn thuật toán bằng lưu đồ sẽ giúp người đọc theo dõi được sự phân cấp các trường hợp và quá trình xử lý của thuật toán. Phương pháp lưu đồ thường được dùng trong những thuật toán có tính rắc rối, khó theo dõi được quá trình xử lý. - Ðể biểu diễn thuật toán theo sơ đồ khối, ta phải phân biệt hai loại thao tác. + Một thao tác là thao tác chọn lựa dựa theo một điều kiện nào đó. + Các thao tác không thuộc loại chọn lựa được xếp vào loại hành động. - Ưu điểm + Trực quan, dễ hiểu, dễ thiết kế. + Cung cấp toàn cảnh, tổng quan về thuật toán. - Nhược điểm + Cồng kềnh, đặc biệt đối với bài toán phức tạp Một số khối trong sơ đồ khối dùng để biểu diễn thuật toán. 15
- - Cấu trúc tuần tự : Các bước thực hiện theo một trình tự, hết bước này tới bước khác. - Cấu trúc rẽ nhánh: + Nếu biểu thức điều kiện đúng, thực hiện công việc 1 16
- + Nếu biểu thức điều kiện sai, thực hiện công việc 2 17
- - Cấu trúc lặp Ví dụ: Giải phương trình bậc nhất ax + b = 0 18
- c. Mã giả - Là ngôn ngữ tựa, gần giống như ngôn ngữ lập trình. Trong mã giả ta còn sử dụng cả các ký hiệu toán học, các biến, và đôi khi cả cấu trúc kiểu thủ tục. Cấu trúc thuật toán kiểu thủ tục thường được sử dụng để trình bày các thuật toán đệ qui hay các thuật toán quá phức tạp cần phải được trình bày thành nhiều cấp độ. - Ưu điểm: + Tiện lợi, đơn giản. + Dễ hiểu, dễ diễn đạt. - Cùng với việc sử dụng các biến, trong thuật toán rất thường gặp một phát biểu hành động đặt (hay gán) một giá trị cho một biến. 19
- Ví dụ: hành động tăng biến i lên 1 đơn vị có thể được viết như sau: i := i + 1 - Các cấu thường được sử dụng trong mã giả dựa theo ngôn ngữ lập trình PASCAL gồm: + Cấu trúc chọn: if (điều kiện) then (hành động) if (điều kiện) then (hành động) else (hành động) + Cấu trúc lặp: while (điều kiện) do (hành động) for (biến đếm) := (giá trị đầu) to (giá trị cuối) do (hành động) Ví dụ: Thuật toán tìm nghiệm của phương trình bậc nhất ax+b=0 Nhập : 2 hệ số a, b, Xuất : nghiệm của phương trình Thuật toán: 1. a = 0 2. if b = 0 then begin Xuất kết quả: phương trình có vô số nghiệm end 3. esle if b 0 Xuất kết quả: phương trình có nghiệm x= -b/a 2.4. Viết chương trình 20
- - Viết chương trình là dùng ngôn ngữ lập trình cụ thể nào để diễn tả thuật toán, cấu trúc dữ liệu thành câu lệnh để máy tính có thể thực hiện được và giải quyết đúng bài toán mà người viết chương trình mong muốn. Và đây cũng là một trong những bước then chốt của người lập trình. - Sau khi đã có thuật toán ta phải lập trình để thực hiện thuật toán đó. Muốn lập trình đạt hiệu quả cao, cần phải có kỹ thuật lập trình tốt. Kỹ thuật lập trình tốt thể hiện ở kỹ năng viết chương trình, khả năng gỡ rối và thao tác nhanh. - Lập trình tốt không chỉ nắm vững ngôn ngữ lập trình là đủ, mà phải biết cách viết chương trình một cách uyển chuyển, khôn khéo và phát triển dần dần để chuyển các ý tưởng ra thành chương trình hoàn chỉnh. a. Các thành phần cơ bản của ngôn ngữ lập trình Pascal a.1 . Bộ ký tự - Bộ 26 chữ Latinh: + Chữ in: A, B, C, , X, Y, Z + Chữ thường: a, b, c, , x, y, z - Bộ chữ số thập phân: 0, 1, 2, 3, , 8, 9 - Ký tự gạch nối dưới: _ - Các ký hiệu toán học: +, -, *, /, =, , =, (, ), [, } a. 2. Từ khóa - Định nghĩa : Là những từ dành riêng, không được dùng các từ khóa này cho bất kỳ mục đích nào khác ngoài mục đích sử dụng do ngôn ngữ lập trình quy định. - Từ khóa chung: program, begin, end - Từ khóa để khai báo: var, const, array - Từ khóa của lệnh lựa chọn: if then else - Từ khóa của lệnh lặp: for to do, while do 21
- - Từ khóa toán tử: and, div, mod a.3. Danh hiệu tự đặt - Định nghĩa: Định hiệu tự đặt là một dãy ký tự dùng để đặt tên cho các hằng, biến, kiểu, Khi đặt tên, ta phải chú ý một số điểm sau: + Không được đặt trùng tên với từ khoá + Ký tự đầu tiên của tên không được bắt đầu bởi các ký tự đặc biệt hoặc chữ số. + Không được đặt tên với ký tự space, các phép toán. Ví dụ: Các tên viết như sau là sai #PHUONGNHUNG Sai vì bắt đầu bằng ký tự đặc biệt. SO 1 Sai vì có khoảng trắng . ELSE Sai vì trùng với từ khoá. LAP-TRINH- TIN Sai vì dấu trừ (-) là phép toán. 1ABC Sai vì bắt đầu bằng chữ số. b. Cấu trúc chung của một chương trình Pascal . 22
- b1. Phần khai báo : - Phần khai baó bắt đầu bằng từ khóa Program. - Phần khai báo gồm: + Khai báo tên chương trình. + Khai báo thư viện. + Một số khai báo khác( khai báo biến, khai báo hằng ) - Khai báo tên chương trình chấm dứt bằng dấu chấm phẩy(;). Tên chương trình phải được đặt theo đúng quy cách của danh hiệu tự đặt. Phần này có hay không cũng được. - Ví dụ: Program Giai _Phuong_trinh_bac_nhat; Program timsolonnhat ; - Khai báo các thư viện bằng từ khóa Uses.Ví dụ thư viện crt, - Ví dụ: Uses crt ; {khai báo thư viện crt } Thư viện crt trong Pascal cung cấp các chương trình có sẵn để làm việc với màn hình và bàn phím. - Ví dụ: Muốn xóa những gì đang có trên màn hình kết quả ta dùng lệnh Clrscr. - Khai báo Hằng: Hằng là đại lượng không đổi trong suốt quá trình thực hiện chương trình( Hằng được sử dụng cho các giá trị xuất hiện nhiều lần trong chương trình). Ta dùng tên hằng để chương trình rõ ràng và dễ sửa đổi. + Hằng được khai báo với từ khóa Const + Cú pháp Const = ; - Ví dụ : Const chiphi = 1000 ; - Khai báo Biến: Là đại lượng mà giá trị của nó có thể thay đổi trong quá trình thực hiện chương trình. + Biến được khai báo với từ khóa Var 23
- + Biến là tên của một vùng bộ nhớ lưu trữ dữ liệu. + Biến được xuất trong chương trình thông qua tên biến. + Biến là cấu trúc ghi nhớ dữ liệu, vì vậy phải quy định theo 1 kiểu dữ liệu nào đó. Ví dụ: Real, Integer, byte, + Cú pháp Var : ; Trong đó : Danh sách biến là một hay nhiều tên biến, các tên biến được viết cách nhau bởi dấu phẩy (,). Kiểu dữ liệu thường là một trong các kiểu dữ liệu chuẩn hay kiểu dữ liệu do người lập trình định nghĩa. Ví dụ : Var x , y : integer ; A: Array[1 50] of real; b2. Phần thân chương trình: - Phần thân chương trình là phần đặc biệt quan trọng và bắt buộc phải có, phần này luôn nằm giữa 2 từ khoá là begin và end. Ở giữa là lệnh mà các chương trình chính cần thực hiện. Đề bài yêu cầu viết chương trình thực hiện công việc gì thì ở phần thân phải có các câu lệnh dùng để thực hiện công việc đó. Sau từ khóa end là dấu chấm (.) để báo kết thúc chương trình. Các lệnh sau dấu chấm đều không có ý nghĩa. - Câu lệnh Câu lệnh đơn giản Vào dữ liệu Ra dữ liệu Lệnh gán (:=) Câu lệnh có cấu trúc Lệnh Lệnh chọn Lệnh lặp ghép(begin end) (if then else) (for to do, . 24
- - Các thủ tục nhập, xuất thường dùng TT Thủ Cú pháp lệnh Ý nghĩa lệnh tục Read(x1, x2, , xn); Nhập các biến x1, x2, , xn theo hàng ngang từ bàn phím (con trỏ không xuống hàng). 1 Nhập Readln(x1, x2, , xn); Nhập các biến x1, x2, , xn theo hàng dọc từ bàn phím (mỗi lần nhập con trỏ xuống hàng). Readln; Dừng chương trình, đợi Enter mới tiếp tục. Write(x1, x2, , xn); Viết giá trị trong các biến x1, x2, ,xn ra màn hình theo hàng ngang( con trỏ không xuống hàng). Writeln(x1, x2, , xn); Viết giá trị trong các biến x1, x2, , xn theo hàng dọc( mỗi lần viết giá trị 2 Xuất x có xuống hàng). Writeln; Xuống hàng. Writeln(R : n : m); Viết ra giá trị của biến thực R vào n chỗ, chỉ lấp m số thập phân. - Lưu ý : + Dấu chấm phẩy (;): dùng để ngăn cách các câu lệnh của Pascal và không thể thiếu được trong quá trình viết các câu lệnh. 25
- + Lời chú thích: Lời chú thích dùng để chú giải cho người sử dụng chương trình nhớ nhằm trao đổi thông tin giữa người với người. Lời chú thích nằm giữa ký hiệu:{ }, hoặc (* *) Ví dụ : PROGRAM Tinh_tien; {Dòng tiêu đề, khai báo tên chương trình } USES Crt; { Khai báo sử dụng thư viện Crt } VAR soluong : integer ; { Khai báo biến } Dongia,thanhtien:real; Thongbao:string; CONST phi =5000; {Khai báo hằng} BEGIN { Thân chương trình chính } Clrscr ; { Xóa màn hình } Thongbao:=’tong so tien phai thanh toan:’; Write(’don gia=’); readln(dongia); Write(’so luong =’); readln(soluong); Thanhtien:=soluong*dongia+phi; Witeln(’thongbao,thanhtien:3:2’); readln END. { Kết thúc chương trình} 2.5. Chạy thử, thay đổi, kiểm tra chương trình - Một số phím chức năng thường dùng STT Phím Chức năng 1 F2 Lưu chương trình đang soạn thảo vào đĩa. 2 F3 Mở file mới hoặc file đã tồn tại trên đĩa để soạn thảo. 26
- 3 Alt +F3 Đóng file đang soạn thảo. 4 Alt + F5 Xem kết quả chạy chương trình. 5 F8 Chạy từng câu lệnh một trong chương trình. 6 Alt + X Thoát khỏi Turbo Pascal. 7 Alt + F9 Biên dịch chương trình 8 Ctrl + F9 Chạy chương trình 9 Alt + 10 F10 Vào hệ thống Menu của Pascal. a. Chạy thử Chạy thử và tìm lỗi và công việc học sinh cần phải làm khi viết xong chương trình để kiểm tra chương trình của mình. Chương trình là do con người viết ra, cho nên khó có thể tránh khỏi sự nhầm lẫn. Một chương trình viết xong chưa chắc đã chạy được ngay trên máy tính để cho ra kết quả mong muốn. Kỹ năng tìm lỗi, sửa lỗi, điều chỉnh lại chương trình cũng là một kỹ năng quan trọng của người lập trình. Kỹ năng này có được bằng kinh nghiệm tìm và sửa lỗi của chính mình. - Các loại lỗi cơ bản thường gặp khi lập trình: + Lỗi cú pháp: Lỗi này hay gặp nhất nhưng lại dễ sửa nhất, chỉ cần nắm vững ngôn ngữ lập trình là đủ. + Lỗi cài đặt: Việc cài đặt thể hiện không đúng thuật toán đã định, đối với lỗi này thì phải xem lại tổng thể chương trình, kết hợp với các chức năng gỡ rối để sửa lại cho đúng. 27
- + Lỗi thuật toán: Lỗi này ít gặp nhất nhưng nguy hiểm nhất, nếu nhẹ thì phải điều chỉnh lại thuật toán, nếu nặng thì có khi phải loại bỏ hoàn toàn thuật toán sai và làm lại từ đầu. b. Kiểm tra - Khi chạy thử chương trình học sinh cần chạy với bộ dữ liệu nhỏ mà ta có thể kiểm tra được chương trình đó chạy đúng hay sai. - Có nhiều chương trình rất khó để kiểm tra chạy chương trình ra kết quả đúng hay sai, vì chưa có kết quả nào chính xác cả. c. Thay đổi chương trình - Một chương trình đã viết xong, đã chạy thử tốt, giải quyết đúng bài toán mà ta mong muốn nhưng chưa có nghĩa là quá trình lập trình đã hoàn tất. Mà các em có thể sáng tạo, sửa đổi nó theo một hướng khác mà nó có thể đáp ứng được một yêu cầu mới. - Các tiêu chuẩn của một chương trình, để từ đó giúp học sinh viết chương trình tốt hơn như: + Tính tin cậy: Chương trình phải chạy đúng như dự định, mô tả đúng một giải thuật đúng. Thông thường khi viết chương trình, ta luôn có thói quen kiểm tra tính đúng đắn của các bước mỗi khi có thể. + Tính uyển chuyển: Chương trình phải dễ sửa đổi. Bởi ít có chương trình nào viết ra đã hoàn hảo ngay được mà vẫn cần phải sửa đổi lại. Chương trình viết dễ sửa đổi sẽ làm giảm bớt công sức của người lập trình khi phát triển chương trình. + Tính trong sáng: Chương trình viết ra phải dễ đọc dễ hiểu, để sau một thời gian dài, khi đọc lại còn hiểu mình làm cái gì? Để nếu có điều kiện thì còn có thể sửa sai cải tiến hay biến đổi để được chương trình giải quyết bài toán khác. Tính trong sáng của chương trình phụ thuộc rất nhiều vào công cụ lập trình và phong cách lập trình. 28
- + Tính hữu hiệu: Chương trình phải chạy nhanh và ít tốn bộ nhớ, tức là tiết kiệm được cả về không gian và thời gian. Để có một chương trình hữu hiệu, cần phải có giải thuật tốt và những tiểu xảo khi lập trình. Tuy nhiên, việc áp dụng quá nhiều tiểu xảo có thể khiến chương trình trở nên rối rắm, khó hiểu khi sửa đổi. Tiêu chuẩn hữu hiệu nên dừng lại ở mức chấp nhận được, không quan trọng bằng ba tiêu chuẩn trên. Bởi phần cứng phát triển rất nhanh, yêu cầu hữu hiệu không cần phải đặt ra quá nặng. - Ví du 1: Viết chương trình cho phép nhập n số và cho biết số nhỏ nhất trong các số vừa nhập là số thứ mấy. Chạy chương trình: lần 1 29
- Chạy chương trình:lần 2 30
- - Ví dụ 2. Giải bài toán cổ về việc sinh sản của thỏ.(Dãy số Fibonacci ). Bài toán đặt ra như sau: - Các con thỏ không bao giờ chết - Hai tháng sau khi ra đời, mỗi cặp thỏ mới sẽ sinh ra một cặp thỏ con (một đực, một cái) - Khi đã sinh con rồi thì cứ mỗi tháng tiếp theo chúng lại sinh được một cặp con mới Giả sử từ đầu tháng 1 có một cặp mới ra đời thì đến giữa tháng thứ n sẽ có bao nhiêu cặp. Ví dụ, n = 5, ta thấy: Giữa tháng thứ 1: 1 cặp (ab) (cặp ban đầu) Giữa tháng thứ 2: 1 cặp (ab) (cặp ban đầu vẫn chưa đẻ) Giữa tháng thứ 3: 2 cặp (AB)(cd) (cặp ban đầu đẻ ra thêm 1 cặp con) Giữa tháng thứ 4: 3 cặp (AB)(cd)(ef) (cặp ban đầu tiếp tục đẻ) Giữa tháng thứ 5: 5 cặp (AB)(CD)(ef)(gh)(ik) (cả cặp (AB) và (CD) cùng đẻ) Bây giờ, ta xét tới việc tính số cặp thỏ ở tháng thứ n: F(n) Nếu mỗi cặp thỏ ở tháng thứ n – 1 đều sinh ra một cặp thỏ con thì số cặp thỏ ở tháng thứ n sẽ là: F(n) = 2 * F(n – 1) Nhưng vấn đề không phải như vậy, trong các cặp thỏ ở tháng thứ n – 1, chỉ có những cặp thỏ đã có ở tháng thứ n – 2 mới sinh con ở tháng thứ n được thôi. Do đó F(n) = F(n – 1) + F(n – 2) (= số cũ + số sinh ra). Vậy có thể tính được F(n) theo công thức sau: • F(n) = 1 nếu n ≤ 2 • F(n) = F(n – 1) + F(n – 2) nếu n > 2. Việc giải bài toán này giúp các em vừa rèn luyện khả năng toán hoặc cũng như tìm hiểu về môn sinh học. 31