cs4s số 1(8) 2016

45
2016 Dy snhphân không cn máy tính? Tổng quan môi trường lp trình Scratch Bn cht của tư duy máy tính

Upload: bui-viet-ha

Post on 22-Jan-2018

197 views

Category:

Education


3 download

TRANSCRIPT

Page 1: CS4S Số 1(8) 2016

2016

Dạy số nhị phân không cần máy

tính?

Tổng quan môi trường lập trình

Scratch

Bản chất của tư duy máy tính

Page 2: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

2 | P a g e

Mục lục

Vì sao CS4S? .................................................................................................................. 3

Bản chất của tư duy máy tính ......................................................................................... 4

The nature of computational thinking ............................................................................ 4

Chương trình khung và chi tiết cho môn Khoa học máy tính trong nhà trường ............ 8

Thuật toán mã hóa Học sinh & Giáo viên trong các phần mềm quản lý nhà trường phổ

thông ............................................................................................................................. 11

CHỦ ĐỀ 1: HỆ NHỊ PHÂN ......................................................................................... 18

Tổng quan Scratch ........................................................................................................ 26

Xếp số thứ tự trong ma trận vuông ............................................................................... 39

Danh sách cộng tác viên CS4S ..................................................................................... 45

Page 3: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

3 | P a g e

Vì sao CS4S?

Trên tay các bạn là số đầu tiên của ấn phẩm điện tử CS4S: Computer Science for

Schools có thể dịch là "Khoa học máy tính trong nhà trường". Vậy CS4S ra đời

nhằm mục đích gì và vì sao nó lại ra đời tại điểm này?

Đối tượng của CS4S

Đối tượng của CS4S trước tiên dành cho các giáo viên bộ môn Tin học đang giảng

dạy môn học này trong các nhà trường phổ thông và đại học, cao đẳng.

Tuy nhiên ấn phẩm không chỉ hướng đến đội ngũ giáo viên tin học mà tất cả giáo viên

có quan tâm đến lĩnh vực này, đến việc ứng dụng CNTT trong giảng dạy.

Đối tượng chính, đông đảo của CS4S chắc chắn phải là các em học sinh, sinh viên say

mê CNTT, say mê lập trình, say mê với các ứng dụng đa dạng của CNTT trong cuộc

sống.

Mục đích của CS4S

Mục đích chính của ấn phẩm CS4S là tuyên truyền, hỗ trợ, quảng bá cho các chương

trình, định hướng giảng dạy, nghiên cứu môn Tin học trong nhà trường, nhằm giúp

thêm cho giáo viên và học sinh có thêm thông tin, kiến thức và định hướng cho môn

học này.

Hiện trạng của môn Tin học trong nhà trường Việt Nam hiện nay:

- Là môn học có chương trình không đồng bộ, chắp vá và lạc hậu với thực tế.

- Đội ngũ giáo viên Tin học không được coi trọng, ít có điều kiện đào tạo và cập nhật

kiến thức mặc dù bản thân ngành CNTT, ICT là ngành có sự phát triển nhanh nhất

trên thế giới.

- Môn Tin học luôn là môn học phụ, do đó việc học tập, giảng dạy môn học này có rất

nhiều bất cập trên thực tế.

Yêu cầu thiết lập lại chương trình môn Tin học, nâng cao trình độ giáo viên Tin học,

nâng cao vai trò của môn học này trong nhà trường là yêu cầu cấp bách. CS4S ra đời

với mục đích cùng tham gia vào quá trình thay đổi này.

Vì sao lại là Computer Science mà không là IT hay ICT

Đây là câu hỏi rất thú vị, chúng tôi sẽ lần lượt trả lời trong các bài viết của CS4S.

CS4S phát hành như thế nào?

Dự kiến CS4S sẽ được phát hành 1 tháng 1 số, ấn phẩm sẽ là điện tử và hoàn toàn

miễn phí cho cộng đồng.

Tuy nhiên việc phát hành các số cụ thể còn phụ thuộc

Liên hệ với CS4S

Hòm thư chính thức của CS4S sẽ là [email protected].

Page 4: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

4 | P a g e

Bản chất của tư duy máy tính The nature of computational thinking

Bài viết này là bản dịch nhanh từ 1 tài liệu có tên Computational Thinking. A Guide for Teacher, nhóm tác giả là các chuyên gia về chương trình môn Tin học trong

nhà trường của Anh quốc do Simon Humphreys thực hiện. Bản dịch này là chương đầu tiên của bài báo trên.

Bản dịch của bạn Phạm Thị Nga, giáo viên tin trường chuyên Lam Sơn, Thanh Hoá.

Bản chất của tư duy máy tính

Tư duy máy tính cung cấp nền tảng mạnh mẽ để nghiên cứu tính toán, có ứng dụng

rộng rãi không chỉ ở lĩnh vực tính toán. Đó là quá trình nhận biết các khía cạnh của

tính toán trong thế giới xung quanh chúng ta, các công cụ ứng dụng và kỹ thuật từ

máy tính để hiểu và giải thích lý do về hệ thống và các quá trình tự nhiên, xã hội, nhân

tạo. Nó cho phép học sinh giải quyết bài toán, chia chúng thành những phần có thể

giải quyết và đưa ra các thuật toán để giải quyết chúng. Thuật ngữ tư duy máy tính lần

đầu tiên được sử dụng bởi Seymour Papert, mặc dù Giáo sư Jeannette Wing phổ biến

rộng rãi các ý tưởng trong việc ủng hộ tư duy máy tính cho tất cả các tân sinh viên đại

học (Wing, 2006). Bà định nghĩa tư duy máy tính là "... các quá trình suy nghĩ tham

gia xây dựng nên các bài toán và lời giải của nó mà các lời giải được mô tả trong một

dạng có thể được thực hiện bởi một trung gian xử lý thông tin một cách hiệu quả"

(Cuny, Snyder, Wing, 2010, cited in Wing, 2011, p.20) và “lời giải có thể được mô tả bởi người

hoặc máy, hoặc phổ biến hơn là bởi sự kết hợp của người và máy.” (Wing, 2011, p. 20).

Trọng tâm rõ ràng tập trung vào quá trình suy nghĩ của học sinh, không phải là sản

phẩm của giả tưởng hay bằng chứng. Tư duy máy tính là sự phát triển của các kĩ năng

suy nghĩ, nó hỗ trợ cho việc học tập và hiểu biết.

Các khái niệm của tư duy máy tính

Tư duy máy tính là một quá trình nhận thức hay tư tưởng liên quan đến suy luận logic

để giải bài toán và các vật phẩm (artefacts), các thủ tục, hệ thống được hiểu rõ hơn.

Nó bao gồm:

Khả năng suy nghĩ thuật toán;

Khả năng suy nghĩ về các điều kiện phân chia;

Khả năng suy nghĩ về sự khái quát, xác định và cách sử dụng các dạng mẫu

Khả năng suy nghĩ trừu tượng, lựa chọn các trình bày tốt

Khả năng suy nghĩ về các điều kiện đánh giá, ước lượng.

Page 5: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

5 | P a g e

Các kĩ năng tư duy máy tính cho phép học sinh tiếp cận các phần của nội dung trong

chủ đề Tính toán. Quan trọng hơn, chúng liên quan tới kĩ năng tư duy và giải quyết

vấn đề trong toàn bộ chương trình đào tạo và cuộc sống nói chung.

Tư duy máy tính có thể được áp dụng cho hàng loạt các vật phẩm bao gồm: hệ thống,

quy trình, đối tượng, các thuật toán, các vấn đề, giải pháp, trừu tượng, và tập dữ liệu

hoặc thông tin. Trong các khái niệm nhắc tới sau đây, vật phẩm dùng để chỉ một đối

tượng bất kì trong số này.

Suy luận logic Suy luận logic cho phép học sinh nhận thức về sự vật bằng cách phân tích và kiểm tra

thực tế thông qua suy nghĩ rõ ràng, chính xác. Nó cho phép học sinh tiếp cận tri thức

và các mô hình để thực hiện và xác minh các dự đoán, rút ra kết luận. Nó thường được

sử dụng rộng rãi bởi các học sinh khi các em kiểm tra, gỡ lỗi và chính xác hóa các

thuật toán. Suy luận logic là ứng dụng mới lạ của các khái niệm tư duy thuật toán khác

để giải quyết bài toán.

Các học sinh thiết kế và công nghệ thực hiện thiết kế mô hình một chiếc xe tải, lựa

chọn vật liệu cho các yếu tố khác nhau của dự án. Vật liệu được sử dụng tổng quát cho

tới khi họ nhận ra rằng tính chất của một loại vật liệu được sử dụng trong một tình

huống làm cho nó phù hợp để sử dụng trong một bối cảnh hoàn toàn khác. Có thể

phân chia các dự án mới vào các bộ phận khác nhau, đòi hỏi vật liệu khác nhau, là một

ví dụ về phân chia. Như vậy, học sinh đang sử dụng suy luận logic để thiết kế một

chiếc xe tải.

Học sinh sử dụng suy luận logic khi học tập về lực hấp dẫn bằng một chuỗi quả lắc

được treo từ nắp một bình thủy tinh. Trước khi nghiêng bình, học sinh có thể đưa ra

dự đoán về các trạng thái của chuỗi quả lắc. Sau đó, các em có thể đánh giá các kết

quả thử nghiệm của mình. Các em có thể khái quát hóa các trạng thái với các tình

huống khác, chẳng hạn như một cần cẩu. Việc sử dụng mới trong tìm hiểu tính chất

của lực hấp dẫn là các suy luận logic.

Suy luận logic là chìa khóa cho phép học sinh gỡ lỗi mã nguồn chương trình của các

em. Các em có thể làm việc cùng với các bạn để đánh giá mã nguồn lẫn nhau, tránh lỗi

và gợi ý sửa lỗi. Trong quá trình này, các em có thể có cơ hội để sử dụng sự trừu

tượng, đánh giá thiết kế thuật toán. Việc sử dụng mới trong điều chỉnh sai sót mã

nguồn đòi hỏi phải suy luận logic.

