Tự động hóa

Arduino thực hành: in ra tam giác cân

 Trên thực tế thì chả ai dùng arduino để in ra tam giác cân. Nhưng tiện có mạch arduino nên tôi viết bài này, để các bạn LUYỆN TƯ DUY LẬP TRÌNH. Giờ đi vào bài viết nhé

Bài 1: in ra tam giác cân đặc, có số dòng là 10 dòng. 


Cách 1:

Về tư duy, đầu tiên ta có biến h, gán bằng 10. Biến i và j là số dòng và số cột.
Ta thấy số sao ở dòng cuối cùng là 19 sao, tức bằng = 2*h - 1
Còn tọa độ in ra ở cột nằng trong khoảng từ (h-i+1) đến  (h+i-1) cứ gặp tọa độ này thì in ra một dấu *. Còn ngoài ra thì in ra một dấu cách.  Với tư duy như vậy, ta gõ code như sau, dưới đây là bài giải.

#include <Arduino.h>
  int i;
  int j;
  int h=10;

void setup() {
  Serial.begin(9600);
}

void inTamGiac() {
// Viết bài này dưới dạng fusion, ta viết hàm inTamGiac
// Sau đó gọi nó duy nhất một lần ở hàm loop. Xong dùng exit để thoát
// Hàm in tam giác cân đặc với chiều cao H
  // vòng lặp lớn, duyệt độ cao từ 1 đến H
  for (int i=1; i<=h ; i++)
  {
    // Vòng lặp for nhỏ: tương ứng với mỗi chiều cao h
    // thì nó sẽ in dâu * tương ứng
    // Vòng lặp luôn duyệt từ 1 đến (2*h -1)
    for (int j = 1; j <=2*h-1; j++)
    {
      if ((j>= h-i+1&& (j <= h+i-1))
      {
        Serial.print("*");
      }
      else
      {
        Serial.print(" ");// lưu ý gõ đúng 1 dấu cách
      }
      delay(50); // Delay một tí cho kịp nhìn arduino chạy    
    }
    Serial.print("\n"); // In xuống dòng:  cứ i và j chạy in * hết một dòng
                        // thì phải xuống dòng để in dòng * tiếp theo  
  }
}

void loop() {
  inTamGiac();  // Gọi hàm inTamGiac ta đã định nghĩa ở trên. 
  exit(0);   // Hàm exit này giúp ta thoát khỏi chương trình, chỉ gọi một lần
              // Nếu không có nó thì chương trình cứ loop mãi in không dừng. 
}



Cách 2: thêm một biến k nữa, rồi for trong for

#include <Arduino.h>
  int h=10;
  int i;
  int j;
  int k;

  
void setup() {
  Serial.begin(9600);

  for ( i = 0; i <= h; i++) // duyệt độ cao từ 1 đến h
  {
    for ( j = 0; j <= h-i; j++)
    {
      if (j == h - i) {
        for ( k = 0; k < 2 * i+1; k++)
        {
          Serial.print("*");
        }
      }
      else {
        Serial.print(" ") ;
      }
    }
    Serial.print("\n");
  }

}


void loop() {

}

Ở cách 2 này, tôi cho toàn bộ code vào hàm void setup bởi vì hàm này chỉ khởi tạo chạy một lần đầu tiên, nó sẽ không lặp lại nữa. Vì vậy code chỉ in ra một lần, không loop nữa.

About Mr. Facebook

0 nhận xét:

Đăng nhận xét