Các hàm số học exp(), Idexp(), modf, ln(), log10(), ceil(), floor(), atoi(chuyển chữ thành số).

Mô tả dự án: 

Bài này bổ xung các tập lệnh về các phép tính : exp(ex), Idexp(x*2exponent),  modf, ln(x), log10(x), floor(), ceil(), atoi()…

Các kiến thức liên quan

Hằng số toán học e là cơ số của logarit tự nhiên.

Giá trị số của e tới 20 chữ số thập phân là:

e=2,71828 18284 59045 23536...

Đồ thị hàm y = ax.

Hàm exp(x)

Cấu trúc

double exp(double x) 

Kiểu tham trị x: double.

Kiểu trả về: double.

Trả về giá trị của biếu thức: ex

Đồ thị hàm y = ex.

Ví dụ

double x = 4;
double y;
void setup()
{
    Serial.begin(9600);
    y = exp(x);
    Serial.println(y, 5); // lấy 5 số phần thập phân
    //y=54.59815
}
void loop() {}

Hàm frexp(x, int *exp)

Cấu trúc

double frexp(double x, int *exponent) 
  • Kiểu tham trị x: double.
  • Kiểu trả về: double.
  • Kiểu con trỏ: int.

Giá trị được trả về gồm 2 số:

  • mantissa (phần định trị x )
  • số nguyên được trỏ tới bởi exponent (số mũ a ).

 Thuộc biểu thức y = x * (2a).

Ví dụ

double y = 20000; // y=x*(2 mũ a)
int a; // số mũ
double x; // phần định trị
void setup()
{
    Serial.begin(9600);

    x = frexp(y, &a); // chú ý thêm dấu "&" (phép gán địa chỉ)

    Serial.println(a);
    Serial.println(x, 8); // lấy 8 số phần thập phân để xem
    //a= 15
    //x=0.61035156
    // tóm lại : y=0.6103 * (2^15) !
}
void loop() {}

Hàm ldexp(x, int exp)

Cấu trúc

double ldexp(double x, int exponent)

Trả về giá trị của biểu thức :  x*2exponent

Kiểu tham trị exponent: int. (exponent dịch sang tiếng Việt là “số mũ” ).

Kiểu tham trị x: double.

Kiểu trả về: double.

Chú ý: kí tự “l” trong chữ “ldexp” là chữ e-lờ cao (viết thường).

Ví dụ

double y; // y=x*(2 mũ a)
int a = 15; // số mũ
double x = 0.61035156; // phần định trị
void setup()
{
    Serial.begin(9600);
    y = ldexp(x, a);

    Serial.println(y, 8); // lấy 8 số phần thập phân để xem
    //y=20000.00000000
}
void loop() {}

Hàm log( x)

Cấu trúc

double log(double x)
  • Trả về ln(x)
  • Kiểu tham trị x: double.
  • Kiểu trả về: double.

 

 

Ví dụ

double y; // y=ln(x)
double x = 6.5;
void setup()
{
    Serial.begin(9600);
    y = log(x);

    Serial.println(y, 8); // lấy 8 số phần thập phân để xem
    //y=1.87180223
}
void loop() { }

Hàm log10(x)

Cấu trúc

double log10(double x) 
  • Kiểu tham trị x: double.
  • Kiểu trả về: double.
  • Trả về log10(x)

 

 

Ví dụ

double y; // y=log10(x)
double x = 4.0;
void setup()
{
    Serial.begin(9600);
    y = log10(x);
    Serial.println(y, 8); // lấy 8 số phần thập phân để xem
    //y=0.60206003
}
void loop() { }

Hàm modf(x, *i)

Cấu trúc

 double modf(double x, double *integer)
  • Tách lấy phần nguyên và phần thập phân của một số thực.
  • Kiểu tham trị x: double.
  • Kiểu trả về: double.

Chú ý thêm kí tự “&” cho biến con trỏ.!

Ví dụ

double S = 62.123456;
double Phan_nguyen, Phan_thap_phan;
void setup()
{
    Serial.begin(9600);
    Phan_thap_phan = modf(S, &Phan_nguyen);
    Serial.println(Phan_thap_phan, 6); // lấy 6 số phần thập phân để xem
    Serial.println(Phan_nguyen, 1); // lấy 1 số phần thập phân để xem
}
void loop() {}

Hàm ceil(x)

Cấu trúc

 double ceil(double x)
  • Trả về giá trị nguyên nhỏ nhất lớn hơn hoặc bằng x
  • Kiểu tham trị x: double.
  • Kiểu trả về: double.

Ví dụ

 x
ceil(x)
1.2
2
1.5
2
1.9
2
2.0
2
2.1
3

Ví dụ

float a = 1.2;
double b;
void setup()
{
    Serial.begin(9600);
    b = ceil(a);
    Serial.println(b, 1); // lấy 1 số phần thập phân để xem
    // b=2.0
}
void loop() { ; }

Hàm floor(x)

Cấu trúc

double floor(double x) 
  • Kiểu tham trị x: double.
  • Kiểu trả về: double.
  • Trả về giá trị nguyên lớn nhất nhỏ hơn hoặc bằng x

