Bài F7. Lệnh lặp

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

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

Hướng dẫn giải

Một bài toán điển hình yêu cầu thực hiện một cách lặp đi lặp lại nhiều lần một thao tác là tính dãy Fibonacci. Dãy Fibonacci được định nghĩa như sau:

+ F(0)=0

+ F(1)=1

+ F(n)=F(n−1)+F(n−2) với n≥2n≥2

- Giải thích bài toán:

+ Định nghĩa: Mỗi số trong dãy Fibonacci là tổng của hai số trước đó.

+ Thao tác lặp đi lặp lại: Để tính F(n), bạn phải tính F(n−1) và F(n−2), và để tính F(n−1), bạn lại phải tính F(n−2) và F(n−3), và cứ tiếp tục như vậy cho đến khi đạt đến các giá trị cơ bản F(0) và F(1).

+ Phương pháp giải: Có thể giải bài toán này bằng cách sử dụng đệ quy (recursive) hoặc vòng lặp (iterative).

- Ví dụ về chương trình tính dãy Fibonacci:

+ Dưới đây là một chương trình Python sử dụng phương pháp đệ quy để tính số Fibonacci thứ n:

def fibonacci(n):

    if n == 0:

        return 0

    elif n == 1:

        return 1

    else:

        return fibonacci(n-1) + fibonacci(n-2)

# Nhập số n từ người dùng

n = int(input("Nhập số nguyên n (n >= 0): "))if n < 0:

    print("Vui lòng nhập n lớn hơn hoặc bằng 0.")else:

    print(f"Số Fibonacci thứ {n} là {fibonacci(n)}.")

 

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

- Hàm đệ quy: Hàm fibonacci(n) tính số Fibonacci thứ n bằng cách gọi chính nó với các tham số nhỏ hơn.

- Điều kiện dừng: Nếu nn là 0 hoặc 1, hàm trả về giá trị tương ứng.

- Nhập dữ liệu: Chương trình yêu cầu người dùng nhập một số nguyên không âm và in ra số Fibonacci tương ứng.

*Kết quả:

- Nếu người dùng nhập 5, chương trình sẽ in ra: Số Fibonacci thứ 5 là 5.

- Nếu người dùng nhập 10, chương trình sẽ in ra: Số Fibonacci thứ 10 là 55.

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

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

Hướng dẫn giải
*Cách 1: Sử dụng vòng lặp for

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

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

 

# Kiểm tra n có phải là số nguyên dương hay không

if n <= 0:

    print("Vui lòng nhập số nguyên dương.")

else:

    S = 0

    for i in range(1, n + 1):

        S += i ** 2  # Cộng bình phương của i vào S

    print(f"Tổng S = 1² + 2² + ... + {n}² là: {S}")

 

 

*Cách 2: Sử dụng vòng lặp while

 

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

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

 

# Kiểm tra n có phải là số nguyên dương hay không

if n <= 0:

    print("Vui lòng nhập số nguyên dương.")

else:

    S = 0

    i = 1

    while i <= n:

        S += i ** 2  # Cộng bình phương của i vào S

        i += 1 # Tăng i lên 1

    print(f"Tổng S = 1² + 2² + ... + {n}² là: {S}")

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

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

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

Hướng dẫn giải

Chương trình sử dụng cấu trúc lặp for

# Sử dụng cấu trúc lặp for để in ra các số từ 1 đến 5 

for i in range(1, 6): 

print(i)

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

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

Hướng dẫn giải

# Nhập hai số nguyên dương n và k

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

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

# Kiểm tra điều kiện k < n

if k >= n:

    print("Vui lòng nhập k < n.")

else:

    found = False

    for m in range(k + 1, n + 1):

        if m % k == 0:  # Kiểm tra m có chia hết cho k không

            print(f"Số nguyên m tìm thấy là: {m}")

            found = True

            break  # Dừng vòng lặp khi tìm thấy m

    if not found:

        print("Không tìm thấy.")

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

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

Hướng dẫn giải

while True:

    # Nhập số nguyên n

    n = int(input("Nhập số nguyên (nhập số <= 1 để kết thúc): "))

    # Kiểm tra số <= 1 để kết thúc

    if n <= 1:

        break

    # Kiểm tra số nguyên tố

    is_prime = True

    for i in range(2, int(n**0.5) + 1):

        if n % i == 0:

            is_prime = False

            break

           

    if is_prime:

        print("Là số nguyên tố.")

    else:

        print("Không là số nguyên tố.")

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

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

Hướng dẫn giải

def is_prime(num):

    if num < 2:

        return False

    for i in range(2, int(num**0.5) + 1):

        if num % i == 0:

            return False

    return True

 

# Nhập số nguyên n > 1

n = int(input("Nhập số nguyên n (n > 1): "))

# Tìm số nguyên tố nhỏ nhất lớn hơn hoặc bằng n

while True:

    if is_prime(n):

        print(f"Số nguyên tố nhỏ nhất lớn hơn hoặc bằng {n} là: {n}")

        break

    n += 1

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

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

Hướng dẫn giải

# Khởi tạo tổng

tong = 0

while True:

    # Nhập số nguyên

    n = int(input("Nhập số nguyên (nhập số âm để kết thúc): "))

   

    # Kiểm tra số âm để kết thúc

    if n < 0:

        break

    # Cộng dồn vào tổng nếu n là số nguyên dương

    if n > 0:

        tong += n

print(f"Tổng các số nguyên dương là: {tong}")

(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 112)