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

Giới thiệu module ESP32 và hướng dẫn cài trình biên dịch trên Arduino Ide.

Hiện tại , module wifi esp8266 đã có mặt ở khắp nơi , nhà nhà dùng ESP8266. Vậy đâu là sự lựa chọn tiếp theo sau ESP8266 ? Câu trả lời từ nhà sản xuất ESP (espressif.com) đó là  :   “ESP32”

Cấu hình khủng, thêm chức năng , tăng số chân I/O, thêm nhiều cảm biến , giá thành phù hợp…là những gì mình sẽ giới thiệu về esp32 tại bài viết này.

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

NOKIA5110 | Hướng dẫn sử dụng và chia sẻ thư viện HOÀNG SA

Xin chào các bạn, bộ thư viện ST7565 homephone có nhiều tính năng nổi bật, để sánh ngang tầm ưu việt, giờ đây lcd 84x48 NOKIA5110 đã có một phiên bản giống hệt như vậy. Cùng khám phá nào !!  

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