Menu
CoddyTech

Vòng lặp lồng nhau

Thuộc phần Kiến thức nền tảng trong hành trình Swift của Coddy. Bài học 49 trên 86.

Vòng lặp lồng nhau là một vòng lặp nằm bên trong một vòng lặp khác. Vòng lặp bên trong hoàn thành tất cả các lần lặp của nó trong mỗi lần lặp của vòng lặp bên ngoài.

let rows = 3
let cols = 2
for row in 1...rows {
    for col in 1...cols {
        print("Row \(row), Col \(col)")
    }
}
// Đầu ra:
// Row 1, Col 1
// Row 1, Col 2
// Row 2, Col 1
// Row 2, Col 2
// Row 3, Col 1
// Row 3, Col 2

Với mỗi giá trị của row, vòng lặp bên trong bắt đầu lại và chạy qua tất cả giá trị của col, từ 1 đến cols. Vì vậy, khi rows = 3 và cols = 2, đoạn code bên trong chạy tổng cộng 6 lần (3 × 2). rows và cols không bao giờ thay đổi: chúng chỉ cho các vòng lặp biết khi nào cần dừng.

Vòng lặp lồng nhau thường được dùng để làm việc với các cấu trúc dạng lưới hoặc tạo mẫu.

Đây là ví dụ in ra một hình chữ nhật đơn giản bằng dấu hoa thị:

for row in 1...2 {
    for col in 1...4 {
        print("*", terminator: "")
    }
    print("")  // Chuyển sang dòng tiếp theo
}
// Đầu ra:
// ****
// ****

terminator: "" ngăn print thêm ký tự xuống dòng, nên các dấu hoa thị xuất hiện trên cùng một hàng. Sau khi vòng lặp bên trong kết thúc, print("") chuyển sang dòng tiếp theo.

challenge icon

Thử thách

Dễ

Đọc hai số nguyên từ đầu vào: rows và cols. Dùng các vòng lặp lồng nhau để in ra một lưới số, trong đó mỗi ô hiển thị tích của số hàng và số cột tương ứng.

Bạn sẽ nhận các đầu vào sau:

  • Dòng đầu tiên: số hàng (ví dụ: "3")
  • Dòng thứ hai: số cột (ví dụ: "4")

Yêu cầu:

  • Dùng vòng lặp ngoài cho các hàng (từ 1 đến rows)
  • Dùng vòng lặp trong cho các cột (từ 1 đến cols)
  • In ra tích của số hàng và số cột hiện tại
  • Phân tách các giá trị trên cùng một hàng bằng dấu cách
  • In mỗi hàng trên một dòng riêng

Gợi ý: Dùng terminator: " " để giữ các giá trị trên cùng một dòng, sau đó dùng print("") sau vòng lặp trong để chuyển sang dòng tiếp theo.

Ví dụ, nếu rows là 3 và cols là 4, đầu ra sẽ là:

1 2 3 4 
2 4 6 8 
3 6 9 12 

Dùng một biến đếm mới cho mỗi vòng lặp (ví dụ: row cho các hàng và col cho các số trong một hàng), rồi so sánh biến đó với rows hoặc cols. Đừng thay đổi chính rows và cols: mỗi hàng đều cần dùng lại cols.

Tự làm thử

let rows = Int(readLine()!)!
let cols = Int(readLine()!)!

// TODO: Viết code của bạn bên dưới
// Dùng các vòng lặp (loop) lồng nhau để in ra bảng nhân
// Vòng lặp ngoài: duyệt qua các hàng (từ 1 đến rows)
// Vòng lặp trong: duyệt qua các cột (từ 1 đến cols)
// In ra tích của row * column
// Dùng print(..., terminator: " ") để giữ các giá trị trên cùng một dòng
// Dùng print("") sau vòng lặp trong để chuyển sang dòng tiếp theo
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Playground Swift