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 Ruby của Coddy. Bài học 46 trên 88.

Bạn có thể đặt một vòng lặp bên trong vòng lặp khác để tạo thành vòng lặp lồng nhau. Vòng lặp bên trong chạy hết một lượt trong mỗi lần lặp của vòng lặp bên ngoài, nên cách này rất hữu ích khi làm việc với lưới, bảng hoặc các tổ hợp.

rows = 2
cols = 3
for i in 1..rows
  for j in 1..cols
    puts "i=#{i}, j=#{j}"
  end
end

Lệnh này in ra sáu dòng. Với mỗi giá trị của i, vòng lặp bên trong chạy qua tất cả các giá trị của j.

Đầu tiên, i là 1 trong khi j lần lượt nhận các giá trị 1, 2, 3. Sau đó, i trở thành 2 và j lại lần lượt nhận các giá trị 1, 2, 3. 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.

Một ví dụ thực tế là tạo một mẫu phép nhân đơn giản:

for row in 1..3
  for col in 1..3
    print "#{row * col} "
  end
  puts ""
end

Lệnh này in ra một lưới sản phẩm 3x3. print giữ các giá trị trên cùng một dòng, còn puts "" chuyển sang dòng mới sau khi hoàn thành mỗi hàng. Bạn cũng có thể kết hợp các kiểu vòng lặp khác nhau, chẳng hạn như đặt vòng lặp times bên trong vòng lặp for.

challenge icon

Thử thách

Dễ

Đọc hai số nguyên từ đầu vào:

  1. rows - số hàng
  2. cols - số cột

Dùng các vòng lặp lồng nhau để in một hình chữ nhật gồm các dấu hoa thị (*) với kích thước đã cho. Mỗi hàng cần có cols dấu hoa thị, cách nhau bằng dấu cách, và mỗi hàng nằm trên một dòng riêng.

Dùng print để in các dấu hoa thị trong một hàng và dùng puts để chuyển sang dòng tiếp theo sau mỗi hàng.

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

* * * *
* * * *
* * * *

Nếu đầu vào là 2 và 5, đầu ra sẽ là:

* * * * *
* * * * *

Không có dấu cách sau dấu * cuối cùng của một hàng.

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 dấu hoa thị 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 cần dùng lại cols.

Tự làm thử

# Đọc đầu vào (input)
rows = gets.to_i
cols = gets.to_i

# 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 một hình chữ nhật bằng dấu sao
# Dùng print để in các dấu sao trên cùng một hàng và puts để 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: Trình biên dịch Ruby online