Trừu tượng Trừu tượng làm cho ta dễ suy nghĩ hơn về các vấn đề hoặc hệ thống. Trừu tượng là

quá trình làm cho một vật phẩm dễ hiểu hơn thông qua việc bỏ bớt các chi tiết không

cần thiết. Một ví dụ điển hình là bản đồ tàu điện ngầm London. London là một hệ

thống rất phức tạp. Các mô tả về London trong những cách riêng (thường là các bản

đồ hoặc hình ảnh) phục vụ những người dùng khác nhau. Các bản đồ tàu điện ngầm

London là một trừu tượng vô cùng tinh tế chỉ với đầy đủ thông tin cho các du khách

để định hướng mạng lưới tàu điện ngầm mà không có gánh nặng không cần thiết của

thông tin như khoảng cách và vị trí địa lý chính xác. Nó là một đại diện có chứa chính

xác các thông tin cần thiết để lập kế hoạch một tuyến đường từ một trạm đến một trạm

khác, ngoài ra không còn thông tin gì khác.

Page 6: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

6 | P a g e

Các kỹ năng trong trừu tượng là việc lựa chọn làm ẩn đi các chi tiết hợp lí, làm cho

các vấn đề trở nên dễ dàng hơn, mà không bị mất bất cứ thông tin quan trọng nào. Một

phần quan trọng của nó là trong việc lựa chọn một mô tả tốt cho một hệ thống.

Ví dụ, một chương trình máy tính chơi cờ là một khái niệm trừu tượng. Nó là một tập

hợp hữu hạn và chính xác các quy tắc thực hiện mỗi khi đến lượt của máy tính. Nó

khác xa với tương tự, quá trình thần kinh cảm xúc, thành kiến và phân tâm thực hiện

bằng một người chơi cờ. Nó là một sự trừu tượng bởi vì các chi tiết không cần thiết

của những quy trình được gỡ bỏ.

Đánh giá

Đánh giá là quá trình đảm bảo rằng một giải pháp, dù một thuật toán, hệ thống hay

quá trình phù hợp với mục đích. Rất nhiều tính chất khác nhau của các giải pháp cần

phải được đánh giá. Chúng có đúng không? Có đủ nhanh không? Chúng có sử dụng

các nguồn lực kinh tế không? Có dễ dàng cho người sử dụng không? Có thúc đẩy một

kinh nghiệm thích đáng không? Sự đánh đổi cần phải được thực hiện, nhưng rất hiếm

khi có một giải pháp lý tưởng cho tất cả các tình huống. Có một trọng tâm cụ thể và

cực kì thường xuyên dựa trên sự chú ý đến chi tiết trong đánh giá dựa trên tư duy máy

tính.

Các giao diện máy tính đang được tiếp tục phát triển để đáp ứng nhu cầu của những

người sử dụng khác nhau. Ví dụ, một thiết bị y tế cần thiết để cung cấp thuốc tự động

cho bệnh nhân, nó cần phải được lập trình một cách đơn giản, an toàn, nhanh chóng,

không sai sót. Các giải pháp phải đảm bảo rằng các y tá sẽ có thể thiết lập các liều

thuốc một cách dễ dàng mà không có các sai lầm và nó cũng sẽ không gây bực bội

cho bệnh nhân và y tá khi sử dụng. Trong thiết kế đề xuất sẽ có một sự đánh đổi phải

được thực hiện giữa tốc độ của các dữ liệu vào (hiệu quả) và tránh lỗi (hiệu quả và khả

năng sử dụng). Các thiết kế sẽ được đánh giá dựa trên đề xuất chỉ định điều trị của các

bác sĩ, nhà quản lý và các chuyên gia thiết kế thiết bị y tế (tiêu chuẩn - criteria) và các

quy tắc chung liên quan đến thiết kế tốt (heuristics). Criteria, heuristics và nhu cầu của

người sử dụng cho phép sản phẩm phải được thực hiện một cách hệ thống và chặt chẽ.

Tư duy thuật toán Tư duy thuật toán tư duy thuật toán là một cách để nhận một lời giải thông qua một

định nghĩa rõ ràng các bước. Một số bài toán chỉ có một bước giải. Các bài toán được

giải bằng cách áp dụng lời giải lần lượt từng bước. Tư duy thuật toán góp phần khi các

bài toán tương tự có thể được giải quyết lặp đi lặp lại. Mỗi lần giải chúng, ta không

cần phải suy nghĩ lại lần nữa. Học thuật toán để thực hiện phép nhân, chia ở trường là

một ví dụ. Nếu quy tắc đơn giản được tuân thủ một cách chính xác, bởi một máy tính

hoặc một người, là lời giải cho bất kỳ phép nhân nào tìm thấy. Một khi các thuật toán

được hiểu, nó không cần phải làm từ đầu cho mọi bài toán mới.

Tư duy thuật toán là khả năng để suy nghĩ về trình tự và quy tắc như một cách để giải

quyết vấn đề hoặc hiểu tình huống. Đó là một kỹ năng cốt lõi mà học sinh phát triển

khi các em học để viết các chương trình máy tính của mình.

Sự phân chia Sự phân chia là một cách suy nghĩ về các vật phẩm trong các bộ phận cấu thành của

nó. Các bộ phận có thể được hiểu, giải quyết, phát triển và đánh giá riêng rẽ. Điều này

Page 7: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

7 | P a g e

làm cho các bài toán phức tạp dễ giải hơn, các tình huống mới được hiểu tốt hơn và

các hệ thống lớn dễ thiết kế hơn.

Ví dụ, nấu bữa sáng có thể chia nhỏ hay phân ra thành các việc riêng rẽ như: nướng

bánh mì, pha trà, rán trứng,... Mỗi việc này, đến lượt nó, lại có thể được chia nhỏ ra

thành một tập các bước. Thông qua phân chia các nhiệm vụ ban đầu, mỗi phần có thể

được phát triển và tích hợp sau trong tiến trình. Hãy xem xét việc phát triển một trò

chơi: những người khác nhau có thể thiết kế và tạo ra các mức độ khác nhau một cách

độc lập, miễn là khía cạnh quan trọng được thoả thuận trước. Một mức độ chơi đơn

giản cũng có thể được phân tách thành nhiều phần, chẳng hạn như chuyển động giống

như cuộc sống của một nhân vật, di chuyển nền và thiết lập các quy tắc về cách nhân

vật tương tác.

Sự khái quát (Các dạng mẫu) Sự khái quát gắn liền với việc xác định các dạng mẫu, tương đồng và kết nối, khai

thác những tính năng này. Đó là một cách nhanh chóng giải quyết những vấn đề mới

dựa trên những lời giải trước cho bài toán và xây dựng trên kinh nghiệm trước đó. Đặt

câu hỏi như "Bài toán này tương tự bài toán nào đã giải được?" Và "Chúng khác nhau

như thế nào?" là rất quan trọng. Đó như là quá trình nhận ra các dạng mẫu trong các

dữ liệu được sử dụng và các quy trình/ chiến lược đang được sử dụng. Các thuật toán

giải quyết một số bài toán cụ thể có thể được điều chỉnh để giải quyết một lớp các bài

toán tương tự. Sau đó, có thể áp dụng lời giải chung bất cứ khi nào gặp phải một bài

toán của lớp đó.

Ví dụ, một học sinh sử dụng một con rùa vẽ (floor-turtle) để vẽ một loạt các hình, như

hình vuông, hình tam giác. Học sinh viết một chương trình máy tính để vẽ hai hình

này. Sau đó, nếu muốn vẽ một hình bát giác và một hình có 10 mặt từ hình vuông và

hình tam giác, các em nhận ra có một mối quan hệ giữa số mặt của hình với số đo góc

của nó. Từ đó, các em có thể viết một thuật toán diễn tả mối quan hệ này và sử dụng

nó để vẽ bất cứ đa giác đều nào.

Page 8: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

8 | P a g e

Chương trình khung và chi tiết cho môn

Khoa học máy tính trong nhà trường

Bản gốc: Computer Science: A Curriculum for Schools. Đây là tài liệu mô tả phần kiến thức CS (Computer Science) Khoa học máy tính trong chương

trình tổng thể môn Tin học của Bộ GD Anh quốc. Môn "tin học" của nước Anh có tên gọi "Computing" và do đó nhiều dịch giả đã dịch thành "tính toán" hoặc "máy tính".

Bản dịch này của bạn Trần Thị Hiên, giáo viên Tin học tại THPT Nam Cao, Lý Nhân, Hà Nam, thực hiện.

Sẽ còn nhiều phần tiếp theo.

1. Tầm quan trọng

Khoa học máy tính là ngành khoa học nghiên cứu các nguyên lý và hoạt động, nền

tảng cho sự hiểu biết về mô hình tính toán và các ứng dụng của chúng trong sự phát

triển của các hệ thống máy tính. Tại trung tâm khái niệm về tư duy tính toán: một hình

thức suy nghĩ đã vượt xa cả phần cứng lẫn phần mềm, và nó tạo thành một khuôn khổ

trong đó các vấn đề và hệ thống xảy ra trong khuôn khổ đó. Hình thức suy nghĩ này

được hỗ trợ và bổ sung bởi một khối lượng lớn kiến thức lý thuyết lẫn thực hành, và

bởi một tập các kỹ thuật mạnh mẽ để phân tích, mô hình hóa và giải quyết vấn đề.

Khoa học máy tính liên quan sâu sắc đến cách máy tính và hệ thống máy tính làm

việc, cách chúng được thiết kế và được lập trình. Học sinh học tính toán sẽ (hiểu)có

cái nhìn sâu sắc về tất cả các loại hệ thống tính toán dù nó có gồm máy tính hay

không. Các lĩnh vực ảnh hưởng đến suy nghĩ tính toán như là: sinh học, hóa học, ngôn

ngữ học, tâm lý học, kinh tế và thống kê. Nó cho phép chúng ta giải quyết vấn đề,

thiết kế hệ thống và hiểu vể năng lực và giới hạn của con người và sự thông minh của

máy tính. Nó là một kỹ năng cái mà làm tăng khả năng và cái mà tất cả học sinh nên

nhận thức được và có khả năng ở kỹ năng đó. Ngoài ra, những học sinh có khả năng

suy nghĩ về tính toán thì có thể giỏi hơn trong khả năng khái quát và hiểu hơn các

công nghệ dựa trên máy tính, vì vậy cũng được trang bị tốt hơn để sống trong xã hội

hiện đại.

Khoa học máy tính là một môn thực hành, nơi sự phát minh và khả năng xoay sở (sự

tháo vát) được khuyến khích. Học sinh được mong là có thể áp dụng các nguyên tắc

học thuật mà chúng học vào việc hiểu các hệ thống thực tế và vào việc tạo ra các giả

tưởng có mục đích. Sự kết hợp các quy tắc, thực hành và sáng tạo làm nó trở thành

một cực hữu ích và một chủ đề sáng tạo mạnh mẽ, tràn ngập hứng thú.

1.1. Khoa học máy tính là một môn học

Giáo dục làm tăng chất lượng sống cũng như kỹ năng sống của học sinh. Nó chuẩn bị

cho những người trẻ một thế giới, cái chưa từng tồn tại, các công nghệ hấp dẫn mà

chưa được phát minh, các công nghệ hiện tại và những thách thức mà chúng ta chưa

nhận thức được.

Page 9: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

9 | P a g e

Để làm điều này, giáo dục mong muốn trước tiên là dạy các môn học có giá trị dài hạn

hơn là những kỹ năng có tính hữu dụng ngắn hạn, mặc dù sau này chắc chắn là hữu

ích. Một môn học đặc trung bởi:

Một kiến thức chính (xuyên suốt) bao gồm các ý tưởng có khả năng ứng dụng

rộng và các khái niệm, và một khung lý thuyết trong đó những ý tưởng và khái

niệm phù hợp.

Một tập các kỹ thuật và phương pháp mà có thể được ứng dụng trong giải

quyết các vấn đề và gia tăng kiến thức.

Một cách nghĩ và làm việc mà cung cấp cách nhìn về thế giới khác biệt so với

các môn học khác.

Tuổi thọ: một môn học không thể thay đổi một cách nhanh chóng mặc dù chủ

đề có thể cải tiến tiến bộ hơn.

Độc lập với công nghệ cụ thể, đặc biệt là những công nghệ có tuổi thọ ngắn.

Khoa học máy tính là một môn học với tất cả các đặc điểm trên. Nó bao gồm các

nguyên tắc cơ bản (như lý thuyết tính toán) và các khái niệm và ý tưởng có khả ngăng

ứng dụng rộng (như sử dụng mô hình quan hệ để nắm bắt cấu trúc trong dữ liệu). Nó

kết hợp các kỹ thuật và phương pháp để giải quyết vấn đề và năng cao tri thức (như

trừu tượng và lý luận logic), và một cách khác biệt về cách làm việc và suy nghĩ đặt

nó ngoài các môn học khác (như tư duy tính toán). Nó có tuổi thọ (hầu hết các ý tưởng

và khái niệm đều tồn tại 20 hoặc trên 20 năm cách đây và vẫn tồn tại đến ngày nay),

và mỗi nguyên tắc cốt lõi có thể được dạy hoặc minh họa mà không cần sử dụng một

công nghệ cụ thể nào.

1.2. Khoa học máy tính là một môn học STEM

Khoa học máy tính là một môn học STEM (viết tắt của các từ Science -Technology-

Engineering – Math) tinh túy, nó có các thuộc tính của các môn kỹ thuật, toán học,

khoa học và công nghệ như:

Nó có cơ sở lý luận và nền tảng toán học của riêng mình, và liên quan đến ứng

dụng của lý luận và logic.

Nó bao gồm một phương pháp tiếp cận để đo lường và thử nghiệm.

Nó liên quan đến thiết kế, xây dựng và kiểm thử các chế phẩm có mục đích.

Nó yêu cầu sự hiểu biết, sự đánh giá cao và áp dụng một loạt các công nghệ.

Hơn nữa, khoa học máy tính cung cấp cho học sinh cái nhìn sâu sắc vào các môn học

STEM khác, và với những kỹ năng và tri thức đó có thể được áp dụng để giải quyết

các vấn đề trong các môn học đó.

Mặc dù chúng là vô hình, nhưng các hệ thống phần mềm là một trong những chế

phẩm lớn và phức tạp nhất mà con người đã tạo ra. Sự kết hợp giữa phần mềm và

phần cứng là cần thiết để tạo nên các hệ thống dựa trên tính toán, gia tăng mức độ

phức tạp. Hiểu sự phức tạp này và đưa nó dưới sự kiểm soát là thách thức trọng tâm

của môn học. Trong một thế giới nơi mà các hệ thống dựa trên máy tính trở nên phổ

biến, những cá nhân và tổ chức xã hội mà được trang bị tốt nhất để đáp ứng những

thách thức này sẽ có một lợi thế cạnh tranh.

Page 10: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

10 | P a g e

Sự kết hợp của tư duy tính toán, một tập hợp các nguyên tắc tính toán và phương pháp

tính toán để giải quyết vấn đề là sức mạnh duy nhất. Khả năng mang lại sự kết hợp

này đẻ mang về những vấn đề thực tế là trung tâm của sự thành công của khoa học, kỹ

thuật, kinh tế và thương mại trong thế kỷ hai mốt.

1.3. Khoa học máy tính và công nghệ thông tin là bổ sung không phải là

đồng nhất

Khoa học máy tính và công nghệ thông tin là hai đối tượng bổ sung cho nhau. Khoa

học máy tính dạy cho học sinh làm thế nào để trở thành một tác giả hiệu quả của các

công cụ tính toán. Trong khi đó, công nghệ thông tin dạy làm thế nào để người dùng

thi hành các công cụ đó (ví dụ như phần mềm). Sự gần kề nhau này chỉ là một phần

của sự thật, bởi vì nó tập trung quá hẹp vào máy tính như một công nghệ, còn tính

toán thì rộng hơn điều đó. Như nhận xét nổi tiếng của Dijkstra , “khoa học máy tính

không nói nhiều hơn về máy tính hơn thiên văn học nói về kính thiên văn”. Cụ thể

hơn:

Khoa học máy tính là môn học tìm để hiểu và khám phá về thế giới quanh

chúng ta, cả về tự nhiên lẫn nhân tạo, trong sự tính toán. Khoa học máy tính là

đặc biệt, nhưng không có nghĩa là độc quyền, liên quan đến nghiên cứu, thiết

kế và triển khai các hệ thống máy tính, và hiểu các nguyên tắc cơ bản những

thiết kế này.

Công nghệ thông tin đề cập đến ứng dụng có mục đích của các hệ thống máy

tính để giải quyết các vấn đề thế giới thực, bao gồm các vấn đề như nhu cầu

kinh doanh, đặc điểm kỹ thuật và lắp đặt phần cứng lẫn phần mềm, và đánh giá

khả năng sử dụng. Đó là khả năng sử dụng hiệu quả, sáng tạo và khám phá của

công nghệ.

Chúng ta muốn các bạn trẻ hiểu và đóng vai trò tích cực trong thế giới kỹ thuật số bao

quanh chúng, chứ không phải là những khách hàng thụ động của một công nghệ đục

hay bí ẩn. Hiểu đúng khái niệm tính toán sẽ giúp chúng thấy làm thế nào để tận dụng

tốt nhất hệ thống họ sử dụng, và làm thế nào để giải quyết vấn đề khi gặp sự cố. Hơn

nữa người dân có thể nghĩ về thuật ngữ “computational” (tính toán) sẽ có thể hiểu và

lý luận về các vấn đề liên quan đến sự tính toán như các sáng chế phần mềm, đánh cắp

định danh, kỹ thuật di truyền, hệ thống bỏ phiếu điện tử cho các cuộc bầu cử, và như

vậy. Trong một thế giới tràn ngập về tính toán, mỗi người rời khỏi ghế nhà trường nên

có một sự hiểu biết về khoa học tính toán (computing).

(Còn tiếp ….)

Page 11: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

11 | P a g e

Thuật toán mã hóa Học sinh & Giáo viên

trong các phần mềm quản lý nhà trường

phổ thông Bùi Việt Hà

Việc mã hóa Học sinh và Giáo viên trong các phần mềm quản lý nhà trường phổ thông đóng một vai trò hết sức quan trọng. Bài báo này mô tả thuật toán chủ yếu dùng để mã hóa Học sinh và Giáo viên của phần

mềm. Thuật toán này đã được áp dụng trong phần mềm School Viewer của công ty School@net.

Mục đích

Việc mã hóa Học sinh và Giáo viên trong nhà trường Việt Nam phải thỏa mãn được

các mục đích sau đây:

M1. Tối ưu hóa việc sử dụng chữ và số đề mã hóa

M2. Không quá phức tạp để có thể nhanh chóng mã hóa và giải mã

M3. Tính duy nhất: mỗi học sinh và giáo viên phải có một mã (khóa) duy nhất không

phụ thuộc vào trường và địa phương mà mình đang học tập, làm việc. Hay nói cách

khác mã phải có tác dụng trên qui mô toàn quốc.

M4. Mỗi mã học sinh và giáo viên không dài quá 12 ký tự (chữ+số).

Yêu cầu thuật toán

Y1. Thuật toán đảm bảo việc sinh mã (cho học sinh và giáo viên) phải nhanh tức thời

và chính xác.

Y2. Thuật toán có thể được giải mã.

Y3. Tính duy nhất của mã sinh phải đảm bảo tối thiểu 100 năm (tính từ năm 2000).

Tức là trong suốt thời gian 100 năm, mã được sinh ra sẽ là duy nhất và không bị lặp

lại.

Cơ sở bài toán mã hóa học sinh / giáo viên

Mã hóa với cơ sở 64

Page 12: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

12 | P a g e

Để mô tả và lưu trữ dễ dàng các mã hóa của học sinh và giáo viên, bắt buộc phải sử

dụng các chữ cái latinh và chữ số. Như vậy phải sử dụng 10 chữ số + 52 chữ cái latinh

