"Hành trình vạn dặm bắt đầu từ những bước đi đầu tiên"

せんりのみちもいっぽから

DANH NGÔN

Hành trình vạn dặm bắt đầu từ một bước chân - Lão Tử
Showing posts with label Cplusplus. Show all posts
Showing posts with label Cplusplus. Show all posts

Jun 12, 2020

IR remote control (điều khiển bằng hồng ngoại) với Arduino






LẬP TRÌNH
Đoạn mã này dùng để đọc tín hiệu từ remote. Các bạn vào link sau để tải thư viện hỗ trợ IR remote nhé:  https://github.com/shirriff/Arduino-IRremote/



Tham khảo:http://arduino.vn

Dec 28, 2019

Tìm đường dẫn đến thư viện trong Arduino




Ngoài Path thư viện mặc định khi cài Arduino : C:\Program Files (x86)\Arduino\libraries
Chúng ta có thể tìm kiếm folder chứa đường dẫn thư viện mới thêm vào trên arduino
C:\Users\sev_user\Documents\Arduino\libraries

Aug 17, 2019

Tách chuỗi (tìm từ 3 ký tự trở lên)

string CReadDataDlg::tachchuoi(string strData)
{
//strTest = "TOTAL PLU005 No.000000 I.N.U NET : 10210.0  g U / W : 1220  g PCS : 0 Tare : g Gross     0.0  g";
string strNoSpace = " ";
//TACH TAT CA KI TU ' ', XUONG DONG'\r', '\n', ':'
for (int i = 0; strData[i]; i++)
{
if (strData[i] != ' ' && strData[i] != '\r' && strData[i] != '\n'
&& strData[i] != ':')
strNoSpace = strNoSpace + strData[i];
}

// uppercase-- DOI CHU THUONG THANH IN HOA
std::for_each(strNoSpace.begin(), strNoSpace.end(), [](char & c) {
c = ::toupper(c);
});
//TIM DEN CUM "NET"
size_t found = strNoSpace.find("NET");
// CAT CHUOI TU DAU DEN "NET " + THEM 3 KY TU
string str = strNoSpace.substr(found + 3, strNoSpace.length() - 1);

int iElement = 2;// KHAI BAO CHUOI LAY VE . GIA SU LA 2 KY TU
string strRes = "0";
string strRes1 = "";
// QUET TAT CA KY TU LA NUMBER CHO DEN KHI GAP KI TU CHUOI SE THOAT KHOI VONG LAP
while (isFloat(strRes) || iElement > (str.length()-2))
{
strRes = str.substr(0, iElement);

if (isFloat(strRes))
strRes1 = strRes;
iElement++;
}

return strRes1;
return " ";
}
// Hàm tìm ký tự là số
bool CReadDataDlg:: isFloat(string myString) {
std::istringstream iss(myString);
float f;
iss >> noskipws >> f;  
return iss.eof() && !iss.fail();
}

Tìm kiếm icon trong lập trình GUI

SQL SERVE- Tự động tăng row (identity) trong Sql



CREATE TABLE STATUS_TABLE (
ID int IDENTITY (1,1) NOT NULL,
mDATE SMALLDATETIME,
mWEIGH REAL,
SN CHAR(30),
PRIMARY KEY (ID)
)
GO
INSERT INTO STATUS_TABLE(
mDATE,mWEIGH,SN
)
VALUES('2019-08-17 10:45:00','1.8','AUTOMATION')
GO
SELECT *FROM STATUS_TABLE
GO
INSERT INTO STATUS_TABLE(
mDATE,mWEIGH,SN
)
VALUES('2019-08-17 10:45:00','1.9','AUTOMATION')


// đặt lại giá trị identity = 1
DBCC CHECKIDENT ('STATUS_TABLE', RESEED, 0)

  • STATUS_TABLE” là bảng cần đặt lại giá trị identity.
  • “RESEEED” là từ khóa để đặt lại giá trị idenitty về giá trị mà ta mong muốn.
  • “0” là giá trị hiện tại là 0, và giá trị tiếp theo là 1.

THEO :
https://quantrimang.com/cac-kieu-du-lieu-trong-sql-server-148134
http://thuthuat.taimienphi.vn/cach-tao-kiem-tra-va-thay-doi-cot-identity-tren-microsoft-sql-server-31618n.aspx
https://ngohoangthien.com/lap-trinh/sql-server/dat-lai-gia-tri-identity-trong-sql-server

