Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Tin học Skkn phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11....

Tài liệu Skkn phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11.

.DOC
26
1718
80

Mô tả:

SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 PHƯƠNG PHÁP GIẢNG DẠY MỘT SỐ NỘI DUNG KHÓ TRONG CHƯƠNG TRÌNH TIN HỌC 11 I. LÝ DO CHỌN ĐỀ TÀI: Công nghệ thông tin là một ngành khoa học đang phát triển rất mạnh mẽ. Sự bùng nổ thông tin trong thời đại ngày nay, tốc độ phát triển của công nghệ thông tin khiến cho người thầy không thể dạy hết mọi điều cho học trò, mà dù có kéo dài thời gian để dạy hết mọi điều thì rồi các kiến thức đó cũng nhanh chóng trở nên lạc hậu, Do đó người thầy cần phải tìm ra phương pháp dạy học tích cực hơn để tăng hiệu quả dạy và học. Dạy học sinh cách chủ động, phương pháp học, cách học những điều mà thực tế đòi hỏi thay vì chuyển tải một lượng kiến thức quá nhiều đến mức học sinh không thể nhớ nổi hoặc có nhớ lúc học, còn lúc cần vận dụng thì quên hết. Môn Tin học là một môn học mới mẻ của học sinh THPT, học sinh chưa có khái niệm về công nghệ thông tin, khái niệm thuật toán trong các ngôn ngữ lập trình, vì vậy rất khó cho việc dạy và học. Vậy cần phải có phương pháp dạy và học cho một môn học hoàn toàn mới. Xuất phát từ thực tiễn giảng dạy tại trường THPT NGÔ SĨ LIÊ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ó). Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình tự hoạt động cho máy tính, máy gia dụng là cần thiết. Và để làm được việc đó cần có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó nhà lập trình có thể chọn một ngôn ngữ lập trình thích hợp. Tuy nhiên mọi thứ đều có điểm GV : Trịnh Văn Thịnh Trang 1 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 khởi đầu của nó, với học sinh việc học Pascal là khởi đầu cho việc tiếp cận ngôn ngữ lập trình bậc cao, qua đó giúp các em hình dung được sự ra đời, cấu tạo, hoạt động cũng như ích lợi của các chương trình hoạt động trong máy tính, các máy tự động…Quá đó giúp các em có thêm một định hướng, một niềm đam mê về tin học, về nghề nghiệp mà các em chọn sau này. Đồng thời Pascal là một ngôn ngữ có cấu trúc thể hiện trên 3 yếu tố: Cấu trúc về mặt dữ liệu, cấu trúc về mặt lệnh, cấu trúc về mặt chương trình. Ở một khía cạnh khác, trong chương trình tin học lớp 11, ngoài những nội dung đã được Bộ GD&ĐT đưa vào phần nội dung giảm tải. Vẫn còn một số nội dung mà những học sinh mới được tiếp xúc với môn học Pascal cảm thấy khó tiếp thu, khó hiểu và không làm được các bài tập áp dụng. Xuất phát từ cơ sở trên, tôi đã chọn đề tài “PHƯƠNG PHÁP GIẢNG DẠY MỘT SỐ NỘI DUNG KHÓ TRONG CHƯƠNG TRÌNH TIN HỌC 11”, nhằm giúp các em biết cách tiếp cận với những nội dung đó ở một góc độ dễ hơn, trực quan hơn, từ đó hiểu rõ được ngữ nghĩa cũng như cách sử dụng các câu lệnh phù hợp để có thể tiếp thu tốt nội dung bài học và làm tốt các bài tập áp dụng, từ đó cảm thấy yêu thích hơn môn tin học nói chung và nội dung về ngôn ngữ lập trình nói riêng. II. TỔ CHỨC THỰC HIỆN ĐỀ TÀI 1. Cơ sở lý luận 1.1 Mục đích chọn đề tài Trong quá trình học một vấn đề mới thì học sinh cần phải có sự liên hệ với những nội dung đã được học từ những bài trước, phân biệt được sự khác nhau về kiểu dữ liệu, về cấu trúc và về câu lệnh. Từ đó mới hình thành được khả năng tư duy và tiếp thu được nội dung mới của bài học. Vấn đề này được thể hiện khá rõ khi học tới nội dung kiểu mảng một chiều (là dãy hữu hạn các phần tử có cùng kiểu dữ liệu), kiểu xâu (có thể xem như mảng một chiều mà mỗi phần tử là một kí tự). Một nội dung khác là “Chương trình con và phân loại ”. Học sinh cần hình dung được chương trình thường có những đoạn chương trình hay phép tính lặp lại nhiều lần. Nếu mỗi lần lặp lại, ta phải viết những đoạn lệnh như nhau thì chương GV : Trịnh Văn Thịnh Trang 2 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 trình trở nên dài dòng, rối rắm và mất thời gian vô ích. Để giải quyết những trường hợp như vậy, Pascal cho phép tạo ra các module, mỗi module mang một đoạn chương trình gọi là chương trình con (subroutine hay subprogram). Mỗi chương trình con sẽ mang một tên khác nhau. Một module chỉ cần viết một lần và sau đó có thể truy xuất nó nhiều lần, bất kỳ nơi nào trong chương trình chính. Khi cần thiết, ta chỉ việc gọi tên chương trình con đó ra để thi hành lệnh. Học sinh hiểu được việc sử dụng chương trình con, chương trình có thể tiết kiệm được ô nhớ. Đồng thời, có thể kiểm tra tính logic trong tiến trình lập trình cho máy tính điện tử, có thể nhanh chóng loại bỏ những sai sót khi cần hiệu chỉnh hay cải tiến chương trình. Đây là khái niệm cơ bản trong ý tưởng lập chương trình có cấu trúc. Một quá trình tính cũng có thể có nhiều chương trình con lồng ghép vào nhau. 1.2. Phạm vi nghiên cứu Nội dung nghiên cứu này sẽ nêu các phương pháp để làm rõ một số vấn đề sau:  Kiểu dữ liệu mảng một chiều là cần thiết trong các chương trình có sử dụng nhiều giá trị có kiểu dữ liệu giống nhau  Tại sao kiểu xâu có thể xem như mảng một chiều và khi sử dụng thì giống kiểu mảng một chiều ở những điểm nào  Chương trình con được viết dưới hai dạng: thủ tục (procedure) và hàm (function). - So sánh cấu trúc của 2 kiểu chương trình con này thì tương tự với nhau, mặc dù cách truy xuất của chúng có khác nhau và cách trao đổi thông tin trong mỗi kiểu cũng có điểm khác nhau. Hàm (function) trả lại một giá trị kết quả vô hướng thông qua tên hàm và hàm được sử dụng trong biểu thức. - Liên hệ một số hàm và thủ tục chuẩn đã học: + Hàm chuẩn, như hàm sin(x) mà chúng ta đã biết trong chương trước có thể được xem như một chương trình con kiểu function với tên là sin và tham số là x. GV : Trịnh Văn Thịnh Trang 3 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 + Thủ tục (procedure) không trả lại kết quả thông qua tên của nó, do vậy, ta không thể viết các thủ tục trong biểu thức. Các lệnh Writeln, Readln trong chương trước được xem như các thủ tục chuẩn.  * Đối tượng, kế hoạch và nội dung nghiên cứu Đối tượng: Học sinh lớp 11A1, 11A3, 11A4, 11A5 Trường THPT Ngô Sĩ Liên  Kế hoạch nghiên cứu: Trực tiếp trong các bài dạy  Nội dung nghiên cứu: Một số nội dung trong chương trình tin học 11 1.3. Thực trạng về thuận lợi và khó khăn *. Thuận lợi - Trường THPT Ngô Sĩ Liên nằm ở thị trấn Trảng bom nên đa số học sinh có hộ khẩu ở thị trấn và một số vùng lân cận, điều đó đã dẫn đến việc có đa số học sinh đã được tiếp xúc với máy vi tính và một số học sinh đã được học môn tin học Pascal trong chương trình THCS - Học sinh trong trường đa số có ý thức học tập tốt, ham học hỏi - Đội ngũ giáo viên môn tin học nhiệt tình, có trách nhiệm, ham học hỏi. - Nhà trường có 2 phòng thực hành tin học, mỗi phòng có hơn 30 máy vi tính và 3 phòng học có ứng dụng CNTT là điều kiện tốt để các em học sinh tiếp cận dễ dàng hơn với môn tin học nói chung và môn Pascal nói riêng *. Khó khăn - Học sinh đượ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. - Đội ngũ giáo viên môn tin học nhiệt tình có tránh nhiệm tuy nhiên còn trẻ nên kinh nghiệm giảng dạy chưa nhiều. - Đặ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. - Một số giáo viên chưa tìm ra được phương pháp phù hợp để có thể truyền đạt kiến thức cũng như giúp học sinh tìm ra được những kiến thức mới qua các bài GV : Trịnh Văn Thịnh Trang 4 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 học của môn tin học 11, dẫn đến học sinh tiếp thu một cách thụ động, không có hứng thú với môn tin học vì cảm thấy khó. - Giáo viên chưa biết cách đặt một vấn đề mang tính cởi mở để học sinh tiếp cận với nội dung mới và chưa nhấn mạnh khi giải một bài toán lớn và phức tạp thì cần phải chia nhỏ bài toán lớn đó ra thành các bài toán nhỏ hơn, mà dạy theo cảm tính và trình độ của mình, chưa tìm hiểu rõ năng lực của các đối tượng học sinh. - Học sinh đa phần đã tiếp xúc với máy tính và môn Tin học nhưng chủ yếu là để giải trí và một số kiến thức tin học căn bản. còn với môn lập trình thì tư duy trừu tượng của các em còn hạn chế. - Bài giảng của giáo viên đối với một số nội dung khó chưa có tính liên hệ với thực tế, với nội dung môn Toán học, vì thế khó gây được hứng thú đối với học sinh trong việc tìm hiểu một kiến thức mới. - Việc sử dụng tư liệu, đồ dùng dạy học của giáo viên đôi khi chưa hợp lý nên chưa đáp ứng nhu cầu của bài học. Cụ thể với những nội dung này, giáo viên cần sử 1 máy vi tính để trình bày tiết dạy theo dạng trực quan và thực hành một số ví dụ về viết chương trình hoàn chỉnh nhằm giúp học sinh thấy ngay kết quả thực hành và cũng hình dung được cách sử dụng Chương trình để giải các bài toán. Từ đó các em sẽ thấy được nội dung bài học, ý nghĩa của từng phần cũng như các sử dụng dữ liệu hay câu lệnh cho việc viết chương trình nhất là đối với những bài toán phức tạp khi được giải trên máy tính. Như vậy khó khăn chung của một số nội dung này là: Giáo viên chưa tìm ra được phương pháp phù hợp, chưa nghiên cứu tổng quát về hệ thống kiến thức cơ bản, mối quan hệ giữa các kiến thức của bài này với bài khác, giữa các môn Tin học với Toán học, với thực tế, chưa biết cách đặt tình huống cho các em tìm hiểu, thảo luận...Do đó học sinh không nắm rõ được các khái niệm cơ bản của kiểu mảng một chiều, kiểu xâu và chương trình con trong tin học, không phân biệt được điểm giống và khác nhau giữa chúng hoặc có nắm bắt được cũng chỉ là một cách chung chung, phiến diện, tiếp thu bài học một cách hời hợt và thụ động. GV : Trịnh Văn Thịnh Trang 5 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 2. Nội dung, biện pháp thực hiện các giải pháp của đề tài 2.1. Kiểu mảng Phương pháp giảng dạy khi bắt đầu cho học sinh làm quen với kiểu mảng một chiều. Bắt đầu từ kiểu dữ liệu có cấu trúc thì học sinh được tìm hiểu thêm một kiểu dữ liệu mới là kiểu mảng một chiều vì vậy giáo viên phải biết cách đặt vấn đề để học sinh hiểu rõ tại sao phải có kiểu dữ liệu đó, nếu không có dữ liệu đó mà chỉ cần những dữ liệu đã học thì có thể giải quyết được các bài toán hay không hay viết chương trình có tối ưu không. Trên cơ sở đó, giáo viên sẽ đặt câu hỏi để học sinh tự suy nghĩ, trả lời và thấy được việc cần thiết phải sử dụng một kiểu dữ liệu mới đó là kiểu dữ liệu có cấu trúc Cách thức tiến hành giảng dạy có thể được thực hiện trong giáo án qua cụ thể một số mục đích yêu cầu sau: * HS biết ý nghĩa và khái niệm được kiểu mảng một chiều - Giáo viên có thể đặt vấn đề với học sinh thông qua giao tiếp cởi mở mà học sinh có thể hiểu được vì sao cần phải sử dụng đến kiểu mảng một chiều. Có thể mô tả về sự giao tiếp đó để bắt đầu vào nội dung bài học như sau: Các vấn đề mà giáo viên đặt ra Suy nghĩ và trả lời của học sinh - Với các chương trình đã học em có - Số lượng biến sử dụng ít, chỉ 1, 2 hoặc nhận xét gì về số lượng biến sử dụng 3 biến. trong chương trình? - Mở rộng: giả sử cần nhập điểm trung - Bằng số lượng học sinh và biến có kiểu bình của các học sinh trong lớp thì phải thực khai báo bao nhiêu biến và kiểu dữ liệu của mỗi biến là gì? - Khi thực hiện câu lệnh trong chương - Phải viết nhiều câu lệnh lặp lại trình thì sẽ gặp trở ngại gì? (Đối với học sinh toàn trường thì sao?) - Kiểu dữ liệu mà chúng ta đã học khi sử - Không còn phù hợp GV : Trịnh Văn Thịnh Trang 6 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 Các vấn đề mà giáo viên đặt ra dụng có còn phù hợp không? Suy nghĩ và trả lời của học sinh - Em có nhận xét gì về kiểu dữ liệu của - Có cùng kiểu với nhau các biến đó? - Về số lượng biến thì thế nào? - Nhiều nhưng là số hữu hạn …. … - Dựa trên phương pháp vấn đáp đó giáo viên có thể giới thiệu được việc cần thiết của kiểu mảng một chiều - HS có thể tự khái niệm được: “Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu”. * Khai báo mảng một chiều: Sách giáo khoa có khai báo cả hai cách. Trong đó cách trực tiếp giới thiệu trước và gián tiếp giới thiệu sau. Tuy nhiên nếu giới thiệu với học sinh theo trình tự này có thể làm cho học sinh bị thụ động trong cách khai báo vậy giáo viên có thể dẫn dắt để học sinh tự khai báo được một trong hai cách. Nhằm ghi nhớ sâu hơn việc khai báo biến mảng một chiều. - Bắt đầu từ khai báo đã biết Var : ; GV giả sử ngoài những kiểu dữ liệu đã học bây giờ ta có một kiểu dữ liệu mới dạng kiểu mảng có tên là DiemTrungBinh, và cho HS khai báo: Var DTB : DiemTrungBinh; Tuy nhiên trên thực tế thì kiểu DiemTrungBinh chưa có và Pascal cho phép chúng ta định nghĩa ra kiểu dữ liệu này bằng câu lệnh: Type = array [Kiểu chỉ số] of : Do phải định nghĩa trước và khai báo sau nên các câu lệnh sẽ được viết là: Type = array [Kiểu chỉ số] of ; Var : ;  Đây là cách thứ nhất để khai báo Trong đó: GV : Trịnh Văn Thịnh Trang 7 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 - Kiểu chỉ số có dạng: n1 . . n2 (n1, n2 là những số nguyên hoặc biểu thức nguyên và n1 ≤ n2) - Kiểu phần tử là kiểu dữ liệu của từng phần tử trong mảng. Ví dụ: Type DiemTrungBinh = array [1..50] of real; Var DTB : DiemTrungBinh; Đây chính là cách thứ nhất để khai báo mảng. Tiếp theo đó giáo viên cho học sinh nhận xét về khai báo trên có đặc điểm giống như tính chất bắc cầu của các biểu thức. và cho học sinh tự viết ra một cách khác. HS sẽ nhận xét được . : ; Mà = array [Kiểu chỉ số] of ; Nên có thể thay thế câu lệnh trên bằng câu lệnh sau: Var : array[Kiểu chỉ số] of ;  Đây chính là cách thứ 2 để khai báo: Như vậy với phương pháp giảng dạy như trên học sinh đã không cần phải phụ thuộc vào sách giáo khoa, mà chỉ cần nhớ kiến thức cũ và trải qua quá trình vấn đáp và suy nghĩ theo sự dẫn dắt của giáo viên các em cũng có thể hiểu rõ được vai trò của kiểu mảng một chiều, khái niệm được và khai báo được mảng một chiều một cách hoàn toàn tự nhiên. Học sinh sẽ cảm thấy hứng thú và nhớ bài ngay trên lớp. 2.2. Kiểu xâu: 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 ý để học sinh nhận xét và thấy rõ được đặc điểm của kiểu xâu. Có thể dựa vào các mô phỏng sau và cho học sinh nhận xét. Dãy A: 1 4 2 8 5 Dãy B: 2.5 6.1 5.0 4.3 7.2 Dãy C: T I N H O GV : Trịnh Văn Thịnh 9 3 C Trang 8 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 HS nhận xét: Dãy A là dãy gồm 7 số nguyên Dãy B là dãy gồm 5 số thực Dãy C là dãy gồm 6 kí tự Theo định nghĩa về kiểu mảng thì mỗi dãy trên đều gồm một số hữu hạn các phần tử có cùng kiểu dữ liệu nên các dãy trên đều có thể xem là mảng một chiều Dãy A và dãy B đã quen thuộc trong các bài tập mảng, còn dãy C có đặc điểm mới đó là mỗi phần tử trong dãy là một kí tự. Mà một dãy các kí tự thì có thể xem là một xâu kí tự. Để làm việc với dãy kí tự này thì Pascal hỗ trợ cho người lập trình sử dụng một kiểu dữ liệu có tính tương đồng với kiểu mảng một chiều là kiểu xâu. Từ cách dẫn dắt đặt vấn đề trên học sinh 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 để duyệt qua các kí tự như (While…do…, hay For…to… do…) và cách để tham chiếu đến một kí tự nào đó trong xâu như (C[3], C[4],…) 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 để học sinh hiểu rõ hơn về vai trò của kiểu xâu 2.3. Chương trình con: Ngoài 2 nội dung trên thì chương trình con là một nội dung mà học sinh khó tiếp cận nhất trong nội dung tin học 11. 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: 2.3.1. Một số khái niệm về biến a. Biến toàn cục (global variable): Còn được gọi là biến chung, là biến được khai báo ở đầu chương trình, nó được sử dụng bên trong chương trình chính và cả bên trong chương trình con. Biến toàn cục sẽ tồn tại trong suốt quá trình thực hiện chương trình. GV : Trịnh Văn Thịnh Trang 9 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 b. Biến cục bộ (local variable): Còn được gọi là biến riêng, là biến được khai báo ở đầu chương trình con, và nó chỉ được sử dụng bên trong thân chương trình con hoặc bên trong thân chương trình con khác nằm bên trong nó (các chương trình con lồng nhau). Biến cục bộ chỉ tồn tại khi chương trình con đang hoạt động, nghĩa là biến cục bộ sẽ được cấp phát bộ nhớ khi chương trình con được gọi để thi hành, và nó sẽ được giải phóng ngay sau khi chương trình con kết thúc. c. Tham số thực hay còn gọi là Tham trị (actual parameter) là một tham số mà nó có thể là một biến toàn cục, một biểu thức hoặc một giá trị số (cũng có thể biến cục bộ khi sử dụng chương trình con lồng nhau) mà ta dùng chúng khi truyền giá trị cho các tham số hình thức tương ứng của chương trình con. d. Tham số hình thức hay còn gọi là Tham biến (formal parameter) là các biến được khai báo ngay sau Tên chương trình con, nó dùng để nhận giá trị của các tham số thực truyền đến. Tham số hình thức cũng là một biến cục bộ, ta có thể xem nó như là các đối số của hàm toán học. 2.3.2. Lời gọi chương trình con Để chương trình con được thi hành, ta phải có lời gọi đến chương trình con, lời gọi chương trình con thông qua tên chương trình con và danh sách các tham số tương ứng (nếu có). Các qui tắc của lời gọi chương trình con:  Trong thân chương trình chính hoặc thân chương trình con, ta chỉ có thể gọi tới các chương trình con trực thuộc nó.  Trong chương trình con, ta có thể gọi các chương trình con ngang cấp đã được thiết lập trước đó. 2.3.3. Thủ tục (Procedure): Thủ tục là một đoạn cấu trúc chương trình được chứa bên trong chương trình Pascal như là một chương trình con. Thủ tục được đặt tên và có thể chứa danh sách tham số hình thức (formal parameters). Các tham số này phải được đặt trong dấu ngoặc đơn ( ). Ta có thể truy xuất thủ tục bằng cách gọi tên của thủ tục. Chương trình sẽ tự động truy xuất thủ tục đúng tên đã gọi và thực hiện các GV : Trịnh Văn Thịnh Trang 10 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 lệnh chứa trong thủ tục đó. Sau khi thực hiện thủ tục xong, chương trình sẽ trở lại ngay lập tức sau vị trí câu lệnh gọi thủ tục đó. Có 2 loại thủ tục: + Thủ tục không tham số + Thủ tục có tham số. * Cấu trúc của thủ tục không tham số PROCEDURE < Tên thủ tục > ; { Các khai báo hằng, biến, kiểu cục bộ... } BEGIN { ... các lệnh trong nội bộ thủ tục ... } END ; Ví dụ1 : Tìm số lớn nhất trong 3 trị số nguyên Program So_ln ; Var a, b, c : integer ; yn : Char ; Procedure maximum ; Var max : integer ; Begin if a > b then max := a else max := b ; if c > max then max := c ; Writeln ( ‘ So lon nhat la ‘, max:6 ) ; end ; BEGIN yn := ‘Y‘ ; While (upcase(yn) = ‘Y ‘) do Begin Writeln ( ‘Nhap 3 so nguyen ‘ ) ; Readln (a, b, c ) ; maximum ; Write ( ‘ Tiep tuc nhap 3 so moi khong (y/n) ? ‘ ) ; Readln (yn) ; End ; END. Trong chương trình trên, thủ tục maximum được khai báo trước khi nó được truy xuất, các biến a, b, c được gọi nhập vào ở chương trình chính và biến max được định nghĩa bên trong thủ tục. Điều này cho ta thấy, không phải lúc nào cũng cần thiết khai báo biến ngay đầu chương trình chính như vậy ở đây ta thấy các biến a, b, c, yn là các biến toàn cục, biến max là biến cục bộ. GV : Trịnh Văn Thịnh Trang 11 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 Ví dụ2 : nhập vào một mảng 1 chiều gồm n phần tử là các số nguyên tính và đưa ra màn hình tổng các số nguyên lớn hơn 0. PROGRAM tong_mang; Uses crt; Var a:array[1..100] of integer; n:integer; PROCEDURE nhap; Var i:integer; Begin Write(‘nhap n=’); readln(n); For i:=1 to n do Begin Write(‘a[’,i,’]=’); Readln(a[i]); End; End; Procedure tinhtong; Var s,i:integer; Begin S:=0; For i:=1 to n do If a[i]>0 then s:=s+a[i]; End; BEGIN Clrscr; Nhap; Tinhtong; Readln; END. Trong chương trình trên a là 1 kiểu mảng, n là 1 kiểu số nguyên, 2 biến đó là 2 biến toàn cục. thủ tục nhap có vai trò nhập n phần tử từ bàn phím vào mảng a. Các biến i, s là các biến cục bộ. ở chương trình trên chúng ta thấy phần chương trình chính nhìn rất gọn gàng nhờ các lời gọi chương trình con. Những công việc chủ yếu đều đã được giải quyết ở các chương trình con. GV : Trịnh Văn Thịnh Trang 12 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 * Cấu trúc của thủ tục có tham số PROCEDURE < Tên thủ tục > (); { Các khai báo hằng, biến, kiểu cục bộ ... } BEGIN { ... các lệnh trong nội bộ thủ tục ... } END ; Khi viết một thủ tục, nếu có các tham số cần thiết, ta phải khai báo nó (kiểu, số lượng, tính chất, ...). Các tham số này gọi là tham số hình thức (formal parameters). Một thủ tục có thể có 1 hoặc nhiều tham số hình thức. Khi các tham số hình thức có cùng một kiểu thì ta viết chúng cách nhau bởi dấu phẩy (,). Trường hợp các kiểu của chúng khác nhau hoặc giữa khai báo tham số truyền bằng tham biến và truyền bằng tham trị (sẽ học ở phần sau ) thì ta phải viết cách nhau bằng dấu chấm phẩy (;). Ví dụ : Tính giai thừa của một số Program Tinh_Giai_thua ; Var n : integer ; gt : real ; Procedure giaithua (m : integer ); Var i : integer ; Begin gt := 1 ; For i := 1 to m do gt := gt * i ; End; BEGIN Write(‘Nhap so nguyen n (0 <= n < 33) = ‘ ) ; Readln (n); If n>=0 then Begin giaithua (n); Writeln (‘Giai thua cua ‘, n, ‘ la : ‘, gt: 10 : 0) ; End Else Writeln( ‘ khong tinh duoc giai thua!‘ ) ; Readln; END. GV : Trịnh Văn Thịnh Trang 13 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 - Trong chương trình trên m là các tham số hình thức của thủ tục giaithua. - Khi gọi thủ tục giaithua(n) thì tham số thực n được truyền tương ứng cho tham số hình thức m. 2.3.4. Hàm (Function) : Hàm là một chương trình con cho ta 1 giá trị kiểu vô hướng. Hàm tương tự như thủ tục nhưng trả về một giá trị thông qua tên hàm và lời gọi hàm tham gia trong biểu thức. Cấu trúc một hàm tự đặt gồm: FUNCTION () : ; { các khai báo hằng, biến, kiểu cục bộ... } BEGIN { ... các câu lệnh trong nội bộ hàm ... } END ; Trong đó: - Tên hàm là tên tự đặt cần tuân thủ theo nguyên tắc đặt tên trong Pascal. - Kiểu kết quả là một kiểu vô hướng, biểu diễn kết quả giá trị của hàm. - Một hàm có thể có 1 hay nhiều tham số hình thức, khi có nhiều tham số hình thức cùng một kiểu giá trị thì ta có thể viết chúng cách nhau bằng dấu phẩy (,). Trường hợp các tham số hình thức khác kiểu thì ta viết chúng cách nhau bằng dấu chấm phẩy (;). - Trong hàm có thể sử dụng các hằng, kiểu, biến đã được khai báo trong chương trình chính nhưng ta có thể khai báo thêm các hằng, kiểu, biến dùng riêng trong nội bộ hàm. Chú ý là phải có một biến trung gian có cùng kiểu kết quả của hàm để lưu kết quả của hàm trong quá trình tính toán để cuối cùng ta có 1 lệnh gán giá trị của biến trung gian cho tên hàm. GV : Trịnh Văn Thịnh Trang 14 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 Ví dụ : FUNCTION TINH (x, y : integer ; z : real ) : real ; Đây là một hàm số có tên là TINH với 3 tham số hình thức x, y, z. Kiểu của x và y là kiểu số nguyên integer còn kiểu của z là kiểu số thực real. Hàm TINH sẽ cho kết quả kiểu số thực real. Ví dụ : Bài toán tính giai thừa. Program giaithua; Var x : integer ; Function gt(n : integer):integer ; Var i, tichso : integer ; Begin tichso:= 1 ; If n > 1 Then For i := 2 to n do tichso:= tichso * i ; gt := tichso; End ; BEGIN Write (‘ Nhap vao so nguyen duong x = ‘ ); Readln (x) ; Writeln (‘ Voi x = ‘, x , ‘ thi giai thua se la : Readln; END. x ! = ‘, gt(x)); Khai báo kiểu dữ kiệu cho các tham số hình thức trong thủ tục và hàm, ta cần phải chú ý điểm sau: Nếu kiểu dữ liệu của các tham số hình thức là các kiểu dữ liệu có cấu trúc (kiểu array, string, kiểu record,... ) thì việc khai báo kiểu dữ liệu cho các tham số hình thức nên được khai báo theo cách gián tiếp, tức là phải thông qua từ khóa TYPE. Ví dụ : Procedure Xuat1(hoten : string[25]); Procedure Xuat2(mang: array[1..10] of integer); Hai chương trình con Xuat1 và Xuat2 đều bị lỗi ở phần khai báo kiểu dữ liệu cho hai tham số hình thức là hoten và mang. GV : Trịnh Văn Thịnh Trang 15 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 Để khắc phục lỗi này, ta sẽ khai báo gián tiếp một kiểu dữ liệu str25 và M10 thông qua từ khóa TYPE như sau: TYPE Str25=string[25]; {Str25 là một kiểu chuỗi có độ dài 25} M10=Array[1..10] of integer; {M10 là một kiểu dữ kiệu mảng có 10 phần tử nguyên} Tiếp đến, dùng 2 kiểu dữ liệu mới định nghĩa Str25 và M10 để định kiểu cho các tham số hình thức hoten và mang như sau: Procedure Xuat1(hoten : Str25); Procedure Xuat2(mang: M10); 2.3.5 Truyền tham số cho trương trình con Khi truyền tham số trong Pascal, đòi hỏi phải có sự tương ứng về tên của kiểu dữ liệu của các tham số hình thức và tham số thực. Một số định nghĩa và qui tắc về truyền tham số trong Pascal: Những tham số hình thức nằm sau từ khóa VAR gọi là tham số biến (variable parameter). Với tham số biến, các tham số thực bắt buộc phải là biến chứ không được là giá trị. Khi giá trị của tham số biến thay đổi thì nó sẽ làm thay đổi giá trị của tham số thực tương ứng và khi ra khỏi chương trình con đó, tham số thực vẫn giữ giá trị đã được thay đổi đó. Những tham số hình thức không đứng sau từ khóa VAR gọi là tham số trị (value parameter), khi đó các tham số thực có thể là một biến, một biểu thức, một hằng, hoặc một giá trị số. Các tham số trị nhận giá trị từ tham số thực khi truyền như là giá trị ban đầu, khi giá trị của tham số trị thay đổi thì nó sẽ không làm thay đổi giá trị của tham số thực, nghĩa là giá trị của tham số thực sau khi thoát khỏi chương trình con vẫn luôn bằng với giá trị của tham số thực trước khi truyền đến chương trình GV : Trịnh Văn Thịnh Trang 16 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 con đó. Do vậy một tham trị không bao giờ là kết quả tính toán của chương trình con. Ví dụ1: Viết chương trình tính lập phương a3. PROGRAM vidu_thamtri_1; VAR num: integer; {num là biến toàn cục} PROCEDURE LapPhuong(var a:integer);{a là một tham biến} Begin a:=a*a*a; End; BEGIN write(‘Nhập số cần tính lập phương num = ‘); readln(num); LapPhuong(num); {tham số thực num được truyền cho tham biến a} writeln(‘Lập phương của số vừa nhập = ‘, num); readln; END. Ví dụ: PROGRAM vidu_Thamtri_2; VAR a, b : integer ; {biến toàn cục } PROCEDURE thamso (x : integer ; VAR y : integer ) ;{ x: là tham số trị , còn y là tham số biến} BEGIN x := x + 1 ; y := y + 1 ; Writeln (‘Trong procedure thamso, ... ‘) ; Writeln (‘ Hai số của bạn là a = ‘, x : 3, ‘ và b = ‘, y : 3 ) ; END ; BEGIN Write (‘ Nhập vào 2 trị số nguyên a, b : ‘) ; Readln (a, b) ; Writeln (‘ Ban đầu, Bạn đã nhập vào a = ‘, a : 3, ‘và b = ‘, b : 3 ) ; thamso (a, b) ;{tham số thực a truyền cho tham số trị x tham số thực b truyền cho tham số biến y } Writeln (‘ Ngoài procedure thamso, ... ‘); Writeln (‘ Hiện nay, số a là ‘, a : 3, ‘ và b là ‘, b : 3 ) Writeln (‘ Ta thấy, a không đổi và b thay đổi ! ) ; Readln; END. GV : Trịnh Văn Thịnh Trang 17 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 Ví dụ2: giải bài toán phương trình bậc 2 ax2+bx+c=0; Cách 1: theo phương pháp không dùng chương trình con. Program giai_pt_bac2; Uses crt; Var a, b, c, d: Real; Begin Clrscr; Writeln('Nhap 3 he so cua phuong trinh:'); Write('a = '); Readln(a); Write('b = '); Readln(b); Write('c = '); Readln(c); If a = 0 Then If b = 0 Then If c = 0 Then Writeln('Phuong trinh co vo so nghiem!') Else Writeln('Phuong trinh vo nghiem!') Else Writeln('Phuong trinh co mot nghiem: x = ',-c/b:0:1) Else Begin d := b * b - 4 * a * c; If d < 0 Then Writeln('Phuong trinh vo nghiem!') Else If d = 0 Then Writeln('Pt co nghiem kep: x1 = x2 = ',-b / (2 * a):0:1) Else Begin Writeln('Phuong trinh co hai nghiem phan biet:'); Writeln('x1 = ',(-b + sqrt(d)) / (2 * a):0:1); Writeln('x2 = ',(-b - sqrt(d)) / (2 * a):0:1); End; End; Readln; End. Cách 2: theo phương pháp dùng chương trình con. Mục tiêu là chia bài toán ban đầu thành những bài toán nhỏ độc lập. Chẳng hạn: Ta sử dụng chương trình con thành hai bài toán : T1: Giải phương trình bậc nhất T2: Giải phương trình bậc hai GV : Trịnh Văn Thịnh Trang 18 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 Program giai_pt_bac2; Uses crt; Var a, b, c: Real; Procedure ptb1(m,n:Real); Begin If m = 0 Then If n = 0 Then Writeln('Phuong trinh co vo so nghiem!') Else Writeln('Phuong trinh vo nghiem!') Else Writeln('Phuong trinh co mot nghiem: x = ',-n/m:0:1) End; Procedure ptb2(x, y, z: Real); Var d: Real; Begin D := y * y - 4 * x * z; If d < 0 Then Writeln('Phuong trinh vo nghiem!') Else If d = 0 Then Writeln('Pt co nghiem kep: x1 = x2 = ',-y / (2 * x):0:1) Else Begin Writeln('Phuong trinh co hai nghiem phan biet:'); Writeln('x1 = ',(-y + sqrt(d)) / (2 * x):0:1); Writeln('x2 = ',(-y - sqrt(d)) / (2 * x):0:1); End; End; Begin Clrscr; Writeln('Nhap 3 he so cua phuong trinh:'); Write('a = '); Readln(a); Write('b = '); Readln(b); Write('c = '); Readln(c); If a=0 Then ptb1(b, c) Else ptb2(a, b, c); Readln End. Ở đây ta lại thấy trong bài toán trên việc giải phương trình bậc hai có ba trường hợp xảy ra. Ta nên chia tiếp thành 5 bài toán nhỏ như sau và cách 2 có thế viết lại như sau: T1: Giải phương trình bậc nhất T2:  > 0 T3:  = 0 T4:  < 0 T5: Giải phương trình bậc hai GV : Trịnh Văn Thịnh Trang 19 SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11 Var a, b, c, d: Real; Procedure ptb1(m, n : Real); Begin If m = 0 Then If n = 0 Then Writeln('Phuong trinh co vo so nghiem!') Else Writeln('Phuong trinh vo nghiem!') Else Writeln('Phuong trinh co mot nghiem: x = ',-n / m:0:1) End; Procedure denta_am; Begin Writeln('Phuong trinh vo nghiem!'); End; Procedure denta_0(p, q: Real); Begin Writeln('Phuong trinh co nghiem kep: x1 = x2 = ',-q / (2 * p):0:1) End; Procedure denta_duong(i, j: Real); Begin Writeln('Phuong trinh co hai nghiem phan biet:'); Writeln('x1 = ',(-j + sqrt(d)) / (2 * i):0:1); Writeln('x2 = ',(-j - sqrt(d)) / (2 * i):0:1); End; Procedure ptb2(x, y, z: Real); Begin d := y * y - 4 * x * z; If d < 0 Then denta_am Else If d = 0 Then denta_0(x, y) Else denta_duong(x, y); End; Begin Writeln('Nhap 3 he so cua phuong trinh:'); Write('a = '); Readln(a); Write('b = '); Readln(b); Write('c = '); Readln(c); If a = 0 Then ptb1(b, c) Else ptb2(a, b, c); Readln End. GV : Trịnh Văn Thịnh Trang 20
- Xem thêm -

Tài liệu liên quan