Tư duy Tính toán

Bài giảng 1: Giới thiệu

Trường Đại học Công nghệ
Đại học Quốc gia Hà Nội

Ví dụ thực tế

Trò chơi một người

Tetris

Tetris

Sudoku

Sudoku

Trò chơi nhiều người

Oẳn tù tì

Oẳn tù tì

Cờ ca-rô

Cờ ca-rô

Khái niệm “Vấn đề”

Trò chơi và vấn đề

Ví dụ: Tetris, Sudoku, Oẳn tù tì, Cờ ca-rô

Vấn đề = Khó khăn / Khác biệt / Thách thức cần giải pháp

Tư duy bao gồm:

  • Phân rã
  • Nhận dạng mẫu
  • Trừu tượng hóa
  • Thuật toán

Quản lý chi tiêu

Cây chi tiêu

Chi tiêu hàng tháng

Bài toán: Bạn có X triệu VND/tháng để chi trả sinh hoạt phí ở Hà Nội.

Yếu tố: Chi phí bất ngờ, nhu cầu thiết yếu.

Thuật toán?

Tìm đường đi tối ưu

Bản đồ tìm đường

Bài toán: Tìm đường đi tối ưu từ A (Ngã Tư Sở) đến B (VNU-UET).

Yếu tố: Tắc đường, thời tiết, phương tiện di chuyển.

Thuật toán?

Tư duy giải quyết vấn đề

Tư duy giải quyết vấn đề

Quá trình hiểu vấn đề, khám phá các giải pháp khả thi và thiết kế thuật toán rõ ràng, từng bước để giải quyết.

Vấn đề

Vấn đề

Tình huống cần giải quyết.

Ý tưởng giải pháp

Giải pháp

Cách tiếp cận để đạt mục tiêu.

Thuật toán

Thuật toán

Các bước giải rõ ràng.

Sức mạnh của máy tính
trong giải quyết vấn đề

Khía cạnh Con người Máy tính
Sáng tạo Trực giác Không sáng tạo
Quy mô Vấn đề nhỏ Dữ liệu lớn
Tốc độ Chậm Rất nhanh
Độ chính xác Dễ sai Luôn đúng

Giải quyết vấn đề
với Tư duy Tính toán

Vấn đề

Vấn đề

Giải pháp

Giải pháp

Thuật toán

Thuật toán

Code

Code

Tư duy Tính toán là gì?

Tư duy Tính toán

Là cách tiếp cận giải quyết vấn đề bằng cách sử dụng các khái niệm trong Khoa học máy tính để thiết kế giải pháp .

  • Phân rã (Decomposition)
  • Nhận dạng mẫu (Pattern Recognition)
  • Trừu tượng hóa (Abstraction)
  • Thiết kế thuật toán (Algorithm Design)

Phân rã (Decomposition)

Chia nhỏ vấn đề lớn thành các phần nhỏ, dễ quản lý.

Ví dụ: tính diện tích hình chữ nhật


1. Nhập chiều dài & chiều rộng
2. Tính diện tích = dài * rộng
3. Hiển thị kết quả
    

Nhận dạng mẫu (Pattern Recognition)

Tìm sự lặp lại hoặc điểm chung.

Ví dụ: viết các số chẵn trong khoảng 1 đến 10


for i in range(1, 11):
    if i % 2 == 0:
        print(i)
    

→ Quy luật: số chẵn

Trừu tượng hóa (Abstraction)

Tập trung vào chi tiết quan trọng, bỏ qua phần không cần.

Ví dụ: hàm cộng hai số


def add_numbers(a, b):
    return a + b

print(add_numbers(5, 7))
    

→ Chỉ quan tâm đến kết quả: a+b

Thiết kế thuật toán (Algorithm Design)

Tạo quy trình từng bước để giải quyết vấn đề.

Ví dụ: tìm số lớn nhất trong danh sách


def find_max(numbers):
    max_num = numbers[0]
    for n in numbers:
        if n > max_num:
            max_num = n
    return max_num
    

→ Thuật toán = công thức chính xác để giải bài toán

Lập trình là gì ?

Lập trình là gì?

Giao diện Scratch

Scratch tại code.org

Cho một tập lệnh và một nhiệm vụ → viết chuỗi lệnh để thực hiện.

Ví dụ: Scratch – công cụ lập trình cho trẻ em.

Lập trình bằng Python?

Mã Python

Ví dụ: chương trình Python tương ứng

Quy trình giống nhau: cùng nhiệm vụ, nhưng tập lệnh khác.

Python dùng câu lệnh văn bản thay cho khối lệnh kéo thả.

Nhiệm vụ phức tạp hơn?

Nhiệm vụ Scratch

Đến lượt bạn thử code.org – Bài 1.

Giới thiệu biến, giá trị và biểu thức

  • Số: 1, -2.5
  • Giá trị logic: True, False
  • Chuỗi: "Hello", "Hôm nay trời đẹp"
  • Danh sách: [1,2,3]
  • Bộ giá trị: ('Toán', 8.4)
  • Từ điển: {'Toán':8.4, 'Lý':6.5}

Biểu thức

  • Biểu thức biểu diễn một giá trị.
  • Python tính toán biểu thức → cho kết quả.
  • Ví dụ: 2.3, (3*7+2)*0.1

Lưu trữ & Tính toán dữ liệu

Dữ liệu có thể là:

  • Số: 1, -2.5
  • Logic: True, False
  • Chuỗi: "Hello", "Hôm nay trời đẹp"
  • Danh sách: [1,2,3]
  • Bộ giá trị: ('Toán', 8.4)
  • Từ điển: {'Toán':8.4, 'Lý':6.5}x