+ 2 ký tự thông dụng (dấu _ và dấu #) = 64 ký tự để mô phỏng mã hóa.

Như vậy bảng mã hóa của phần mềm (tạm ký hiệu là SVC - School Viewer Coding)

được mô tả trong bảng sau:

SVC Decimal SVC Decimal SVC Decimal SVC Decimal

0 0 G 16 W 32 m 48

1 1 H 17 X 33 n 49

2 2 I 18 Y 34 o 50

3 3 J 19 Z 35 p 51

4 4 K 20 a 36 q 52

5 5 L 21 b 37 r 53

6 6 M 22 c 38 s 54

7 7 N 23 d 39 t 55

8 8 O 24 e 40 u 56

9 9 P 25 f 41 v 57

A 10 Q 26 g 42 w 58

B 11 R 27 h 43 x 59

C 12 S 28 i 44 y 60

D 13 T 29 j 45 z 61

E 14 U 30 k 46 _ 62

F 15 V 31 l 47 # 63

Như vậy với bảng mã 64 ký tự của SVC, mỗi 6-bit sẽ được mô tả thành 1 "ký tự"

trong phần mềm, hay mỗi 3 byte sẽ được mô tả thành 4 ký tự trong SVC.

Thông tin mã hóa

Các thông số cần thiết để mã hóa bao gồm:

1. Ngày sinh

Page 13: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

13 | P a g e

Ngày sinh của học sinh/giáo viên được tính như một số nguyên là số ngày tính từ năm

1900.

Số lượng ngày cho phép tính là 200 năm (1900-2099) là 200 x 365 =73000 2 bytes

(16 bits). Chương trình sẽ sử dụng 17 bits = 131,072 để lưu mã hóa thông số này.

Chú ý: trường hợp học sinh không nhớ chính xác ngày sinh thì chương trình sẽ tự

động gán giá trị ngày ngẫu nhiên để làm thông tin mã hóa.

2. Nam/Nữ

Sử dụng 1 bit cho thông số này.

3. Quê quán

Hiện tại sử dụng dữ liệu bao gồm 61 tỉnh thành 7 bits

Như vậy cho phép mở rộng trong tương lai lên 128 tỉnh/thành phố.

4. Mã hóa họ cha

Phần họ của học sinh được tách ra và mã hóa theo một CSDL lưu các Họ chuẩn của

Việt Nam. Số lượng các họ của người Việt là hữu hạn và được lưu trong một bảng có

tên là rFamilyNamesVN. Tổng số lượng các họ của người Việt sẽ không quá 12 bits

(4096).

Chú ý: trường hợp khi nhập dữ liệu họ không có trong bảng CSDL thì chương trình sẽ

tự động nạp họ này vào bảng tương ứng tại vị trí cuối cùng. Giá trị Checksum-4 sẽ đặt

là 1.

5. Mã hóa theo tên học sinh

Phần tên học sinh (sau khi đã loại đi Họ + đệm) sẽ được mã hóa theo một CSDL lưu

các tên chuẩn của người Việt Nam. Số lượng tên của người Việt là hữu hạn và lưu

trong bảng rNamesVN. Tổng số lượng tên người Việt dự đoán không quá 8,192 13

bits.

Chú ý: trường hợp khi nhập dữ liệu tên không có trong bảng CSDL thì chương trình

sẽ tự động nạp tên này vào bảng tương ứng tại vị trí cuối cùng. Giá trị Checksum-5 sẽ

đặt là 1.

6. Tham số thời gian

Tham số thời gian được đưa vào để giảm thiểu tối đa khả năng tạo ra các mã trùng

nhau. Ta sử dụng tham số thời gian là thời gian chính xác đến giây thời điểm nhập dữ

liệu vào máy tính. Được phép dùng 17-bits để mô tả cho tham số ngẫu nhiên này.

- bit 1: 0-nếu thời gian là từ 0 giờ đến 12 giờ trưa

Page 14: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

14 | P a g e

1-nếu thời gian là từ 12 giờ trưa đến 24 giờ đêm.

- bit 2-17: mô tả thời gian tính bằng giây tính từ thời điểm 0 giờ hoặc 12 giờ trưa cho

đến thời điểm hiện thời.

7. Tham số Checksum: 5 bits

- Có 8 giá trị (3 bits đầu tiên) để tạo tham số phòng hờ sự cố khi sử dụng 6 tham số

trên tạo ra các mã trùng nhau trong một trường (tại thời điểm sinh mã học sinh/giáo

viên). Khi đó Checksum sẽ tự động tăng lên 1 giá trị.

- 2 bit sau cùng có ý nghĩa như sau:

Bit-4 chỉ ra giá trị Họ của học sinh có tìm thấy trong bảng dữ liệu chuẩn hay

không.

Bit-5 chỉ ra giá Tên của học sinh có tìm thấy trong bảng dữ liệu chuẩn hay

không.

Tổng kết lại chúng ta cần:

(1) = 17 bits

(2) = 1 bit

(3) = 7 bits

(4) = 12 bits

(5) = 13 bits

(6) = 17 bits

(7) = 5 bits

= 72 bits = 12 ký tự

Cấu trúc và thủ tục mã hóa

Theo sơ đồ đã mô tả ở trên, chúng ta có 72-bit đã được mã hóa từ các thông số của

một học sinh hoặc giáo viên. Các bit được sắp xếp theo thứ tự và sau đó ghép lại theo

bảng ký tự SVC. Để thể hiện (thông báo mã cho học sinh) chúng ta dùng khuôn dạng:

XXXX-XXXX-XXXX

Phương án mã hóa 32 bit

Phương án mã hóa Học sinh, Giáo viên với cơ sở 64 bit như đã trình bày ở trên không

thích hợp với mô hình CSDL không phân biệt các chữ cái in hoa và in thường. Trong

mục này ta sẽ mô tả một phương án mã hóa khác chỉ sử dụng 32 bit Cơ sở.

Page 15: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

15 | P a g e

Bộ ký tự dùng cho kiểu mã hóa này chỉ là các chữ số và bộ chữ cái in hoa rút gọn, phù

hợp với bảng chữ cái tiếng Việt (Tiếng Anh bỏ đi F, J, W, Z).

SVC Decimal SVC Decimal SVC Decimal SVC Decimal

0 0 8 8 H 16 Q 24

1 1 9 9 I 17 R 25

2 2 A 10 K 18 S 26

3 3 B 11 L 19 T 27

4 4 C 12 M 20 U 28

5 5 D 13 N 21 V 29

6 6 E 14 O 22 X 30

7 7 G 15 P 23 Y 31

Với bảng chữ cái mới này, 5 bits = 1 chữ cái. Như vậy để mã hóa bởi 12 ký tự, chúng

ta cần lượng thông tin là 5 x 12 = 60 bits.

Thủ tục mã hoá học sinh/giáo viên theo cơ sở 32 bits vẫn hoàn toàn thỏa mãn các mục

đích M1, M2, M3 đã nêu ra ở trên.

Thông tin mã hóa cụ thể như sau:

1. Ngày sinh - 16 bits

Ngày sinh của học sinh/giáo viên được tính như một số nguyên là số ngày tính từ năm

1925.

Số lượng ngày cho phép tính là 175 năm (1925-2099) là 175 x 365 =63875 2 bytes

(16 bits). Chương trình sẽ sử dụng 16 bits = 65,536 để mã hóa thông số này.

Chú ý: trường hợp học sinh không nhớ chính xác ngày sinh thì chương trình sẽ tự

động gán giá trị ngày ngẫu nhiên để làm thông tin mã hóa.

2. Nam/Nữ - 1 bit

Sử dụng 1 bit cho thông số này.

3. Mã hóa theo Họ cha của Học sinh - 9 bits

Page 16: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

16 | P a g e

Phần họ của học sinh được tách ra và mã hóa theo một CSDL lưu các Họ thường gặp

của người Việt Nam. Dữ liệu này được lưu trong bảng rFamilyNamesVN của hệ

thống. Dự kiến toàn bộ các họ Việt Nam sẽ không quá 512. Chúng ta sẽ dùng 9 bits để

mã hoá giá trị này của Học sinh. Trường hợp khi nhập họ học sinh không có trong

bảng này, chương trình sẽ tự động nạp tên này vào bảng tại vị trí cuối cùng. Trường

hợp bảng đã đủ 512 bản ghi mà họ học sinh không tìm thấy trong bảng thì máy sẽ gán

một giá trị ngẫu nhiên 9 bits cho giá trị này.

4. Mã hóa theo tên học sinh - 13 bits

Phần tên học sinh (sau khi đã loại đi Họ + đệm) sẽ được mã hóa theo một CSDL lưu

các tên chuẩn của người Việt Nam. Số lượng tên của người Việt là hữu hạn và lưu

trong tệp rNamesVN. Tổng số lượng tên người Việt dự đoán không quá 8,192 = 13

bits.

Chú ý: trường hợp khi nhập dữ liệu tên không có trong bảng CSDL thì chương trình

sẽ tự động nạp tên này vào bảng tương ứng tại vị trí cuối cùng.

5. Mã Quận/Huyện của nhà trường hiện thời - 10 bits

Hiện tại số Quận/Huyện trên cả nước là 616, chúng ta sẽ sử dụng 10 bits = 1024 để

mã hóa thông tin này.

6. Chỉ số địa phương của Nhà trường (SchoolLocalID) - 6 bits

Chỉ số địa phương của Nhà trường được gán và khởi tạo từ lệnh Khởi tạo CSDL nhà

trường. Chỉ số này dùng để phân biệt giữa các nhà trường trong phạm vi một

Quận/Huyện. Hệ thống chỉ số được gán thống nhất và được kiểm soát bởi Sở GD &

ĐT hoặc Phòng GD & ĐT quận/huyện. Trong phạm vi một quận/huyện, các trường

cùng cấp (Tiểu học, THCS, THPT) phải có Chỉ số địa phương khác nhau. Chỉ số địa

phương được phép gán từ giá trị 1 đến 64, như vậy cần 6 bits để mã hoá thông số này.

Chú ý: Lần đầu tiên khi khởi tạo CSDL năm học, chương trình sẽ khởi tạo một giá trị

ngẫu nhiên cho SchoolLocalID, tuy nhiên Hiệu trưởng có thể thay đổi lại giá trị này

bất cứ lúc nào.

7. Tham số Checksum: 5 bit

- Có 32 giá trị (5 bits) để tạo tham số phòng hờ sự cố khi sử dụng 6 tham số trên tạo ra

các mã trùng nhau trong một trường (tại thời điểm sinh mã học sinh/giáo viên). Khi đó

Checksum sẽ tự động tăng lên 1 giá trị.

Tổng kết lại chúng ta cần:

(1) = 16 bits

(2) = 1 bit

Page 17: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

17 | P a g e

(3) = 9 bits

(4) = 13 bits

(5) = 10 bits

(6) = 6 bits

(7) = 5 bit

Tổng cộng = 60 bits = 12 ký tự

Qui định ghi Mã Học sinh - Giáo viên (thể hiện và thông báo cho học sinh).

XXXX-XXXX-XXXX

Chú ý:

Toàn bộ các thông tin cần thiết để mã hoá một Học sinh / Giáo viên đều là những

thông số bắt buộc cần phải biết của một nhà trường. Các thông tin của Nhà trường như

SchoolLocalID, Mã Quận/Huyện, Mã Tỉnh đều được cấp chính xác ngay khi cài đặt

phần mềm.

Trường hợp sau khi thực hiện các bước mã hóa từ (1) đến (7), vẫn bi trùng lặp mã thì

chương trình sẽ lấy năm sinh của học sinh thay thế bằng năm 2100, như vậy chúng ta

có thêm 32 checksum bổ sung. Giả sử lại vẫn trùng chúng ta lại sử dụng thêm các năm

2101 và 2102 với tổng cộng 96 checksum bổ sung. Việc sử dụng năm 2100, 2101 và

2102 không phá vỡ tính duy nhất của thuật toán bởi vì với năm 2102, chúng ta đã

dùng đến 178 năm x 365 = 64970 vẫn nằm trong phạm vi kiểm soát của 16-bits.

Page 18: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

18 | P a g e

CS Unplugged hay Computer Science without a computer là cuốn sách chính nằm trong 1 dự án nhằm xây dựng các bài giảng về khoa học máy tính nhưng không cần máy tính dành cho GV và HS trong các nhà

trường phổ thông (http://csunplugged.org/). Đây là 1 dự án có ý nghĩa đặc biệt cho đội ngũ giáo viên tin học của Việt Nam. Chúng tôi sẽ trích giới thiệu 1 số bài giảng tiêu biểu của cuốn sách này. Chủ đề đầu tiên

này do bạn Đào Giang Lâm, chuyên viên Phòng CNTT, Sở GD&ĐT Nghệ An biên dịch. Chúng tôi sẽ còn đưa các bài học tiếp theo của cuốn sách này đến tay các GV Việt Nam. CS4S cũng kêu gọi các cộng

tác viên và tất cả mọi người hãy dành thời gian để dịch cuốn sách vô cùng bổ ích này.

CHỦ ĐỀ 1: HỆ NHỊ PHÂN Tóm lược:

Dữ liệu trong máy tính được lưu trữ và truyền đi như một loạt các số 0 và 1. Làm thế

nào để hai đối tượng này có thể thay thế được chữ và số?

Kĩ năng:

- Đếm

- Tính toán

- Sắp xếp

Đối tượng: Học sinh từ 6 tuổi trở lên

Chuẩn bị:

- 10 tấm bìa kích thước 10x20 cm

- 01 Bút dạ

--------------------------------------------------------

Hoạt động 1: Học cách đếm

Bước 1:

Page 19: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

19 | P a g e

Giáo viên (học sinh) chuẩn bị 5 tấm bìa.

Trường hợp 1 (tổ chức tại lớp): Các tấm bìa được đánh dấu chấm lần lượt như hình

dưới (H1). Giáo viên cho 5 học sinh cầm các tấm bìa theo thứ tự như hình vẽ.

Trường hợp 2 (học sinh tự học): Học sinh đánh dấu chấm và đặt 5 tấm bìa trên bàn

theo thứ tự như hình vẽ (H1).

(Hình 1)

Bước 2:

Tính từ phải sang trái, yêu cầu học sinh thứ 2, 3, 5 cầm và đưa lên cho cả lớp xem mặt

sau của các tấm bìa; học sinh thứ 1, 4 cầm và đưa lên cho cả lớp xem mặt trước thể

hiện rõ các dấu chấm. Các tấm bìa được xếp thành một hàng thẳng. Kết quả thực hiện

như hình 2.

(Hình 2)

Kết quả cho thấy có 9 dấu chấm được thể hiện trên cả 5 tấm bìa.

Bước 3: Thảo luận

Nếu cần tính 5, 12, 19 dấu chấm thì phải thực hiện như thế nào?

(Gợi ý kết quả tham khảo GY1)

(Hình 3)

Có nhiều nhất bao nhiêu dấu chấm mà bạn có thể thực hiện được? Có ít nhất bao

nhiêu dấu chấm mà bạn có thể thực hiện được? (Gợi ý kết quả tham khảo GY2)

Bước 4:

Nếu quy ước, tấm bìa không có dấu chấm là 0, tấm bìa có dấu chấm là 1 thì với trường

hợp ban đầu sẽ có kết quả mã hóa như sau:

Page 20: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

20 | P a g e

(Hình 4)

01001 = 9

Bước 5: Thảo luận

Hãy thử tính kết quả của các số: 10101 và 11111.

(Gợi ý kết quả tham khảo GY3)

Hoạt động 2: Mã hóa

Bước 1:

Khi một tấm bìa không có dấu chấm, nó được hiểu là số 0; khi một tấm bìa có các dấu

chấm, nó được hiểu là số 1. Hệ thống như thế được hiểu là hệ số nhị phân.

Trong cuộc sống, rất nhiều trường hợp có thể biểu diễn thành 0, 1 như :

(hình 5)

Bước 2: Thảo luận

Lấy ví dụ về những ngày tháng bạn được sinh ra? Viết ngày, tháng trong hệ nhị phân.

Viết lại biểu diễn nhị phân tương ứng với các giá trị 5, 12, 19 chấm.

Ghi nhớ: Sử dụng một tập hợp 5 thanh có độ dài 1, 2, 4, 8, 16 ta có thể tính được bất

cứ số nào với giá trị nhỏ hơn hoặc bằng 31.

Hoạt động 3:

Bài toán 1: Thông điệp bí mật.

Tom đang bị mắc kẹt trên tầng cao nhất của một cửa hàng bách hóa. Lúc đó là thời

điểm trước Giáng sinh và anh muốn được về nhà với những món quà của mình. Anh

ấy có thể làm gì? Anh đã cố gắng gọi điện thoại, thậm chí la hét, nhưng không có ai

Page 21: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

21 | P a g e

xung quanh. Bên kia đường, anh có thể nhìn thấy một cô gái vẫn làm việc muộn cùng

với máy tính vào ban đêm. Làm thế nào anh có thể thu hút sự chú ý của cô ấy? Tom

nhìn xung quanh để xem những gì anh có thể sử dụng. Sau đó, anh đã có một ý tưởng,

anh có thể sử dụng đèn cây Giáng sinh rực rỡ để gửi cho cô một tin nhắn! Anh ta tìm

thấy tất cả các đèn và cắm chúng trong đêm nên anh có thể bật và tắt. Anh sử dụng

một mã nhị phân đơn giản, mà anh biết người phụ nữ bên đường phố là chắc chắn để

hiểu. Bạn có thể làm được việc đó không? Hãy cho biết thông điệp được thể hiện trên

Hình 6?

(Hình 6)

Quy ước mã hóa

1 2 3 4 5 6 7 8 9 10 11 12 13

a b c d e f g h i j k l m

14 15 16 17 18 19 20 21 22 23 24 25 26

n o p q r s t u v w x y z

(Xem gợi ý kết quả tham khảo GY4)

Page 22: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

22 | P a g e

Thảo luận: Hãy sử dụng 0,1 để quy ước cho đèn cây giáng sinh là tắt, bật để mã hóa

một vài thông điệp mà Tom muốn gửi cho cô gái bên kia đường?

Bài toán 2: E-mail và Modems

Máy vi tính kết nối với Internet thông qua một modem cũng sử dụng hệ thống nhị

phân để gửi tin nhắn. Sự khác biệt duy nhất là chúng sử dụng tiếng bíp. Một tiếng bíp

the thé có thể được sử dụng cho một bit 1 và một tiếng bíp không cao cho một bit 0.

Những âm thanh đi rất nhanh rất nhanh, trên thực tế, tất cả chúng ta có thể nghe thấy

một âm thanh kêu liên tục. Nếu bạn chưa bao giờ nghe nó, lắng nghe với một modem

kết nối với Internet, hay thử gọi một máy fax, máy fax cũng sử dụng modem để gửi

thông tin.

Hoạt động 4: Đếm những giá trị lớn hơn 31

Hãy thử phép tính: 1 + 2 + 4 = ?

Bây giờ hãy thử 1 + 2 + 4 + 8 16 =?

Kết quả thế nào nếu cộng tất cả các số từ 1?

Nếu sử dụng ngón tay của mình để đếm, theo cách thông thường, bạn sẽ không thể

đếm được cao hơn 10. Nếu bạn sử dụng hệ nhị phân và để cho mỗi ngón tay trên một

bàn tay thay thế cho một trong những tấm bìa với các dấu chấm, bạn có thể đếm được

các giá trị từ 0 đến 31. Đó là 32 con số. (Đừng quên 0 cũng là một số)

Hãy thử sử dụng ngón tay của bạn để đếm. Nếu một ngón đưa lên được hiểu là 1, và

đưa xuống được hiểu là 0.

Page 23: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

23 | P a g e

Bạn sẽ nhận được các số từ 0-1.023 nếu bạn sử dụng cả hai tay! Có 1024 con số!

Nếu bạn tính thêm cả các ngón chân (bây giờ bạn có thể trở thành một người ngoài

hành tinh), bạn có thể nhận được kết quả thậm chí cao hơn. Nếu một mặt bàn tay có

thể được sử dụng để đếm 32 con số, và hai bàn tay có thể đếm đến 32 × 32 = 1024 con

số, số lượng con số lớn nhất Hoa hậu Flexi-Toes có thể đạt được là bao nhiêu? (Gợi ý

kết quả tham khảo GY5)

Hoạt động 5: Các thông tin cần biết về Hệ nhị phân

- Điều gì sẽ xảy ra khi một số 0 được đặt ở phía bên tay phải của số đó:

Nếu chúng ta đang làm việc tại hệ cơ sở 10 (hệ thập phân), khi đặt một số 0 ở phía bên

phải của con số, nó được nhân với 10. Ví dụ, 9 sẽ trở thành 90, 30 thành 300.

Nhưng điều gì sẽ xảy ra khi bạn đặt một số 0 bên phải của một số nhị phân? Ví dụ:

1001 10010

(9) (?)

Cùng thực hiện tính kết quả với một số người khác để kiểm tra giả thuyết của bạn. Các

quy tắc là gì? Tại sao bạn nghĩ rằng điều này sẽ xảy ra?

(Gợi ý kết quả tham khảo GY6)

- Bảng mã ASCII:

Mỗi tấm bìa chúng ta đã sử dụng thể hiện cho một 'bit' trên máy tính ('bit' là viết tắt

của ‘binary digit’). Vì vậy, bảng mã chữ cái của chúng ta đã sử dụng cho đến nay có

thể được biểu diễn bởi năm thẻ, hoặc 'bit'. Tuy nhiên một máy tính có thể hiểu cho dù

chữ cái đó viết hoa hay không, và cũng nhận ra chữ số, dấu chấm câu và các ký hiệu

đặc biệt như $ hoặc ~.

Hãy nhìn vào một bàn phím và đếm xem có bao nhiêu kí tự có thể sử dụng trên máy

tính. Vì vậy, một máy tính cần có bao nhiêu bit để lưu trữ tất cả các ký tự?

Hầu hết các máy tính hiện nay sử dụng một bảng mã gọi là ASCII (Bảng mã trao đổi

thông tin tiêu chuẩn Mỹ), để biến đổi thành các bit cho mỗi ký tự, nhưng một số quốc

gia không nói tiếng Anh có sử dụng bảng mã dài hơn.

- Tại sao máy tính sử dụng hệ nhị phân để biểu diễn thông tin:

Page 24: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

24 | P a g e

Nó được gọi là nhị phân bởi vì chỉ có hai số khác nhau được sử dụng. Nó còn được

gọi là hệ cơ số 2 (con người thường sử dụng cơ số 10). Mỗi số 0 hay 1 được gọi là

một bit (số nhị phân). Một bit thường được biểu diễn trong bộ nhớ chính của máy tính

bằng một bóng bán dẫn được bật hoặc tắt, hoặc một tụ điện.

Khi dữ liệu phải được truyền qua một đường dây điện thoại hoặc đài phát thanh, âm

cao và thấp được sử dụng để thể hiện giá trị 0 và 1. Trên các ổ đĩa từ (đĩa cứng, đĩa

mềm) và băng, bit được biểu diễn bởi hướng của từ trường trên bề mặt lớp phủ, hoặc

là Bắc-Nam và Nam-Bắc.

Đĩa CD-ROM và DVD lưu trữ bit quang học – mỗi phần của bề mặt phản chiếu tương

ứng với một bit được thể hiện là phản chiếu hoặc không phản chiếu ánh sáng.

- Lý do mà các máy tính chỉ sử dụng hai giá trị khác nhau là nó dễ dàng hơn nhiều để

xây dựng các thiết bị thể hiện điều đó. Đĩa CD có thể biểu diễn được 10 phần tương

ứng các chữ số 0-9, nhưng phải xây dựng các thiết bị rất đắt tiền và chính xác để làm

cho nó làm việc. Mặc dù chúng ta nói rằng máy tính chỉ lưu trữ 0 và 1, nhưng thực sự

không có 0 và 1 bên trong chúng mà chỉ có điện áp cao hay thấp, từ tính bắc / nam và

.v.v. Tất cả mọi thứ trên máy tính được trình bày dưới dạng bit - Các tài liệu, hình

ảnh, bài hát, video, số, và thậm chí cả các chương trình và các ứng dụng mà chúng ta

sử dụng chỉ bằng một hoặc rất nhiều chữ số nhị phân.

- Tốc độ xử lý thông tin:

Một bit không thể đại diện nhiều, vì vậy chúng thường được nhóm lại với nhau trong

nhóm tám, mà có thể đại diện cho các số từ 0 đến 255. Một nhóm tám bit được gọi là

một byte.

Tốc độ của máy tính phụ thuộc vào số lượng các bit nó có thể xử lý cùng một lúc. Ví

dụ, một máy tính 32-bit có thể xử lý các số 32-bit trong một hoạt động, trong khi một

máy tính 16-bit phải chia số 32-bit thành các phần nhỏ hơn, làm cho nó chậm hơn

(nhưng rẻ hơn!)

II. Giải pháp và gợi ý

- Gợi ý 1 (GY1):

Page 25: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

25 | P a g e

5 = tấm bìa 4 chấm và tấm bìa 1 chấm.

12 = tấm bìa 8 chấm và tấm bìa 4 chấm.

19 = tấm bìa 16 chấm, tấm bìa 2 chấm và tấm bìa 1 chấm.

- Gợi ý 2 (GY2): Số lớn nhất mà bạn có thể làm là 31. nhỏ nhất là 0

- Gợi ý 3 (GY3): 10101 = 21, 11111 = 31

- Gợi ý 4 (GY4): HELP IM TRAPPED

- Gợi ý 5 (GY5): Hoa hậu Flexi-toes có thể đếm 1024 × 1024 = 1,048,576 số từ 0 đến

1,048,575!

- Gợi ý 6 (GY6):

Khi đặt một số 0 bên phải 1 số nhị phân thì số nhị phân đó sẽ tăng gấp đôi.

Vì tất cả giá trị của các số 1 trong số đó sẽ tăng lên gấp đôi, do vậy bản thân số đó sẽ

tăng gấp đôi.

Page 26: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

26 | P a g e

Tổng quan Scratch

Bùi Việt Hà

MỤC ĐÍCH - MISSION của nhóm thiết kế Scratch:

Chúng tôi hỗ trợ một công cụ lập trình mới giúp trẻ suy nghĩ hợp lý hơn, hệ thống hơn, sáng tạo hơn, làm việc nhóm và rèn luyện các kỹ năng cần thiết trong xã hội hôm nay.

CS4S sẽ giới thiệu lần lượt các bài học về môi trường và ngôn ngữ lập trình mới này, đối tượng là tất cả giáo viên và học sinh. Có thể coi đây là chương trình cơ bản về Scratch.

1. Scratch là gì ?

Scratch là một môi trường, ngôn ngữ lập trình "kéo thả" mới xuất hiện trên thế giới và

cũng rất mới đối với Việt Nam. Môi trường lập trình này rất đặc biệt vì nó thích hợp

cho mọi lứa tuổi, mọi ngành nghề và trình độ. Vì sao mọi người cần học môi trường

lập trình này? Vì sao Scratch lại thích hợp cho lứa tuổi thiếu nhi, thiếu niên và phù

hợp cho việc đưa các kiến thức lập trình cho các bậc học này?

Môi trường và ngôn ngữ lập trình Scratch do nhóm nghiên cứu Lifelong Kindegarden

Group thuộc đại học MIT (Massachusetts Institute of Technology) thiết lập đầu năm

2008. Ý tưởng ban đầu của nhóm chỉ là thiết lập một ngôn ngữ lập trình mới, đơn

giản, chỉ dùng kéo thả, dành cho trẻ con để thiết lập trò chơi, phim hoạt hình, ứng

dụng đơn giản, kích thích sự sáng tạo trong môi trường làm việc nhóm của trẻ.

Tuy nhiên Scratch chỉ thực sự bùng nổ từ năm 2014 khi một số quốc gia như Anh, Mỹ

đã đổi mới đột phá chương trình giảng dạy môn Tin học trong nhà trường, đưa nội

dung kiến thức Khoa học máy tính vào nhà trường ngay từ cấp Tiểu học. Một trong

những đề nghị quan trọng nhất của các chương trình này là cần đưa các ngôn ngữ lập

trình đơn giản, dạng kéo thả như Scratch vào giảng dạy trong nhà trường ngay từ Tiểu

học. Việc điều chỉnh chương trình môn Tin học này đã kéo theo sự gia tăng bùng nổ

của Scratch trên phạm vi toàn thế giới. Số lượng học sinh đăng ký tham gia trang

Scratch tăng đột biến cả về số lượng và chất lượng. Thực tế đã chứng minh tính hấp

dẫn của các môi trường lập trình kéo thả như Scratch, sự đam mê lập trình của trẻ nhỏ.

Scratch vô cùng thích hợp cho trẻ lứa tuổi từ 6 đến 14, tức là các cấp Tiểu học, THCS

của Việt Nam. Chính vì vậy trong Chương trình đổi mới giáo dục của Việt Nam sau

2018, Bộ Giáo dục & Đào tạo cũng đã quyết định đưa nội dung kiến thức Khoa học

Page 27: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

27 | P a g e

máy tính trong môn Tin học vào ngay từ cấp Tiểu học, và những ngôn ngữ lập trình

kéo thả như Scratch sẽ là một lựa chọn tốt cho các nhà trường và học sinh.

2. Vài thông tin về môi trường và dự án Scratch

- Scratch là 1 môi trường lập trình ứng dụng đặc biệt, trong đó việc “viết” lệnh sẽ

được thực hiện bằng thao tác “kéo thả”.

- Đầu ra của Scratch hỗ trợ các công nghệ và ứng dụng mới nhất của CNTT-ICT, do

vậy các ứng dụng của Scratch rất phong phú, hấp dẫn, nhất là trẻ nhỏ.

- Scratch có sự phát triển bùng nổ 2 năm trở lại đây. Đặc biệt là sau khi một số quốc

gia có tiềm lực khoa học kỹ thuật mạnh trên thế giới đã quyết đinh đưa Scratch vào

giảng dạy trong nhà trường cho học sinh từ cấp Tiểu học.

- Scratch hoàn toàn miễn phí và có thể chia sẻ rộng rãi trong cộng đồng. Hiện nay trên

Website chính của Scratch (https://scratch.mit.edu/) đã có hơn 15 triệu sản phẩm của

Scratch được chia sẻ bới hơn 12 triệu người sử dụng trên khắp thế giới.

- Scratch rất thích hợp để tạo ra các ứng dụng đồ họa, animation, bài học, bài giảng,

mô phỏng kiến thức, trình diễn, sách điện tử, trò chơi, … rất phù hợp với nhà trường,

giáo viên, học sinh.

- Scratch là môi trường tốt nhất để dạy học sinh làm quen với tư duy máy tính, khoa

học máy tính ngay từ lứa tuổi tiểu học.

3. Hãy bắt đầu lập trình với Scratch

Chúng ta hãy quan sát giao diện của Scratch và nhận diện các vùng trên màn hình.

Thực đơn

Thanh

công cụ

nhanh

Nút trợ

giúp nhanh

Nút trợ

giúp

Sân khấu

Cửa sổ lệnh

Nhân vật

Khu vực tạo

nhân vật

Nút Tab chuyển đổi các

cửa sổ lệnh, trang

phục, âm thanh

Nhóm lệnh

chính

Khu vực tạo

nền sân khấu Khung điều

khiển lệnh

Page 28: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

28 | P a g e

Bây giờ các bạn hãy cùng tôi, chúng ta cùng khám phá thế giới diệu kỳ của Scratch

nhé.

B1. Chuyển động với nhân vật Chúng ta bắt đầu quan sát nhân vật chính (con Mèo) trên nền sân khấu.

Bên phải là cửa sổ lệnh, hay chính là nơi ta cần "lập trình" để điều khiển hoạt động

của nhân vật.

Chúng ta bắt đầu bằng lệnh chuyển động nhân vật.

- Nháy chuột chọn nhóm lệnh Motion.

- Kéo thả lệnh MOVE từ khung điều khiển lệnh (giữa) sang cửa sổ lệnh (bên phải).

Để quan sát và thực hiện lệnh hãy nháy chuột lên lệnh này (lệnh MOVE) trên cửa sổ

lệnh). Quan sát nhân vật chuyển động trên màn hình: dịch chuyển sang phải 10 bước.

Nháy lên dòng lệnh

này để thực hiện

lệnh. Như vậy trên

Scratch việc "lập

trình" thực chất chỉ

là việc kéo thả các

lệnh đã có sẵn vào

khung cửa sổ lệnh

của nhân vật.

Page 29: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

29 | P a g e

B2. Bổ sung thêm âm thanh Chúng ta sẽ làm quen và bổ sung thêm âm thanh nhé.

- Nháy chọn nhóm lệnh Sound.

- Kéo thả lệnh PLAY DRUM sang cửa sổ lệnh, nhớ đưa sát và dính vào lệnh MOVE

đã có trong cửa sổ lệnh. Bạn sẽ thấy 2 lệnh này sẽ hút nhau khi được kéo sát vào nhau.

Bây giờ bạn nháy chuột lên một trong 2 lệnh trên thì cả nhóm 2 lệnh sẽ thực hiện, lần

lượt theo thứ tự từ trêb xuống dưới.

Nháy chuột tại ô này bên

trong lệnh PLAY DRUM

để chọn kiểu trống.

Trên các lệnh có các vị

trí màu trắng dùng để

nhập tham số, dữ liệu

đầu vào cho lệnh

Scratch.

Môi trường lập trình Scratch:

- Mỗi nhân vật có 1 cửa sổ lệnh riêng, chứa các lệnh cần lập trình để điều khiển

nhân vật này.

- Các lệnh được đưa vào bằng cách kéo thả từ khung điều khiển lệnh.

- Các lệnh có thể dính với nhau thành nhóm. Chỉ cần nháy lên 1 lệnh sẽ thực

hiện tất cả các lệnh trong nhóm theo thứ tự từ trên xuống dưới.

Page 30: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

30 | P a g e

B3. Bắt đầu cho nhân vật nhảy múa Chúng ta sẽ bổ sung các lệnh cho nhân vật nhảy múa thực sự nhé.

- Nháy chọn nhóm lệnh Motion.

- Kéo thả lệnh MOVE, sửa tham số của lệnh thành -10.

Tiếp tục:

- Chọn nhóm lệnh Sound và kéo thả lại lệnh PLAY DRUM vào cửa sổ lệnh.

- Thay đổi tham số trống thành 5 (Open Hi-Hat) và kéo dính vào nhóm lệnh gốc.

Bây giờ nếu chạy chúng ta sẽ thấy chú Mèo vừa chạy, nhảy múa trong tiếng trống.

Page 31: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

31 | P a g e

B4. Lặp lại liên tục nhảy múa Muốn cho chú Mèo nhảy múa liên tục trong tiếng trống chúng ta cần cho các lệnh trên

thực hiện lặp lại nhiều lần.

- Nháy chọn nhóm lệnh Control.

- Kéo thả lệnh REPEAT (lặp) sang cửa sổ lệnh, dịch chuyển sau cho lệnh này sẽ ôm

gọn tất cả nhóm lệnh ban đầu vào bên trong 2 thanh ngang của mình. Tham số mặc

định là 10.

Có thể thay thế lệnh REPEAT bằng lệnh FOREVER.

Nhóm các lệnh này sẽ

được thực hiện lặp lại 10

lần (bên trong lệnh

Repeat.

Lệnh Reapeat có tham số

điều khiển số lần lặp.

Nhóm các lệnh này sẽ

được thực hiện lặp lại vô

hạn lần (bên trong lệnh

Forever).

Lệnh FOREVER thực hiện lặp

vô hạn lần.

Page 32: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

32 | P a g e

B5. Nhân vật nói và hội thoại - Chọn nhóm lệnh Looks và kéo thả lệnh SAY ra cửa sổ lệnh.

Sau đó hay nhập trực tiếp "Chào các bạn !" vào vị trí sau chữ SAY và chạy thử để

thấy nhân vật của chúng ta sẽ "nói" như thế nào.

Cuối cùng đưa lệnh này lên trên cùng của nhóm

lệnh như hình bên.

Bạn sẽ thấy nhân vật Mèo của chúng ta sẽ nói

"Chào các bạn !" trong 2 giây.

Page 33: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

33 | P a g e

B6. Tác dụng của lá cờ xanh

Bạn có nhìn thấy nhóm phía trên cửa sổ chính của sân khấu? Chúng ta sẽ

tìm hiểu ý nghĩa và tác dụng của lá cờ xanh.

- Chọn nhóm lệnh Event và kéo thả lệnh sang cửa sổ chính, đưa lên vị

trí đầu tiên của nhóm lệnh đã có.

Bây giờ muốn chạy toàn bộ chương trình chỉ cần nháy lên nút hình lá cờ xanh phía

trên màn hình.

Lệnh này có gì đặc biệt không? Bạn có nhìn thấy 1 đường

cong ở phía trên không? Lệnh này luôn đứng vị trí số 1 trong

dãy lệnh. Ý nghĩa của lệnh: khi nào người dùng nháy lên lá

cờ xanh thì sẽ khởi động thực hiện nhóm các lệnh phía dưới.

Page 34: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

34 | P a g e

B7. Thay đổi màu sắc nhân vật Chúng ta sẽ thêm lệnh làm thay đổi màu sắc của nhân vật, nhưng lần này sẽ thực hiện

theo một cách hoàn toàn khác.

- Chọn nhóm lệnh Looks, sau đó kéo thả lênh CHANGE <Color> EFFECT BY ra cửa

sổ lệnh.

Nháy trực tiếp lên lệnh để quan sát sự thay đổi màu sắc của nhân vật.

Dãy hình dưới đây là kết quả của việc thực hiện liên tiếp lệnh này.

Bạn đã biết gì về môi trường lập trình Scratch:

- Cửa sổ lệnh chứa các lệnh Scratch do người dùng taoh ra bằng cách kéo thả

lệnh từ khung điều khiển lệnh.

- Các lệnh có khả năng kết dính lại với nhau thành 1 nhóm. Khi chạy các lệnh

trong nhóm sẽ thực hiện lần lượt từ trên xuống.

- Các lệnh có hình cong phía trên (ví dụ các lệnh WHEN CLICKED) sẽ

luôn ở vị trên cùng của nhóm lệnh.

- Nháy lên nút hình lá cờ màu xanh để bắt đầu chạy chương trình.

Page 35: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

35 | P a g e

B8. Thử bấm một phím Chúng ta sẽ thực hiện trong bước này một lệnh mới, cho phép dùng phím để điều

khiển hoạt động nhân vật, cụ thể là điều khiển nhân vật thay đổi màu sắc.

- Chọn nhóm lệnh Events, kéo thả lệnh when <space> key pressed vào cửa sổ lệnh,

đặt ngay cạnh và phía trên của lệnh thay đổi màu sắc đã có.

Phím điều khiển mặc định là Space, có thể lựa chọn phím bất kỳ khác nếu muốn.

Bây giờ chúng ta có thể chạy chương trình (bằng cách nháy nút hình lá cờ xanh), quan

sát nhân vật nhảy múa, đồng thời dùng phím space để điều khiển Mèo thay đổi màu

sắc.

Có thể chọn phím khác

tại đây.

Page 36: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

36 | P a g e

B9. Bổ sung nền sân khấu Thực hiện theo các bước sau để bổ sung thêm nền sân khấu.

2. Chọn

hình nền

này và

bấm nút

OK.

1. Nháy vào nút

này

3. Kết quả

hiện như

hình bên.

Page 37: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

37 | P a g e

B10. Bổ sung thêm nhân vật Thực hiện theo các bước sau để bổ sung thêm nhân vật trên sân khấu.

2. Chọn

nhân

vật này

và bấm

nút OK

1. Nháy nút này

3. Nhân vật hiện ra trên sân khấu. Bên

phải là cửa sổ lệnh của nhân vật này.

Page 38: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

38 | P a g e

B11. Hãy cùng khám phá Scratch Chúng ta hãy cùng khám phá Scratch bằng nhiều cách khác nữa và trong các bài học

tiếp theo.

Ví dụ có thể thiết lập các lệnh mới trong cửa sổ lệnh của nhân vật mới được đưa vào.

Bây giờ khi nháy nút hình lá cờ chúng ta sẽ thấy cả 2 nhân vật cùng chuyển động theo

các lệnh đã được lập trình trước.

Page 39: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

39 | P a g e

Góc thuật toán - Algorithm

Xếp số thứ tự trong ma trận vuông Bùi Việt Hà

Góc thuật toán bao gồm những bài viết, bản dịch mô tả thuật toán, các bài toán, bài tập cần tư duy thuật toán để giải. Trong chuyên mục này chúng tôi cũng sẽ giới thiệu các cuốn sách, biên dịch các bài viết hay về thuật toán và cấu trúc dữ liệu của các tác giả nổi tiếng. Rất mong nhận được nhiều bài viết trong chuyên mục nhỏ nhưng rất hấp dẫn này của CS4S.

Đề bài:

Điền các số thứ tự 1, 2, ...., NxN vào 1 lưới ô vuông N x N theo hướng sau:

a) Từ ngoài vào, theo chiều kim đồng hồ.

b) Từ trong ra, theo chiều kim đồng hồ.

Lời giải

Lời giải đơn giản nhất của bài toán này là làm sao chỉ cần 1 bước duyệt, đi tới đâu,

gán giá trị vào lưới tới đó. Do vậy phương án giải hợp lý nhất phải là:

for i : = 1 to N*N do ........< gán giá trị tương ứng (giá trị là số i) cho ô lưới> .......

Chúng ta cùng phân tích và tìm lời giải theo hướng này.

Ma trận được thể hiện bằng 1 mảng 2 chiều a[i,j] và thể hiện như sau:

a11 a12 .... a1N

a21 a22 ... a2N

........

aN1 aN2 ... aNN

Có 2 nhận xét quan trọng sau:

a) b)

