# Giới thiệu C++
## Nhóm zalo lớp : https://zalo.me/g/uqtoca509
## Cài đặt C++ (Windows)
Bước 1 : Tải C++ tại đây: http://www.codeblocks.org/downloads/26
Bước 2 : Chọn download codeblocks-20.3-setup.exe

Bước 3 : Chạy File vừa được tải về, bấm Next và Install ở những lần lựa chọn để cài đặt CodeBlocks
## Sử dụng CodeBlocks
Bước 1 : Mở CodeBlocks lên, để tạo một file mới ta bấm tổ hợp phím Ctrl + Shift + N.
Bước 2 : Bấm Ctrl + S để lưu File đó. khi lưu file code C++, phải đặt tên có dạng [tên file].cpp, ví dụ như main.cpp

Giờ ta sẽ thử cài đặt một chương trình in ra "Hello World".

Sau khi code xong, ta sẽ bấm F9 để biên dịch và chạy thử.

## Kiểu dữ liệu
Những dữ liệu trong C++ đều có kiểu của chúng, số 5 có kiểu là số nguyên int, số 5.5 có kiểu là số thực float, xâu "ABC" có kiểu là string,...
## Biến dữ liệu
Để lưu trữ các dữ liệu trong lập trình, ta cần sử dụng 'biến'. Ta có thể gán giá trị dữ liệu sử dụng toán tử `=`. Cú pháp gán dữ liệu: `[var_name] = [value]`.
```C++
string a = "ABC"; // tạo một biến tên a kiểu string, có giá trị là "ABC"
int b = 5; // tạo một biến số nguyên b có giá trị là 5
float c = 5.5; // tạo một biến số thực c có giá trị là 5.5
```
Lưu ý, quy tắc tên biến như sau:
- Tên biến trong C++ phải bắt đầu bằng một chữ cái (a-z, A-Z) hoặc dấu gạch dưới (_).
- Tên biến có thể chứa các chữ cái (a-z, A-Z), các chữ số (0-9) và dấu gạch dưới (_).
- C++ phân biệt chữ hoa và chữ thường, vì vậy biến "name" và "Name" được coi là hai biến khác nhau.
- Tên biến không thể chứa các ký tự đặc biệt như @, $, % và *.
## Các toán tử trong C++
Các toán tử `+`, `-` và `*` lần lượt thể hiện các phép toán cộng, trừ và nhân, ví dụ :
```C++
3 * 4 = 12
3 + 4 = 7
3 - 4 = -1
```
Các biến có thể sử dụng để làm các biểu thức như trong toán học, ví dụ :
```C++
int a = 3;
int b = 4;
int c = a * b + 3; //lúc này c = 3 * 4 + 3 = 15
int d = a + b * 2; //d = 11
```
Đối với phép chia, tùy thuộc vào kiểu dữ liệu sẽ cho ra kết quả khác nhau. Nếu kiểu dữ liệu là int, phép chia `/` sẽ cho ra phần nguyên của phép toán, còn nếu kiểu dữ liệu là số thực sẽ cho ra đáp án có số thập phân. Ví dụ :
```c++
int a = 10;
int b = 4;
int c = a / b; //lúc này c = 2 vì phần nguyên của 10 chia 4 là 2
float x = 10
float y = 4
float z = x / y; //z = 2.5 vì x, y có kiểu số thực.
```
Đối với kiểu int, có thể toán tử là `%` có nghĩa là chia lấy dư, trả về phần dư của phép chia :
```C++
int a = 10;
int b = 4;
int c = a % b // lúc này c = 2 vì 10 chia 4 dư 2
```
Tổng kết các toán tử số học:
| Toán tử | Phép toán học | Cú pháp |
| -------- | -------- | -------- |
| `+` | Cộng | `x + y` |
| `-` | Trừ | `x - y` |
| `*` | Nhân | `x * y` |
| `/` | Chia | `x / y` |
| `%` | Chia lấy dư | `x % y` |
## Nhập xuất dữ liệu
Để nhập dữ liệu từ bàn phím vào một biến ta sử dụng cú pháp
`cin >> [tên biến]`
```C++
int a;
cin >> a;
```
Để in ra dữ liệu ta sử dụng lệnh `cout << `
```C++
int a = 10;
int b = 20;
cout << a;
cout << b;
cout << a * b;
```
Chương trình trên in ra `1020200` vì ta không thực hiện hành động in ra xuống dòng. Để in xuống dòng ta thêm `<< '\n'` vào cuối lệnh in.
```C++
int a = 10;
int b = 20;
cout << a << '\n';
cout << b << '\n';
cout << a * b << '\n';
```
Khi đó chương trình in ra 3 dòng
```
10
20
200
```
Chương trình sau đây, nhập vào 2 số nguyên là chiều dài và chiều rộng của hình chữ nhật và in ra diện tích và chu vi của nó:
```C++
int length;
int breadth;
cin >> length;
cin >> breadth;
int area = length * breadth;
cout << "Area is " << area << '\n';
cout << "Perimeter is " << 2 * (length + breadth) << '\n';
```
## Bài tập thực hành
https://bkdnoj.com/contest/cppb1/problem
# Lệnh điều kiện
## Câu điều kiện if-else
Câu lệnh `if` là một câu lệnh Logic, đánh giá điều kiện được đưa ra là `true` hay `false`.
Nếu điều kiện đó đúng (`true`) thì câu lệnh if sẽ được thực hiện, nếu không thì bỏ qua.
```C++
if(true) {
cout << "Xin Chao";
}
```
## Cấu trúc câu lệnh điều kiện
Cấu trúc của câu lệnh `if` là :
```c++
if([điều kiện được đánh giá]) {
[lệnh thực hiện]
}
```
Ví dụ:
```c++
if(2 > 1) {
cout << "Hi";
}
```
## Các toán tử trong if
Để so sánh giữa các biến hay số, ta sẽ có các toán tử sau :
| Toán tử | Phép so sánh | Cú pháp |
| -------- | -------- | -------- |
| `>` | Lớn hơn | `a > b` |
| `<` | Bé hơn | `a < b` |
| `==` | Bằng nhau | `a == b` |
| `!=` | Khác nhau | `a != b` |
| `>=` | Lớn hơn hoặc bằng | `a >= b` |
| `<=` | Bé hơn hoặc bằng | `a <= b` |
Ví dụ như sau
```C++
if(3 > 2) // sẽ bằng true vì 3 > 2
if(3 < 2) // sẽ bằng false vì 3 không bé hơn 2
if(3 >= 2) // bằng true vì 3 lớn hơn 2 và đây là phép toán lớn hơn HOẶC bằng
if(3 <= 2) // bằng false vì 3 không bé hơn hoặc bằng 2
if(3 == 2) // bằng false vì 3 không bằng 2
//Lưu ý : Toán tử bằng có 2 dấu bằng, nếu khi 3 = 2 sẽ sai
if(3 != 2) // bằng true vì 3 không bằng 2
```
## Câu lệnh && và ||
Nếu có nhiều hơn 1 điều kiện cần được kiểm tra, ta sẽ dùng đến các toán tử `&&` và `||`
`&&` có nghĩa là và, cú pháp như sau
```C++
if([điều kiện 1] && [điều kiện 2]) {
}
```
ở đây sẽ kiểm tra cả hai điều kiện, và cả 2 phải đều đúng thì câu lệnh `if` đó mới đúng
```C++
if(3 > 2 && 1 > 2)
```
Ở đây `3 > 2` là đúng như vì điều kiện `1 > 2` sai nên câu lệnh `if` này vẫn `false`.
`||` có nghĩa là hoặc, cú pháp :
```C++
if([điều kiện 1] || [điều kiện 2]) {
}
```
`||` sẽ chỉ cần một trong các điều kiện được kiểm tra là đúng, thì câu lệnh đó sẽ đúng
```C++
if(3 > 2 || 1 > 2)
```
Ở đây câu lệnh này đúng vì có vế `1 > 2` là đúng
### if-else
Chúng ta có thể bổ sung vào lệnh if như sau
```C++
if(điều kiện) {
dãy lệnh 1
} else {
dãy lệnh 2
}
```
Nếu điều kiện đúng, thì dãy lệnh 1 sẽ được thực hiện. Ngược lại (`else`), thì dãy lệnh 2 sẽ được thực thi.
Ví dụ:
```C++
int n; cin >> n;
if(n % 2 == 1) {
cout << "Le";
} else {
cout << "Chan";
}
```
Đây là bài kiểm tra số n là chẵn hay lẻ, nếu n chia 2 dư 1 thì in ra Lẻ, không thì in ra Chẵn
## Bài tập
Bài giải cho câu khó contest `if` :

# Câu lệnh vòng lặp
## Lệnh For
Câu lệnh vòng lặp là loại câu lệnh sẽ thực hiện cho đến khi điều kiện vẫn còn `true`
Cú pháp câu lệnh for :
```C++
for(câu lệnh ban đầu; điều kiện; câu lệnh mỗi lần lặp) {
dãy lệnh
}
```
Câu lệnh ban đầu là câu lệnh sẽ thực hiện khi `bắt đầu` vòng for, và nó chỉ thực hiện một lần
Điều kiện là mỗi lần lặp lại câu lệnh, sẽ kiểm tra nếu `true` thì thực hiện dãy lệnh, không thì sẽ dừng lại.
Câu lệnh mỗi vòng lặp, Nó sẽ thực hiện một lần mỗi lần lặp.
```C++
int i;
for(i = 1; i <= 10; i = i + 1) {
cout << i << " ";
}
//Câu lệnh đầu tiên là i = 1
//Điều kiện là i <= 10
//Mỗi lần lặp thì nó sẽ tăng i lên 1 vì có cái lệnh i = i + 1
```
## Lệnh while
Cú pháp lệnh while :
```C++
while(điều kiện) {
dãy lệnh
}
```
Lệnh while sẽ kiểm tra điều kiện, nếu `true` thì sẽ thực hiện dãy lệnh còn `false` thì dừng lại
## Break và Continue
### Break
Chỉ có thể sử dụng ở trong vòng lặp, khi gặp câu lệnh này, vòng lặp ngay lập tức bị dừng lại.
### Continue
Chỉ có thể sử dụng ở trong vòng lặp, khi gặp câu lệnh này, ngay lập tức bỏ qua lần lặp này.
## Bài tập vòng lặp
https://bkdnoj.com/contest/cppb3/problem
# Các cú pháp đặc biệt
## Thư viện tổng
Sau này chỉ cần khai báo thư viện này ở đầu chương trình, sẽ có tất cả các loại thư viện trong C++
```C++
#include<bits/stdc++.h>
```
## Cố định số chữ số in ra sau dấu phẩy thập phân
Cú pháp
```C++
cout << fixed;
cout << setprecision([số lượng số cần in ra sau dấu phẩy]);
```
```C++
cout << fixed;
cout << setprecision(2); //In ra 2 số sau số thập phân
```