1 / 104

Chuyên đề : RÈN LUYỆN KỸ NĂNG LẬP TRÌNH Cho HSG tin THCS

Chuyên đề : RÈN LUYỆN KỸ NĂNG LẬP TRÌNH Cho HSG tin THCS. GV: V õ Văn Sửu. Nội dung chuyên đề. I. Rèn luyện PP tìm tòi thuật toán II. Rèn luyện phong cách lập trình . III. Các dạng toán bồi dưỡng HSG THCS. I . Rèn luyện PP tìm tòi thuật toán.

ada
Download Presentation

Chuyên đề : RÈN LUYỆN KỸ NĂNG LẬP TRÌNH Cho HSG tin THCS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chuyênđề:RÈN LUYỆN KỸ NĂNG LẬP TRÌNHCho HSG tin THCS GV: Võ Văn Sửu.

  2. Nội dung chuyênđề I. Rèn luyện PP tìm tòi thuật toán II. Rènluyệnphongcáchlậptrình. III. Cácdạngtoánbồidưỡng HSG THCS

  3. I. Rèn luyện PP tìm tòi thuật toán 1. Tại sao phải rèn luyện cho hs khả năng tìm tòi thuật toán.

  4. Thuật toán là phần quan trong bậc nhất để tạo nên một chương trình. • Ở tiểu học, học sinh chưa được làm quen với khái niệm thuật toán. Do vậy khi học lập trình cái khó khăn ban đầu của học sinh chính là tìm thuật toán để giải bài toán đã cho. • Một học sinh muốn tiến sâu, tiến xa trong tương lai phải có tư duy thuật toán tốt.

  5. Làmquenvàrènluyệntưduythuậttoánchohọcsinhmớibắtđầuhọclậptrìnhlàmộtyêucầuthiếtyếu. • Khôngnênvộivàngchohọcsinhlàmviệctrênmáytínhluônkhimớibắtđầuhọc.

  6. Xácđịnhbàitoán • Xácđịnh INPUT và OUTPUT củabàitoán. • Đặctảmôhìnhtoánhọccủabàitoán.

  7. 3. Tìmthuậttoán • Ở THCS nên sử dụng cách trình bày thuật toán bằng SĐK. • Khai thác ví dụ, hiểu ví dụ đã có và tìm các ví dụ khác. • Trình bày thuật toán từ tổng thể đến chi tiết ( phương pháp min dần)

  8. Vídụ: Kiểmtrasố n cónguyêntố? BĐ Phương án thô: Nhập n Có ước n + - N là sô NT N không NT Thực sự KT

  9. Nhập n • Phương án mịn bước 1. • Đếm số ước của n i:=0; d:=0 - i:=i+1 + I >=n D=2 d:=d+1 - n mod i=0 + + - N nt N khgnt

  10. N • Phương án mịn 2: • Duyệt nếu có ước trong khoảng từ • 2 đến căn n thì n không phải NT • P:=Trunc(Sqrt(n)) • OK: Biến Boolean; Ok:=N>1 i:=1 - i:=i+1 I > p + Ok:=False Ok=true + -- N modi=o + N kg NT N NT -

  11. 4. Giảimộtbài, gợi ý nhiềubài. • Có nhiều bài toán tuy phát biểu khác nhau nhưng cùng thuật toán, cùng cách giải. • Khi ra và hướng dẫn HSG giải một bài tập, phải chỉ cho họ biết nhiều bài toán khác có các giải hoàn toàn tương tự

  12. Ví dụ: • Cho dãy các phần tử a1, a2,…, an • Yêu cầu tìm số lớn nhất. TT: +max:=a1; + For i:=1 to n do if max< ai then max:=ai Nhận xét TT bài này có dạng: + Khởi tạo giá trị ban đầu + Duyệt, lưu lại giá trị tối ưu hơn.

  13. Cho học sinh đề xuất các bài toán tương tự và cách giải: Cho dãy số nguyên ai + Tìm ai mà tổng chữ số của nó là lớn nhất. + Tìm số nguyên tố lớn nhất trong dãy. + Tìm số ai có nhiều chữ số nhất + Tìm 3 số liên tiếp có tổng lớn nhất… + Tìm 2 chỉ số i≠ j để ai+aj max + Tìm đoạn nhiều nhất các số liên tiếp bằng nhau + Tìm đoạn các số liên tiếp mà tổng max + Tìm số ai có tổng chữ số đầu và cuối max …..

  14. II. Rèn luyện phong cách lập trình. . CHƯƠNG TRÌNH=TT+CTDL+NTLT

  15. Tuân theo các quy chuẩn, các quy ước. • Cách trình bày rõ ràng, sáng sủa nổi bật được cấu trúc logic của chương trình. • Người dùng dễ đọc, dễ hiểu nó.

  16. Lợi ích của việc trình bày cẩn thận: • Thể hiện tốt cấu trúc lôgic của mã lệnh • Cải thiện khả năng đọc • Bảo đảm sự chính xác trong các thay đổi • Các lợi ích hệ quả của các lợi ích trên + Chương trình ít mắc lỗi và dễ sửa chữa khi mắc lỗi. + Tăng khả năng làm việc theo nhóm,

  17. 1. Quy ước về cách đặt tên cho các định danh. a) Đặt tên cho biến. • Tên biến nên thể hiện được ý nghĩa: thông thường các biến nguyên như i, j, k, n dùng làm biến lặp; x, y dùng làm biến tọa độ… • Biến lưu trữ nên đặt tên gợi nhớ.

  18. b) Đặt tên hằng: Tất cả các ký tự nên viết hoa. Ví dụ: Const MAXN = 10000; INPUT = ‘Baitap.inp’; OUTPUT = ‘Baitap.out’; c) Đặt tên cho chương trình con: Tên chương trình con thường bắt đầu bằng chữ hoa. Vì chương trình con thường thực hiện một chức năng nào đó nên tên hay bắt đầu bằng động từ. • Ví dụ: TimMax( ); GetNum( );

  19. 2. Phongcáchviếtmãnguồn a) Trình bày tổng thể chương trình: • Chương trình nên tách thành nhiều đơn thể, mỗi đơn thể thực hiện một công việc, (chương trình con). • Nên sử dụng các tham số khi truyền thông tin cho các chương trình con. Tránh sử dụng các biến toàn cục để truyền thông tin giữa các chương trình con.

  20. Cách trình bày chương trình phải nhất quán dễ đọc, dễ hiểu. • Tính đơn giản, rõ ràng. • Văn bản chương trình không trườn ra khỏi màn hình • Thứ tự: khai báo đơn vị, khai báo hằng, khai báo kiểu, khai báo biến toàn cục, khai báo chương trình con. • Không nên sử dụng Goto vì sẽ phá vỡ tính tuần tự khi thực hiện chương trình.

  21. b) Quy tắc trình bày dòng lệnh • Mỗi câu lệnh nên được đặt riêng trên một dòng để chương trình dễ đọc và dễ quan sát cách thực hiên khi dùng watch để tìm lỗi. • Sử dụng tab để canh lề chương trình (các lệnh ngang cấp thì phải tab vào như nhau): Điều này sẽ giúp chương trình rõ ràng và dễ quản lý.

  22. Vídụ: • Không nên • For i := 1 to n do Begin Lệnh1; • Lệnh2; • End; • Nên • For i := 1 to n do • Begin • Lệnh1; • Lệnh2; • End;

  23. c) Sửdụngkhoảngtrắng: • Khó đọc • If (a<c)and(c mod 2=0)then d:=a+c; • a:=b*c • TimMax(a,b,c); • Dễ đọc • If ( a < c ) and ( c mod 2 = 0 ) then d := a + c; • a := b * c; • TimMax(a, b, c);

  24. d) Nênđịnhnghĩahằng: • Không nên • …………… • For i := 1 to 100 do A[i] := Random(100); • While i<=100 do… • Nên • Const MAXN = 100; • …….. • For i :=1 to MAXN do • A[i] :=Random(MAXN) • While i <= MAXN do …..

  25. Không nên: ….. Assign(f, ‘Bai1.inp’); Reset(f); …. Assign(f,’Bai1.out’); ….. • Nên: Const fi=‘Bai1.inp’; fo=‘Bai1.out’; ….. Assign(f, fi); Reset(f) …. Assign(f,fo); …..

  26. e) Dùngbiến, chúthích • Biến chạy i, j…phải dùng biến địa phương • Cách đặt tên biến phải gợi nhớ, • Viết chú thích cho chương trình: Biến, hàm khi định nghĩa nên viết chú thích ý nghĩa. Chú thích ngắn gọn nhưng đầy đủ và dễ hiểu. • Ví dụ: Var iCount : Integer; { đếm số cách thực hiện} • Procedure Try( i: Integer); {Tìm từ I }

  27. 3. Tốiưusựthựcthimãnguồn Không nên • If b * b – 4 * a * c >0 then • Begin • x1 := (-b +sqrt( b * b – 4* a* c)) / (2 * a); • x2 := (-b – sqrt(b * b – 4* a* c)) / (2* a); • end;

  28. Nên • Delta := b * b – 4 * a * c • If delta >0 then • Begin • Delta:=sqrt(delta); • x1 := (-b + delta) / (2 * a); • x2 := (-b – delta) / (2 * a); • End;

  29. Kếtthúcvònglặpsớmnhấtcóthể Không nên bkt := true; {n không có ước thực sự} For i := 2 to n-1 do • If n mod i = 0 then • bkt := False; • Nên bkt := true; For i := 2 to n-1 do If n mod i = 0 then Begin bkt := False; Break; End;

  30. Nhiềukếtquảxửlýngaykhinhậpliệu Không nên • For i := 1 to n do readln(f, a[i]); • For i:=1 to n do s := s+a[i]; Nên For i := 1 to n do Begin readln(f, a[i]); • s := s+a[i]; • end;

  31. Hạnchếlệnhrẽnhánh • Không nên • If x > y then d:=True else d:= False; • Nên • d := x>y;

  32. 4. Kiểmnghiệmchươngtrìnhvớicácbộ test đầyđủnhất. • Test đầu bài, • Các test đơn giản • Test các trường hợp đặc biệt. • Test lớn

  33. II. Cácdạngtoánbồidưỡng HSG THCS • Nhóm các bài toán số học: • Nhóm các bài toán thao tác trên mảng • Nhóm các bài toán xử lý xâu . • Các bài toán khác.

  34. 1. Cácbàitoánsốhọc. • Để giải các bài toán về số học giáo viên cần cho học sình ứng dụng nhuần nhuyễn các kiến thức số học ở THCS chủ yếu dựa vào 2 phép toán DIV, MOD

  35. Thuậttoántìm UCLN • Cho 2 số nguyên m, n>0 . UCLN(m,n)=? Thuật toán 1: Sử dụng phép trừ liên tục cho đến khi 2 số bằng nhau: • + Nhập m, n • + While m<>n do • If m>n then m:=m-n • Else n:=n-m; • +UCNN:=n;

  36. Thuật toán 2: (Đối với HSG nên hướng các em sử dụng thuật toán này) • + Nhập m, n • + While n <> 0 do • Begin • r:= m mod n • m:=n; • n:=r; • End; • +UCLN:=m

  37. So sánh 2 thuật toán: • Với m=1000000000, n=1. • Thuật toán 1 thực hiện 1000000000 thao tác mới cho UCLN=1 • Thuật toán 2 chỉ thực hiện 3 thao tác đã cho UCLN=1.

  38. Hàmkiểmtrasốnguyêntố. • FUNCTION Ngto(P:Integer): Boolean; • Var NT: Boolean; I: integer; • Begin • NT:=P>1; • For i:=2 to Trunc(Sqrt(P)) do • If P mod i =0 then • Begin NT:=False; Break End; • Ngto:=NT; • End;

  39. Hàmtínhtổngcácchữsố • Function TongCS(n: Integer): Integer; • Var s, m:Integer; • Begin • m:=n; s:=0; • While m<>0 do • Begin • s:=s+ m mod 10; m:=m div 10; • End; • TongCS:=s;

  40. Mộtsốbàitập. • Bài 1. Phân tích ra thừa số nguyên tố Thuật toán: • If Ngto(n) then writeln(n) Else • Begin m:=n; • For p:=2 to n div 2 do If Ngto(p) then • Begin • While m mod p = 0 do write(p,’.’); • m:= m div p; • End; • End;

  41. Bài 2. Rútgọnphânsố. • Đề bài: Cho phân số a/ b (a, b nguyên, b>0). Tìm c, d nguyên (d>0) sao cho c/ d tối giản và a/b=c/d • + Thuật toán: • Dau:=1; If a<0 then dau:=-1 ; a:=abs(a); • c:=a div UCLN(a,b); • d:=b div UCLN(a, b); • Writeln(dau*c,’/ ‘, d);

  42. Bài 3. Giaithừa. • Cho số tự nhiên n. P=n!. Hỏi: • a/ P có bao nhiêu chữ số không tận cùng. • b/ Số khác 0 tận cùng của P là chứ số nào.

  43. ?

  44. a/ Số chữ số 0 cuối cùng chính là số ước bằng 10 của P! mà p!=a.10k=a.2k.5k. • Do số ước 2 nhiều hơn ước 5, nên số 0 tận cùng là số ước 5 của P. Vậy ta cần tính số lượng ước 5 của P !

  45. Gọi S5 là số lượng ước 5 của P. S5 ? ? ?

  46. Thuật toán a) • Goi S5 là số ước 5 của P • s5:=0; • For m:=5 to n do • Begin • K:=m; • While k mod 5 = 0 do • Begin Inc(s5); k:=k div 5 End; • End; • In ra kết quả : S5.

  47. b) Câu này dễ mắc sai lầm vừa nhân vừa xóa 0 cuối và chỉ giữ lại chữ số khác 0 cuối cùng. + Thuật toán: • - Xóa hết ước 2 (số lượng S2) và ước 5 (số lượng S5). Gọi k=S2-S5 • - Nhân các số còn lại được số p (các phép toán chỉ giữ chữ số cuối) • Tính a=2k . a*p là đáp số

  48. S2:=0; S5:=0; P:=1; • For m:=2 to n do • Begin • K:=m; • While K mod 2 = 0 do Begin inc(so2), k:= k div 2 End; • While K mod 5 = 0 do Begin inc(so5), k:= k div 5 End; • P:=P* K mod 10. • End. • For i:= 1 to so2-so5 do P*2 mod 10

  49. Bài 4. Tính tổng chữ số. (Đề thi HSG thành phố Hà nội) • Một quyển sách có n trang. Hỏi • a/ Tổng tất các chữ số đã ghi trên các trang sách. • b/ Mỗi chữ số xuất hiện bao nhiêu lần.

More Related