Page 40: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

40 | P a g e

1. Mỗi lần tiến 1 bước, giá trị được gán vào ô lưới tương ứng sẽ được tăng lên 1 đơn

vị. Khi đi đến bước cuối cùng, số N2 được gán thì vừa lúc kết thúc.

2. Quan trọng là bước đi trên lưới theo hướng nào để gán các giá trị vào ô lưới. Có 4

hướng:

0: đi sang phải (right-dir). Bước đi như sau: (i,j) ---> (i,j+1)

1: đi xuống dưới (down-dir). Bước đi như sau: (i,j) ---> (i+1,j)

2: đi sang trái (left-dir). Bước đi như sau: (i,j) ---> (i,j-1)

3: đi lên trên (up-dir). Bước đi như sau: (i,j) ---> (i-1,j)

Ý tưởng thuật toán như sau:

Mỗi bước đi, sau khi gán số hiện thời cần bước thêm 1 bước theo 1 trong các hướng

trên. Căn cứ vào vị trí và hướng hiện thời để xác định hướng tiếp theo.

Hàm (hay thủ tục) Next_Direction() sẽ xác định hướng chuyển động tiếp theo tính từ

vị trí hiện thời. Hàm này có dạng sau:

function GetNextDir(x, y: integer, CurrDir: Byte): Byte;