Jul 5, 2019

Hàm Millis() trong Arduino

Các hàm về thời gian trong Arduino gồm millis() và micros() sẽ bị tràn số sau 1 thời gian sử dụng. Với hàm millis() là khoảng 50 ngày. Tuy nhiên, do là kiểu số nguyên không âm (unsigned long) nên ta dễ dàng khắc phục điều này bằng cách sử dụng hình thức ép kiểu.



"unsigned long time;
byte ledPin = 10;
void setup()
{
    // khởi tạo giá trị biến time là giá trị hiện tại
    // của hàm millis();
    time = millis();
    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);
}

void loop() 
{
    // Lưu ý các dấu ngoặc khi ép kiểu
    // đoạn chương trình này có nghĩa là sau mỗi 1000 mili giây
    // đèn Led ở chân số 10 sẽ thay đổi trạng thái
    if ( (unsigned long) (millis() - time) > 1000)
    {
        // Thay đổi trạng thái đèn led
        if (digitalRead(ledPin) == LOW)
        {
            digitalWrite(ledPin, HIGH);
        } else {
            digitalWrite(ledPin, LOW);
        }
        
        // cập nhật lại biến time
        time = millis();
    }
}"


millis() có nhiệm vụ trả về một số - là thời gian (tính theo mili giây) kể từ lúc mạch Arduino bắt đầu chương trình của bạn. Nó sẽ tràn số và quay số 0 (sau đó tiếp tục tăng) sau 50 ngày.
Khi bắt đầu chạy  gán Millis bằng thời gian ban đâu millis= time=0;
Nếu (millis()- time>1000){
Thực hiện câu lệnh ;
Thực hiện xong lại get lại time =millis();
}
Nếu  millis()=2000-time>1000{
Thực hiện câu lệnh  xong ;
Gán time =2000;
}
Cứ tiếp tục như vậy
theo :http://arduino.vn/reference/millis

Jul 4, 2019

Toán tử trong C

Định nghĩa toán tử trong [Wikipedia]:
Trong toán học, một toán tử (tiếng Anh operator, phân biệt với operation - phép toán) là một hàm, thông thường có một vai trò quan trọng trong một lĩnh vực nào đấy. Chẳng hạn trong đại số tuyến tính có “toán tử tuyến tính” (linear operator). Trong giải tích có “toán tử vi phân” (differential operator)… Thông thường, một “toán tử” là một hàm tác động lên các hàm khác; hoặc nó có thể là tổng quát hóa của một hàm, như trong đại số tuyến tính.
Các kiểu toán tử trong C:
  • Toán tử số học
  • Toán tử quan hệ
  • Toán tử logic
  • Toán tử so sánh bit
  • Toán tử gán
  • Toán tử hỗn hợp

Toán tử số học:

Giả sử khai báo: int A=5, B=6; float C=1.2;
Toán tửMiêu tảVí dụ
+Cộng 2 toán hạngA + B sẽ cho kết quả là 11
-Trừ 2 toán hạngA - B sẽ cho kết quả là -1
*Nhân 2 toán hạngA * B sẽ cho kết quả là 30
/Chia 2 toán hạngB / A sẽ cho kết quả là 0 (2 toán hạng đều là số nguyên thì kết quả là phần nguyên của thương) A / C sẽ cho kết quả là 4.166667 (1 trong 2 toán hạng là số thực dấu phẩy động thì thương là số thực dấu phẩy động)
%Chia lấy phần dưB % A sẽ cho kết quả là 5

Toán tử so sánh(quan hệ): Trả về giá trị là true (đúng) hoặc false (sai)

int A=5, B=6;
  • < (nhỏ hơn) A < B -> true
  • <= (nhỏ hơn hoặc bằng) A <= B -> true
  • > (lớn hơn) A > B -> false
  • >= (lớn hơn hoặc bằng) A >= B -> false
  • == (bằng) A == B -> false
  • != (khác) A != B -> true

Toán tử logic: Trả về giá trị là true (đúng) hoặc false (sai)

Trong ngôn ngữ C, 2 trạng thái true(đúng) và false(sai) được biểu diễn bởi các số nguyên int:
  • Số 0 biểu diễn cho trạng thái false (sai).
  • Tất cả các số nguyên khác 0 biểu diễn cho trạng thái true (đúng).
