SKKN Phát huy tính tích cực, yêu thích lập trình của học sinh thông qua một số bài tập có nội dung thực tiễn trong chương trình Tin học 11

SKKN Phát huy tính tích cực, yêu thích lập trình của học sinh thông qua một số bài tập có nội dung thực tiễn trong chương trình Tin học 11

Do yêu cầu đổi mới về phương pháp dạy học và chương trình Tin học phổ thông. Định hướng đổi mới phương pháp dạy học đã được cụ thể hóa trong chỉ thị của Bộ giáo dục và đào tạo đã nêu: “ Phải phát huy tính tích cực, tự giác, chủ động, sáng tạo của học sinh, phù hợp với đặc trưng của môn học, đặc điểm đối tượng học sinh, điều kiện của từng lớp học; bồi dưỡng cho học sinh phương pháp tự học, khả năng hợp tác; rèn luyện kĩ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui, hứng thú và trách nhiệm học tập cho học sinh.

Môn Tin học phổ thông hiện nay trong trường phổ thông thì yêu cầu kiến thức, kỹ năng trong phần lập trình là rất ít. Bản thân môn Tin học phổ thông không được coi trọng và không có trong danh sách các môn thi tốt nghiệp hay thi vào các trường đại học, cao đẳng.

 Những ứng dụng của Tin học vào thực tiễn trong chương trình và sách giáo khoa, cũng như trong thực tế dạy học Tin học chưa được quan tâm một cách đúng mức và thường xuyên. Trong các sách giáo khoa môn Tin và các tài liệu tham khảo về Tin học thường chỉ tập trung chú ý những vấn đề, những bài toán trong toán học; số lượng ví dụ, bài tập có nội dung liên môn và thực tế trong các sách giáo khoa để học sinh học và rèn luyện còn rất ít.

 Hiện nay Bộ giáo dục vào đào tạo đã thiết kế lại Chương trình đổi mới giáo dục phổ thông (bắt đầu áp dụng trong năm học 2019 – 2020). Trong đó có môn Tin học sẽ là môn học bắt buộc trong nhà trường từ lớp 3 đến lớp 12. Trong đó mảng kiến thức khoa học máy tính (Computer Science – CS) sẽ đóng vai trò trung tâm, vì vậy kỹ năng lập trình sẽ đóng vai trò rất lớn trong Chương trình Tin học phổ thông mới.

 

doc 24 trang thuychi01 22072
Bạn đang xem 20 trang mẫu của tài liệu "SKKN Phát huy tính tích cực, yêu thích lập trình của học sinh thông qua một số bài tập có nội dung thực tiễn trong chương trình Tin học 11", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
MỤC LỤC...1
1. Mở đầu...2
Lí do chọn đề tài.......2
Mục đích nghiên cứu3
Đối tượng nghiên cứu...3
Phương pháp nghiên cứu..3
2. Nội dung.4
2.1. Cơ sở lí luận ........4
2.2 Những quan điểm cá nhân về vấn đề xây dựng hệ thống bài tập có nội dung thực tiễn ......5
2.3 Các giải pháp giải quyết vấn đề....................................................5
2.3.1 Hệ thống bài tập có nội dung thực tiễn..............................................5
Bài tập 1..5
Bài tập 2..7
Bài tập 3..7
Bài tập 4..9
Bài tập 5....10
Bài tập 6....11
Bài tập 7....13
Bài tập 8....15
2.3.2. Một số gợi ý về phương pháp dạy học sử dụng hệ thống bài tập đã được xây dựng ..................................16
2.4. Hiệu quả của sáng kiến kinh nghiệm.............................................................17
3. Kết luận và kiến nghị.....21
3.1. Kết luận..21
3.2. Kiến nghị............21
TÀI LIỆU THAM KHẢO.....23
DANH MỤC SÁNG KIẾN...24
1. Mở đầu
	1.1. Lí do chọn đề tài
