Bài F13. Hàm trong Python

Khởi động (SGK Chân trời sáng tạo - Trang 138)

Hướng dẫn giải

*Chương trình 1: 

- Thuật toán: Chương trình 1 dường như đang cố gắng thực hiện thuật toán Euclid để tìm ƯCLN, nhưng có một số lỗi trong logic:

- Dòng b = r không cập nhật đúng giá trị của b sau mỗi vòng lặp, vì không có phép toán nào để tính giá trị mới của b.

-Cần sử dụng phép toán chia để cập nhật b và a theo công thức Euclid: a, b = b, a % b.

- Kết quả: Chương trình sẽ không cho ra kết quả đúng do lỗi logic.

-Độ phức tạp: Phức tạp hơn và dễ gây nhầm lẫn cho người mới học lập trình.

*Chương trình 2: 

- Thuật toán: Chương trình 2 sử dụng hàm có sẵn math.gcd() từ thư viện math, rất hiệu quả và chính xác để tìm ƯCLN.

- Kết quả: Chương trình sẽ cho ra kết quả chính xác mà không cần người dùng phải hiểu rõ thuật toán bên trong.

- Độ phức tạp: Đơn giản hơn, dễ bảo trì và ít lỗi hơn vì không cần phải tự viết thuật toán.

*Kết luận

- Chương trình 1: Mặc dù có thể là một cách tiếp cận thú vị để học về thuật toán Euclid, nhưng nó dễ gây lỗi và không cho ra kết quả đúng.

- Chương trình 2: Là lựa chọn tốt hơn cho việc tìm ƯCLN vì nó sử dụng hàm có sẵn, đơn giản, dễ hiểu và chính xác.

=> Do đó, nếu em cần tìm ƯCLN một cách nhanh chóng và chính xác, chương trình 2 là sự lựa chọn ưu việt hơn.

(Trả lời bởi Nguyễn Quốc Đạt)
Thảo luận (1)

Khám phá mục 1 (SGK Chân trời sáng tạo - Trang 140)

Hướng dẫn giải

- Chương trình này định nghĩa hai hàm tính chu vi (CV):

+ tinhCV1(a, b): Tính chu vi hình chữ nhật với chiều dài a và chiều rộng b.

+ tinhCV2(a): Tính chu vi hình vuông với cạnh a.

- Sau đó, chương trình gọi hai hàm này và in kết quả ra màn hình:

print(tinhCV1(5, 10))

+ Gọi hàm tinhCV1 với a = 5 và b = 10.

+ Hàm này tính CV = (5 + 10) * 2 = 30.

+ In ra 30.

print(tinhCV2(5))

+ Gọi hàm tinhCV2 với a = 5.

+ Hàm này tính CV = 5 * 4 = 20.

+ In ra 20.

- Vậy kết quả in ra màn hình là:

30

20

(Trả lời bởi Nguyễn Quốc Đạt)
Thảo luận (1)

Khám phá mục 2 (SGK Chân trời sáng tạo - Trang 141)

Hướng dẫn giải

math.pow(2, 3)

1. Hàm pow(x, y) trả về giá trị của x mũ y.

2. Trong trường hợp này, math.pow(2, 3) sẽ trả về 2 mũ 3, tức là 8.0. Lưu ý rằng kết quả trả về là một số thực dấu phẩy động (float).

math.gcd(8, 16)

1. Hàm gcd(a, b) trả về ước số chung lớn nhất (GCD) của a và b.

2. Trong trường hợp này, math.gcd(8, 16) sẽ trả về 8, vì 8 là ước số chung lớn nhất của 8 và 16.

math.sqrt(16)

1. Hàm sqrt(x) trả về căn bậc hai của x.

2. Trong trường hợp này, math.sqrt(16) sẽ trả về 4.0. Lưu ý rằng kết quả trả về là một số thực dấu phẩy động (float).

Tóm lại, kết quả của các hàm là:

- math.pow(2, 3): 8.0

- math.gcd(8, 16): 8

- math.sqrt(16): 4.0

(Trả lời bởi Nguyễn Quốc Đạt)
Thảo luận (1)

Khám phá mục 3 (SGK Chân trời sáng tạo - Trang 143)

Hướng dẫn giải

*Hàm tinhTongSo(n)

+ def tinhTongSo(n):: Định nghĩa một hàm tên là tinhTongSo nhận vào một tham số n.

+ tongSo = 0: Khởi tạo biến tongSo với giá trị ban đầu là 0, biến này dùng để lưu tổng các số thỏa mãn điều kiện.

+ m = len(str(n)): Chuyển n thành chuỗi, lấy độ dài của chuỗi đó và gán cho biến mm ở đây là số chữ số của n.

+ for i in range(n):: Bắt đầu vòng lặp for từ 0 đến n-1.

+ if i % 2 == 0 and len(str(i)) < m:: Kiểm tra hai điều kiện: 

