1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Chuyên đề RÈN LUYỆN KỸ NĂNG LẬP TRÌNH Cho Hocj sinh giỏi tin THCS

104 996 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 104
Dung lượng 816 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.. Giải một bài, gợi ý nhiều bài .• Có nhiều bài toán tuy phát biểu khác nhau n

Trang 1

Chuyên đề :

RÈN LUYỆN KỸ NĂNG LẬP TRÌNH

Cho HSG tin THCS

Trang 2

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

Trang 3

I Rèn luyện PP tìm tòi thuật toán

Trang 4

Chương trình=Thuật toán+CTDL

Trang 5

• 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.

Trang 6

• Làm quen và rèn luyện tư duy thuật toán cho

học sinh mới bắt đầu học lập trình là một yêu cầu thiết yếu

• Không nên vội vàng cho học sinh làm việc

trên máy tính luôn khi mới bắt đầu học

Trang 9

Ví dụ: Kiểm tra số n có nguyên tố?

Phương án thô:

Nhập n

Có ước Thực sự

n

N không NT

N là sô NT

+ -

KT

Trang 10

+

Trang 11

-• 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

+ -

+

Trang 12

4 Giải một bài, gợi ý nhiều bà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ự

Trang 13

+ Khởi tạo giá trị ban đầu

+ Duyệt, lưu lại giá trị tối ưu hơn

Trang 14

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

Trang 15

II Rèn luyện phong cách lập trình.

.

CHƯƠNG TRÌNH=TT+CTDL+NTLT

Trang 16

• 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ó.

Trang 17

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,

Trang 18

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ớ

Trang 19

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ừ

Trang 20

2 Phong cách viết mã 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

Trang 21

• 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

Trang 22

• 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ý

Trang 27

e) Dùng biế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.

{ đếm số cách thực hiện}

• Procedure Try( i: Integer); {Tìm từ

I }

Trang 28

3 Tối ưu sự thực thi mã

Trang 30

bkt := False;

Break;

Trang 31

Nhiều kết quả xử lý ngay khi

• s := s+a[i];

• end;

Trang 33

4 Kiểm nghiệm chương trình với các bộ 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

Trang 34

II Các dạng toán bồi dưỡ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.

Trang 35

1 Các bài toán số 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

Trang 36

Thuật toán tìm UCLN

• Cho 2 số nguyên m, n>0 UCLN(m,n)=?

Trang 37

• 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)

Trang 38

• 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

Trang 39

Hàm kiểm tra số nguyên tố.

• FUNCTION Ngto(P:Integer): Boolean;

• Var NT: Boolean; I: integer;

Trang 42

Bài 2 Rút gọn phân số.

• Đề 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);

Trang 43

Bài 3 Giai thừ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

Trang 44

?

Trang 45

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 !

Trang 46

?

?

Trang 48

• 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ố

Trang 51

• Thuật toán :

• + Lập hàm TongCS(K) để tính tổng các

chữ số trong K

• + Dùng mảng a[0], a[1],…,a[9], trong đó

a[i] số lần xuất hiện của chữ số i:

• + Khởi tạo

• Nhập n;

• Sum:=0; fillchar(a, sizeof(a),0);

Trang 53

• Anh / Chị hãy phát biểu một bài

toán có cùng các giải.

Trang 54

Bài 5 Số siêu nguyên tố

Đề bà i :Số P gọi lầ số siêu nguyên tố, nếu

nó nguyên tố và khi ta lần lượt bỏ các chữ

số ở hàng đơn vị từ tái qua phải thì số mới

nhận được vẫn là một số nguyên tố.

• Ví dụ: 239 là số siêu nguyên tố vì 239 là số

nguyên tố và 23, 2 cũng là các số nguyên tố , còn 431 không phải là số siêu nguyên tố Cho một số n (0<n<10) Hãy đếm số lượng

Trang 55

???

Trang 56

• Phương án 1: Duyệt toàn bộ:

+ Tìm số nhỏ nhất lớn nhất có n chữ số

Chẳng hạn với n=3 thì số nhỏ nhất và lớn nhất có 3 chữ số là: n1=100 và n2=999

+ Dùng một biến chạy p:

For p:= n1 to n2 do

If p thỏa mãn then tăng biến đếm

+ Thuật toán này cũng được 40 % số test

Trang 57

Suy nghĩ thêm về ví dụ:

+ Khi n=1 thì các số 2, 3 , 5, 7 là số nguyên

tố => có 4 số siêu nguyên tố có 1 chữ số+ Khi n=2 thì có các số siêu nguyên tố có 2 chữ số: 23, 29, 31, 37, 53, 59, 71, 73, 79

Do đó xuất phát từ số siêu nguyên tố có 1

Trang 59

Begin if NT(a[k]*10+c[g]) then

Begin inc(tg); b[tg]:= NT(a[k]*10+c[g]) End

End;

a:=b;Slg:=tg; tg:=0;

Until scs=n.

Trang 60

• Anh/Chị hãy phát biểu một bài

toán mà có thể áp dụng thuật

toán vừa trình bày

Trang 61

• Ta có thể nêu các bài toán tương tự sau:

Số n gọi là số SNT phải nếu n là NT và khi

ta lần lượt bỏ đi các chữ số bên trái thì số còn lại vẫn là một số nguyên tố

Vd: n=317 là SNT phải vì 317 , 17 , 7 là

các số NT

Yêu cầu cho N đếm số lượng SNT phải có

N chữ số

Gọi số SNT như trong bài 5 là số SNT trái,

còn N gọi là SNT nếu nó vừa siêu NT trái vừa SNT phải Tính số lượng các SNT có

Trang 62

Kiểm tra tinh đơn điệu của dãy.

Tìm kiếm trên dãy…

Trang 63

Bài 1 Tìm tổng max

Đề bài: Cho dãy n số nguyên dương a1, a2,

…an Hãy tìm 2 số ai, aj, sao cho i≠j và

ai+aj đạt max

Trang 64

???

Trang 65

• Thuật toán 1: Duyệt toàn bộ:

+ Max:=a1+a2;// Khởi tạo giá trị ban đầu

+ For i:=1 to n-1 do

For j:=i+1 to n do

If Max<ai+ aj then Max:=ai+aj //Cập nhật

Thuật toán này có độ phức tạp O(n2)

• Khi n=10000, thuật toán không hiệu quả

Trang 67

Tốt hơn được không?

???

Trang 69

?

Trang 70

• Thuật toán 4 (Xử lý luôn khi đọc dữ liệu)

• +Readl(f,n) {n >1}; Read (f, a,b);

• {gọi max1, max2 là số lớn và bé trong a,b}

• +If a>b then Begin max1:=a; max2:=b End

• Else Begin max1:=b; max2:=a End

• + For i:=3 to n do

• Begin

• Read(f, c);

• If c>= max1 then

• Begin max2:=max1; max1:=c End

• Else If c>= max2 then max2:=c;

Trang 71

Anh /Chị hãy phát biểu bài toán tương tự …và trình bày thuật

toán giải nó.

.

Trang 72

Bài toán cho tổng 3 số.

Tìm tổng max của ai+ aj + ak (I, j, k khác nhau)

Cho hs trình bày các thuật toán tương tự

và đánh giá hiệu quả các thuật toán

Trang 73

Bài 2 Dãy đối xứng

• Ví dụ: Dãy 1 2 1 2 2 thì cần thêm 1 2 1

Trang 74

?

Trang 75

• Phân tích:

• Số phần tử thêm vào ít nhất nếu đoạn sau

cùng tạo thành đoạn đối xứng là lớn nhất

+ Tìm I nhỏ nhất sao cho ai, ai+1,…, an đx