Ví dụ

x
floor(x)
1.2
1
1.5
1
1.9
1
2.0
2
2.1
2

Ví dụ

float a = 2.0;
double b;
void setup()
{
    Serial.begin(9600);
    b = floor(a);
    Serial.println(b, 1); // lấy 1 số phần thập phân để xem
    // b=2.0
}
void loop() {  }

Hàm atoi(a[])

Cấu trúc

int atoi(const char *A)

Hàm này dùng để chuyển đổi kí tự dạng chữ số (kiểu char) về chữ số. Nó trả về số nguyên đã được chuyển đổi dưới dạng một giá trị int. Nếu không có sự chuyển đổi hợp lệ nào được thực hiện, hàm trả về 0.

Khi đó số nhập vào có giá trị trong khoảng từ (-32768 -> 32767 ).

Ví dụ 1

const char Number[5] = "12345"; // mảng kí tự
//hoặc : const char Number[]="12345";
int S;
void setup()
{
    Serial.begin(9600);
    S = atoi(Number);
    Serial.println(S);
    // Kết quả S là một số có giá trị S=12345.
}
void loop() { }

Ví dụ 2: Biểu diễn một số âm

Chú ý kích cỡ của mảng sẽ tăng thêm 1 đơn vị để lưu thêm dấu “-“ đằng trước số âm.

const char Number[] = "-12345"; // mảng kí tự
//hoặc : const char Number[6]="-12345";
int S;
void setup()
{
    Serial.begin(9600);
    S = atoi(Number);
    Serial.println(S);
    // Kết quả S là một số có giá trị S=12345.
}
void loop() {  }

Ví dụ 3: Nhập chữ số xem như giá trị

Các bạn chú ý cỡ của mảng phải bằng số lượng chữ cái của số muốn nhập.

Số từ  (-99 đến 999) thì cỡ mảng là 3.

Số từ (-999 đến 9999 ) thì cỡ mảng là 4.

Số từ (-9999 đến đến  32767) thì cỡ mảng là 5.

Số từ (-32768 đến -10000) thì cỡ mảng là 6.

char Number[5]; // mảng kí tự
int S;
void setup()
{
    Serial.begin(9600);
    // Kết quả S là một số có giá trị S=12345.
    Serial.println("Nhap so :");
}
void loop()
{
    while (1) { //lặp để quét
        if (Serial.available()) {

            Serial.readBytes(Number, 5); // đọc 5 byte Char với
            S = atoi(Number);
            Serial.println(S);
        }
    }
}

Hàm itoa ()

Hàm này dùng để chuyển một số sang chuỗi kí tự !

char *  itoa ( int value, char * str, int base );

Trong đó:

  • value : là số cần truyền , (nếu value là một số âm thì kí tự "-" sẽ được đặt ở đầu chuỗi !)
  • str : mảng chuỗi để lưu số dưới dạng kí tự
  • base : để lựa chọn dạng cơ số muốn chuyển về 
    • base =2 : chuỗi kí tự có dạng số nhị phân
    • base=8 :  chuỗi kí tự có dạng bát phân
    • base =10 : chuỗi kí tự có dạng thập phân
    • base=16 : chuỗi kí tự có dạng HEX (thập lục phân)

Ví dụ minh họa :

void setup()
{

    Serial.begin(9600);
}
int a = 1234;
char chu_so[20];
void loop()
{

    itoa(a, chu_so, 10); // chuyển thành số thập phân
    Serial.println(chu_so);
    itoa(a, chu_so, 16); // chuyển thành số hex
    Serial.println(chu_so);
    itoa(a, chu_so, 8); // chuyển thành số bát phân
    Serial.println(chu_so);
    itoa(a, chu_so, 2); // chuyển thành số nhị phân
    Serial.println(chu_so);
    delay(1000);
    Serial.println("___________");
}

 

lên
6 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Hướng dẫn sử dụng ic eeprom 24Cxx của Atmel và thư viện

 Bấy lâu nay bạn đã sử dụng sai eeprom của arduino? ..Một ngày bạn sử dụng eeprom bao nhiêu lần? Có bao giờ bạn lo lắng tới tuổi thọ của EEPROM ?smiley

EEPROM là còn được hiểu như một thẻ nhớ có thể lưu trữ dữ liệu ngay cả khi mất điện.

Bộ nhớ EEPROM có sẵn của arduino có số lần ghi/xóa 100000 lần,  nếu dùng hết số lần ghi cho phép, eeprom sẽ hỏng. Để khắc phục điều này, chúng ta cần sử dụng một ic eeprom ngoại vi thay vì sử dụng eeprom của arduino.

lên
24 thành viên đã đánh giá bài viết này hữu ích.

ST7565 | Làm game hứng trứng

Xin chào các bạn, hôm nay mình sẽ viết bài về một project Game đầu tiên, một tựa game quen thuộc và đơn giản : Game hứng trứng.

Các bạn sẽ cực kì thích thú cho xem

lên
7 thành viên đã đánh giá bài viết này hữu ích.