Do yêu cầu đổi mới về phương pháp dạy học và chương trình Tin học phổ thông. Định hướng đổi mới phương pháp dạy học đã được cụ thể hóa trong chỉ thị của Bộ giáo dục và đào tạo đã nêu: “ Phải phát huy tính tích cực, tự giác, chủ động, sáng tạo của học sinh, phù hợp với đặc trưng của môn học, đặc điểm đối tượng học sinh, điều kiện của từng lớp học; bồi dưỡng cho học sinh phương pháp tự học, khả năng hợp tác; rèn luyện kĩ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui, hứng thú và trách nhiệm học tập cho học sinh.
Môn Tin học phổ thông hiện nay trong trường phổ thông thì yêu cầu kiến thức, kỹ năng trong phần lập trình là rất ít. Bản thân môn Tin học phổ thông không được coi trọng và không có trong danh sách các môn thi tốt nghiệp hay thi vào các trường đại học, cao đẳng.
 Những ứng dụng của Tin học vào thực tiễn trong chương trình và sách giáo khoa, cũng như trong thực tế dạy học Tin học chưa được quan tâm một cách đúng mức và thường xuyên. Trong các sách giáo khoa môn Tin và các tài liệu tham khảo về Tin học thường chỉ tập trung chú ý những vấn đề, những bài toán trong toán học; số lượng ví dụ, bài tập có nội dung liên môn và thực tế trong các sách giáo khoa để học sinh học và rèn luyện còn rất ít. 
 Hiện nay Bộ giáo dục vào đào tạo đã thiết kế lại Chương trình đổi mới giáo dục phổ thông (bắt đầu áp dụng trong năm học 2019 – 2020). Trong đó có môn Tin học sẽ là môn học bắt buộc trong nhà trường từ lớp 3 đến lớp 12. Trong đó mảng kiến thức khoa học máy tính (Computer Science – CS) sẽ đóng vai trò trung tâm, vì vậy kỹ năng lập trình sẽ đóng vai trò rất lớn trong Chương trình Tin học phổ thông mới.
 Tổng thống Mỹ Barack Obama từng nói: “Đừng chỉ chơi game trên điện thoại, hãy học lập trình ở đó”. Mang đến cho trẻ em cơ hội học lập trình trong chương trình Tin học phổ thông không chỉ giúp chúng thành công trong tương lai nhờ được học những thứ cần thiết mà còn khiến trẻ có kỹ năng tất cả vấn đề tốt hơn. 
 Vì những lí do trên tôi chọn đề tài nghiên cứu của sáng kiến là: 'Phát huy tính tích cực, yêu thích lập trình của học sinh thông qua một số bài tập có nội dung thực tiễn trong chương trình Tin học 11". 
1.2. Mục đích nghiên cứu
Nghiên cứu cơ sở lý luận và thực tiễn của vấn đề rèn luyện cho học sinh năng lực vận dụng kiến thức Tin học để giải quyết một số bài toán có nội dung thực tiễn; xây dựng hệ thống bài tập có nội dung thực tiễn trong dạy học Tin học 11 ở trường THPT, đồng thời đưa ra những gợi ý, lưu ý về phương pháp dạy học hệ thống bài tập đó.
1.3. Nhiệm vụ nghiên cứu
Sáng kiến có nhiệm vụ giải đáp những câu hỏi khoa học sau đây:
- Vai trò và ý nghĩa của việc rèn luyện cho học sinh năng lực vận dụng kiến thức Tin học để giải quyết các bài toán có nội dung thực tiễn như thế nào.
- Nghiên cứu việc xây dựng một hệ thống bài tập có nội dung thực tiễn, nhằm đáp ứng yêu cầu rèn luyện cho học sinh năng lực vận dụng kiến thức Tin học để giải quyết một số bài toán có nội dung thực tiễn.
- Thực nghiệm sư phạm để minh họa tính khả thi và hiệu quả của việc lựa chọn Hệ thống bài tập có nội dung thực tiễn.
1.4. Phương pháp nghiên cứu
 - Nghiên cứu lý luận;
 - Điều tra thực tế;
 - Thực nghiệm sư phạm. 
2. Nội dung
2.1. Cơ sở lý luận
2.1.1. Kỹ năng là gì?
Theo L. Đ.Lêvitôv nhà tâm lý học Liên Xô cho rằng: “Kỹ năng là sự thực hiện có kết quả một động tác nào đó hay một hoạt động phức tạp hơn bằng cách lựa chọn và áp dụng những cách thức đúng đắn, có tính đến những điều kiện nhất định” . Theo ông, người có kỹ năng hành động là người phải nắm được và vận dụng đúng đắn các cách thức hành động nhằm thực hiện hành động có kết quả. Ông còn nói thêm, con người có kỹ năng không chỉ nắm lý thuyết về hành động mà phải vận dụng vào thực tế.
2.1.2. Tại sao nên áp dụng kỹ năng lập trình để giải quyết các bài toán thực tế?
Giáo sư Niklaus Wirth- Cha đẻ của Pascal đã nói rằng:
‘‘ Có người cho rằng Pascal được thiết kế như một ngôn ngữ để giảng dạy. Mặc dù điều này là đúng, nhưng việc sử dụng nó để giảng dạy không phải là mục đích duy nhất. Thực tế, tôi không tin vào sự thành công của việc áp dụng trong khi học các công cụ và phương pháp mà không thể sử dụng để giải quyết các bài toán thực tế”. [1]
2.1.3. Vai trò của việc rèn luyện cho học sinh năng lực vận dụng kiến thức Tin học vào thực tiễn 
 - Lập trình là một kỹ năng quan trọng trong thế kỷ 21. Rèn luyện cho học sinh năng lực vận dụng kiến thức Tin học vào thực tiễn là phù hợp với xu hướng phát triển chung của thế giới và thực tiễn Việt Nam ; là một yêu cầu có tính nguyên tắc góp phần phản ánh được tinh thần và sự phát triển theo hướng ứng dụng cao của Tin học.
 Để thực hiện nguyên tắc kết hợp lí luận với thực tiễn trong việc dạy học Tin học, cần:
 + Đảm bảo cho học sinh nắm vững kiến thức Tin học để có thể vận dụng chúng vào thực tiễn;
 + Chú trọng nêu các ứng dụng của Tin học vào thực tiễn, rèn luyện cho học sinh có những kỹ năng lập trình vững chắc;
 + Chú trọng công tác thực hành tin học trong nội khóa cũng như ngoại khóa
 - Rèn luyện năng lực vận dụng kiến thức Tin học vào thực tiễn, giúp học sinh có kỹ năng thực hành và làm quen dần các tình huống thực tiễn.
2.2. Những quan điểm cá nhân về vấn đề xây dựng hệ thống bài tập có nội dung thực tiễn
Hệ thống bài tập có nội dung thực tiễn trong giảng dạy Tin học 11 với chủ ý làm đậm nét hơn nữa các ứng dụng của Tin học vào thực tiễn. Sáng kiến đưa ra sẽ nhằm vào tính mục đích, tính khả thi, tính hiệu quả của việc xây dựng hệ thống bài tập có nội dung thực tiễn.
 - Mục đích của hệ thống bài tập có nội dung thực tiễn được xác định dựa trên cơ sở những mục đích chung của giáo dục đó là hệ thống bài tập có nội dung thực tiễn với ý nghĩa ứng dụng rõ rệt, thông qua quá trình rèn luyện cho học sinh khả năng và ý thức sẵn sàng ứng dụng Tin học vào thực tiễn.
 - Tính khả thi của Hệ thống bài tập có nội dung thực tiễn được hiểu là khả năng thực hiện được (xây dựng được, sử dụng được) hệ thống bài tập này trong thực tế dạy học ở trường THPT hiện nay.
 - Tính hiệu quả của việc xây dựng hệ thống bài tập có nội dung thực tiễn trong dạy học Tin học được hiểu là sự tiến bộ vững chắc, mức độ thành thạo trong việc giải các bài tập có nội dung thực tiễn của học sinh, hình thành và phát triển ở học sinh thói quen và hứng thú vận dụng kiến thức Tin học vào các tình huống trong học tập, lao động sản xuất và trong đời sống.
2.3. Các giải pháp giải quyết vấn đề
2.3.1. Hệ thống bài tập có nội dung thực tiễn
Bài tập 1. Trả tiền điện
 Cho bảng giá tiền điện sinh hoạt được tính theo giá bán lẻ theo các bậc sau:
Bậc
Số sử dụng (hộ/tháng)
Giá bán (đồng/kWh)
Bậc 1
Cho kWh từ 0 – 50
1.678 
Bậc 2
Cho kWh từ 51 – 100
1.734
Bậc 3
Cho kWh từ 101 – 200
2.014
Bậc 4
Cho kWh từ 201 – 300
2.536
Bậc 5
Cho kWh từ 301 – 400
2.834
Bậc 6
Cho kWh từ 401 trở lên 
2.927
Tính số tiền phải trả cho công ty điện lực của một hộ gia đình trong một tháng. Biết rằng thuế VAT là 10%.
Dữ liệu: Nhập từ bàn phím số nguyên dương N (0<N≤1000) là số kW điện mà một hộ gia đình dùng trong một tháng. 
Kết quả: In ra màn hình ba giá trị tương ứng trên ba dòng, mỗi số gồm hai chữ số thập phân.
Dòng 1: Số tiền tương ứng với giá bán điện của công ty.
Dòng 2: Số tiền tương ứng với thuế VAT .
Dòng 3:Tổng số điện mà hộ gia đình đó phải trả trong tháng đó.
Nhận xét: Đây là một bài toán rất thực tế, gắn liền với thực tiễn, liên quan đến quyền lợi, ý thức, trách nhiệm, nghĩa vụ của mối gia đình. Hiện nay, giá tiền điện sinh hoạt mà mỗi hộ gia đình hải trả hàng tháng được tính giá điện bậc thang, lũy tiến, dùng nhiều trả nhiều.
Thông qua bài này giáo viên cũng giáo dục cho học sinh rằng: chức năng chính của biểu giá điện bậc thang ta thấy chi phí trả tiền điện là rất lớn, qua đây giáo dục cho học sinh ý thức tiết kiệm điện trong tiêu dùng để dành điện cho sản xuất vì điện năng là nguồn năng lượng quý và luôn luôn bị thiếu hụt. Do phải trả tiền nhiều hơn gấp bội khi dùng nhiều thì buộc lòng phải tiết kiệm lại, chứ nếu chỉ có tuyên truyền thì không hiệu có quả.
Chương trình
Program tien_dien;
Var N, G,v,kq:qword;
BEGIN
 writeln(' nhap vao so dien '); readln(N);
 if N<=50 then G:=N*1678 else
 if N<=100 then G:=50*1678+(N-50)*1734 else
 if N<=200 then G:=50*1678+50*1734+(N-100)*2014
 else If N<=300 then G:=50*1678+50*1734+100*2014+(n-200)*2536
else if N<=400 then G:=50*1678+50*1734+100*2014+200*2536+ (n-300)*2834
 else G:=50*1678+50*1734+100*2014+200*2536+ 300*2834+ (n-400)*2927;
 writeln(G);
 v:= (G div 100) *10;
 writeln(v);
 kq:= G +v;
 writeln(kq);
 readln
