Hướng dẫn dạy bồi dưỡng học sinh giỏi môn Tin học

Lưu ý:
+ Phần lời giải, thuật toán, chất toán, dẫn dắt cho mỗi bài sẽ được trình bày ở buổi chuyên đề phần báo cáo, thực hành, thảo luận.
+ Để có kết quả tốt nhất khi tiếp thu chuyên đề này, các thầy cô cần giải quyết được các bài tập đưa ra ít nhất theo cách riêng của bản thân hoặc cố gắng làm được càng nhiều càng tốt các yêu cầu kèm theo mỗi bài.
+ Nếu đề bài chưa chính xác hoặc thiếu trường hợp, hoặc có thể có thuật toán tốt hơn để giải thì các thầy cô có thể trao đổi khi tham gia chuyên đề.
Bài 1. (cách sử dụng biến, lệnh gán)
Nhập vào hai số nguyên a và b, hãy hoán đổi giá trị của chúng cho nhau : a nhận giá trị b; b nhận giá trị a bằng 2 cách:
Cách 1: dùng thêm biến c
Cách 2: không dùng thêm biến.
PHÒNG GD & ĐT VĨNH TƯỜNG TRƯỜNG THCS VĨNH TƯỜNG Chuyên đề: HƯỚNG DẪN DẠY BỒI DƯỠNG HỌC SINH GIỎI MÔN TIN HỌC Vĩnh Tường, tháng 02 năm 2019 1 Until ; Các phép toán và hàm số học * Các phép toán trên kiểu số nguyên: + Phép chia lấy phần nguyên : Div + Phép chia lấy phần dư : Mod + Các hàm số học sử dụng cho kiểu số nguyên và số thực: • Abs(n): Giá trị tuyệt đối của số n • Sqr(x): bình phương của số x. • Sqrt(x): cho kết quả là căn bậc hai của x. • Odd(x): cho kết quả là true nếu x số lẻ, ngược lại là false. • Round(n): Làm tròn số thực n tới số nguyên gần n nhất. • Trunc(n): Làm tròn số thực n tới số nguyên có giá trị tuyệt đối bé hơn n. • Inc(n): Tăng n thêm 1 đơn vị (n:=n+1). • Dec(n): Giảm n đi 1 đơn vị (n:=n-1). Các phép toán logic Giả sử A và B là hai giá trị kiểu Boolean. Kết quả của các phép toán được thể hiện qua bảng dưới đây: A B A AND B A OR B A XOR B NOT A TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE A.2 Yêu cầu về kiến thức và phương pháp giảng dạy (1) Hiểu sâu sắc lí thuyết Muốn dạy bất cứ nội dung nào, trước hết bạn phải nắm vững và hiểu sâu sắc lí thuyết của vấn đề đó. Tin học lập trình không phải là môn học có tính chất học thuộc như các môn khoa học xã hội (Văn, Sử, Địa); cũng không có sẵn định lí, tính chất như các môn khoa học tự nhiên (Toán, Lí, Hóa) để cứ thế áp dụng. Học lập trình là học cách sử dụng một ngôn ngữ để diễn đạt giao tiếp với máy tính và đặc biệt là giải quyết được các bài toán đặt ra nhờ sức mạnh tính toán, tính logic, công cụ hỗ trợ mà ngôn ngữ lập trình đó cung cấp. Khi học lí thuyết về ngôn ngữ lập trình, có thể hiểu là ta đang được cung cấp công cụ để làm việc với môi trường giao tiếp người – máy tính; phải hiểu nếu không nắm chắc các công cụ này thì không thể giao tiếp thành công tức là ta không chuyển tải thành công để máy tính hiểu. (2) Truyền đạt rõ ràng, dễ hiểu Bạn không thể dạy học sinh trở nên lập trình giỏi mà không truyền đạt rõ ràng, dễ hiểu những nội dung lí thuyết của ngôn ngữ lập trình đó - điều này không dễ vì ngôn ngữ lập trình sử dụng bộ kí tự riêng, tuân theo một cú pháp, quy tắc dùng nhất định và đặc biệt là đòi hỏi nhiều chất Toán, sự thông minh, tư duy linh hoạt, khả năng sáng tạo. Khi truyền đạt rõ ràng, dễ hiểu lí thuyết lập trình, các thầy cô có thể khơi gợi sự hứng thú, tìm tòi, muốn khám phá và cả sự sáng tạo ban đầu ở người học. (3) Dạy thuật toán như thế nào? Dạy lí thuyết sẽ có nhiều điểm tương đồng giữa các thầy cô (vì lí thuyết chung, có sẵn trong sách và phần lớn thầy cô sẽ không gia công thêm trình tự SGK hướng dẫn) nhưng dạy thuật 3 con rồi đem về một phần ba số cá. Người thứ ba thức dậy tưởng mình dậy sớm hơn cả anh ta đếm cá thấy chia ba dư một nên cũng vứt một con xuống sông và đem về một phần ba số cá. Với một số N nhập từ bàn phím ( N<1000 ), hãy thông báo trên màn hình những khả năng có thể xảy ra về số lượng cá mà ba người câu được thoả mãn những giả thiết đã cho. Khi các thầy cô đã làm tốt yêu cầu về kiến thức và phương pháp giảng dạy thì một hệ thống bài tập nâng cao trọng tâm, tổng hợp kỹ năng, có yêu cầu sáng tạo và tích hợp nhiều chất Toán là phần quan trọng nhất trong việc bồi dưỡng học sinh giỏi Tin học A.3 Bài tập chọn lọc: Lưu ý: + Phần lời giải, thuật toán, chất toán, dẫn dắt cho mỗi bài sẽ được trình bày ở buổi chuyên đề phần báo cáo, thực hành, thảo luận. + Để có kết quả tốt nhất khi tiếp thu chuyên đề này, các thầy cô cần giải quyết được các bài tập đưa ra ít nhất theo cách riêng của bản thân hoặc cố gắng làm được càng nhiều càng tốt các yêu cầu kèm theo mỗi bài. + Nếu đề bài chưa chính xác hoặc thiếu trường hợp, hoặc có thể có thuật toán tốt hơn để giải thì các thầy cô có thể trao đổi khi tham gia chuyên đề. Bài 1. (cách sử dụng biến, lệnh gán) Nhập vào hai số nguyên a và b, hãy hoán đổi giá trị của chúng cho nhau : a nhận giá trị b; b nhận giá trị a bằng 2 cách: Cách 1: dùng thêm biến c Cách 2: không dùng thêm biến. Bài 2. (cách sử dụng biến, hàm div, mod) Nhập vào một số nguyên dương n có 4 chữ số. Hãy in ra tổng các chữ số của nó mà không dùng thêm biến nào khác. Ví dụ: Nhập In ra N = 2019 12 Bài 3. (cách sử dụng biến, hàm div, mod) Viết chương trình đổi số tiền là a (đơn vị trăm đồng) ra các tờ tiền là 500 đ, 200 đ và 100 đ sao cho số tờ tiền là ít nhất. Yêu cầu: chỉ dùng câu lệnh gán không dùng thêm biến, không dùng câu lệnh if then, for, while do, Ví dụ: Nhập In ra 2300 6 Bài 4. (lệnh if ) Nhập vào một số nguyên dương chỉ năm dương lịch. a) Hãy kiểm tra xem đó có phải là năm nhuận hay không ? nếu có ghi ‘la nam nhuan’, ngược lại ghi ‘khong la nam nhuan’ b) nếu không là năm nhuận thì cần thêm ít nhất mấy năm nữa để trở thành năm nhuận ? Ví dụ: Nhập In ra 2020 la nam nhuan 2019 khong la nam nhuan +1 Bài 5. (chỉ dùng lệnh if, không dùng div, mod, while do) 5 Người ta tìm thấy một tổ ong lớn có tới n lớp. Hãy xác định số ô của tổ ong tìm thấy. (1 ≤ n ≤ 109). Ví dụ : Nhập In ra N = 2 7 Bài 12. (Thuật toán Đếm, chất Toán) Nhập vào một số nguyên n kiểu longint. Hãy kiểm tra xem n có là số nguyên tố hay không ? nếu có ghi ‘yes’, ngược lại ghi ‘no’. Ví dụ : Nhập In ra N = 41 yes Bài 13. (Thuật toán Đếm) Nhập vào số nguyên dương N. in ra N số nguyên tố đầu tiên (N < 1000). Ví dụ : Nhập In ra N = 5 2 3 5 7 11 Bài 14. (Thuật toán Euclid, chất Toán) Nhập vào hai số nguyên dương a và b (a , b nhỏ hơn 109). a) hãy in ra UCLN(a,b) bằng 2 cách khác nhau. b) hãy in ra BCNN(a,b) Ví dụ : Nhập In ra A= 4 UCLN(4,6) = 2 B = 6 BCNN(4,6) = 12 Bài 15. (chất Toán) Cho hình chữ nhật với hai kích thước a và b (a, b là các số nguyên dương nhỏ hơn 109). Hỏi cần ít nhất bao nhiêu nhát cắt (mỗi nhát cắt song song với một trong hai cạnh của hình chữ nhật) để chia hình chữ nhật thành các hình vuông có cạnh bằng nhau. Nhập vào hai số nguyên dương a, b là hai kích thước của hình chữ nhật. In ra số nguyên dương K là số nhát cắt ít nhất cần dùng. Ví dụ : Nhập In ra A = 4 3 B = 6 Bài 16. (chất Toán, dùng hàm có sẵn) Nhập vào một dãy số nguyên gồm N số Ai n 100,1000 Ai 1000 . 7 8 56 J 74 j 106 9 57 K 75 k 107 L 76 l 108 M 77 m 109 N 78 n 110 O 79 o 111 P 80 p 112 Q 81 q 113 R 82 r 114 S 83 s 115 T 84 t 116 U 85 u 117 V 86 v 118 W 87 w 119 X 88 x 120 Y 89 y 121 Z 90 z 122 Các ký tự dùng trong máy tính điện tử được liệt kê đầy đủ trong bảng mã ASCII gồm 256 ký tự khác nhau và được đánh số thứ tự từ 0 đến 255. Số thứ tự của mỗi ký tự còn gọi là mã ASCII của ký tự đó. Biểu 6.5 liệt kê một phần của bảng mã ASCII gồm các chữ số và chữ cái kèm theo mã của chúng. Trong bảng, ký tự có mã bằng 32 là ký tự trắng (space). Tuy có 256 ký tự khác nhau song chỉ có 128 ký tự đầu tiên là hay dùng, còn lại là các ký tự mở rộng. Các ký tự có mã từ 0 đến 31 gọi là các ký tự điều khiển, không in ra được, được dùng để điều khiển các thiết bị ngoại vi, chẳng hạn ký tự có mã là 7 dùng để tạo một tiếng kêu bip, ký tự có mã là 13 dùng để chuyển con trỏ màn hình xuống đầu dòng dưới... Mỗi ký tự trong bảng mã ASCII gọi là một hằng ký tự, chiếm độ dài 1 byte, và khi viết trong Pascal phải được đặt trong cặp nháy đơn: ‘0’, ‘1’, ‘A’, ‘B’, ‘$’,... Giữa các ký tự, có một thứ tự mặc nhiên theo nguyên tắc : ký tự có mã nhỏ hơn thì nhỏ hơn. Tức là: Ký tự trắng < ‘0’< ‘1’< ...< ‘9’< ‘A’< ‘B’< ...’Z’< ‘a’< ‘b’< ...< ‘z’ Biến nhận gía trị là các hằng ký tự gọi là biến kiểu ký tự, chúng được khai báo nhờ từ khóa CHAR, chẳng hạn như khai báo hai biến ch và ch1 dưới đây: Var ch, ch1: Char ; Khi đó có thể gán: 9 Var ch, ch1 : Char; Begin Write(‘ Nhập một ký tự :’); Readln(ch); If (ch>=‘A’) and ( ch<=‘Z’) then ch1:=Chr( Ord (ch)+32) else ch1:= Upcase(ch); Writeln(ch, ‘ đã đổi ra: ‘ , ch1); Readln; End. Chạy Chép tập tin nguồn 2. MẢNG MỘT CHIỀU 2.1. Mảng và cách khai báo mảng : Khái niệm : Mảng là một tập gồm nhiều phần tử có cùng chung một kiểu dữ liệu. Mỗi phần tử của mảng có một đại lượng xác định vị trí tương đối của phần tử đó so với các phần tử khác trong mảng, gọi là chỉ số Các yếu tố để xác định một mảng gồm có: Tên mảng Kiểu dữ liệu chung của các phần tử trong mảng Kiểu dữ liệu của chỉ số và phạm vi của chỉ số. Kiểu dữ liệu của các phần tử mảng là mọi kiểu dữ liệu mà một biến có thể có. Tuy nhiên, kiểu dữ liệu của chỉ số thì không được là kiểu thực hay kiểu chuỗi, nó chỉ có thể là kiểu đếm được : nguyên, ký tự, lôgic, liệt kê hay đoạn con. Khai báo mảng một chiều : Mảng một chiều, còn gọi là dãy, hay đơn giản là mảng, có thể khai báo theo một trong hai cách : Cách 1: Khai báo trực tiếp theo cách sau : VAR Tênmảng : Array[m1 . . m2] of Tênkiểudữliệu ; Ở đây m1, m2 là hai hằng xác định phạm vi của chỉ số, chúng có chung một kiểu dữ liệu,và m1 < m2. Ví dụ: Cho khai báo dưới đây: Var A : Array[0..10] of Real; Hten: Array[1..5] of String[18]; B: Array[‘a’..’d’] of Integer; Theo khai báo trên, ta có ba mảng: Mảng thứ nhất tên là A, gồm 11 phần tử cùng kiểu Real, ứng với các chỉ số 0, 1, 2, ..., 10, đó là: A[0], A[1], A[2], ..., A[10] Mảng thứ hai tên là HTen gồm 5 phần tử cùng kiểu dữ liệu là String[18] ứng với các chỉ số từ 1 đến 5: Hten[1], Hten[2], Hten[3], Hten[4], Hten[5] Mảng thứ ba tên là B, gồm 4 phần tử cùng kiểu Integer ứng với các chỉ số ‘a’, ‘b’, ‘c’, ‘d’: B[‘a’], B[‘b’], B[‘c’], B[‘d’] Ðể có một hình ảnh về mảng, đối với mảng A, ta hình dung có một dãy nhà một tầng, tên gọi là dãy A, gồm 11 phòng liên tiếp giống hệt nhau được đánh số thứ tự từ 0,1, 2, ..., đến 10 : 11
Tài liệu đính kèm:
huong_dan_day_boi_duong_hoc_sinh_gioi_mon_tin_hoc.doc