Các toán tử logic:
  • && (and) trả về true khi cả 2 toán hạng đều đúng. Ngược lại trả về false.
    • (5<6) && (7<8) -> true
    • (5>6) && (7<8) -> false
    • (5>6) && (7>8) -> false
  • || (or) trả về true khi ít nhất một trong 2 toán hạng đúng. Ngược lại trả về false.
    • (5<6) && (7<8) -> true
    • (5>6) && (7<8) -> true
    • (5>6) && (7>8) -> false
  • ! (not) trả về true khi toán hạng (đằng sau dấu ! sai). Ngược lại trả về false.
    • !(7>8) -> true
    • !(7<8) -> false

Toán tử thao tác trên bit:

  • & (and bit)
  • | (or bit)
  • ~ (phủ định)
  • >> (dịch bit sang phải)
  • << (dịch bit sang trái)

Toán tử gán

Sử dụng dấu = cho việc gán giá trị vào biến.
Ví dụ:
int a,b,c;
int main(void)
{
 a = 5; // Gán cho a giá trị là 5
 c = b = a; // Gán cho b và c giá trị bằng giá trị của a
 return 0;
}
Các toán tử gán mở rộng:
Toán tửVí dụTương đương với
+=C += AC = C + A
-=C -= AC = C - A
*=C *= AC = C * A
/=C /= AC = C / A
%=C %= AC = C % A
<<=C <<= 2C = C << 2
>>=C >>= 2C = C >> 2
&=C &= 2C = C & 2
^=C ^= 2C = C ^ 2
|=C |= 2C = C | 2

Toán tử tăng giảm

  • ++ là toán tử tăng
    • ++i tương đương với i = i + 1
  • -- là toán tử giảm
    • --i tương đương với i = i - 1
  • Có 2 cách viết ++i và i++ nhưng ý nghĩa của chúng khác nhau:
    • ++i thì i được tăng trước sau đó sẽ lấy kết quả để thực hiện biểu thức
    • i++ thì i được đưa vào thực hiện biểu thức trước sau đó mới tăng i lên.

Một số toán tử khác

Toán tửMiêu tảVí dụ
sizeof()Trả lại kích cỡ của một biếnsizeof(a), với a là integer, thì sẽ trả lại kết quả là 4.
&Trả lại địa chỉ của một biến.&a sẽ cho địa chỉ thực sự của biến a.
*Trỏ tới một biến.*a sẽ trỏ tới biến a.
<điều kiện>? X:YBiểu thức điều kiệnNếu điều kiện đúng ? thì trả về giá trị X : Nếu không thì trả về giá trị Y
<toán hạng 1>,<toán hạng 2>Ước lượng giá trị toán hạng 1, ước lượng giá trị toán hạng 2 và trả về giá trị toán hạng 2 là giá trị cuối cùngt = (x=10, x+5) sẽ gán giá trị x <- 10; thực hiện phép tính x + 5 = 10 + 5 = 15 và gán giá trị 15 cho t

Bảng thứ tự ưu tiên thực hiện của toán tử (theo thứ tự giảm dần mức độ ưu tiên):

LoạiToán tửThứ tự ưu tiên
Postfix() [] -> . ++ - -Trái sang phải
Unary+ - ! ~ ++ - - (type) * & sizeofPhải sang trái
Tính nhân* / %Trái sang phải
Tính cộng+ -Trái sang phải
Dịch chuyển bit<< >>Trái sang phải
So sánh không ngang bằng< <= > >=Trái sang phải
So sánh ngang bằng== !=Trái sang phải
Phép AND bit&Trái sang phải
Phép XOR bit^Trái sang phải
Phép OR bit|Trái sang phải
Phép AND logic&&Trái sang phải
Phép OR logic||Trái sang phải
Điều kiện? :Phải sang trái
Gán= += -= *= = %= >>= <<= &= ^= |=Phải sang trái
Dấu phảy,Trái sang phải

Ép kiểu:

Đôi khi chúng ta cần chuyển đổi giá trị một biểu thức sang kiểu dữ liệu khác. Ví dụ trong trường hợp ta muốn thực hiện phép toán chia lấy phần dư của 2 số nguyên, nhưng lại được lưu trong 2 biến kiểu float, ta không thể áp dụng trực tiếp toán tử % cho 2 biến đó. Bạn chạy chương trình thế này sẽ báo lỗi:
#include <stdio.h>
int main(void)
{
 int a = 5, c;
 float b = 6;
 c = a % (int)b;
 printf("%d", c);
 return 0;
}
Vì thế cần ép kiểu theo cú pháp: (<kiểu dữ liệu>) <biểu thức> để lấy giá trị từ biến b, đổi sang số nguyên để thực hiện phép %. Code đúng như sau:
#include <stdio.h>
int main(void)
{ 
 int a = 5, c;
 float b = 6; 
 c = a % (int)b; 
 printf("%d", c); 
 return 0; 
} 