END.
Bài tập 2. Ngày, tháng, năm
Nhập vào ngày, tháng, năm sinh dương lịch của em rồi cho biết em được sinh vào ngày thứ mấy trong tuần.
Nhận xét: Tôi nghĩ đây là bài toán rất tạo hứng thú lập trình cho học sinh. Ai cũng muốn biết mình hoặc người bạn của mình được sinh khi nào, vào thứ mấy. 
Tôi cung cấp cho học sinh cách tính thứ trong tuần như sau:
Nếu tháng <3 thì tháng:=tháng + 12 và năm:=năm – 1;
Thứ:=abs(ngày+2.tháng+3(tháng+1) div 5 + năm+năm div 4) mod 7;
Thứ=0 thì in ra chủ nhật
Chương trình
Progam thu;
var thu,ngay,thang:byte; nam:integer;
begin
readln(ngay,thang,nam); nam:=1900+ nam mod 1900;
if thang<3 then
begin
thang:=thang+12; nam:=nam-1;
end;
thu:=abs(ngay+2*thang+3*(thang+1) div 5+nam+nam div 4) mod 7;
if thu=0 then writeln('chu nhat') else writeln( thu+1);
readln
end.
Bài tập 3. Đọc số
Cho trước một số nguyên dương N( N<1000). Hãy đưa ra cách đọc số đó.
Dữ liệu vào: File văn bản DOCSO.INT chứa một số nguyên dương N.
Dữ liệu ra: File văn bản DOCSO.OUT chứa xâu đọc tương ứng.
Ví dụ: 145 đọc là : mot tram bon muoi lam.
Nhận xét: Bài toán này xuất phát từ thực tế các em đã được học trong toán rất cơ bản, và ai cũng biết cách đọc và quy luật đọc. Tạo hứng thú các em vận dụng kiến thức môn tin học vào lập trình để giải quyết bài toán.
Chương trình
program bai3;
uses crt;
const a:array[1..9] of string =('mot','hai','ba','bon','nam','sau','bay','tam','chin');
var st: string;i,n: longint; f1,f2:text;
function chuc(x: byte): string;
var s:string;
 begin
 s:= '';
 if x <10 then s:= s+'linh'+ ' '+a[x mod 10]
 else
 begin
 if (x < 20) or (x=10) then begin
 s:= 'muoi ';
 if x mod 10 =5 then s:= s+'lam '
 else s:= s+' '+ a[x mod 10] end
 else
 begin
 s:= s+' '+a[ x div 10] +' muoi';
 if x mod 10= 4 then s:= s+' tu' else
 if x mod 10 = 5 then s:= s+' lam' else
 s:= s+ ' '+a[x mod 10];
 end;end;
 chuc:=s;
 end;
begin
 assign(f1,'docso.inp'); reset(f1);
 assign(f2,'docso.out');; rewrite(f2);
 readln(f1,n); st:='';
 if n<10 then writeln(f2,a[n])
 else
 begin
 if n >= 100 then
 begin
 if n mod 100 =0 then st:= st+ a[n div 100]+' tram'
 else
 st:= st+a[n div 100]+ ' tram'+chuc(n mod 100) ;end
 else
 st:= chuc(n);
 writeln(f2,st); end;
 close(f1); close(f2);
end.
Bài tập 4. Can-Chi 
Theo dương lịch năm được biểu diễn bằng một số nguyên. Theo âm lịch năm được gọi theo can và chi. Ví dụ năm dương lịch 2019 được gọi là năm Kỉ Hợi. Trong đó Kỉ là can và Hợi là chi.
Có tất cả 10 can: Giáp, Ất, Bính, Đinh, Mậu, Kỉ, Canh, Tân, Nhâm, Quý.
Có tất cả 12 chi: Tí, Sửu, Dần, Mão, Thìn, Tỵ, Ngọ, Mùi, Thân, Dậu, Tuất, Hợi. 
Yêu cầu: Hãy nhập vào một năm dương lịch và đưa ra màn hình tên gọi năm âm lịch tương ứng ( dưới dạng tiếng Việt không dấu)
Nhận xét: Đây là một bài toán xem ra vô cùng đơn giản. Tuy nhiên, nó chỉ dễ với một số người, đặc biệt là người lớn. Các bạn trẻ hiện nay hầu như chỉ biết đến 12 con giáp, tương ứng với 12 Chi, chứ để tính Can thì hầu như các bạn không để ý tới. Để gợi ý cho học sinh biết làm bài này thì tôi gợi ý để các em học sinh tìm ra quy luật gán mảng hằng tương ứng với các chỉ số
Ví dụ: Năm 2019 là năm Kỉ Hợi. 
Can=2019 mod 10-----> 9------> Kỉ. Nên ta sẽ đánh dấu mảng Can với Can[0]= ‘Canh’;
Chi=2019 mod 12-----> 3------> Hợi. Nên ta sẽ đánh dấu mảng Chi với Chi[0]= ‘Than’;
Chương trình
program bai1;
uses crt;
const can:array[0..9] of string=('Canh','Tan','Nham','Quy','Giap','At','Binh','Dinh','Mau','Ki');
 chi:array[0..11] of string=('Than','Dau','Tuat','Hoi','Ti','Suu','Dau','Mao','Thin','Ty','Ngo','Mui');
var n:longint;
begin
 readln(n);
 if n > 0 then
 writeln(can[n mod 10],' ',chi[n mod 12]);
readln
end.
Bài tập 5. Chuẩn hóa xâu họ tên
Nhập từ bàn phím xâu hoten họ và tên đầy đủ của một người dưới dạng chữ in thường. Thực hiện chuẩn hóa xâu trên và in kết quả ra màn hình.
Nhận xét: Giáo viên nhắc lại cho học sinh xâu họ tên được chuẩn hóa theo Tiếng Việt là xâu: mỗi từ được phân cách nhau bởi một khoảng trắng và các kí tự đầu từ của tên người hải được viết hoa. Như vậy việc đầu tiên là ta thực hiện xóa các khoảng trắng không hợp lệ ở đầu xâu, cuối xâu, giữa xâu rối thực hiện chuyển các kí tự đầu từ sang in hoa.
Chương trình:
Program chuan_hoa_xau;
Var hoten:string; i,n:byte;
begin
Writeln(' nhap xau ho ten'); readln(hoten); 
while hoten[1]=' ' do delete(hoten,1,1);
while hoten[length(hoten)]=' ' do delete(hoten,length(hoten),1);
while pos(' ',hoten)0 do delete(hoten,pos(' ',hoten),1);
hoten[1]:=upcase(hoten[1]);
for i:=2 to length(hoten)-1 do
 if hoten[i]=' ' then hoten[i+1]:=upcase(hoten[i+1]);
 writeln( ' xau chuan hoa la: ', hoten);
 readln
 end.
Bài tập 6. Bán hàng qua mạng[6]
	Trang là một học sinh THPT trường X. Là một học sinh nhưng em có sở thích và niềm đam mê trong lĩnh vực kinh doanh qua mạng. Mặt hàng em bán là bút bi. Qua một thời gian kinh doanh, đơn hàng ngày càng tăng, số lượng bút bi nhập về ngày càng nhiều. Để có thể nhanh chóng giao hàng cho khách, Trang muốn sắp xếp những chiếc bút theo màu sắc. Trang có dãy bút bi gồm các màu Xanh, Tím, Hồng. Vì số lượng bút là rất lớn và không có nhiều thời gian nên Trang muốn nhờ các bạn học sinh giỏi bộ môn Tin tham gia kỳ thi chọn Học sinh giỏi cấp tỉnh năm 2018 sắp xếp giúp. Em hãy giúp Trang sắp xếp lại dãy bút bi theo quy luật Xanh - Hồng - Tím. 
