SKKN Bồi dưỡng học sinh giỏi lớp 8 thông qua việc học câu lệnh For… to… do trong Turbo Pascal
Hiện nay, Bộ giáo dục và đào tạo yêu cầu đẩy mạnh ứng dụng Công nghệ thông tin trong ở tất cả các cấp học, bậc học, ngành học. Xem Công nghệ thông tin như là một công cụ hỗ trợ đắc lực nhất cho việc đổi mới phương pháp dạy học. Với mỗi cấp học các em không chỉ được làm quen với các cách học thông thường, các cuộc thi quen thuộc như: Thi học kì, thi vượt cấp, thi chọn học sinh giỏi mà các em có thể: Học trực tuyến, tham gia các cuộc thi trên mạng Internet Từ đó giúp học sinh tự học tích cực, sáng tạo, có cơ hội tiếp xúc nội dung học tập theo nhiều cách khác nhau.
Trên tinh thần đó hàng năm BCH tỉnh Đoàn đã phối hợp với Sở GD&ĐT tổ chức hội thi Tin học trẻ cho học sinh ba khối (THPT, THCS và Tiểu học). Với THCS thông thường hình thức các em dự thi là dự thi cá nhân (Bảng B). Nội dung hội thi Bảng B như chúng ta đã biết học sinh phải thi hai vòng: Vòng thứ nhất: Thi trắc nghiệm (thời gian 30 phút) - Kiến thức chung về máy tính, phần mềm và lập trình. Với những kiến thức này thì các em đã được tiếp thu trên lớp qua các bài học. Đồng thời các em cũng có thể thu thập thêm những kiến thức đó qua sách báo, qua các phương tiện thông tin, qua truy cập Internet, Vì đó chỉ là những kiến thức thông qua: Đọc, nghe và quan sát .là các em có thể hiểu và ghi nhớ được. Do vậy, ở vòng thi này đa số các em làm được và đạt điểm khá cao. Còn vòng thi thứ hai: Thi lập trình (thời gian 120 phút) – Viết chương trình bằng ngôn ngữ Pascal (Free Pascal). Với phần thi này các em phải lập trình để giải các bài toán bằng ngôn ngữ lập trình Turbo Pascal. Trong khi đó, những kiến thức để các em có thể dự thi phần này lại không được học trên lớp do hầu hết ở trường THCS trong Tỉnh các em học theo chương trình: Học tự chọn cho học sinh khối lớp 6-7, học nghề cho học sinh khối lớp 8. Vậy để học sinh có thể tự tin khi thi phần thi thực hành là một giáo viên Tin học tôi phải suy nghĩ và trăn trở rất nhiều là làm thế nào cho các em phải nắm chắc cú pháp các câu lệnh, phát huy được tính tích cực, chủ động, tự lực, sáng tạo của học sinh; rèn được kỹ năng thực hành thành thạo, biết vận dụng kiến thức, kỹ năng vào giải quyết các bài toán thực tiễn và nhất là nâng cao được chất lượng học sinh giỏi cấp Tỉnh.
PHẦN I. MỞ ĐẦU 1.1. Lý do chọn đề tài: Hiện nay, Bộ giáo dục và đào tạo yêu cầu đẩy mạnh ứng dụng Công nghệ thông tin trong ở tất cả các cấp học, bậc học, ngành học. Xem Công nghệ thông tin như là một công cụ hỗ trợ đắc lực nhất cho việc đổi mới phương pháp dạy học. Với mỗi cấp học các em không chỉ được làm quen với các cách học thông thường, các cuộc thi quen thuộc như: Thi học kì, thi vượt cấp, thi chọn học sinh giỏimà các em có thể: Học trực tuyến, tham gia các cuộc thi trên mạng Internet Từ đó giúp học sinh tự học tích cực, sáng tạo, có cơ hội tiếp xúc nội dung học tập theo nhiều cách khác nhau. Trên tinh thần đó hàng năm BCH tỉnh Đoàn đã phối hợp với Sở GD&ĐT tổ chức hội thi Tin học trẻ cho học sinh ba khối (THPT, THCS và Tiểu học). Với THCS thông thường hình thức các em dự thi là dự thi cá nhân (Bảng B). Nội dung hội thi Bảng B như chúng ta đã biết học sinh phải thi hai vòng: Vòng thứ nhất: Thi trắc nghiệm (thời gian 30 phút) - Kiến thức chung về máy tính, phần mềm và lập trình. Với những kiến thức này thì các em đã được tiếp thu trên lớp qua các bài học. Đồng thời các em cũng có thể thu thập thêm những kiến thức đó qua sách báo, qua các phương tiện thông tin, qua truy cập Internet, Vì đó chỉ là những kiến thức thông qua: Đọc, nghe và quan sát.là các em có thể hiểu và ghi nhớ được. Do vậy, ở vòng thi này đa số các em làm được và đạt điểm khá cao. Còn vòng thi thứ hai: Thi lập trình (thời gian 120 phút) – Viết chương trình bằng ngôn ngữ Pascal (Free Pascal). Với phần thi này các em phải lập trình để giải các bài toán bằng ngôn ngữ lập trình Turbo Pascal. Trong khi đó, những kiến thức để các em có thể dự thi phần này lại không được học trên lớp do hầu hết ở trường THCS trong Tỉnh các em học theo chương trình: Học tự chọn cho học sinh khối lớp 6-7, học nghề cho học sinh khối lớp 8. Vậy để học sinh có thể tự tin khi thi phần thi thực hành là một giáo viên Tin học tôi phải suy nghĩ và trăn trở rất nhiều là làm thế nào cho các em phải nắm chắc cú pháp các câu lệnh, phát huy được tính tích cực, chủ động, tự lực, sáng tạo của học sinh; rèn được kỹ năng thực hành thành thạo, biết vận dụng kiến thức, kỹ năng vào giải quyết các bài toán thực tiễn và nhất là nâng cao được chất lượng học sinh giỏi cấp Tỉnh. Với nhiều năm liên tục bồi dưỡng học sinh giỏi của trường từ năm 2005 đến nay tôi nhận thấy rằng trong vòng thi thực hành của hội thi Tin học trẻ khối THCS (Bảng B) dạng bài thi có sử dụng dụng lệnh lặp có số lần biết trước Fortodo là không thể thiếu. Đây là một dạng bài khó. Gặp dạng toán này, phần lớn học sinh rất lúng túng và mất nhiều thời gian để cố nhớ xem bài này đã được thầy, cô giáo làm như thế nào, học sinh rất khó hình dung ra cách giải (thuật toán) cũng như cách trình bày (chương trình). Một bài giải đúng yêu cầu máy phải chạy được và cho ra kết quả đúng. Với phần lập trình ngay trên máy có khi chỉ là sơ xuất nhỏ như: Thiếu dấu phẩy, dấu chấm, dấu mở ngoặc hoặc dấu cách.chứ chưa cần nói đến thuật toán có đúng hay không trong khi trình bày thì cũng sinh ra lỗi và máy không chạy được. Như vậy, với vòng thi lý thuyết các em đạt điểm cao nhưng vòng thi thực hành điểm dưới trung bình thì danh hiệu học sinh giỏi cấp Tỉnh môn Tin học cũng tuột khỏi tầm tay. Với những lý do trên khiến tôi quyết định chọn đề tài: “Bồi dưỡng học sinh giỏi lớp 8 thông qua việc học câu lệnh Fortodo trong Turbo Pascal”. 1.2. Mục đích nghiên cứu: Nhằm giúp học sinh nắm chắc được cú pháp lệnh lặp For..to..do cũng như cách thực hiện để từ đó nâng cao thêm về mặt kiến thức, kỹ năng thực hành, phát huy hết năng lực để tìm ra thuật toán tối ưu khi làm các bài tập và đặc biệt đạt kết quả cao nhất trong các kỳ thi Tin học trẻ cấp Tỉnh, cấp Quốc gia. 1.3. Đối tượng nghiên cứu : Học sinh (khối lớp 8) trong đội tuyển dự thi Tin học trẻ của trường THCS Lý Thường Kiệt - Hà Trung – Thanh Hóa. 1.4. Phương pháp nghiên cứu: - Đề tài của tôi được hoàn thành thông qua phương pháp nghiên cứu xây dựng cơ sở lý thuyết (nghiên cứu qua tài liệu: Tin học dành cho học sinh THCS quyển 3; Turbo pascal 7.0 của PGS-PTS Bùi Thế Tâm; Lập trình Turbo pascal 7.0 của Hoàng Hồng; Em tập lập trình của Đỗ Trần Hùng ) để xác định những nội dung kiến thức cần thiết phục vụ cho đề tài. - Ngoài ra, đề tài cũng sử dụng phương pháp thực nghiệm sư phạm tổng kết kinh nghiệm của các khóa học trước áp dụng cho khóa học sau. PHẦN II. NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2.1. Cơ sở lý luận của sáng kiến kinh nghiệm Để đáp ứng nhu cầu của sự phát triển đất nước, nền giáo dục Việt Nam phải thực hiện một sự đổi mới sâu sắc và toàn diện về nội dung lẫn phương pháp dạy học như tinh thần của Nghị quyết TW2 - khóa VIII của Đảng Cộng Sản Việt Nam đã nêu: “Đổi mới mạnh mẽ phương pháp giáo dục - đào tạo, khắc phục lối truyền thụ một chiều, rèn luyện thành nếp tư duy sáng tạo của người học, từng bước áp dụng các phương pháp tiên tiến và phương tiện hiện đại vào quá trình dạy học, đảm bảo điều kiện thời gian tự học, tự nghiên cứu cho học sinh”. Vì vậy, tôi chọn đề tài: “Bồi dưỡng học sinh giỏi lớp 8 thông qua việc học câu lệnh Fortodo trong Turbo Pascal” với mong muốn đóng góp một phần nhỏ vào việc nâng cao hiệu quả bồi dưỡng đội tuyển dự thi Tin học trẻ cấp Tỉnh. Lệnh lặp Fortodo là một dạng lệnh rất khó đối với học sinh ở bậc trung học cơ sở, khi học các em cảm thấy ngại học, học cảm thấy nhàm chán, khó hình dung, không biết cách vận dụng vào để giải các bài toán. Trong khi đó, lệnh lặp fortodo là lệnh mà hầu hết bài toán nào trong thi học sinh giỏi Tin học trẻ đều sử dụng đến. Nên khi dạy các em đến lệnh lặp này tôi thiết nghĩ để các em có thể vận dụng lệnh này một cách thuần thục, linh hoạt thì trước hết các em cần phải nắm chắc cú pháp, hiểu rõ cách thực hiện của lệnh, được làm quen với nhiều dạng bài tập liên quan đến lệnh Fortodo thì từ đó các em mới biết vận dụng để giải bài toán một cách ngắn gọn, tối ưu, tiết kiệm được thời gian khi thực hành. Đồng thời còn gây hứng thú, kích thích và phát triển tinh thần say mê, sáng tạo, thích thú học lập trình và đặc biệt đạt được kết quả cao trong kỳ thi học sinh giỏi Tin học trẻ cấp Tỉnh. 2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm: Do chương trình học Tin học cấp THCS ở Tỉnh ta đó là: Học sinh học tự chọn với khối lớp 6-7, còn ở khối lớp 8 các em không được học Tin học dành cho THCS quyển 3 mà lại học chương trình: Nghề Tin học ứng dụng. Trong khi học sinh dự thi Tin học trẻ với vòng thi thực hành lập trình giải toán bằng ngôn ngữ Turbo Pascal thì những kiến thức cơ bản lại có trong chương trình Tin học dành cho THCS quyển 3. Do vậy, khi bồi dưỡng cho học sinh dự thi Tin học trẻ cấp Tỉnh đa số giáo viên đều rất ngại dạy do phải mất rất nhiều thời gian dạy cho các em từ những kiến thức cơ bản nhất, chưa nói đến phải trăn trở, nghiên cứu rất nhiều để dạy nâng cao cho các em và dạy để các em đạt được kết quả cao trong các kỳ. Mặt khác, theo kinh nghiệm giảng dạy tôi thấy học sinh khi học đến lệnh lặp Fortodo các em đều thấy rất khó: khó hình dung, khó không hiểu cách thực hiện của lệnh, học cứ cảm giác mơ mơ màng màng dẫn đến ngại học và ngại thực hành (do không biết vận dụng lệnh lặp vào giải các bài tập nên khi test chương trình là máy báo lỗi, không chạy được). Với nhiều năm bồi dưỡng học sinh giỏi tôi đã rút ra được một số kinh nghiệm nho nhỏ khi dạy đến lệnh lặp Fortodo trong Turbo Pascal mà tôi cảm thấy học sinh tiếp thu bài rất tốt, biết vận dụng vào giải bài tập một cách linh hoạt và đạt kết quả cao trong các kỳ thi Tin học trẻ cấp Tỉnh, cấp Quốc gia. 2.3. Các sáng kiến kinh nghiệm hoặc các giải pháp đã sử dụng để giải quyết vấn đề 2.3.1. Các giải pháp: Để học sinh đạt được kết quả cao trong các kỳ thi Tin học trẻ cấp Tỉnh, cấp Quốc gia tôi phải trăn trở, học hỏi và nghiên cứu rất nhiều. Cụ thể: Đổi mới phương pháp dạy học khi học sinh học lệnh lặp For là: Giải pháp 1: Cung cấp cho HS những kiến thức cơ bản của vòng lặp For...to...do: - Mô tả lệnh lặp For...to...do. - Cú pháp và cách thực hiện của vòng lặp For, các ví dụ minh họa khi sử dụng vòng lặp For...to...do . Giải pháp 2: Rèn luyện cho học sinh khả năng tư duy, sáng tạo và phân tích thuật toán (hướng dẫn học sinh cách giải các bài tập như Toán học bằng cách nói và viết. Từ đó yêu cầu học sinh đưa ra thuật toán ứng với mỗi bài tập), kĩ năng giải bài tập trên máy tính. Giải pháp3: Phân dạng bài tập và phương pháp giải - Với mỗi bài tập sau khi đã đưa ra thuật toán. Yêu cầu học sinh áp dụng ngôn ngữ lập trình vào giải bài tập và thực hành ngay trên máy. Trong quá trình thực hành nếu gặp lỗi thì học sinh phải tự sửa các lỗi đó, trường hợp sửa lỗi không được có thể nhờ bạn hoặc cô giáo giúp. Khi chương trình chạy hoàn chỉnh tôi yêu cầu các em ghi các bài tập đã chạy được trên máy ra một quyển vở riêng nhằm giúp các em khắc sâu thêm thuật toán cũng như cách viết chương trình. - Với mỗi dạng bài tập tôi ra nhiều bài tập tương tự, bài tập nâng cao để giao bài về nhà cho học sinh. - Sau mỗi bài tập thực hành tôi đều nhận xét, củng cố và phát triển bài toán để có bài toán mới. Như vậy học sinh sẽ có tư duy linh hoạt và sáng tạo. Giải pháp 4: Cho HS tiếp cận với đề thi học sinh giỏi cấp Tỉnh qua các năm - Phân dạng bài tập qua các đề thi. - Cho học sinh làm các bài tập của các đề thi những năm trước để các em tập làm quen và không còn bỡ ngỡ khi thi. Với mỗi bài tập tôi chấm điểm cho học sinh sau khi học sinh hoàn thành việc chạy chương trình trên máy và chỉ ra sai lầm cũng như nguyên nhân dẫn đến sai lầm đó (nếu có) -> biện pháp khắc phục để học sinh nắm chắc từng phần kiến thức và làm chặt chẽ từng dạng bài tập. Giải pháp 5: Cho học sinh làm bài kiểm tra thử - Ra đề kiểm tra cho học sinh làm bài tập trên máy tính, tôi bấm giờ và chấm điểm. Đề có các mức độ nhận thức: nhận biết - thông hiểu - vận dụng - phân tích - tổng hợp - đánh giá. Với phương pháp này qua các kỳ thi Tin học trẻ học sinh đạt giải rất cao. Do vậy, qua sáng kiến kinh nghiệm này tôi mạnh dạn đưa ra một phương pháp nhỏ để các bạn đồng nghiệp tham khảo góp phần đưa chất lượng học sinh giỏi Tin học của Huyện – Tỉnh ngày càng nâng lên. 2.3.2. Các biện pháp tổ chức thực hiện các giải pháp 2.3.2.1. Lệnh Fortodo Mô tả lệnh lặp: - Đánh răng mỗi ngày hai lần, học Tin học mỗi tuần 2 tiết, mỗi ngày tắm một lần, sau mỗi phút kim phút của đồng hồ lại chạy lại... - Học cho đến khi thuộc bài, rửa tách trà cho đến khi sạch, trong cuộc sống, những hành động trên được gọi là lặp đi lặp lặp lại nhiều. Trong Pascal, cách mô tả công việc (hành động – lệnh) được lặp lại nhiều lần gọi là cấu trúc lặp. Cú pháp: For := to do ; Trong đó: - , là các biểu thức và cùng kiểu dữ liệu với . có kiểu dữ liệu: Nguyên, liệt kê hoặc lôgic. - có thể là một lệnh hoặc nhiều lệnh (nếu nhiều lệnh phải để trong cặp ghép Beginend;) Cách thực hiện: - Bước 1: Đầu tiên biến nhận giá trị là . - Bước 2: Sau đó máy kiểm tra điều kiện: biến <= biểu thức 2 - Bước 3: Nếu điều kiện này sai thì máy ra khỏi vòng lặp để thực hiện các câu lệnh sau For. Nếu điều kiện này là đùng thì máy thực hiện , sau đó được tự động tăng một giá trị: biến:=Succ(biến) và trở lại bước 2. Biến=Biểu thức 1 Biến<=Biểu thức 1 Biến:=Succ(biến) Sơ đồ khối của lệnh: False True 2.3.2.2. Các dạng bài tập: Dạng 1: Tính tổng trong biểu thức: VD1: Tính: S=1+2++n (với n là số tự nhiên) Thuật toán: - Đây là bài toán cấp số cộng ở dạng đơn giản. Học sinh được làm quen dưới dạng tính tổng n số tự nhiên liên tiếp. Với dạng bài này tôi hướng dẫn học sinh nên sử dụng vòng lặp For để tính tổng S. - Để tính S ta cần khởi tạo cho S một giá trị ban đầu (S:=0). Sau đó dùng vòng lặp For :=1 to n do, khi đó S:=S+biến. Chương trình Program Tong; Var i, S, n: Integer; Begin Write(‘Moi ban nhap n=’); Readln(n); S:=0; For i:=1 to n do S:=S+i; Writeln(‘Tong cua day so la:’,S:3); Readln; End. Bài tập: Bài 1: Tính: S=1+ (với n là số tự nhiên) Hướng dẫn: - Nhập n; - Khởi tạo S:=0; - Dùng vòng For i:=1 to n do S:=S+1/i; Bài 2: Tính: S=1+ (với n là số tự nhiên) Hướng dẫn: - Nhập n; - Khởi tạo S:=1; - Dùng vòng For i:=1 to n do S:=S+1/(2*i); Bài 3: Tính: S=1+ (với n là số tự nhiên) Hướng dẫn: - Nhập n; - Khởi tạo S:=1; - Dùng vòng For i:=1 to n do S:=S+1/(2*i+1); Bài 4: Tính: A=12+22+32++m2 (với m là số tự nhiên) Hướng dẫn: - Nhập m; Khởi tạo A:=0; - Dùng vòng For i:=1 to m do A:=A+i*i; Bài 5: Tính: S= Hướng dẫn: - Nhập n; - Khởi tạo các tổng: S:=0; S1:=0; S2:=0; S3:=0; - Dùng 3 vòng For để tính tổng S: For n:=1 to 8 do S1:=S1+n*n; For n:=100 to 108 do S2:=S2+n*n; For n:=97 to 105 do S3:=S3+n*n; S:=S1+S2+S3; Dạng 2: Tích trong biểu thức VD2: Tính: T=1.2n (với n là số tự nhiên) Thuật toán: - Đây là bài toán tính tích n số tự nhiên liên tiếp . Ta nên sử dụng vòng lặp For để tính tích T. - Để tính T ta cần khởi tạo cho T một giá trị ban đầu (S:=1). Sau đó dùng vòng lặp For :=1 to n do, khi đó T:=T*biến. Chương trình Program Tich; Var i, T, n: Integer; Begin Write(‘Moi ban nhap n=’); Readln(n); T:=1; For i:=1 to n do T:=T*i; Writeln(‘Tich cua day so la:’,T:3); Readln; End. Bài tập: Bài 1: Cho số thực a, số tự nhiên n. Hãy tính: 1. F=an 2. T=a(a+1)(a+n-1) 3. G=a(a-n)(a-2n)(a-3n)(a-nn) Hướng dẫn: 1. F=an ó F=a.aa (n số a) - Nhập a, n; Khởi tạo F:=1; - Dùng vòng For i:=1 to n do F:=F*a; 2. T=a(a+1)(a+n-1) - Nhập a, n; Khởi tạo T:=1; - Dùng vòng For i:=1 to n do T:=T*(a+i-1); 3. G=a(a-n)(a-2n)(a-3n)(a-nn) - Nhập a, n; Khởi tạo G:=a; - Dùng vòng For i:=1 to n do G:=G*(a-i*n); Bài 2: Cho số tự nhiên n. Tính: T= Bài 3: Cho số thực a, số tự nhiên n. Hãy tính: a) b) c) a(a-n)(a-2n)(a-3n).(a-nn) Dạng 3: Giai thừa VD3: Tính: S=1+2!++n! (với n là số tự nhiên) Thuật toán: - Khởi tạo: S:=1; gt:=1; (gt: biến tính giai thừa) - Tính giai thừa: Như ta biết: 1!=1 2!=1!*2 3!=2!*3 4!=3!*4 n!=(n-1)!*n Vậy để tính S ta dùng vòng lặp For: For i:=2 to n do Begin gt:=gt*i; S:=S+gt; End; Chương trình Program Giai_thua; Var i, n, S, gt: Integer; Begin Write(‘Moi ban nhap n=’); Readln(n); S:=1; gt:=1; For i:=2 to n do Begin gt:=gt*i; S:=S+gt; End; Writeln(‘Tong tren la:’,S:3); Readln; End. Bài tập: Bài 1: Tính: S=1+ (với n là số tự nhiên) Hướng dẫn: - Khởi tạo: S:=1; gt:=1; - Để tính S ta dùng vòng lặp For: For i:=2 to n do Begin gt:=gt*i; S:=S+1/gt; End; Bài 2: Tính: H= (với n là số tự nhiên, a nguyên) Hướng dẫn: - Nhập n; nhập a; - Khởi tạo: H:=1; T:=1; M:=1; {T: là biến tử của phân số, M là biến mẫu của phân số} - Để tính H ta dùng vòng lặp For: For i:=1 to n do Begin T:=T*a; M:=M*i; H:=H+T/M; End; Dạng 4: Tính biểu thức có n dấu căn VD4: Cho số tự nhiên n. Hãy tính: B= (n lần dấu căn) Thuật toán: - Nhập n (số lượng dấu căn); Khởi tạo giá trị B:=0; - Tính B: Ta biết: Khi n=1: B:=sqtr(2) Khi n=2: B:=sqrt(2+ sqtr(2)) hay B:=sqrt(2+B) Khi n=3: B:= sqrt(2+ sqtr(2+ sqrt(2))) hay B:=sqrt(2+B) . Chương trình: Program tinh_can; Var B :Real; n, i: Integer; Begin Write(‘Nhap so luong dau can n=’); Readln(n); B:=0; For i:=1 to n do B:=sqrt(2+B); Writeln(‘Tong tren la:’,B:3:2); Readln; End. Bài tập: Lập trình đọc giá trị của x, n(số lượng dấu căn) từ bàn phím và tính: Q= Hướng dẫn: - Nhập x0 và n (số lượng dấu căn). - Khởi tạo giá trị Q:=0; - Tính Q: Ta biết: Khi n=1: Q:=sqtr(x) Khi n=2: Q:=sqrt(x+Q) . => Như vậy, ta sử dụng vòng lặp: For i:=1 to n do Q:=sqrt(x+Q) Dạng 5: Tính tổng, tích, trung bình cộng của một dãy số bất kỳ VD4: Cho số tự nhiên n và các số thực a1, a2, ,an. Hãy tính: S=a1+a2++an Thuật toán: - Nhập n; khởi tạo tổng S:=0; - Dùng vòng lặp For để nhập các giá trị của a, nhập đến đâu tính tổng đến đó. Chương trình: Program tinh; Var n, i: Integer; a, S: Real; Begin Write(‘Nhap so lượng các số thực n=’); Readln(n); S:=0; For i:=1 to n do Begin Write(‘Nhap gia tri cua a=’); Readln(a); S:=S+a; End; Writeln(‘Tong tren la:’,S:3:2); Readln; End. Bài tập: Bài 1: Cho số tự nhiên n và các số thực a1, a2, ,an. Hãy tính: a. T= a1.a2an b. c. H=(a1+a2++an)2 Bài 2: Lập trình nhập một dãy số nguyên vào từ bàn phím. Tính tổng các số dương và trung bình cộng các số âm. Hướng dẫn: - Nhập n; khởi tạo tổng S1:=0; S2:=0; d1:=0; d2:=0; {S1 là tính tổng các số dương, S2 là tính tổng các số âm, d1 là đếm số lượng các số dương, d2 là đếm số lượng các số âm} - Dùng vòng lặp For để nhập các giá trị của dãy số nguyên là a, nhập đến đâu kiểm tra số đó là dương hay âm, nếu là dương thì đếm d1 và cộng vào tổng S1, nếu là âm thì đếm d2 và cộng vào tổng S2. - Thông báo tổng các số dương là S1 và trung bình cộng các số âm là S2/d2; Bài 3: Nhập một dãy số nguyên. Tính tổng và trung bình cộng các số đã đọc, không tính số 0. Đưa kết quả ra màn hình. Hướng dẫn: - Nhập n; khởi tạo tổng S:=0; d:=0; {S là tính tổng các số đã đọc khác 0, d là đếm số lượng các số khác 0} - Dùng vòng lặp For để nhập các giá trị của dãy số nguyên a, nhập đến đâu kiểm tra số đó có khác 0 hay không, nếu số đó khác 0 thì đếm d và cộng vào tổng S. - Thông báo tổng các số các số đã đọc là S và trung bình cộng là S/d; Dạng 6: Tính tổng một dãy số đan dấu bất kỳ. VD6: Cho số tự nhiên n và các số thực a1, a2, ,an. Hãy tính: S=a1-a2+a3-+(-1)n+1an Thuật toán: - Nhập n; khởi tạo tổng S:=0; - Nhận thấy đây là biểu thức đan dấu, nên dùng thêm một biến d (gọi là biến dấu), khi đó khởi tạo d:=1; - Dùng vòng lặp For để nhập các giá trị của a, nhập đến đâu tính tổng đến đó và đổi dấu cho biến d. - Thông báo kết quả S. Chương trình: Program tinh; Var n, I,d: Integer; a, S: Real; Begin Write(‘Nhap so lượng các số thực n=’); Readln(n); S:=0; d:=1; For i:=1 to n do Begin Write(‘Nhap gia tri cua a’,i,’=’); Readln(a); S:=S+d*a; d:=-d; End; Writeln(‘Tong tren la:’,S:3:1); Readln; End. Bài tập: Bài 1: Nhập số thực x. Hãy tính: (k là số tự nhiên) Hướng dẫn: - Nhập x; nhập k; - Khởi tạo S:=x; T:=x; M:=1; d:=1; {S là tổng, T là tử của từng phân số, M là mẫu của từng phân số, d là biến dấu} - Dùng vòng lặp For i:=1 to k do: d:=-d; T:=T*x*x {do x3=x*x*x=T*x*x, x5=x3*x*x, } M:=M*(2*1)*(2*i+1) {do 3!=2*3; 5!=3!*4*5, .} S:=S+d*T/M; - Thông báo kết quả S. Bài 2: Nhập số thực x. Hãy tính: (k là số tự nhiên) Bài 3: Cho số tự nhiên n và các số thực a1, a2, ,an. Hãy tính: 2.3.2.3. Các bài tập nâng cao và các bài tập trong các đề thi Tin hoc trẻ cấp Tỉnh những năm trước: Bài 1: Nhập vào 1 số. Xác định xem số đó có phải số nguyên tố hay không? Thuật toán: Số nguyên tố là số tự nhiên lớn hơn 1 chỉ có hai ước là 1 và chính nó. Giả sử số vừa nhập vào là n, ta cho i chạy từ 2 đến n-1, nếu n chia hết cho i trong bất cứ lần lặp nào thì có nghĩa là n không nguyên tố, nếu không chia hết cho bất cứ lần lặp nào là nguyên tố. Về nguyên tắc là như vậy, nhưng người ta đã chứng minh được rằng chỉ cần xét từ 1 đến phần nguyên căn bậc 2 của n. Như thế thuật toán sẽ tối ưu hơn. Cụ thể: - Nếu n không chia hết mọi số i có giá trị từ 2 đến n - 1 thì n là số nguyên tố. - Sử dụng biến bl có kiểu boolean và có giá trị ban đầu là true. - Cho biến i chạy từ 2 đến phần nguyên căn bậc 2 của n. Xét n mod i. Nếu bằng 0 thì gán bl = false. Ngược lại vẫn để nguyên bl. Chương trình: Program kiem_tra_nguyen_to; Var n,i:integer; bl:boolean; Begin bl:=true; write('nhap vao so can kiem tra tinh nguyen to: '); readln(n); if n<=1 then bl:=false else for i:=2 to trunc(sqrt(n)) do if n mod i=0 then bl:=false; if bl=true then writeln('so ',n, ' la so nguyen to') else writeln('so ',n,' khong phai la so nguyen to'); readln; End. Bài 2 (Bài B2-Đề thi tin học trẻ tỉnh năm 2006): Số nguyên tố Số nguyên tố là một số tự nhiên lớn hơn 1 chỉ có ước là 1 và chính nó. Cho trước một số tự nhiên n. Hãy viết chương trình hiển thị các số nguyên tố nằm trong khoảng từ 1 đến n và đếm xem có bao nhiêu số nguyên tố. V
Tài liệu đính kèm:
- skkn_boi_duong_hoc_sinh_gioi_lop_8_thong_qua_viec_hoc_cau_le.doc