Biến

Biến là tên để tham chiếu dữ liệu.

 
x = 5
x = 10 * 2
numbers = [1, 2, 3]
    

numbers giờ là tên của danh sách [1,2,3]

Biến…

Sử dụng biến trước khi định nghĩa

Lỗi biến chưa định nghĩa

Sau khi định nghĩa

Biến đã định nghĩa

Trò chơi khác

Trò chơi Scratch

code.org – Bài 7

Vòng lặp (Loops)

Vòng lặp Scratch

code.org – Bài 7

Vòng lặp (Loops)

Vòng lặp Python

Ví dụ: Python triển khai vòng lặp tương ứng

Lặp trong Python

Có thể làm nhiều việc bên trong vòng for.


def move_forward():
    print('tiến')
for i in range(3):
    move_forward()
    print(i)
    

→ Python cho phép lặp + thêm hành động.

Thêm trò chơi

Trò chơi với biến

code.org – Bài 27

Logic phức tạp hơn

Dùng ít khối nhất để ong lấy hết mật hoa.

code.org – Bài 14

Ong lấy mật

Logic phức tạp hơn

Vòng lặp ong lấy mật

code.org – Bài 14

Logic phức tạp hơn

Dùng ít khối nhất để zombie đến được hoa.

code.org – Bài 14

Zombie đi đường

Logic phức tạp hơn

Vòng lặp zombie

Logic phức tạp hơn

Code vòng lặp zombie

Điểm quan trọng

Chia nhỏ bài toán thành các nhiệm vụ con và tìm quy luật.

Chia nhỏ bài toán ong Chia nhỏ bài toán zombie

Thêm trò chơi?

Bạn có thể luyện tập qua các trò chơi:

Rẽ nhánh

Kiểm tra từng đám mây → có hoa thì lấy mật.

code.org – Bài 17

Bee Selection 1

Rẽ nhánh

Lấy hết mật từ hoa hoặc làm mật ong từ tổ → kiểm tra từng ô.

code.org – Bài 17

Bee Selection 2

Rẽ nhánh

Lấy hết mật từ hoa hoặc làm mật ong từ tổ → kiểm tra từng ô.

code.org – Bài 17

Bee Selection 2

Rẽ nhánh trong Python


x = 5
if x > 0:
    print("x dương")
else:
    print("x không dương")
    

Scratch vs. Python

Lập trình bằng khối lệnh (Scratch) vs. văn bản (Python).

Scratch Python If

Vậy... Lập trình là gì?

  • Viết code: Sắp xếp khối lệnh / code theo thứ tự đúng.
  • Kiểm tra code: Chạy thử để xem kết quả.
  • Debug: Tìm lỗi, sửa lỗi.
  • Chữa lỗi: Kiểm thử, hoàn thiện chương trình.

code.org – Bài 1

Nhưng… Làm thế nào?

  • Nghĩ theo ngôn ngữ lập trình.
  • Chia nhiệm vụ thành các bước nhỏ.
  • Lặp lại cho đến khi mỗi bước có thể viết bằng một lệnh.

code.org – Bài 1

Không hiểu?

Đừng lo! Hãy thử Scratch tại code.org.

Luyện tập dần dần, bạn sẽ thấy quen!

Happy coding! 🎉

Chạy chương trình Python

Chạy chương trình Python

  • Dùng command line:
    • Mac/Linux: Terminal
    • Windows: PowerShell
  • python để vào chế độ tương tác.
  • Thoát bằng quit().

Chạy module

File add.py:


x = 'Hello'
y = x + ' World'
    

Lệnh:

C:\> python add.py

→ Thực hiện lệnh nhưng chưa in ra kết quả.

Chạy module (in kết quả)

Sửa add.py:


x = 'Hello'
y = x + ' World'
print("y = " + y)
    

Kết quả:

C:\> python add.py
y = Hello World

Module thú vị hơn

guess.py:


user_guess = input('Tôi đang nghĩ gì? ')
print('Sai rồi, tôi không nghĩ đến ' + user_guess)
    

Kết quả:

C:\> python guess.py
Tôi đang nghĩ gì? cat
Sai rồi, tôi không nghĩ đến cat

Chế độ tương tác

C:\> python
Python 3.10.0 ...
>>> x = 'Hello'
>>> y = x + ' World'
>>> y
'Hello World'
    

Import module

Dùng import add để chạy file add.py.


# add.py
x = 'Hello'
y = x + ' World'
print("y = " + y)
    
>>> import add
y = Hello World

3 cách chạy code

  1. Chế độ tương tác.
  2. Import module.
  3. Chạy file script.

→ Hãy cài Python và thử ngay 🎉

Nếu không cài Python?

Dùng các IDE online:

Jupyter Notebook

Dùng Google Colab để chạy Jupyter Notebook trực tuyến.

colab.research.google.com

Google Colab

Tổng kết

  • Giải quyết vấn đề với tư duy tính toán
  • Vấn đề → Giải pháp → Thuật toán → Code
  • Các bước: Phân rã, Nhận dạng mẫu, Trừu tượng hóa, Thuật toán
  • Lập trình = Viết lệnh để máy tính thực hiện
  • Bắt đầu với Python: biến, giá trị, biểu thức, vòng lặp, rẽ nhánh
  • Học bằng cách thực hành

Hỏi đáp

Cứ bình tĩnh & vui vẻ khi lập trình!