Dữ liệu vào: cho bởi file SORT.INP gồm 2 dòng:
Dòng 1: Ghi số N là số lượng bút bi (1 ≤ N ≤ 106).
Dòng 2: Gồm N kí tự mô tả dãy bút bi ( X – Xanh, T – Tím, H – Hồng), các màu được phân cách nhau bởi một dấu cách.
Dữ liệu ra: Ghi ra file SORT.OUT kết quả của dãy sau khi đã được sắp xếp đúng thứ tự, các kí tự được phân cách bởi một dấu cách.
SORT.INP
SORT.OUT
10
X H X X X H X X X X
X X X X X X X X H H
Nhận xét: Ớ bài tập này học sinh bắt đầu làm quen với dạng bài tập khó hơn, kết hợp thuật toán sắp xếp và dữ liệu kiểu tệp. Mỗi loại màu bút bi nhập vào sẽ được lưu vào một giá trị của mảng B. Sắp xếp mảng B rồi in ra theo thứ tự.
Chương trình
Const fi='sort.inp'; 
fo='sort.out'; maxxx=1000005;
 var i,x:int32; S:array[1..maxxx] of char; 
 f1,f2:text; ch:char;
 m,n,j,tg:longint; B:array[1..maxxx] of byte;
procedure doc;
begin
assign(f1,fi); reset(f1); assign(f2,fo); rewrite(f2);
readln(f1,n); m:=n*2;
for i:=1 to m do read(f1,S[i]);
end;
procedure xuli;
begin
 x:=0;
for i:=1 to m do
begin
if S[i] = 'X' then
 begin
x:=x+1;
B[x]:=1;
 end else
if S[i] ='H' then
begin
x:=x+1;
B[x]:=2;
end else
if S[i] ='T' then
begin
x:=x+1;B[x]:=3;
 end;
end;
for i:=1 to n do
 for j:=i+1 to n do
if B[i]>B[j] then
 begin
tg:=B[j];
B[j]:= B[i];
B[i]:=tg;
end;
for i:=1 to n do
if B[i]=1 then write(f2,'X ')
 else if B[i]=2 then write(f2,'H ')
 else if B[i]=3 then write(f2,'T ');
 end;
begin
doc; xuli;
close(f1);close(f2);
end.	
Bài tập 7. Mật mã
Nam có một chiếc điện thoại Iphone 7, để sử dụng bảo mật bằng vân tay Nam phải khai báo thêm mật mã bằng số. Mật mã bằng số của Iphone là một dãy gồm 4 chữ số. Do phần lớn dùng vân tay nên mật mã bằng số Nam gần như không sử dụng đến. Để không bị quên mật mã này Nam phải mã hóa dãy số đó và ghi vào sổ cất giữ.
Cách thức mã hóa của Nam như sau. Nam lấy lần lượt 4 chữ cái bất kỳ từ A àZ trong bảng chữ cái tiếng Anh đại diện lần lượt cho 4 chữ số trong mật mã. Chữ cái nhỏ nhất đại diện cho chữ số đầu tiên, chữ cái lớn tiếp theo đại điện cho chữ số thứ 2, cứ như thế chữ cái lớn nhất sẽ đại diện cho chữ số cuối cùng. Số lượng các chữ cái này đúng bằng độ lớn của số mà nó đại diện. Để gây nhiểu và tăng bảo mật Nam còn dùng thêm nhiều chữ cái khác nhau, các chữ cái gây nhiểu luôn luôn có số lượng lớn hơn 9. 
Sau đó Nam ghi ngẫu nhiên các chữ cái trên vào sổ và cất giữ chúng. 
Yêu cầu: Hãy xây dựng chương trình giúp Nam giải ra mật mã của Iphone mà Nam đã lưu trong sổ. Biết rằng các chữ số trong mật mã luôn lớn hơn 0, tổng số lượng các chữ cái gây nhiễu luôn nhỏ hơn hoặc bằng 104.
Dữ liệu: Vào từ file văn bản MATMA.INP có nhiều dòng chứa các chữ cái từ A àZ.
Kết quả: Đưa ra file văn bản MATMA.OUT mật mã bằng chữ số của Nam trước khi mã hóa.
MATMA.INP
MATMA.OUT
MAMCM
MCDAYCYYY
ZZCZYYYC
YYAYQCQQAQQMAQQ
QQDBBCFPPP
ZZCZPAPPAMMAQCQPPP
PZAZZQMMQQMZZ
PYZCZZAYYDCDQPACFFG
2431
	Nhận xét: Trong bài tập này khi mới nhìn vào học sinh sẽ cảm thấy khó hiểu. Giáo viên gợi ý dùng đếm phân phối đếm từng kí tự nhập vào. Rồi in ra số lượng 4 kí tự xuất hiện ít nhất theo yêu cầu của đề bài.
 Chương trình