+ Thêm tiếp vào phía sau: ai-1 ai-2,…a1

Trang 77

Bài 3 Bao nhiêu điểm

Đề bài:

• Trong một cuộc thi đấu thể thao n người tham

gia Người thứ I có điểm là ai Biết rằng có đủ các giải nhất ,nhì, ba và những người có điểm ngang nhau có giải như nhau và ngược lại An được giảI 3 Hỏi số điểm của An là bao nhiêu.

• Ví dụ: Input n=6, a: 10 9 1 7 3 10 7

• Output: 7

Trang 78

?

Trang 80

• Có thuật toán tốt hơn ?.

+ Tìm max1 (O(n))

+ Tìm max2< max1 (O(n))

+ Tìm max3< max2 (O(n))

Trang 81

Hãy phát biểu mở

rộng bài toán!

Trang 82

• Bài toán tổng quát:

• Cho dãy n các số nguyên dương Biết

rằng trong dãy tồn tại k giá trị khác nhau

• Hỏi khi sắp theo thứ tự giảm dần thì phần

tử lớn thứ k bằng bao nhiêu? (k=3 là

trường hợp bài toán trên)

Trang 83

Bài 4 Dãy số Fibonacci

• Đề bài Cho dãy sô Fibonacci 1, 1, 2, 3,

5….Ta thành lập dãy số mới bằng cách lần

lượt thay mỗi số hạng bằng số dư của số hạng

đó khi chia cho 100.

• 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233

• Dãy số mới nhận được sau khi thay là:

• 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 44, 33

• Số hạng thứ n trong dãy mới là số nào?

• Có bao nhiêu giá trị khác nhau trong dãy số

mới?

Trang 84

???

Trang 85

Thuật toán (lùa bò vào chuồng)

• +Dùng mảng : a[0], a[1], a[2],…, a[99];

• A[i]=0 nếu I không xuất hiện trong dãy rút gọn),

a[i]=1 nếu I xuất hiện trong dãy.

+ If (n=1) or (n=2) then writeln (1,’ ‘, 1);

Else Begin a:=1; b:=1; d:=2;

Repeat Inc(d);

I c:=(a+b) mod 100; a:=b;b: =c;

If a[c] =0 then a[c]:=1;

Until d=n;

End; {In ra C, a[0]+a[1]+…+a[99]}

Trang 86

5 Dãy tăng

• Cho một dãy các số nguyên a1, a2, …an.

• Yêu cầu: Hãy cho biết:

• a) Dãy có tăng hay giảm?

• b) Tìm một đoạn dài nhất các phần tử liên

tục tăng

• c) Tìm một đoạn dài nhất các phần tử liên

tục giống nhau

Trang 87

6 Tìm UCLN, BCNN của dãy

Đề bài: Cho dãy số nguyên dương a1, a2, ,

an Hãy tìm UCLN, BCNN của dãy

Trang 88

3 Nhóm các bài toán xử lý xâu

• Để giải các bài toán về xâu cần cho học

sinh nắm vững các hàm, thủ tục xử lý xâu như hàm COPY(), LENGTH(), INSERT(), STR() , VAL()…

Trang 89

Bài 1 Tìm số (Đề thi HSG Hà nội 2011)

Đề bài:

• Cho một xâu S, trong đó có chứa một số cụm

số Không có quá 6 chữ số liên tuc trong S.

• Hãy tìm xâu con của S, biểu diễn một số

nguyên tố lớn nhất.

• Ví dụ S = ‘tesst1234#password5426’ Số

cần tìm là 23.

Trang 90

???

Trang 91

• Thuật toán 1: Giả sử xâu đã cho là S,

• + Tạo mảng so[1], so[2],,,lần lượt copy

được từ các cụm số trong S

• +Với mỗi s[i] dùng 2 biến chạy l, r để tách

ra một xâu con của so[i] từ vị trí l đến vị trí

j và lưu lại số NT max trong so[i] rồi số

sánh với các số nguyên tố trong so[j]

khác

Trang 92

• Ví dụ S = ‘tesst1234#password5426’

• So[1]=234; So[2]=5426;

• Số nguyên tố lớn nhất trong So[1] là 23.

• Số nguyên tố lớn nhất trong So[2] là 5

• Vậy đáp số là 23.

Trang 93

Thuật toán 2 (không lưu mảng các số)

• Khởi tạo: S:= ‘ ‘+S+ ‘ ‘; SoNgtmax:=-1

• For i:=2 to length(s) do if (S[i] in [0 9]) and

S[i-1] not in [0 9] then begin j:=I; repeat

inc(j) until not S[j] in [0 9] or (j> length(s)); so:=copy(S, I, j-i)

If SoNgtmax< max(so) then

SoNgtmax:=max(so);

End;

{ Function max(so: string[9]): integer, cho số

Trang 94

Có bài toán tương tự nào

không?

Trang 95

Bài 2 Sắp xếp số

• Cho xâu S chỉ gồm các chữ cái tiếng anh

thường và chữ số Các chữ số kế tiếp nhau

trong S tạo thành một số tự nhiên

Các kí tự khác giữ nguyên thứ tự Giả thiết mỗi xâu con của S có không quá 6 chữ số liên tục.

Output:t0a46ui148t994x

Trang 96

• Thuật toán: S= t994a0046ui00t148x

• + Tách số và chèn dấu * vào vị trí số:

so[1]=994, so[2]=0046, s0[3]=00, so[4]= 148

 S=t*a*ui*t*x

+ Chuẩn và sắp sếp tăng:

so[1]=0, so[2]=46, so[3]=148, so[4]= 994

+ Lần lượt thay dấu * bởi so[1], so[2],…

Trang 97

?Anh / chi hãy phát biểu vài bài toán có

cùng các giải.

Trang 98

3 Mật khẩu

Cho trước một xâu S bao gồm chữ cái hoa,

chữ cái thường và chữ số

Yêu cầu:

• Chọn một xâu con (gồm các ký tự liên tục)

của S có độ dài ngắn nhất sao cho xâu con vừa chọn có thể dùng làm một mật khẩu an toàn

• ( nghĩa là trong xâu con đó có đủ 3 loại chữ cái

in, chữ cái thường , chữ số và đô dài mk ≥ 6)

Trang 99

Thuật toán

• Đây là bài toán đơn giản:

• Luui:=1; luuj:=length(s)

• For i:=1 to length(s)-5 do

• For j:=i+5 to length(s) do

• Begin x:=copy(s,I, j-i+1);

• If OK(x) then if j-i+1=6 then

• begin luui:=i; luuj:=j Break; End

• else Capnhat( luui, luuj)

Trang 100

• ?Anh/ Chi hãy phát biểu bài toán mới!

Trang 101

• Yêu cầu : Hãy tô một số hạt màu trắng thành

màu B, R, hoặc Y để trên vòng xuyến có số hạt cùng màu là nhiều nhất

• Ví dụ S=WRBBBWWYYRWRW Ta tô W-> R

• khi đó S=RRBBRRYYRRRR Đ/s 6

Trang 102

Thuật toán

• + Nhân đôi S:=S+S;

• + Bước1: Tô tất hạt W thành B Tìm đoạn

dài nhất các phần tử màu B liên tục (S1)

Trang 103

Tóm tắt:

Khi bắt đầu giảng dạy môn thuật toán và lập trình cho học sinh THCS, GV cần :

Rèn luyện tư duy thuật toán tốt cho HS

Rèn luyện cách trình bày một chương

trình.

Rèn luyện tính sáng tạo, chặt chẽ, tối ưu.

Trang 104

Chúc anh/chị có nhiều

sáng tạo trong giảng

Ngày đăng: 20/05/2015, 13:49

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w