SKKN Xây dựng hệ thống bài tập tin học theo kịp sự thay đổi dạy ngôn ngữ lập trình c++ và phù hợp với năng lực học sinh tại cấp trung học cơ sở
Các thầy cô cần file liên hệ với chúng tôi tại fanpage facebook O2 Education
Hoặc xem nhiều SKKN hơn tại: Tổng hợp SKKN luận văn luận án O2 Education
Điều kiện hoàn cảnh tạo ra sáng kiến:
– Nhu cầu của xã hội ngày càng lớn cùng với sự phát triển của khoa học kỹ
thuật đã kéo theo sự phát triển nhƣ vũ bão của tin học. Sự phát triển của tin học
đã đem lại hiệu quả to lớn cho hầu hết các lĩnh vực của xã hội, hơn thế nữa nó
còn đi sâu vào đời sống của con ngƣời. Nền tin học của một quốc gia đƣợc xem
là sự phát triển nếu nó đóng góp đƣợc phần đáng kể vào nền kinh tế quốc dân và
vào kho tàng tri thức chung của thế giới.
– Tiếp nữa phong trào thi học sinh giỏi Tin học diễn ra trên khắp các tỉnh
thành ở nƣớc ta nói riêng và các nƣớc trên thế giới nói chung hƣớng tới các mục
đích:
+ Đẩy mạnh phong trào dạy và học Tin học nhằm đáp ứng các yêu cầu
của cuộc sống đang đƣợc tin học hóa sâu rộng trong mọi lĩnh vực.
+ Phát hiện các học sinh có năng khiếu để đào tạo và phát triển nguồn
nhân lực đỉnh cao, có tri thức và có tay nghề theo kịp sự phát triển của xã hội.
– Việc đào tạo, bồi dƣỡng học sinh giỏi Tin học chịu tác động rất nhiều của
hai yếu tố:
+ Sự phát triển của lý thuyết,
+ Sự phát triển của công cụ Tin học.
– Do vậy, Việt Nam nói chung và ngành giáo dục đào tạo nói riêng phải đầu tƣ
phát triển về mọi mặt. Đặc biệt là nguồn nhân lực tri thức tức là phải đào tạo ra một
thế hệ trẻ năng động, thông minh, độc lập, sáng tạo, nắm vững tri thức khoa học
công nghệ để làm chủ trong mọi hoàn cảnh công tác và hoạt động xã hội nhằm đáp
ứng đƣợc nhu cầu trong thời kì công nghiệp hoá, hiện đại hoá đất nƣớc. Là bối
cảnh tôi viết sáng kiến này.
II. Mô tả giải pháp kỹ thuật:
2.1. Mô tả giải pháp kỹ thuật trước khi tạo ra sáng kiến:
2.1.1 Thực trạng chung về môn tin học ở địa phương:
Vấn đề chung
2
– Theo kết quả khảo sát, phần lớn các trƣờng đều gặp phài một số vấn đề về cơ
sở vật chất nhƣ:
+ Thiếu phòng máy tính, máy chiếu phục vụ dạy lý thuyết và thực hành.
+ Phòng máy tính số lƣợng máy hỏng còn nhiều, máy cũ với cấu hình thấp gây
khó khăn cho việc cài đặt các phần mềm phiên bản cao phục vụ học tập, tốc độ
máy chậm, chạy không ổn định ảnh hƣởng đến chất lƣợng các buổi học thực
hành.
– Vị thế của môn Tin học trong các trƣờng THPT chỉ là môn “tự chọn” vì thế
chƣa nhận đƣợc sự quan tâm của nhà trƣờng cũng nhƣ phụ huynh và học sinh:
học sinh chỉ học để đối phó, nhà trƣờng chỉ tổ chức dạy cho đúng yêu cầu, phụ
huynh không khuyến khích ủng hộ con em yêu thích đam mê môn học, thậm chí
nhiều phụ huynh còn cấm con em họ tham gia thi học sinh giỏi môn Tin học, tạo
áp lực cho giáo viên và nhà trƣờng để con em học đƣợc ra khỏi đội tuyển .
– Phần lớn giáo viên môn Tin học đều phải kiêm nhiệm rất nhiều công tác khác
nhau nên ảnh hƣởng không nhỏ tới chất lƣợng giảng dạy. Vấn đề trên dẫn tới
tâm lý học sinh chán học, giáo viên chán dạy nên chất lƣợng môn Tin học trong
trƣờng THPT không đáp ứng đƣợc mục đích, yêu cầu của môn học.
Đặc biệt với môn Lập trình trong tin học lớp 8, là môn học đƣợc đánh giá là khó
thì việc dạy và học càng trở lên “đối phó”.
Vấn đề của học sinh khi học lập trình
– Các bài tập áp dụng công thức toán học quá nhiều, học sinh phải có kiến thức
tốt về toán thì mới có thể làm đƣợc các bài tập trong sách giáo khoa.
– Phần lớn các bài tập chỉ liên quan đến tính toán, thuần về toán học, không liên
quan đến thực tiễn do đó học sinh chƣa hiểu đƣợc lập trình để làm gì ngoài viêc
tính toán với các con số.
– Phần lớn học sinh chỉ cố hoàn thành các bài tập giáo viên cho một cách bị
động, không kích thích tƣ duy tính sáng tạo, không thu hút sự chú ý của học
sinh, do đó học sinh học chỉ để đối phó với môn học.
3
– Với ngôn ngữ lập trình, học sinh khó liên hệ với việc xây dựng các ứng dụng
trong thực tế, vì thế học sinh không hình dung hết vai trò của sản phẩm lập trình
trong cuộc sống hàng ngày.
Vấn đề của giáo viên tin học cấp THCS
– Nhiều trƣờng giáo viên Tin học là các thầy cô đƣợc đào tạo chuyên ngành
Toán – Tin (trong đó chƣơng trình Toán là chủ yếu), vì thế dẫn đến việc lúng
túng trong giảng dạy môn Tin học, đặc biệt là việc ứng dụng kiến thức trong
sách giáo khoa vào thực tế và việc cập nhật các kiến thức mới cho học sinh.
– Số lƣợng học sinh/lớp ở các trƣờng THPT khá cao (trung bình 45 – 55 học
sinh) gây khó khăn rất lớn cho giáo viên khi hƣớng dẫn học sinh thực hành. Bên
cạnh đó cơ sở vật chất còn thiếu và lạc hậu cũng dẫn tới chất lƣợng các tiết học
thực hành không cao.
– Với tâm lý là môn học “tự chọn”, nên nhiều giáo viên không yêu thích và đam
mê với công tác giảng dạy chuyên môn, lại phải kiêm nhiệm nhiều công tác
khác nên cũng không có nhiều thời gian để giáo viên đầu tƣ cho soạn giáo án,
thiết kế chƣơng trình đổi mới phƣơng pháp giảng dạy hay tự bồi dƣỡng chuyên
môn.
Vấn đề về tài liệu tham khảo và trao đổi học hỏi
-Tài liệu tham khảo lập trình tiếng Việt có ít và hạn chế. Các tài liệu và wed bài
tập là tiếng Anh hay nhƣng rất mất công để tự dịch là hạn chế lớn nhất khi tìm
kiếm tài liệu.
– Hơn nữa nơi trƣờng tôi công tác chỉ có bản thân tôi dạy Tin học nên việc trao
đổi chuyên môn với đồng nghiệp còn nhiều hạn chế và khó khăn.
Vấn đề thay đổi ngôn ngữ lập trình trong chương trình tin học lớp 8
– Dạy và thi học sinh giỏi tin học ở tỉnh Nam Định cũng diễn ra nhiều năm ở
hai cấp học THCS và THPT. Bắt đầu từ năm học 2017-2018, Sở Giáo dục và
Đào tạo bắt đầu triển khai giảng dạy ngôn ngữ lập trình C++ với hệ thống lập
trình CodeBlocks cho các trƣờng THCS và THPT trong toàn tỉnh mà hiện tại
4
chƣa có sách giáo khoa cũng nhƣ sách bài tập làm tài liệu giảng dạy cho học
sinh (Đây là lí do cấp thiết tôi viết báo cáo sáng kiến này.)
Nói tóm lại để giải quyết các thực trạng nêu trên, báo cáo sẽ xây dựng để đáp
ứng yêu cầu đề ra và mong muốn chia sẻ kinh nghiệm về dạy ngôn ngữ lập trình
C++ cho đối tƣợng HS phổ thông trên lớp với vấn đề 1: “Tài liệu cung cấp tạm
thời thay thế ngôn ngữ lập trình Pascal sang ngôn ngữ lập trình C++ dạy ở
THPT” và dạy ngôn ngữ lập trình C++ cho đối tƣợng học sinh giỏi phổ thông thi
học sinh giỏi với vấn đề 2 “ Sử dụng ngôn ngữ lập trình C++ dạy học sinh
giỏi”. Tôi mạnh dạn viết sáng kiến này và lấy tên chuyên đề cho sáng kiến kinh
nghiệm của tôi là “ XÂY DỰNG HỆ THỐNG BÀI TẬP TIN HỌC THEO KỊP SỰ THAY
ĐỔI DẠY NGÔN NGỮ LẬP TRÌNH C++ VÀ PHÙ HỢP VỚI NĂNG LỰC HỌC SINH
TẠI CẤP TRUNG HỌC CƠ SỞ ”
2. Mô tả giải pháp kỹ thuật sau khi có sáng kiến:
Trƣớc thực trạng trên tôi nhận thấy trang bị kiến thức về ngôn ngữ lập trình
chƣa bao giờ là một vấn đề cũ vì công nghệ thông tin là sự phát triển từng ngày,
từng giờ và không ngừng thay đổi.
Điều quan trọng nắm vững là kỹ thuật lập trình và tổ chức dữ liệu. Khi đã biết
tƣơng đối tốt một ngôn ngữ lập trình thì việc chuyển sang lập trình ở một hệ
thống lập trình mới hơn là khá đơn giản.
Đƣơng nhiên, khi chọn một ngôn ngữ nào đó làm công cụ cho mình ngƣời lập
trình cần phải:
+ Biết rõ những điểm mạnh và yếu của ngôn ngữ cũng nhƣ của hệ thống
hệ thống lập trình hỗ trợ,
+ Cần nắm vững các dịch vụ mà hệ thống lập trình cung cấp,
+ Cần có thói quen suy nghĩ và hành động phù hợp với ngôn ngữ và hệ
thống lập trình.
+ Cần biết càng sâu càng tốt các thư viện chuẩn hỗ trợ lập trình và biết
khai thác chúng một cách tối ưu.
5
Sau đâu tôi xin đƣa ra các định hƣớng phát triển năng lực, các phƣơng pháp,
phƣơng tiện hình thức tổ chức dạy học, phƣơng pháp đánh giá là cơ sở để xây
dựng hệ thống bài tập trên:
2.2.1 Năng lực cần hình thành cho học sinh qua môn tin học ở nhà trường:
Môn Tin học giúp cho học sinh hình thành và phát triển năng lực sử dụng CNTT
và truyền thông (ICT) nhƣ là một công cụ để mở rộng khả năng tiếp nhận tri
thức và sáng tạo trong bối cảnh bùng nổ thông tin, đáp ứng yêu cầu của thời đại
số hóa và toàn cầu hóa biến quá trình đào tạo thành quá trình tự đào tạo. Cụ thể,
môn Tin học hình thành và phát triển cho học sinh:
Khi có các năng lực trên học sinh sẽ xác định đƣợc thông tin cần thiết để thực
hiện nhiệm vụ học tập; lập kế hoạch và tìm kiếm đƣợc thông tin với các chức
6
năng tìm kiếm đơn giản; biết tổ chức thông tin phù hợp; biết đánh giá sự phù
hợp của thông tin, dữ liệu đã tìm thấy với nhiệm vụ đặt ra; biết cách tiếp nhận
thuật toán và nguyên tắc chuyển giao thuật toán cho máy tính. Trải nghiệm đƣợc
sự thành công trong tự động hóa giải quyết vấn đề nhờ vào việc chuyển giao
thuật toán đơn giản cho thiết bị .
2.2.2 Đổi mới phương pháp, nội dung theo định hướng năng lực cho học
sinh qua môn tin học ở nhà trường:
Phƣơng pháp dạy học của giáo viên có vai trò rất quan trọng, nó sẽ là công
cụ giúp học sinh hứng thú học tập hơn. Hơn nữa, trong xu thế xã hội ngày càng
phát triển, sự đổi mới của đất nƣớc, nền giáo dục cũng có những thay đổi căn
bản cả về nội dung lẫn phƣơng pháp dạy học và ngày càng hội nhập sâu vào sự
tiến bộ chung của các nền giáo dục trong khu vực và trên thế giới. Vì vậy việc
vận dụng các phƣơng pháp dạy học tiến bộ, tích cực trong tất cả các môn học
nói chung cũng nhƣ trong giảng dạy môn Tin học nói riêng cũng là phù hợp với
xu thế chung của nền giáo dục hiện đại theo hƣớng phát huy tính tích cực của
học sinh nhằm nâng cao chất lƣợng giáo dục của môn học.
Tin học là một môn học mang tính khoa học và công nghệ, tốc độ phát
triển và thay đổi rất nhanh, diễn ra hàng ngày, hàng giờ và thậm chí hàng giây.
Vì vậy khi giảng dạy, giáo viên nên hƣớng cho học sinh ý thức tự học, tự tìm tòi
nghiên cứu, học thông qua nhiều nguồn khác nhau, đổi mới phƣơng pháp trong
giảng dạy, sử dụng các phƣơng tiện dạy học mới nhƣ học qua mạng, soạn giáo
án điện tử, kiểm tra trắc nghiệm trên máy, sử dụng đồ dùng dạy học trực quan,
máy chiếu projector… để phát huy đƣợc tính tích cực, tự giác học tập của học
sinh. Tóm lại để nâng cao chất lƣợng giáo dục, theo kịp với nền giáo dục hiện
đại theo tôi cần phải đổi mới phƣơng pháp dạy học sao cho có hiệu quả nhất tôi
xin trình bày các phƣơng pháp sau:
7
8
2.2.3 Đánh giá trong giáo dục tin học là đánh giá năng lực và phẩm chất
đạt được.
– Bám sát yêu cầu cần đạt của mỗi chủ đề con triển khai ở từng cấp, từng lớp.
Các yêu cầu cần đạt trong chƣơng trình nêu các biểu hiện của học sinh với
những “minh chứng” có thể “đo” đƣợc.
– Khác với trƣớc đây, đánh giá trong chƣơng trình tiếp cận năng lực xoay quanh
các câu hỏi “học sinh làm đƣợc gì? Học sinh vận dụng đƣợc kiến thức và kĩ
năng để giải quyết vấn đề đặt ra hay không?”. Vì vậy cần coi trọng việc đánh giá
khả năng vận dụng kiến thức , kĩ năng tin học để giải quyết vấn đề thực tiển
không chỉ ở những tình huống trong trƣờng mà cả ở nhà và ngoài xã hội. GV
nên chủ động đánh giá qua sản phẩm của học sinh và độ hoàn thiện của sản
phẩm khi đối sánh với nhiệm vụ thực tế đặt ra.
– Nhờ hoạt động đánh giá thƣờng xuyên và định kì mà các cấp quản lí, giáo viên,
phụ huynh học sinh có đƣợc thông tin: Chính xác, kịp thời, có giá trị về mức độ
đáp ứng yêu cầu cần đạt; sự tiến bộ của học sinh. Các hoạt động đánh giá phải
đƣợc tổ chức phục vụ cho quá trình dạy học phát triển phẩm chất và năng lực,
không thể để cho tình trạng “thi gì họcnấy” xảy ra nhƣ thời gian qua.
– Có 3 mức độ đánh giá chính là BIẾT, HIỂU và VẬN DỤNG, tùy ngữ cảnh và
yêu cầu cụ thể trong mô tả có thể có sự phân biệt chi tiết hơn.
– Đánh giá năng lực tin học trên diện rộng, toàn quốc phải căn cứ trên chuẩn cần
đạt đối với các chủ đề bắt buộc, tránh xây dựng công cụ đánh giá dựa vào sách
giáo khoa hay các chủ đề tuỳ chọn cụ thể.
2.2.4 Xây dựng hệ thống bài tập và các điểm mới:
Quan điểm của tôi khi hệ thống hóa bài tập phải dựa vào 10 điểm mới của môn
Tin học trong chƣơng trình phổ thông mới.
9
1. Tin học là môn bắt buộc
Ở bậc THCS, môn Tin học có vị trí bình đẳng với các môn khác nhƣ Vật lý,
Hóa học, Sinh học, Lịch sử, Địa lý… và đƣợc phân hóa theo hai định hƣớng:
Tin học ứng dụng và Khoa học máy tính.
Hình ảnh ngày hội khoa học kỹ thuật và stem đầu năm 2020.
2. Tiếp cận theo năng lực và có tính mở
Chƣơng trình môn Tin học đƣợc xác định là môn cốt lõi giúp hình thành và phát
triển cho học sinh năng lực tin học.
Hình ảnh 1 tiết học tự chọn tin học trong trường
3. Ba mạch kiến thức hòa quyện
Môn Tin học cung cấp cho học sinh 3 mạch kiến thức: Học vấn số hóa phổ
thông (DL), Công nghệ thông tin và truyền thông (ICT) và Khoa học máy tính
(CS). Mạch kiến thức này giúp học sinh bƣớc đầu hiểu các nguyên tắc cơ bản và
thực hành của tƣ duy máy tính, tƣ duy tự động hóa, có khả năng thích ứng với
những tiến bộ và thiết bị công nghệ số mới sẽ xuất hiện trong tƣơng lai và tạo
nền tảng cơ bản cho việc thiết kế, phát triển các hệ thống máy tính.
10
Biểu đồ Ba mạch kiến thức CS, DL và ICT hòa quyện trong chương trình môn tin học
4. Cách tiếp cận mới về thuật toán và lập trình
Trong hệ thống bài tập, nội dung lập trình và thuật toán dạy tập trung chú trọng
phƣơng pháp dạy học tích cực, ở giai đoạn giáo dục cơ bản sử dụng các ngôn
ngữ lập trình trực quan, hiện đại, phù hợp với lứa tuổi, giúp học sinh tự làm ra
đƣợc sản phẩm số, gây hứng thú học tập và sáng tạo.
Hình ảnh tiếp cận các vần đề bằng cách dùng thuật giải và viết lập trình.
5. Chú trọng thực hành trải nghiệm sáng tạo và làm ra sản phẩm số
Việc dạy học thông qua các dự án, bài tập giải quyết vấn đề cụ thể, thiết thực,
nhằm khuyến khích học sinh vận dụng kiến thức, kỹ năng các môn học áp dụng
công nghệ số để hiểu và giải quyết vấn đề thực tế trong môi trƣờng số, sáng tạo
ra các sản phẩm của cá nhân, của nhóm.
11
Hình ảnh học sinh học nhóm tin học chuẩn bị thi học sinh giỏi thành phố.
6. Văn hóa ứng xử trong thế giới số
Nói về tầm quan trọng của giáo dục đạo đức, pháp luật và văn hóa ứng xử trong
thế giới số, một số chuyên gia nhận định: “Trong thời đại có sự kết nối cao của
thế giới thực và thế giới ảo, nội dung về đạo đức, văn hóa, pháp luật cần phải
đƣợc quan tâm đúng mức”.
Hình ảnh học sinh học trực tuyến tự chọn tin khi có dịch covid đầu năm 2020.
7. Chú trọng định hƣớng nghề nghiệp
Trong thời đại số, Tin học cần thiết cho mọi ngành nghề, đặc biệt là các ngành
nghề thuộc lĩnh vực tin học.
• • • •
Hình ảnh học sinh làm bài tập trong tiết tự chọn tại trường.
12
8. Chú trọng giáo dục STEM, tài chính, bình đẳng giới
Hệ thống bài tập thông qua một số chủ đề học tập, đặc biệt thông qua hoạt động
trải nghiệm sáng tạo làm ra sản phẩm nhằm góp phần hình thành và phát triển
phẩm chất năng lực chung và năng lực đặc thù môn Tin học, đồng thời còn góp
phần giáo dục hƣớng nghiệp, giáo dục CS- STEM, giáo dục bình đẳng giới và
giáo dục tài chính.
Hình ảnh ngày hội khoa học kỹ thuật và stem đầu năm 2020.
9. Chú trọng giáo dục CPS (cyber-physical system)
Chƣơng trình tích hợp các hệ thống kỹ thuật số, hệ thống vật lý, các cảm biến,
truyền động và yếu tố con ngƣời trên cơ sở hạ tầng mạng để cung cấp một hệ
thống tƣơng tác.
Hình ảnh học sinh học trực tuyến trong kì nghỉ dịch đầu năm 2020.
10. Chƣơng trình học tƣơng đƣơng chƣơng trình các quốc gia khác
Hệ thống bài tập tin học mới đã kế thừa những ƣu điểm trong chƣơng trình hiện
hành và tiếp thu khai thác chƣơng trình Tin học ở các nƣớc tiên tiến, đặc biệt là
Anh và Mỹ.
13
Yêu cầu cần đạt về kết quả học tập có sự phù hợp và có sự tăng trƣởng cấp độ
cho các chủ đề ở mỗi cấp. Vì vậy, chƣơng trình Tin học của Việt Nam có sự
tƣơng đƣơng nhƣ chƣơng trình của các quốc gia khác”.
Hình ảnh học sinh học đang ôn thi.
Nếu có cách tiếp cận hợp lý thì những vấn đề trên có thể giải quyết đƣợc một
cách khá đơn giản và hiệu quả.
Ở nƣớc ta, trong bậc PTTH hệ thống lập trình đƣợc sử dụng phổ biến là ngôn
ngữ PASCAL với hệ thống lập trình Free Pascal và ngôn ngữ C++ với hệ thống
lập trình CodeBlocks. Việc trang bị công cụ cho học sinh năng khiếu, phục vụ
cho các kỳ thi Tin học là vấn đề ta cần xem xét và xử lý.
Trong chuyên đề này tôi tập trung vào giải các bài toán bằng ngôn ngữ lập trình
C++ với các câu hỏi từ lý thuyết đến bài tập phổ thông để từ đó đánh giá và tìm
kiếm đƣợc học sinh chăm ngoan, có tố chất, yêu thích môn học tuyển chọn vào
đội tuyển và các dạng bài tập nâng cao cho đối tƣợng học sinh giỏi (các bài tập
đƣợc chạy trên hệ thống lập trình CodeBlocks)
2.2.5 Vấn đề 1:
Sau khi đã xây dựng các cơ sở lý luận trên tôi đã mạnh dạn chia vấn đề 1: “
Tài liệu cung cấp tạm thời thay thế ngôn ngữ lập trình Pascal sang ngôn ngữ lập
trình C++ dạy ở THPT” làm 9 chủ đề cơ bản ( tƣơng tự nhƣ ngôn ngữ pascal cũ
đã dạy những năm trƣớc) đó là:
14
Dƣới đây là kiến thức trọng tâm, hệ thống bài tập cụ thể có kèm theo hƣớng dẫn
trong từng chủ đề:
15
Vấn đề 1.
Chủ đề 1: Máy tính và chƣơng trình máy tính.
A. Kiến thức của chủ đề cần quan tâm:
B. Bài tập đề nghị sử dụng trong chủ đề:
Câu 1: Khi soạn thảo văn bản trên máy tính và yêu cầu chƣơng trình tìm kiếm
một cụm từ trong văn bản và thay thế bằng một cụm từ khác, thực chất ta đã yêu
cầu máy tính thực hiện những lệnh gì? Có thể thay đổi thứ tự những lệnh đó mà
vẫn không thay đổi kết quả đƣợc không?
Câu 2: Trong ví dụ về rô-bốt, nếu thay đổi thứ tự của hai lệnh trong chƣơng
trình, rô-bốt có thực hiện đƣợc công việc nhặt rác không? Hãy xác định vị trí
mới của rô-bốt sau khi thực hiện xong lệnh “Hãy quét nhà” và đƣa ra các lệnh
để rô-bốt trở lại vị trí ban đầu của mình.
Câu 3: Hãy cho biết lí do cần phải viết chƣơng trình để điều khiển máy tính.
Câu 4: Tại sao ngƣời ta phải tạo ra các ngôn ngữ lập trình trong khi có thể điều
khiển máy tính bằng ngôn ngữ máy?
Chương trình là một tập hợp các câu lệnh để chỉ dẫn cho máy
tính giải một bài toán. Thực hiện các câu lệnh đó , máy tính sẽ
cho lời giải của bài toán đã cho.
Viết chương trình hay lập chương trình còn được gọi là lập
trình. Chương trình phải được viết bằng một ngôn ngữ lập
trình, ví dụ như ngôn ngữ lập trình C++.
• Phần mềm dùng để soạn thảo chương trình, đồng thời cho phép
dịch và thực hiện chương trình được gọi là môi trường lập trình.
Ví dụ, để soạn thảo chương trình bằng ngôn ngữ lập trình C++,
ta có thể sử dụng phần mềm C Free hoặc codeblock
Chương trình dịch làm nhiệm vụ chuyển đổi chương trình viết
bằng ngôn ngữ lập trình sang ngôn ngữ máy. Ngôn ngữ máy là
ngôn ngữ mà máy tính có khả năng hiểu và thực hiện được.
16
Câu 5: Chƣơng trình dịch làm gì?
Câu 6: Hãy cho biết các bƣớc cần thực hiện để tạo ra các chƣơng trình máy tính.
HƢỚNG DẪN TRẢ LỜI
Câu 1: Khi soạn thảo văn bản trên máy tính và yêu cầu chƣơng trình tìm kiếm
một cụm từ trong văn bản và thay thế bằng một cụm từ khác, thực chất ta đã yêu
cầu máy tính thực hiện rất nhiều lệnh.
Có thể mô tả các lệnh với các mức độ chi tiết khác nhau. Dƣới đây chỉ mô tả
những lệnh cơ bản nhất theo trật tự thực hiện việc thay thế một cụm từ tìm đƣợc:
Sao chép cụm từ cần tìm vào bộ nhớ (ta gọi đây là cụm từ 1).
Sao chép cụm từ sẽ thay thế cụm từ tìm đƣợc vào bộ nhớ (cụm từ 2).
Tìm cụm từ 1 trong văn bản.
Xóa cụm từ 1 tìm đƣợc trong văn bản.
Sao chép cụm từ 2 vào vị trí con trỏ trong văn bản.
Dƣới đây mô tả một cách chi tiết hơn:
Sao chép dãy kí tự cần tìm vào bộ nhớ (dãy 1).
Sao chép dãy kí tự sẽ thay thế dãy kí tự tìm đƣợc vào bộ nhớ (dãy 2).
Đặt con trỏ trƣớc kí tự đầu tiên trong văn bản.
Sao chép dãy kí tự (tính từ vị trí con trỏ sang phải) có độ dài bằng dãy kí tự cần
tìm vào bộ nhớ (dãy 3).
So sánh dãy 1 và dãy 3.Nếu dãy 3 không trùng với dãy 1, chuyển đến lệnh 8.
Xóa dãy 3 trong văn bản.
Sao chép dãy 2 vào vị trí con trỏ soạn thảo trong văn bản.
Di chuyển con trỏ sang phải một kí tự và quay lại lệnh 4.
Qua các lệnh liệt kê theo thứ tự nói trên, dễ thấy rằng có thể thay đổi thứ tự thực
hiện của một vài lệnh (1 và 2), nhƣng nói chung việc thay đổi thứ tự các lệnh sẽ
không cho kết quả mong muốn.
Câu 2: Nếu thay đổi thứ tự của hai lệnh trong chƣơng trình điều khiển rô-bốt, rô-
bốt sẽ không thực hiện đƣợc công việc nhặt rác vì rô-bốt sẽ không đi đúng
hƣớng và có thể không đi tới vị trí có rác, hoặc thực hiện việc nhặt rác tại vị trí
17
không có rác,…. Ví dụ, nếu thay đổi thứ tự của lệnh 1 “Tiến 2 bƣớc” và lệnh 2
“Quay trái, tiến 1 bƣớc”, tác dụng của cả hai lệnh này sẽ là “Quay trái và tiến 3
bƣớc”. Khi đó rô-bốt sẽ nhặt rác tại vị trí không có rác.
Nói chung, các lệnh điều khiển rô-bốt hay chƣơng trình cần đƣợc đƣa ra theo
một thứ tự xác định sao cho ta đạt kết quả mong muốn. Trong một số ít trƣờng
hợp, ta có thể đƣa ra các lệnh khác nhau, nhƣng vẫn đạt kết quả. Chẳng hạn,
trong ví dụ về rô-bốt, thay cho hai câu lệnh đầu tiên, ta có thể điều khiển rô-bốt
đến đúng vị trí có rác bằng các lệnh sau: “Quay trái, tiến 1 bƣớc” và “Quay phải,
tiến 2 bƣớc” hoặc “Quay phải, tiến 2 bƣớc”, “Quay trái, tiến 2 bƣớc” và “Quay
trái, tiến 4 bƣớc”. Trong một số ít các trƣờng hợp khác, việc thay đổi thứ tự của
một vài câu lệnh vẫn cho kết quả đúng nhƣ yêu cầu.
Tuy nhiên, nhƣ là một nguyên tắc chung, việc thay đổi thứ tự các câu lệnh sẽ
không cho kết quả đúng. Có thể liên hệ với thứ tự các bƣớc của thuật toán trong
Bài 5.
Vị trí mới của rô-bốt sau khi thực hiện xong lệnh “Hãy quét nhà” là vị trí có
thùng rác (ở góc đối diện). Ta có nhiều cách khác nhau để đƣa ra hai lệnh để rô-
bốt trở lại vị trí ban đầu của mình, một trong các cách đó là hai lệnh “Quay trái,
tiến 5 bƣớc” và “Quay trái, tiến 3 bƣớc”.
Câu 3: Lí do: Điều khiển máy tính tự động thực hiện các công việc đa dạng và
phức tạp mà một lệnh đơn giản không đủ để chỉ dẫn.
Câu 4: Tuy ngôn ngữ máy cũng là một loại ngôn ngữ lập trình, nhƣng ở đây
chúng ta hiểu ngôn ngữ lập trình là ngôn ngữ lập trình bậc cao. Trong ngôn ngữ
máy mọi chỉ thị đều đƣợc biểu diễn bằng các con số nhị phân 0 và 1. Ngôn ngữ
máy khó đọc và khó sử dụng, tuy vậy ngôn ngữ máy là ngôn ngữ duy nhất mà
bộ vi xử lí có thể nhận biết và thực hiện một cách trực tiếp. Ngoài ra yếu điểm
chính của các chƣơng trình viết bằng ngôn ngữ máy là phụ thuộc vào phần cứng
máy tính.
18
Các ngôn ngữ lập trình bậc cao đƣợc phát triển để khắc phục các yếu điểm trên
của ngôn ngữ máy. Ngôn ngữ lập trình sử dụng các cụm từ tự nhiên nên dễ nhớ,
dễ học và không phụ thuộc vào phần cứng máy tính.
Câu 5: Chƣơng trình dịch là chƣơng trình có chức năng chuyển đổi chƣơng trình
đƣợc viết bằng ngôn ngữ lập trình thành chƣơng trình thực hiện đƣợc trên máy
tính. Nhƣ vậy, chƣơng trình dịch chuyển đổi tệp gồm các dòng lệnh đƣợc soạn
thảo thành tệp có thể chạy trên máy tính.
Câu 6: Hai bƣớc cơ bản để tạo ra các chƣơng trình máy tính là (1) viết chƣơng
trình theo ngôn ngữ lập trình và (2) dịch chƣơng trình thành ngôn ngữ máy để
máy tính hiểu đƣợc và kết quả là tệp tin có thể thực hiện đƣợc trên máy tính.
Lƣu ý rằng, đây chỉ là hai bƣớc cơ bản trong lập trình và chỉ là một phần của
công việc giải quyết bài toán bằng máy tính.
19
Chủ đề 2 : Làm quen với chƣơng trình và ngôn
ngữ lập trình
A. Kiến thức của chủ đề cần quan tâm:
B. Bài tập đề nghị sử dụng trong chủ đề:
Câu 1. Hãy cho biết các thành phần cơ bản của một ngôn ngữ lập trình .
Câu 2. Ta có thể viết các chƣơng trình bằng các câu lệnh có các chữ cái của
tiếng Việt, chẳng hạn “rẽ trái”, đƣợc không? Tại sao?
Câu 3. Tên trong chƣơng trình là gì? Cho biết sự khác biệt từ khóa và tên, cách
đặt tên trong chƣơng trình.
Câu 4. Trong số các tên sau đây do ngƣời viết chƣơng trình đặt trong một
chƣơng trình C++, tên nào là hợp lệ và tên nào không hợp lệ:
A) a B) int C) 8a D) Tam giac
Ngôn ngữ lập trình là tập hợp các kí hiệu và quy tắc để viết các lệnh
tạo thành các chương trình hoàn chỉnh và chạy được trên máy tính
Các ngôn ngữ lập trình thường có một tập hợp các từ khóa là các từ
dành riêng. Không cho phép dùng các từ khóa trong chương trình
cho bất kì mục đích nào khác ngoài mục đích sử dụng do ngôn ngữ
lập trình quy định.
Trong ngôn ngữ lập trình người ta dùng các tên hợp lệ để đặt tên
cho các đại lượng và đối tượng khác nhau trong chương trình, các
tên khác là do người lập trình tự đặt.
Một chương trình gồm hai phần: Phần khai báo các tệp nguyên
mẫu, khai báo tên các tệp chứa những thành phần có sẵn (như các
hàm chuẩn, kiểu chuẩn và các hằng…) mà NSD sẽ dùng trong
chương trình. Phần khai báo các kiểu dữ liệu, các biến, hằng … do
NSD định nghĩa và được dùng chung trong toàn bộ chương trình.
Danh sách các hàm của chương trình (do NSD viết, bao gồm cả hàm
main()).
Ngôn ngữ C++ là một ví dụ về ngôn ngữ lập trình. Với include,
main, return,… là các từ khóa. Các tên có sẵn như cout,cin,clrscr,…
Các tên do người dùng quy định như chu_vi, dien_tich, ban_kinh…
20
E) int-return F) return G) b1 H) abc
Câu 5. Hãy cho biết các phần chính trong cấu trúc của mọi chƣơng trình và vai
trò của chúng. Trong các phần đó, phần nào là quan trọng nhất?
Câu 6. Hãy cho biết chƣơng trình C++ sau đây có hợp lệ không, tại sao?
a) Chương trình 1.
int main()
{ return 0;}
b) Chương trình 2.
#include <iostream>
using namespace std;
int main()
{
cout << “Hello world!” << endl;
return 0;
}
HƢỚNG DẪN TRẢ LỜI
Câu 1. Các thành phần cơ bản ngôn ngữ lập trình gồm bảng chữ cái và các quy
tắc để viết các câu lệnh (cú pháp) có ý nghĩa xác định, cách bố trí các câu
lệnh,… sao cho có thể tạo thành một chƣơng trình hoàn chỉnh và chạy đƣợc trên
máy tính. Lƣu ý rằng các quy tắc nhắc đến ở đây bao gồm các thuật ngữ chuyên
môn là cú pháp và ngữ nghĩa.
Câu 2. Không. Các cụm từ sử dụng trong chƣơng trình (từ khóa, tên) phải đƣợc
viết bằng các chữ cái trong bảng chữ cái của ngôn ngữ lập trình. Các ngôn ngữ
lập trình phổ biến hiện nay đều có bảng chữ cái là bảng chữ cái tiếng Anh và các
kí hiệu khác, trong đó không có các chữ cái có dấu của tiếng Việt.
Lƣu ý rằng câu hỏi trong bài là “Viết chƣơng trình bằng các câu lệnh…”. Điều
này không có nghĩa là trong chƣơng trình không thể có các chữ cái có dấu của
tiếng Việt (hay của một ngôn ngữ khác) nhƣ là dữ liệu dạng văn bản cần xử lí.
21
Các chữ có dấu đó sẽ đƣợc ngôn ngữ lập trình xử lý mã kí tự tƣơng ứng trong
các bảng mã ASCII mở rộng. Ví dụ chƣơng trình C++ sau đây hoàn toàn hợp lệ:
#include <iostream>
using namespace std;
int main()
{ cout << “Chào các bạn!” << endl;
return 0;}
Câu 3. Tên trong chƣơng trình là dãy các chữ cái hợp lệ đƣợc lấy từ bảng chữ
cái của ngôn ngữ lập trình. Từ khoá của một ngôn ngữ lập trình (hay còn đƣợc
gọi là từ dành riêng) là tên chỉ đƣợc dùng cho các mục đích sử dụng do ngôn
ngữ lập trình quy định, không đƣợc dùng cho bất kì mục đích nào khác.
Ngƣời lập trình có thể đặt tên một cách tùy ý nhƣng phải tuân thủ các quy tắc
của ngôn ngữ lập trình cũng nhƣ của chƣơng trình dịch, trong đó (1) hai đại
lƣợng khác nhau phải có tên khác nhau;
(2) Tên không đƣợc trùng với các từ khoá.
Câu 4. Các tên hợp lệ: a, int-return, b1, abc, tên không hợp lệ: 8a (bắt đầu bằng
số), Tam giac (có dấu cách), int, return (trùng với từ khóa).
Câu 5. Xem tóm tắt lý thuyết
Câu 6.
a) Chƣơng trình 1 là chƣơng trình C++ đầy đủ và hoàn toàn hợp lệ, mặc dù
chƣơng trình này chẳng thực hiện điều gì cả. Phần nhất thiết phải có trong
chƣơng trình là phần thân chƣơng trình đƣợc đảm bảo bằng hàm main
b) Chƣơng trình 2 là chƣơng trình C++ hợp lệ vì kết quả chƣơng trình là dòng
chữ hello worl.
22
Chủ đề 3: Chƣơng trình máy tính và dữ liệu
A. Kiến thức của chủ đề cần quan tâm:
B. Bài tập đề nghị sử dụng trong chủ đề:
Câu 1: Hãy nêu ít nhất một lí do cho thấy sự cần thiết phải phân chia dữ liệu
thành các kiểu.
Câu 2: Hãy nêu ít nhất hai kiểu dữ liệu và một phép toán có thể thực hiện đƣợc
trên một kiểu dữ liệu, nhƣng phép toán đó không có nghĩa trên kiểu dữ liệu kia.
Câu 3. Cho dãy chữ số 2010. Dãy chữ số đó có thể thuộc kiểu dữ liệu nào?
Câu 4. Cho hai xâu kí tự “Lớp” và “8A”. Hãy thử định nghĩa một “phép toán”
có thể thực hiện đƣợc trên hai xâu kí tự đó.
Câu 5. Hãy phân biệt ý nghĩa của các câu lệnh C++ sau đây:
Cout<<”5+20=”<<”20+5”; và Cout<<”5+20=”<<20+5;
Hai lệnh sau có tƣơng đƣơng với nhau không? Tại sao?
Cout<<”100”<<; và Cout<<100;
Câu 6. Viết các biểu thức toán dƣới đây với các kí hiệu trong C++:
a. a/b+c/d b. ax2 +bx +c
Dữ liệu được xử lí trong chương trình được chia thành các kiểu
khác nhau. Một số kiểu dữ liệu thường dùng trong chương trình
C++ là: Kiểu số nguyên ( int), kiểu số thực ( float), kiểu xâu kí tự
( string). Ta thường gọi tắt là kiểu nguyên, kiểu thực, kiểu xâu.
Mỗi kiểu dữ liệu có một phạm vi biểu diễn nhất định ( tức là có
một giá trị nhỏ nhất và một giá trị lớn nhất cụ thể) và có các
phép toán riêng.
Trong một ngôn ngữ lập trình ta đều có thể thực hiện các phép
toán số học (cộng, trừ, nhân và chia) và các phép so sánh với dữ
liệu kiểu số .
Khi chạy chương trình giải quyết một bài toán, máy tính có thể
yêu cầu người dùng nhập các thông tin cần thiết và chương
trình sẽ đưa ra kết quả sau khi xử lí, tính toán. Quá trình trao
đổi dữ liệu hai chiều giữa người và máy như vậy gọi là giao tiếp
hoặc tương tác người – máy.
23
c. 1/x – a/5(b+2); d. (a2+b)(1+c3)
Câu 7. Chuyển các biểu thức đƣợc viết trong C++ sau đây thành các biểu thức
toán:
a. (a+b)*(a+b)-x/y b. b/(a*a+c)
c. a*a/(2*b+c)*(2*b+c) d. 1+1/2+1/2*3+1/3*4+1/4*5
Câu 8. Hãy xác định kết quả của các phép so sánh sau đây:
a. 15 – 8 ≥ 3 b. (20 – 15)2≠ 25
c. 112 = 121 d. x > 10 – 3x
Câu 9. Viết các phép so sánh trong Bài tập 8 với các kí hiệu trong C++
a. 15 – 8 ≥ 3 b. (20 – 15)2≠ 25
c. 112 = 121 d. x > 10 – 3x
Câu 10. Nêu một số ví dụ về tƣơng tác giữa ngƣời và máy tính khi chƣơng trình
hoạt động.
HƢỚNG DẪN TRẢ LỜI
Câu 1: Vì dữ liệu và các thao tác xử lí dữ liệu rất đa dạng, lí do dễ nhận thấy
nhất là việc phân chia dữ liệu thành các kiểu giúp xác định các phép xử lí (phép
toán) có thể thực hiện trên mỗi kiểu dữ liệu. Ngoài ra việc phân chia kiểu dữ liệu
còn cho biết các giá trị có thể (phạm vi) của dữ liệu, giúp cho việc quản lý tài
nguyên của máy tính (đặc biệt là bộ nhớ trong) một cách hiệu quả.
Câu 2: Có thể nêu các ví dụ sau đây:
a. Dữ liệu kiểu số và dữ liệu kiểu xâu kí tự. Phép cộng đƣợc định nghĩa trên dữ
liệu số, nhƣng không có nghĩa trên dữ liệu kiểu xâu.
b. Dữ liệu kiểu số nguyên và dữ liệu kiểu số thực. Phép chia lấy phần nguyên
và phép chia lấy phần dƣ có nghĩa trên dữ liệu kiểu số nguyên, nhƣng không có
nghĩa trên dữ liệu kiểu số thực.
Câu 3. Dãy chữ số 2010 có thể thuộc kiểu dữ liệu số nguyên, số thực hoặc kiểu
xâu kí tự. Tuy nhiên, để chƣơng trình dịch C++ hiểu 2010 là dữ liệu kiểu xâu,
chúng ta phải viết dãy số này trong cặp dấu nháy kép (“).
24
Câu 4.Cho hai xâu kí tự “Lớp” và “8A”. Có thể định nghĩa nhiều “phép toán”
trên tập hợp các dữ liệu kiểu xâu. Chẳng hạn phép ghép: Lớp + 8A = Lớp 8A
Câu 5. Lệnh Cout<<”5+20=”<<”20+5”; in ra màn hình hai xâu ký tự “5+20”
và”20+5” liền nhau: 5+20 = 20+5, còn lệnh Cout<<”5+20=”<<20+5; in ra màn
hình xâu ký tự “5+20” và tổng của 20+5 nhƣ sau: 5+20=25.
Hai lệnh Cout<<”100”<<; và Cout<<100; không tƣơng đƣơng với nhau vì một
lệnh in ra màn hình xâu ký tự biểu diễn số 100 còn lệnh kia in ra màn hình số
100.
Câu 6. Các biểu thức trong C++:
a. a/b+c/d b. a*x*x+b*x+c
c. 1/x-a/5*(b+2) d. (a*a+b)*(1+c)*(1+c)*(1+c)
Câu 7. Các biểu thức toán tƣơng ứng:
a. (a+b)2 –x/y b. b/(a2+c)
c. a
2/(2b+c)2 d. 1+1/2+1/2.3+1/3.4+1/4.5.
Câu 8. | Kết quả của các phép so sánh: | ||||
a. | Đúng. | b. | Sai. | c. | Đúng. |
d. Đúng khi x > 2.5; ngƣợc lại, phép so sánh có kết quả sai.
Câu 9. a) 15-8>=3; b) (20-15)*(20-15)<>25; c) 11*11=121; d) x>10-3*x.
Câu 10. Một số ví dụ về tƣơng tác giữa ngƣời và máy tính khi chƣơng trình hoạt
động: thông báo kết quả tính toán hay trạng thái hoạt động của chƣơng trình,
nhập dữ liệu, tạm ngừng chƣơng trình.
Xem bản đầy đủ trên google drive: TẠI ĐÂY
Các thầy cô cần file liên hệ với chúng tôi tại fanpage facebook O2 Education
Hoặc xem nhiều SKKN hơn tại: Tổng hợp SKKN môn hóa học cấp THPT
Hoặc xem thêm các tài liệu khác của môn hóa