May 28, 2019

Tính kế thừa trong C++

Tính kế thừa trong lập trình hướng đối tượng cho phép một lớp (class) có thể kế thừa các thuộc tính và phương thức từ các lớp khác đã được định nghĩa. Lớp được kế thừa còn được gọi là lớp cha và lớp kế thừa được gọi là lớp con.
Vidu
///ham Cha
//MyParents.h

#include "stdafx.h"
#include<iostream>
#include"MyParents.h"
#include"baby.h"
using namespace std;

int main()
{
/*MyParents Parent;
Parent.xinchao();*/
baby son;
son.xinchao();
_gettch();
return 0;
}
//MyParents.cpp
#include "stdafx.h"
#include "MyParents.h"
#include<iostream>
using namespace std;


MyParents::MyParents()
{
}


MyParents::~MyParents()
{
}

void MyParents::xinchao()
{
cout << "Xin chao SW, Parents" << endl;
}

//ham con
//baby.h
#include "MyParents.h"
class baby:public MyParents
{
public:
baby();
~baby();
};

Ham Main

#include "stdafx.h"
#include<iostream>
#include"MyParents.h"
#include"baby.h"
using namespace std;

int main()
{
/*MyParents Parent;
Parent.xinchao();*/
baby son;
son.xinchao();
_gettch();
return 0;
}


May 21, 2019

Thư viện Stack C++

Tham khảo: https://phattrienphanmem123az.com/lap-trinh-cpp-stl/cpp-stl-stack.html

– Là một loại container trong thư viện STL ( hiểu đơn giản là dạng thùng chứa dữ liệu)
– Nguyên lý cơ bản đó là vào sau thì ra trước, ông nào được push vào sau cùng, thì khi pop ông ấy sẽ ra trước (giống như xếp kiện hàng)
– Không có hàm truy cập từng phần tử  như hàm at() hay toán tử [] như vector hay array.

// stack.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> stackData;
stackData.push(0);
stackData.push(1);
stackData.push(2);
stackData.push(3);

stack<int> stackData1;
stackData1.push(10);
stackData1.push(11);
stackData1.push(12);
stackData1.push(13);
//stackData.pop();
/*int size = stackData.size();
cout << size << endl;*/
stackData.swap(stackData1);
//cout << '\t' << stackData1.top();
while (!stackData.empty()){

cout << '\t'<< stackData.top(); //'\t' cach cac phan tu
stackData.pop();
}
//cout << '\n';
_gettch();
    return 0;
}

May 18, 2019

Vi du về hàm tách chuỗi trong MFC C++

string CReadDataDlg::tachchuoi(string strData)
{
string strNoSpace = " ";
for (int i = 0; strData[i]; i++)
{
if (strData[i] != ' ' && strData[i] != '\r' && strData[i] != '\n'
&& strData[i] != ':')
strNoSpace = strNoSpace + strData[i];
}
int iFindN;
iFindN = strNoSpace.find_first_of('N');
if (iFindN == -1)
iFindN = strNoSpace.find_first_of('n');

string str = strNoSpace.substr(iFindN + 3, strNoSpace.length() - 1);
int a = str.find_first_of('k');
string str1;
str1 = str.substr(0, a);

if (str1.length() > 0)
return str1;
return " ";
}
void CReadDataDlg::OnBnClickedOk2()
{

strTest = "Total : NET      0.1666192kg       abc       dlld";
MessageBox(tachchuoi(strTest).c_str());

}

Apr 27, 2019

Hiểu thế nào là hàm Return trong C++


Bạn đi mua bánh mì, đưa tiệm bánh mì 10k, người ta đưa bạn ổ bánh mì.
Thì ổ bánh mì là giá trị trả về của hàm tiệm bánh mì… Và 10k là argument (tham số) của hàm.
Từ đó có thể xây dựng lại thành
int muabanhmi(int vnd) {
 int sobanhmi = vnd/10000; // 10k 1 ổ
 return sobanhmi;
}

int sobanhmidangco = muabanhmi(10000);
-> bây giờ bạn có 1 ổ bánh mì và nó được lưu trong biến sobanhmidangco
Hoặc bạn nhờ thằng bạn tính giùm phép cộng. Bạn đưa nó 2 số a và b. Nó trả lại kết quả a + b cho bạn.
Thì a+b là giá trị trả về của hàm nhờ_thằng_bạn_làm_phép_cộng với 2 tham số là a và b.
Hàm ko cần tham số cũng có giá trị trả về. Như hàm int main(). Nó return 0 để báo biết rằng ko có lỗi.
Hoặc gần gũi với ngoài đời hơn là bạn gọi thằng bạn, nó chào lại mình.
Thì lời chào lại là kết quả trả về của hàm hello_thằng_bạn. Bạn chỉ cần gọi nó là nó trả về giá trị, ko cần nhờ nó làm gì cả.
ví dụ
string hello_thang_ban() {
  return "hello huy";
}

string a = hello_thang_ban(); //gọi thằng bạn và nó trả về lại chuỗi "hello huy"

Lệnh Continue va Break

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int a = 14;
int b = 2;
int idx = 0;
while (a % 10 != 0) {
idx++;
a =a+ 2 * b; //18,22,26,
}
for (int i = 0; i < 4; i++)
{
//if (i == 2) continue;// neu thoa man i= 4 thi no bo qua tat ca cau lenh duoi no
if (i == 2) break; // neu thoa man se thoat khoi vong lap
cout << i << endl;
}
//cout << "Number of running=" << idx;
system("pause");
return 0;
}
tham khảo:
Lệnh continue.
Lệnh này cho phép bạn bỏ qua một bước trong vòng lặp.
Điều này giúp giảm bớt thời gian thực thi khi thực hiện những giá trị không hợp lệ.
tôi giả sử i chạy từ 0 cho đến 10.
với i là số chẵn thì tôi bỏ qua, còn số lẻ thì tôi in nó ra màn hình.
Ok. Đó là lý thuyết cơ bản. Sau đây chúng ta sẽ cùng thực hành trên VS2012

Apr 9, 2019

So sanh hai mang trong C++

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
int matches = 0;

int Array1[] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 0 };
int Array2[] = { 1, 22, 3, 44, 5, 66, 7, 88, 9, 10 };

for (int i = 0; i<10; i++) {
for (int j = 0; j<10; j++) {
if (Array1[i] == Array2[j]) {
cout << "Match " << ++matches << ": " << Array1[i] << endl;
}
}

}
system("pause");
return 0;

}

Mar 23, 2019

Tách một CString lấy độ dài bất kỳ

// tach chuoi bat ky lay do dai do
CString str("GH96-11759AC610-P3000160");
char strPass[40];
char istr[11];
strcpy_s(strPass, CStringA(str).GetString());
for (int i = 0; i < 11; i++) {
istr[i] = strPass[i+20];
}
CString str1 = CString(istr, 11);
MessageBox(str1);

Mar 3, 2019

C++ Fix lỗi _CRT_SECURE_NO_WARNINGS

Error C4996 'ctime': This function or variable may be unsafe. Consider using ctime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. ReadData c:\users\asus\desktop\readdata\readdata\readdatadlg.cpp 712

copy _CRT_SECURE_NO_WARNINGS vào ...



Hướng dẫn cài đặt thư viện Open CV

Vd : Open Camera trên Visual

#include <opencv/cv.h>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;

int main() {
VideoCapture cap(0);
if (!cap.isOpened())
{
cout << "no camera";
return -1;

}
while (true)
{
Mat frame;
cap.read(frame);
imshow("camera", frame);
if (waitKey(30) == 27) {
return 0;
}
}
}




Feb 27, 2019

Get a cell in CSV file with chilkat MFC C++

int row;
const char* m = (LPCTSTR)m_inputCSV;//convert Cstring to const*char;
    const char* ishow ="";
const char* text = "";
const char* iweight = "";
int n = csv.get_NumRows();
for (row = 0; row <= n - 1; row++) {
text = csv.getCell(row, 2);
if (*m == *text)
{
ishow = csv.getCell(row, 4);
iweight = csv.getCell(row, 3);
break;
}

Kết nối bạn bè

Wikipedia

Search results

Video Nổi bật

Cảm ơn các bạn đã ghé thăm

 
Please Enable Javascript!Enable JavaScript