Trong đó (x, y) là vị trí ô lưới hiện thời, CurrDir là hướng đi hiện thời.

Hàm số này sẽ trả lại giá trị là hướng đi tiếp theo

Hàm này có thể viết đơn giản như sau:

function GetNextDir(x, y: integer, CurrDir: Byte): Byte;

var

k, NewDir : integer;

begin

NewDir : = CurrDir;

If CurrDir = 0 then

begin

y : = y+1;

if (y > N) or ((y <=N) and (a[x,y]>0))

then NewDir : =1;

end;

If CurrDir = 1 then

begin

x := x+1;

If (x > N) or ((x <= N) and (a[x,y] > 0))

then NewDir : = 2;

end;

If CurrDir = 2 then

begin

y:= y-1;

If (y = 0) or ((y > 0) and (a[x,y] > 0))

then NewDir : = 3;

end;

If CurrDir = 3 then

Page 41: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

41 | P a g e

begin

x:=x-1;

If (x = 0) or ((x > 0) and (a[x,y] > 0))

then NewDir : = 0;

end;

GetNextDir : = NewDir;

end;

Phần thiết lập ban đầu của chương trình như sau:

for i:=1 to N do

for j:=1 to N do a[i,j]:=0;

i:=1; j:= 1; Currdir := 0;

