Thứ Sáu, 12 tháng 2, 2016

Bài tập cơ bản về vòng lặp (Phần 1)

Với các bạn đang học Nhập môn lập trình thì bài tập vòng lặp ngoài giúp làm quen với cách dùng vòng lặp còn giúp phát triển tư duy lập trình, giải thuật. Mình sẽ giới thiệu một số dạng bài tập vòng lặp cơ bản, một số ví dụ cùng với hướng giải quyết. Tất cả code tham khảo đều được viết dưới dạng hàm trong ngôn ngữ C/C++.





Ở Phần 1 mình sẽ hướng dẫn cách làm dạng bài vẽ hình. Các dạng bài khác sẽ được trình bày ở các phần tiếp theo.

Dạng 1: Vẽ hình

Cách giải quyết chung nhất của dạng này là duyệt hình theo ma trận và xác định vị trí đang xét có thuộc hình hay không.
Bài 1: Vẽ hình chữ nhật đặc có chiều dài n và chiều rộng m. Ví dụ: m = 4, n = 5
* * * * *
* * * * *
* * * * *
* * * * *
Hướng làm: Cứ duyệt hết ma trận và in ra dấu * thôi.
?
1
2
3
4
5
6
7
8
9
void ChuNhatDac(int m, int n)
{
   for (int i = 1; i <= m; ++i)
   {
      for (int j = 1; j <= n; ++j)
         printf("* ");
      printf("\n");
   }
}

Bài 2: Vẽ hình chữ nhật rỗng chiều dài n và chiều rộng m. Ví dụ: m = 4, n = 5
* * * * *
*       *
*       *
* * * * *
Hướng làm: Ta phải xác định được vị trí nào in dấu * và vị trí in dấu cách. Gọi biến i là biến duyệt dòng, biến j là biết duyệt cột thì ta nhận thấy những dòng in dấu * là i = 1, i = m, j = 1, j = n.
?
1
2
3
4
5
6
7
8
9
10
11
12
void ChuNhatRong(int m, int n)
{
   for (int i = 1; i <= m; i++)
   {
      for (int j = 1; j <= n; j++)
         if (i == 1 || j == 1 || i == m || j == n)
            printf("* ");
         else
            printf("  ");
      printf("\n");
   }
}
Bài 3: Vẽ tam giác vuông cân đặc có chiều cao h. Ví dụ: h = 4
*
* *
* * *
* * * *
Hướng làm: Gọi i là biến duyệt dòng, j là biến duyệt cột thì ta thấy số dấu * mỗi dòng tăng đều theo i. Vậy sẽ in dấu * ở những vị trí j <= i.
?
1
2
3
4
5
6
7
8
9
void TamGiacVuongCanDac(int h)
{
   for (int i = 1; i <= h; i++)
   {
      for (int j = 1; j <= i; j++)
         printf("* ");
      printf("\n");
   }
}
Bài 4: Vẽ tam giác vuông cân rỗng có chiều cao h. Ví dụ: h = 5
*
* *
*   *
*     *
* * * * *
Hướng làm: Cách làm tương tự bài 3 nhưng ta phải xác định đoạn in dấu * và vị trí in dấu cách. Nhìn ví dụ ta nhận thấy các đoạn in dấu * là i = h, j = 1 và j = i.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void TamGiacVuongCanRong(int h)
{
   for (int i = 1; i <= h; i++)
   {
      for (int j = 1; j <= i; j++)
      {
         if (j == 1 || j == i || i == h)
            printf("* ");
         else
            printf("  ");
      }
      printf("\n");
   }
}
Bài 5: Vẽ tam giác cân đặc có chiều cao h. Ví dụ: h = 5
        *
      * * *
    * * * * *
  * * * * * * *
* * * * * * * * *
Hướng làm: Nhìn ví dụ ta nhận thấy tam giác cân này có chiều cao h thì có đáy là 2h-1. Vì vậy ta dùng 2 biến m và n để xác định khoảng sẽ in dấu *. m và n ban đầu sẽ bằng h, sau đó m sẽ giảm và n sẽ tăng để mở rộng khoảng in dấu * ra đến đáy.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void TamGiacCanDac(int h)
{
   int m = h, n = h;
   for (int i = 1; i <= h; i++)
   {
      for (int j = 1; j <= 2 * h - 1; j++)
      {
         if (j >= m && j <= n)
            printf("*");
         else
            printf(" ");
      }
      m--;
      n++;
      printf("\n");
   }
}
Bài 6: Vẽ tam giác cân rỗng có chiều cao h. Ví dụ: h = 5
        *
      *   *
    *       *
  *           *
* * * * * * * * *
Hướng làm: Tương tự cách làm của bài 5 nhưng ta chỉ cần xác định đoạn in dấu *. Các đoạn in dấu * là i = h, j = m và j = n.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void TamGiacCanRong(int h)
{
   int m = h, n = h;
   for (int i = 1; i <= h; i++)
   {
      for (int j = 1; j <= 2 * h - 1; j++)
      {
         if (j == m || j == n || i== h)
            printf("*");
         else
            printf(" ");
      }
      m--;
      n++;
      printf("\n");
   }
}

Mời các bạn xem tiếp phần 2

http://cunglaptrinh.blogspot.com/

0 nhận xét: