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.
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 Trước vào nội dung chuyên đề, xin nói ngắn gọn ngơn ngữ lập trình Pascal: Pascal ngơn ngữ lập trình bậc cao Niklaus Wirth, giáo sư điện toán trường Đại học kỹ thuật Zurich (Thụy Sĩ) đề xuất năm 1970 Ông lấy tên Pascal để kỷ niệm nhà toán học nhà triết học người Pháp tiếng Blaise Pascal Pascal ngơn ngữ lập trình bậc cao có từ khóa tiếng Anh, tính logic Tốn học chặt chẽ, đặc trưng thuật toán khả trừu tượng hóa cao Điều lí giải học sinh học Tốn tốt, thơng minh lại dễ dàng tiếp thu dạng kiến thức Do tính chất nội dung môn học mà chuyên đề t ập trung ch ủ y ếu vào thuật toán chất toán dạy học lập trình cho học sinh giỏi Phần A Hướng dẫn dạy bồi dưỡng học sinh giỏi (HSG) mơn Tin học lớp A.1 Lí thuyết cần nắm vững: Câu lệnh gán: Cú pháp: a:= b; (Gán giá trị b cho a) Câu lệnh điều kiện Cú pháp: Câu lệnh điều kiện dạng thiếu If then ; Câu lệnh điều kiện dạng đủ If then Else ; Hoặc: Lệnh CASE Cú pháp: Dạng Dạng CASE B OF Const 1: S1; Const 2: S2; Const n: Sn; END; CASE B OF Const 1: S1; Const 2: S2; Const n: Sn; ELSE Sn+1; END; Câu lệnh lặp 3.1 Lặp với số lần biết trước : Cú pháp: For := to ; (dạng tiến – duyệt từ nhỏ đến lớn) For := downto ; (dạng lùi – duyệt từ lớn đến nhỏ) 3.1 Lặp với số lần chưa biết trước : Cú pháp: While ; Hoặc: Repeat ; ; ; Until ; Các phép toán hàm số học * Các phép toá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 số thực: • • • • • • • • Abs(n): Giá trị tuyệt đối số n Sqr(x): bình phương số x Sqrt(x): cho kết bậc hai x Odd(x): cho kết true x số lẻ, ngược lại false Round(n): Làm tròn số thực n tới số nguyên gần n Trunc(n): Làm tròn số thực n tới số nguyên có giá trị tuyệt đối bé n Inc(n): Tăng n thêm đơn vị (n:=n+1) Dec(n): Giảm n đơn vị (n:=n-1) Các phép toán logic Giả sử A B hai giá trị kiểu Boolean K ết phép toán đ ược th ể hi ện qua bảng đâ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 kiến thức phương pháp giảng dạy (1) Hiểu sâu sắc lí thuyết Muốn dạy nội dung nào, trước hết bạn phải nắm vững hi ểu sâu s ắc lí thuy ết vấn đề Tin học lập trình khơng phải mơn h ọc có tính ch ất h ọc thu ộc nh môn khoa học xã hội (Văn, Sử, Địa); sẵn định lí, tính chất nh mơn khoa h ọc t ự nhiên (Tốn, Lí, Hóa) để áp dụng Học lập trình h ọc cách s d ụng m ột ngôn ng ữ đ ể diễn đạt giao tiếp với máy tính đặc biệt gi ải quy ết toán đ ặt nh s ức mạnh tính tố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 ngơn ngữ lập trình, hi ểu ta đ ượ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ơng c ụ khơng thể giao tiếp thành công tức 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 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 nội dung lí thuyết ngơn ngữ lập trình - điều khơng d ễ ngơn ng ữ l ập trình sử dụng kí tự riêng, tn theo cú pháp, quy tắc dùng nh ất đ ịnh đ ặc bi ệt đòi hỏi nhiều chất Tốn, thơng minh, tư linh hoạt, khả sáng tạo Khi truyền đạt rõ ràng, dễ hiểu lí thuyết lập trình, thầy khơi gợi hứng thú, tìm tòi, muốn khám phá sáng tạo ban đầu người học (3) Dạy thuật tốn nào? Dạy lí thuyết có nhiều điểm tương đồng thầy (vì lí thuyết chung, có sẵn sách phần lớn thầy khơng gia cơng thêm trình tự SGK hướng dẫn) dạy thuật tốn phải thực tế (và thực tế tốt) Lưu ý đặc trưng thuật tốn tính logic đảm bảo thực thứ tự bước ta có kết Thầy, lấy ví dụ dạy thuật tốn chương trình Tin học lớp khơng ? (4) Minh họa cụ thể đoạn code mẫu Trong trình học lập trình, học sinh cần có khả đọc hiểu code người khác (lời giải bạn khác, sách, chia sẻ code mạng) đọc hiểu code tự bổ sung cho cách giải tham khảo: Ví dụ với đoạn code sau, thầy cô minh họa ? uses crt; var N,n1,n2,S,i,j:Longint; dem:integer; begin clrscr; writeln('******BA NGUOI CAU CA******'); for i:=2 to 1000 begin n:=i; if (n mod 3=1) then //neu so ca ban dau chia du begin n1:=((n-1) div 3)*2; //so ca lai sau nguoi thu lay if (n1 mod 3=1) then begin n2:=((n1-1) div 3)*2; //so ca lai sau nguoi thu lay if (n2 mod 3=1) then begin write(i:5); inc(dem); if (dem mod 10=0) then writeln; end; end; end; end; readln; end Kết chạy chương trình: Đây đề code giải trên: Ba người câu số lượng không lớn N cá Mệt m ỏi tr ời t ối, m ỗi người tìm nơi để ngủ Khi trời gần sáng, người thứ th ức d ậy, đ ếm s ố cá th n ếu chia dư vứt cá xuống sông đem v ề m ột ph ần ba s ố cá Ng ười thứ hai thức dậy tưởng hai người ngủ, đếm số cá thấy chia ba d m ột nên v ứt xu ống sông đem phần ba số cá Người thứ ba th ức d ậy t ưởng d ậy s ớm đếm cá thấy chia ba dư nên vứt m ột xuống sông đem v ề m ột phần ba số cá Với số N nhập từ bàn phím ( N m+ 100; k nguyên dương nhỏ 20) Bài (lệnh for, chất Tốn) Cho hình chữ nhật có số đo cạnh số nguyên dương chu vi P Hãy in diện tích lớn hình chữ nhật Ví dụ: Nhập V = 20 In 25 Bài (chất Toán) Nhập vào tuổi cha, tuổi In số năm chưa tới số năm qua mà tuổi cha gấp đôi tuổi (phân bi ệt + -) Nhập In 24 + 20 Bài 10 (lệnh While … do) Viết chương trình nhập vào số nguyên dương N từ bàn phím ( N < 109 ) Hãy in số nhỏ lớn N thỏa mãn chia dư 8, chia d 7, chia d 6, chia d 5, chia dư 4, chia dư 3, chia dư chia dư Ví dụ : Nhập In N = 100 2519 Bài 11 Tổ Ong (chất Toán) Tổ ong bao gồm nhiều giống hình lục bát Các để ở, ch ứa m ật, sáp, ong non, Ban đầu ong xây Sau xây ti ếp ô k ề cạnh v ới ô ban đ ầu, làm thành l ớp thứ hai, sau xây tiếp kề cạnh với lớp thứ hai, làm thành l ớp thứ 3, Người ta tìm thấy tổ ong lớn có tới n lớp Hãy xác định số tổ ong tìm thấy (1 ≤ n ≤ 109) Ví dụ : Nhập N=2 In Bài 12 (Thuật toán Đếm, chất Toán) Nhập vào số nguyên n kiểu longint Hãy kiểm tra xem n có số ngun tố hay khơng ? có ghi ‘yes’, ngược lại ghi ‘no’ Ví dụ : Nhập N = 41 In yes Bài 13 (Thuật toán Đếm) Nhập vào số nguyên dương N in N số nguyên tố (N < 1000) Ví dụ : Nhập N=5 Bài 14 (Thuật toán Euclid, chất Toán) In 11 Nhập vào hai số nguyên dương a b (a , b nhỏ 109) a) in UCLN(a,b) cách khác b) in BCNN(a,b) Ví dụ : Nhập A= B=6 In UCLN(4,6) = BCNN(4,6) = 12 Bài 15 (chất Tốn) Cho hình chữ nhật với hai kích thước a b (a, b s ố nguyên d ương nh ỏ h ơn 10 9) Hỏi cần nhát cắt (mỗi nhát cắt song song với hai c ạnh c hình ch ữ nhật) để chia hình chữ nhật thành hình vng có cạnh Nhập vào hai số nguyên dương a, b hai kích thước hình chữ nhật In số nguyên dương K số nhát cắt cần dùng Ví dụ : Nhập A=4 B=6 In Bài 16 (chất Tốn, dùng hàm có sẵn) Nhập vào dãy số nguyên gồm N số Ai ( n < 100, −1000 ≤ Ai ≤ 1000 ) Hãy in số phương có dãy số Có tất số phương ? Ví dụ : Nhập N = 10 -8 49 -25 In 49 Bài 17 (thuật Toán xếp, thuật toán đánh dấu, tạo mảng phụ) Nhập vào dãy số nguyên gồm N số Ai ( n < 100, −1000 ≤ Ai ≤ 1000 ) khác đôi Hỏi sau xếp dãy số tăng dần, số vị trí thứ k dãy ban đầu dãy xếp vị trí ? Ví dụ : Nhập N=7 K=3 -8 2019 49 -25 In Bài 18 (từ ngồi) Viết chương trình nhập vào từ bàn phím số nguyên dương n (n1) Hãy biến đổi xâu cách thay tất dấu hai chấm nằm S1, S2, , Sn/2 dấu phẩy thay tất dấu chấm than nằm Sn/2 + 1, Sn dấu chấm 16 Cho trước xâu ký tự Trong xâu có xen kẽ ký tự số ký tự không số Ví dụ: dgghhg456cghh086chgh1fdfgdfg76cgf Viết chương trình tách phần "số" xâu đưa mảng số ngun Trong ví dụ mảng số có phần tử bao gồm 456, 86, 76 Các thao tác mảng chiều Nhập vào N số nguyên Ai ( N < 100, -32000