Bây giờ có thể viết đoạn chương trình mô tả phần chính của chương trình.

for k : = 1 to N*N do

begin

a[i,j]:= k;

if k = N*N then Exit;

CurrDir:= GetNextDir(i,j,CurrDir);

Case CurrDir of

0: j : = j+1;

1: i : = i+1;

2: j : = j-1;

3: i : = i-1;

end;

Với bài câu b) thì cách giải tương tự bài trên, điểm khác biệt chỉ là gán dãy số theo thứ

tự ngược từ N*N ---> 1.

Do vậy điểm khác chỉ là 1 dòng lệnh trong lệnh for như sau:

for k : = N*N downto 1 do

begin

a[i,j] : = k;

CurrDir : = GetNextDir(i,j,CurrDir);

Case CurrDir of

0: j : = j+1;

1: i : = i+1;

2: j : = j-1;

3: i : = i-1;

end;

Nếu không sử dụng hàm hoặc thủ tục thì chương trình có thể viết như sau.

Chương trình viết trên Pascal:

Var

Page 42: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

42 | P a g e

i,j,i1,j1,k,N : integer;

CurrDir, NewDir : byte;

a: array[1..100,1..100] of integer;

Begin

write("Nhap kich thươc Ma tran:");

Readln(N);

for i:=1 to N do

for j:=1 to N do a[i,j] : =0;

i :=1; j := 1; Currdir : = 0;

for k : = 1 to N*N do

begin

a[i,j] : = k;

NewDir : = CurrDir;

If CurrDir = 0 then //right-dir

begin

j1 : = j+1;

if (j1 > N) or ((j1 <=N) and (a[i,j1]>0))

then NewDir : =1;

end;

If CurrDir = 1 then //down-dir

begin

i1:=i+1;

If (i1 > N) or ((i1 <= N) and (a[i1,j] > 0))

then NewDir : = 2;

end;

If CurrDir = 2 then //left-dir

begin

j1:=j-1;

If (j1 = 0) or ((j1 > 0) and (a[i,j1] > 0))

then NewDir : = 3;

end;

If CurrDir = 3 then //up-dir

begin

i1:=i-1;

If (i1 = 0) or ((i1 > 0) and (a[i1,j] > 0))

then NewDir : = 0;

end;

CurrDir : = NewDir;

Case CurrDir of

0: j : = j+1;

1: i : = i+1;

2: j : = j-1;

3: i : = i-1;

end;

end;

for i : = 1 to N do

begin

Page 43: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

43 | P a g e

for j:=1 to N do write(a[i,j]:4);

writeln;

end;

end.

Chương trình viết trên C++:

#include <iostream>

using namespace std;

int main( )

{

int i,j,N;

short CurrDir, NewDir;

int a[100][100];

cout << "Nhap kich thuoc Ma tran: ";

cin >> N;

for(i=0;i<=N;i++)

for(j=0;j<=N;j++) a[i][j]=0;

i=1;j=1;CurrDir=0;

for(int k=1;k<=N*N;k++)

{

a[i][j]=k;

NewDir = CurrDir;

if(CurrDir==0)// right-dir

{

int j1=j+1;

if((j1 > N)||((j1 <=N)&&(a[i][j1]>0)))

NewDir=1;

}

if(CurrDir==1)//down-dir

{

int i1=i+1;

if((i1 > N)||((i1 <= N)&&(a[i1][j]>0)))

NewDir=2;

}

if(CurrDir==2) //left-dir

{

int j1=j-1;

if((j1 == 0)||((j1 > 0)&&(a[i][j1] > 0)))

NewDir=3;

}

if(CurrDir==3) //up-dir

{

int i1=i-1;

if((i1 == 0)||((i1 > 0)&&(a[i1][j] > 0)))

NewDir =0;

}

Page 44: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

44 | P a g e

CurrDir = NewDir;

switch(CurrDir)

{

case 0: j++; break;

case 1: i++; break;

case 2: j--; break;

case 3: i--; break;

}

}

for(i=1;i<=N;i++)

{

for(j=1;j<=N;j++)

{

cout.width(4);

cout << a[i][j];

}

cout << "\n";

}

return 0;

}

Hình ảnh chương trình chạy trên Pascal và C++:

Chú ý:

Các chương trình trên được viết trên Lazarus và CodeBlocks.

Page 45: CS4S Số 1(8) 2016

CS4S. Computer Science for Schools

45 | P a g e

Danh sách cộng tác viên CS4S

Danh sách các bạn cộng tác viên trực tiếp tham gia vào ấn phẩm CS4S số 1:

Phạm Thị Nga, giáo viên tin trường chuyên Lam Sơn, Thanh Hoá.

Trần Thị Hiên, giáo viên Tin học tại THPT Nam Cao, Lý Nhân, Hà Nam.

Đào Giang Lâm, chuyên viên Phòng CNTT, Sở GD&ĐT Nghệ An.

Danh sách các bạn cộng tác viên khác:

Nguyễn Tấn Phong. Giáo viên Toán - Tin, trường THCS Đồng Nai, Cát Tiên, Lâm

Đồng.

Phạm Phương Lê. Sư phạm vật lý, thạc sỹ giáo dục.

Lê Thanh Hoài, giáo viên tin học trường THCS Lê Minh Xuân, Long An.

Chúng tôi mong muốn nhận được nhiều hơn nữa danh sách các bạn cộng tác

viên cùng tham gia, đóng góp cho ấn phẩm này.

Danh sách nhóm sáng lập:

Bùi Việt Hà

Bùi Văn Thanh

Ngô Ánh Tuyết

Phạm Thế Long

Hồ Cẩm Hà

Nguyễn Thanh Xuân

2016