i % 2 == 0i là số chẵn.len(str(i)) < m: Số chữ số của i nhỏ hơn số chữ số của n.

tongSo = tongSo + i: Nếu cả hai điều kiện trên đều đúng, cộng i vào biến tongSo.

return tongSo: Trả về giá trị của biến tongSo.

=> Ý nghĩa giá trị trả về: Hàm này trả về tổng của tất cả các số chẵn nhỏ hơn n và có số chữ số ít hơn số chữ số của n.

*Hàm tinhTichSo(n)

+ def tinhTichSo(n):: Định nghĩa một hàm tên là tinhTichSo nhận vào một tham số n.

tichSo = 1: Khởi tạo biến tichSo với giá trị ban đầu là 1, biến này dùng để lưu tích các chữ số của n.

s = str(n): Chuyển n thành chuỗi và gán cho biến s.

for kt in s:: Bắt đầu vòng lặp for duyệt qua từng ký tự kt trong chuỗi s.

+  tichSo = tichSo * int(kt): Chuyển ký tự kt thành số nguyên và nhân vào biến tichSo.

+ return tichSo: Trả về giá trị của biến tichSo.

=>  Ý nghĩa giá trị trả về: Hàm này trả về tích của tất cả các chữ số trong số n.

(Trả lời bởi Nguyễn Quốc Đạt)
Thảo luận (1)

Luyện tập (SGK Chân trời sáng tạo - Trang 144)

Hướng dẫn giải

*Chương trình:

import math

# Nhập ba số nguyên dương

a = int(input("Nhập số nguyên dương a: "))

b = int(input("Nhập số nguyên dương b: "))

c = int(input("Nhập số nguyên dương c: "))

 

# Tìm ƯCLN của a và b

d = math.gcd(a, b)

 

# Tìm ƯCLN của d và c

uoc_chung_lon_nhat = math.gcd(d, c)

 

# In kết quả ra màn hình

print("ƯCLN của ba số", a, ",", b, "và", c, "là:", uoc_chung_lon_nhat)

 

*Giải thích chương trình:

- Nhập số: Chương trình sử dụng input() để nhận ba số nguyên dương từ người dùng.

- Tìm ƯCLN:

+ Đầu tiên, tìm ƯCLN của hai số a và b bằng cách sử dụng hàm math.gcd().

+ Sau đó, tìm ƯCLN của kết quả d và số c.

+ In kết quả: Kết quả cuối cùng được in ra màn hình, cho biết ƯCLN của ba số đã nhập.

*Ghi chú: Đảm bảo rằng người dùng nhập vào các số nguyên dương, nếu không, có thể thêm kiểm tra để đảm bảo tính hợp lệ của dữ liệu đầu vào.

(Trả lời bởi Nguyễn Quốc Đạt)
Thảo luận (1)

Vận dụng (SGK Chân trời sáng tạo - Trang 144)

Hướng dẫn giải

*Chương trình:

import math

# Nhập độ dài của ba cạnh

a = float(input("Nhập độ dài cạnh a (dương): "))

b = float(input("Nhập độ dài cạnh b (dương): "))

c = float(input("Nhập độ dài cạnh c (dương): "))

 

# Kiểm tra điều kiện để a, b, c có thể tạo thành tam giác

if a <= 0 or b <= 0 or c <= 0:

    print("Độ dài các cạnh phải là số thực dương.")

elif a + b <= c or a + c <= b or b + c <= a:

    print("Ba cạnh nhập vào không thể tạo thành một tam giác.")

else:

    # Tính nửa chu vi p

    p = (a + b + c) / 2

 

    # Tính diện tích S theo công thức Heron

    S = math.sqrt(p * (p - a) * (p - b) * (p - c))

 

    # In kết quả ra màn hình

    print("Diện tích của hình tam giác là:", S)


*Giải thích chương trình:

- Nhập độ dài các cạnh: Chương trình sử dụng input() để nhập độ dài của ba cạnh a, b, c và chuyển đổi chúng thành số thực.

- Kiểm tra điều kiện:

+ Đảm bảo rằng các cạnh a, b, c đều là số thực dương.

+ Kiểm tra điều kiện tam giác: tổng của hai cạnh bất kỳ phải lớn hơn cạnh còn lại.

+ Tính nửa chu vi: Sử dụng công thức p=(a+b+c)/2

+ Tính diện tích: Sử dụng công thức Heron để tính diện tích S=√p(p−a)(p−b)(p−c)

+ In kết quả: Kết quả diện tích được in ra màn hình.

- Ghi chú: Chương trình đã bao gồm các kiểm tra cần thiết để đảm bảo rằng các cạnh nhập vào có thể tạo thành một hình tam giác hợp lệ.

(Trả lời bởi Nguyễn Quốc Đạt)
Thảo luận (1)