program matkhau;
uses crt;
var dem:array['A'..'Z'] of longint;
 a:array [1..10000] of char;
i,d: longint; j: char; s:string; f1,f2:text;
begin
 clrscr;
 assign(f1,'matma.inp'); reset(f1);
 assign(f2,'matma.out'); rewrite(f2);
 fillchar(dem,sizeof(dem),0); i:=0;
 while not eof(f1) do
 begin
 while not eoln(f1)do
 begin
 inc(i); read(f1,a[i]);
 inc(dem[a[i]]); end; readln(f1);
 end;d:=0;
 for j:='A' to 'Z' do
 begin
 if (dem[j]>= 1) and (dem[j]<=9)then begin write(f2,dem[j]);
 inc(d);end; if d=4 then break;
 end;
 close(f1); close(f2);
end.
Bài tập 8. Trạm phát sóng 
Nhà cung cấp dịch vụ viễn thông Mobi đã khảo sát số lượng người sẽ dùng dịch vụ trên một con đường thẳng mới được xây dựng và đánh dấu lại những vị trí trên con đường này. Đầu con đường được đánh tọa độ bắt đầu từ 0. Tại vị trí có tọa độ X (đơn vị chiều dài) có số lượng người sẽ sử dụng dịch vụ là Y. Trước mắt, nhà cung cấp dịch vụ cần đặt một trạm phát sóng có bán kính phủ sóng là K đơn vị chiều dài để phủ sóng cho một số người sử dụng dịch vụ trên con đường này.
Yêu cầu: Bạn hãy xác định vị trí đặt trạm phát sóng sao cho trạm có thể phục vụ được số lượng người sử dụng nhiều nhất có thể.
Dữ liệu: cho trong file văn bản MOBI.INP có cấu trúc như sau:
Dòng đầu tiên ghi hai số nguyên N và K (0<N ≤106, 0<K≤2*106), trong đó N là số điểm dân cư đã được đánh dấu, K là bán kính phủ sóng của trạm.
Trong N dòng tiếp theo, dòng thứ i (i=1..N) ghi hai số nguyên X[i] và Y[i] cho biết tại vị trí X[i] có số lượng người dùng là Y[i] (0≤ X[i] ≤106, 0≤Y[i] ≤104). Các số trên cùng dòng viết cách nhau ít nhất một dấu cách.
Kết quả: Ghi ra file văn bản MOBI.OUT một số nguyên cho biết số người dùng nhiều nhất sẽ được phục vụ.
Ví dụ:
MOBI.INP
MOBI.OUT
Giải thích
4 3
7 4
15 10
2 2
1 5
11
Chọn vị trí trạm tại X=4. Như vậy có thể phủ sóng đến các vị trí có toạ độ 1, 2, 7. Số lượng người sử dụng lớn nhất là 11.
Nhận xét: Đọc file vào mảng Y, với Y[i

Tài liệu đính kèm:

  • docskkn_phat_huy_tinh_tich_cuc_yeu_thich_lap_trinh_cua_hoc_sinh.doc