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
4 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ả

ST7565 | Hướng dẫn sử dụng glcd ST7565 homephone và chia sẻ thư viện

LCD chip st7565 có kích thước màn hình 128x64 pixel, là loại lcd graphic đa dụng cho nhiều dự án. Ở nước ta việc mua mới lcd này khá khó do không được ưa chuộng, sở dĩ có chuyện này có lẽ là do thiếu các tài liệu và hướng dẫn liên quan. Hiện lcd loại này chỉ có thể vọc từ các điện thoại homephone hoặc mua cũ. Nếu bạn đang có trong tay lcd này, thì bài viết dưới sẽ giúp bạn sử dụng nó với arduino.

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

BÀI 2 - Sử dụng nhiều ic eeprom 24Cxx cùng lúc

Qua bài đầu, mình đã giúp các bạn giải quyết được một vấn đề khá quan trọng trong việc sử dụng EEPROM. Bài này sẽ giúp bạn biết cách ghép nhiều module eeprom để tạo ra Super eeprom như đã hứa.

lên
11 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: