S7UuQK& Q X7U~F0 QJkhoi.n.le/ltcb/baigiang/pdf/bg06_CauTrucMang.pdf4x §q /ì &k Í6 Õ3k «q 7 ñ...
Transcript of S7UuQK& Q X7U~F0 QJkhoi.n.le/ltcb/baigiang/pdf/bg06_CauTrucMang.pdf4x §q /ì &k Í6 Õ3k «q 7 ñ...
-
Lập Trình Cơ BảnCấu Trúc Mảng
TS. Lê Nguyên Khôi
Trường Đại học Công nghệ, ĐHQGHN
-
Nội Dung
1
Khái niệm chung Truyền mảng vào hàm Lập trình với mảng
Lập Trình Cơ Bản
-
Giới Thiệu
2Lập Trình Cơ Bản
0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 9
0 2 4 6 8 10 12 14 16 18
0 3 6 9 12 15 18 21 24 27
0 4 8 12 16 20 24 28 32 36
0 5 10 15 20 25 30 35 40 45
0 6 12 18 24 30 36 42 48 54
0 7 14 21 28 35 42 49 56 63
0 8 16 24 32 40 48 56 64 72
0 9 18 27 36 45 54 63 72 81
-
Giới Thiệu
3Lập Trình Cơ Bản
0
0 1 2 3 4 5 6 7 8 9
2
3
4
5
6
7
8
9
-
Giới Thiệu
4Lập Trình Cơ Bản
a b c d e f g h
8 8
7 7
6 6
5 5
4 4
3 3
2 2
1 1
a b c d e f g h
-
Đặt Vấn Đề
5
Biến không phù hợp để biểu diễn và xử lýnhững dữ liệu phức tạp, ví dụ: Danh sách điểm thi của một sinh viên
Danh sách sinh viên của lớp học
Sắp xếp, tìm kiếm, tính toán trên chuỗi dữ liệu
Ngôn ngữ lập trình (C++) cung cấp các kiểu dữliệu có cấu trúc để xử lý các vấn đề trên Trong đó mảng là cấu trúc dữ liệu thông dụng nhất
Mảng dùng để lưu trữ dữ liệu cùng kiểu
Tránh phải sử dụng nhiều biến
Lập Trình Cơ Bản
-
Khái Niệm Chung
6
Mảng là chuỗi dữ liệu có cùng kiểu Đặt tại các ô nhớ liên tiếp trong bộ nhớ Mỗi phần tử mảng có một chỉ số riêng biệt Sử dụng chỉ số để định vị & truy cập phần tử Ví dụ: điểm thi 5 môn của sinh viên lưu trữ
trong mảng có 5 phần tử (mảng diem_so) Mảng trên có 5 phần tử, lưu dữ liệu kiểu int,
chỉ số bắt đầu từ 0 đến 4
Lập Trình Cơ Bản
Chỉ số 0 1 2 3 4
Dữ liệu 45 60 77 72 83
-
Khái Niệm Chung
7
Các phần tử của mảng có thể coi là biến số têndiem_so_0, diem_so_1, diem_so_2, diem_so_3, diem_so_4, có kiểu dữ liệu int
Chỉ số phần tử đặt trong ngoặc vuông ([…]) diem_so[0], diem_so[1], diem_so[2], diem_so[3], diem_so[4]
Truy cập phần tử mảng, sử dụng: Tên mảng (diem_so)
chỉ số phần tử là một giá trị/biểu thức nguyên
Lập Trình Cơ Bản
Chỉ số 0 1 2 3 4
Dữ liệu 45 60 77 72 83
-
Sử dụng tên mảng và chỉ số phần tử
Truy Cập Mảng
8Lập Trình Cơ Bản
Chỉ số 0 1 2 3 4
Dữ liệu 45 60 77 72 83
diem_so[2] = 74; // 77 -> 74
// với i=1, câu lệnh sau -> diem_so[3] = 75diem_so[i+2] = 75; // 72 -> 75
// thực hiện tính toántb = (diem_so[2] + diem_so[3]) / 2;
//in ra 45 và 83cout
-
Khai Báo Mảng
9
Cú pháp:Kiểu_Dữ_Liệu tên_mảng[số_phần_tử];
Ví dụ:int diem_so[5];
Khai báo một mảng có tên diem_so, có 5 phần tử, lưu trữ giá trị kiểu int
Lưu ý: Mảng phải được khai báo trước khi sử dụng
Khi khai báo phải xác định số phần tử mảng
Số phần tử của mảng không thay đổi sau khai báo
Lập Trình Cơ Bản
-
Nhập Dữ Liệu – Thực Hiện Tính Toán
10Lập Trình Cơ Bản
const int SO_MON_HOC = 5;int main(){
int diem_so[SO_MON_HOC];for (int i = 0; i < SO_MON_HOC; i++)
cin >> diem_so[i];double tong_diem = 0.0;for (int i = 0; i < SO_MON_HOC; i++)
tong_diem = tong_diem + diem_so[i];cout
-
Khởi Tạo Mảng
11
Mảng có thể được khởi tạo như sau:int diem_so[5] = {45, 60, 77, 72, 83};
Lưu ý: số giá trị trong danh sách khởi tạo (trong {}) không được vượt quá kích thước mảng (trong [])
Mảng cũng có thể được khởi tạo như sau:int diem_so[] = {45, 60, 77, 72, 83};
C++ sẽ tự xác định độ dài của mảng dựa trên độ dàicủa danh sách khởi tạo
Mảng không được khởi tạo, phần tử mảng cógiá trị không xác định (giống biến)
Lập Trình Cơ Bản
-
Thống kê số lần ra mặt giá trị từ 1 đến 6, sau6000 lần tung xúc xắc
Ứng Dụng
12Lập Trình Cơ Bản
int main() {const int SO_MAT = 6;int dem[SO_MAT] = {0, 0, 0, 0, 0, 0};for (int i = 0; i < 6000; i++) {
int mat = rand() % SO_MAT;dem[mat]++;
}for (int m = 0; m < SO_MAT; m++) {
cout
-
Quản Lý Chỉ Số Phần Tử
13
Khai báo mảng có kích thước số_phần_tử, chỉ số các phần tử từ 0 đến số_phần_tử - 1
Tất cả các chỉ số khác không hợp lệ Truy cập vào các chỉ số không hợp lệ, ví dụdiem_so[-1], diem_so[SO_MON_HOC]: Truy cập ra vùng bộ nhớ ngoài mảng
Không gây lỗi cú pháp (lỗi dịch)
Có thể gây lỗi khi chạy chương trình Chương trình chạy sai
Dừng đột ngột
Lập trình viên có trách nhiệm kiểm soát giá trị chỉ số
Lập Trình Cơ Bản
-
Dùng tên mảng làm tham số truyền cho hàm
Hàm thay đổi giá trị trong mảng, kết thúc hàm, giá trịtrong mảng thay đổi
Mảng được truyền theo kiểu tham chiếu, nhưng khôngsử dụng toán tử &
Truyền Mảng Cho Hàm
14Lập Trình Cơ Bản
void nhapMang(int mang[]) {for (int i = 0; i < SO_MON_HOC; i++)
cin >> mang[i];}int main() {
int diem_so[SO_MON_HOC];nhapMang(diem_so);return 0;
}
-
Nếu không muốn hàm thay đổi giá trị trong mảng, sửdụng khai báo hằng số trong chữ ký hàm đối với mảng
Thay đổi giá trị phần tử mảng (gán, nhập) gây lỗi dịch
Truyền Mảng Cho Hàm
15Lập Trình Cơ Bản
double dtb(const int mang[], int so_phan_tu) {double tong = 0.0; for (int i = 0; i < so_phan_tu; i++)
tong = tong + mang[i];return (tong / so_phan_tu);
}int main() {
int diem_so[SO_MON_HOC];nhapMang(diem_so);cout
-
Lập Trình Với Mảng
16
Nhập & in dữ liệu Tìm kiếm dữ liệu Tìm kiếm nhỏ/lớn nhất Sắp xếp dữ liệu Thêm & loại dữ liệu
Lập Trình Cơ Bản
-
Nhập & In Dữ Liệu Mảng
17Lập Trình Cơ Bản
void nhapMang(int mang[], int so_phan_tu) {for (int i = 0; i < so_phan_tu; i++)
cin >> mang[i];}void inMang(const int mang[], int so_phan_tu) {
for (int i = 0; i < so_phan_tu; i++)cout
-
Bắt đầu từ đầu mảng, kiểm tra từng phần tử Tìm thấy giá trị, trả về true Hết mảng, không tìm thấy, trả về false
Tìm Kiếm Giá Trị Trong Mảng
18Lập Trình Cơ Bản
i=06 1 4 5 0 8 … … … …
i=16 1 4 5 0 8 … … … …
i=26 1 4 5 0 8 … … … …
i=36 1 4 5 0 8 … … … …
i=46 1 4 5 0 8 … … … …
?0
?0
?0
?0
true0
6 1 4 5 0 8 … … … …0
-
Tìm Kiếm Giá Trị Trong Mảng
19Lập Trình Cơ Bản
i=06 1 4 5 0 8 … … … …
i=16 1 4 5 0 8 … … … …
i=26 1 4 5 0 8 … … … …
i=36 1 4 5 0 8 … … … …
i=46 1 4 5 0 8 … … … …
i=56 1 4 5 0 8 … … … …
6 1 4 5 0 8 … … … …
?2
?2
?2
?2
?2
?2
false2
6 1 4 5 0 8 … … … …2
-
Bắt đầu từ đầu mảng, kiểm tra từng phần tử Tìm thấy giá trị, trả về true Hết mảng, không tìm thấy, trả về false
Tìm Kiếm Giá Trị Trong Mảng
20Lập Trình Cơ Bản
bool search(const int mang[],int so_phan_tu,int gia_tri)
{for (int i = 0; i < so_phan_tu; i++){
if (mang[i] == gia_tri)return true;
}return false;
}
-
Bắt đầu từ đầu mảng, kiểm tra từng phần tử Tìm thấy giá trị, trả về true Hết mảng, không tìm thấy, trả về false
Tìm Kiếm Giá Trị Trong Mảng
21Lập Trình Cơ Bản
bool search(const int mang[],int so_phan_tu,int gia_tri)
{int i = 0;while (i < so_phan_tu) {
if (mang[i] == gia_tri) return true;i = i + 1;
}return false;
}
-
Bắt đầu từ cuối mảng, kiểm tra từng phần tử
Tìm thấy giá trị, trả về chỉ số phần tử Hết mảng, không tìm thấy, trả về -1
Tìm Kiếm Giá Trị Trong Mảng
22Lập Trình Cơ Bản
i=56 1 4 5 0 8 … … … …
i=46 1 4 5 0 8 … … … …
i=36 1 4 5 0 8 … … … …
i=26 1 4 5 0 8 … … … …
i=16 1 4 5 0 8 … … … …
?1
?1
?1
?1
i=11
6 1 4 5 0 8 … … … …1
-
Tìm Kiếm Giá Trị Trong Mảng
23Lập Trình Cơ Bản
i=56 1 4 5 0 8 … … … …
i=46 1 4 5 0 8 … … … …
i=36 1 4 5 0 8 … … … …
i=26 1 4 5 0 8 … … … …
i=16 1 4 5 0 8 … … … …
i=06 1 4 5 0 8 … … … …
6 1 4 5 0 8 … … … …
?2
?2
?2
?2
?2
?2
i=-12
6 1 4 5 0 8 … … … …2
-
Bắt đầu từ cuối mảng, kiểm tra từng phần tử
Tìm thấy giá trị, trả về chỉ số phần tử Hết mảng, không tìm thấy, trả về -1
Tìm Kiếm Giá Trị Trong Mảng
24Lập Trình Cơ Bản
int search(const int mang[],int so_phan_tu,int gia_tri)
{for (int i = so_phan_tu - 1; i >= 0; i--){
if (mang[i] == gia_tri)return i;
}return -1;
}
-
Bắt đầu từ cuối mảng, kiểm tra từng phần tử
Tìm thấy giá trị, trả về chỉ số phần tử Hết mảng, không tìm thấy, trả về -1
Tìm Kiếm Giá Trị Trong Mảng
25Lập Trình Cơ Bản
int search(const int mang[],int so_phan_tu,int gia_tri)
{int i = so_phan_tu - 1;while (i >= 0) {
if (mang[i] == gia_tri) return i;i = i - 1;
}return -1;
}
-
Sử dụng iMin đánh dấu chỉ sổ phần tử nhỏ nhất Trả về iMin, chỉ số của phần tử nhỏ nhất
Tìm Kiếm Giá Trị Nhỏ Nhất Trong Mảng
26Lập Trình Cơ Bản
i=06 1 4 5 0 8 … … … …
i=16 1 4 5 0 8 … … … …
i=26 1 4 5 0 8 … … … …
i=36 1 4 5 0 8 … … … …
i=46 1 4 5 0 8 … … … …
i=56 1 4 5 0 8 … … … …
iMin=06
iMin=11
iMin=11
iMin=11
iMin=40
iMin=40
-
Sử dụng iMin đánh dấu chỉ sổ phần tử nhỏ nhất Trả về iMin, chỉ số của phần tử nhỏ nhất
Bắt đầu từ đầu mảng, duyệt từng phần tử
Tìm Kiếm Giá Trị Nhỏ Nhất Trong Mảng
27Lập Trình Cơ Bản
int searchMin(const int mang[],int so_phan_tu)
{int iMin = 0;for (int i = 0; i < so_phan_tu; i++){
if (mang[i] < mang[iMin]) iMin = i;
}return iMin;
}
-
Sử dụng iMin đánh dấu chỉ sổ phần tử nhỏ nhất Trả về iMin, chỉ số của phần tử nhỏ nhất
Bắt đầu từ đầu mảng, duyệt từng phần tử
Tìm Kiếm Giá Trị Nhỏ Nhất Trong Mảng
28Lập Trình Cơ Bản
int searchMin(const int mang[],int so_phan_tu)
{int iMin = 0; int i = 0; while (i < so_phan_tu){
if (mang[i] < mang[iMin]) iMin = i;i = i + 1;
} return iMin;
}
-
Sử dụng iMax đánh dấu chỉ sổ phần tử lớn nhất Trả về iMax, chỉ số của phần tử lớn nhất
Tìm Kiếm Giá Trị Lớn Nhất Trong Mảng
29Lập Trình Cơ Bản
i=06 1 4 5 0 8 … … … …
i=16 1 4 5 0 8 … … … …
i=26 1 4 5 0 8 … … … …
i=36 1 4 5 0 8 … … … …
i=46 1 4 5 0 8 … … … …
i=56 1 4 5 0 8 … … … …
iMax=06
iMax=06
iMax=06
iMax=06
iMax=06
iMax=58
-
Sử dụng iMax đánh dấu chỉ sổ phần tử lớn nhất Trả về iMax, chỉ số của phần tử lớn nhất
Bắt đầu từ đầu mảng, duyệt từng phần tử
Tìm Kiếm Giá Trị Lớn Nhất Trong Mảng
30Lập Trình Cơ Bản
int searchMax(const int mang[],int so_phan_tu)
{int iMax = 0;for (int i = 0; i < so_phan_tu; i++){
if (mang[i] > mang[iMax]) iMax = i;
}return iMax;
}
-
Sử dụng iMax đánh dấu chỉ sổ phần tử lớn nhất Trả về iMax, chỉ số của phần tử lớn nhất
Bắt đầu từ đầu mảng, duyệt từng phần tử
Tìm Kiếm Giá Trị Lớn Nhất Trong Mảng
31Lập Trình Cơ Bản
int searchMax(const int mang[],int so_phan_tu)
{int iMax = 0; int i = 0; while (i < so_phan_tu){
if (mang[i] > mang[iMax]) iMax = i;i = i + 1;
} return iMax;
}
-
Sắp Xếp Lựa Chọn
32Lập Trình Cơ Bản
6 1 4 5 0 8 2 7 3 9
6 1 4 5 0 8 2 7 3 9
6 1 4 5 0 3 2 7 8 9
6 1 4 5 0 3 2 7 8 9
2 1 4 5 0 3 6 7 8 9
2 1 4 3 0 5 6 7 8 9
2 1 0 3 4 5 6 7 8 9
2 1 0 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
6 1 4 5 0 8 2 7 3 9
0 1 2 3 4 5 6 7 8 9
-
Sắp Xếp Lựa Chọn
33
Coi mảng là 2 phần: Phần sau: các phần tử đã được sắp xếp đúng chỗ
Phần đầu: các phần tử còn lại cần được sắp xếp
Một chỉ số để xác định điểm phân cách 2 mảng
Thân vòng lặp Tìm phần tử lớn nhất trong mảng chưa sắp xếp
Đổi chỗ xuống cuối mảng chưa sắp xếp
Dừng vòng lặp Khi mảng chưa sắp xếp còn 1 phần tử
Lập Trình Cơ Bản
-
Sắp Xếp Lựa Chọn
34Lập Trình Cơ Bản
i j
i j
i j
i j
i j
i j
i j
i j
i j
6 1 4 5 0 8 2 7 3 9
0 1 2 3 4 5 6 7 8 9
-
Sắp xếp mảng tăng dần Tìm phần tử lớn nhất, đổi xuống cuối
Sắp Xếp Lựa Chọn
35Lập Trình Cơ Bản
void sapXepLuaChon(int mang[], int so_phan_tu){
for (int j = so_phan_tu – 1; j > 0; j--){
// int iMax = searchMax(mang, j + 1);int iMax = 0;for (int i = 0; i mang[iMax]) iMax = i;int tmp = mang[j];mang[j] = mang[iMax];mang[iMax] = tmp;
}}
-
Sắp Xếp Lựa Chọn
36Lập Trình Cơ Bản
6 1 4 5 0 8 2 7 3 9
6 1 4 5 9 8 2 7 3 0
6 3 4 5 9 8 2 7 1 0
6 3 4 5 9 8 7 2 1 0
6 7 4 5 9 8 3 2 1 0
6 7 8 5 9 4 3 2 1 0
6 7 8 9 5 4 3 2 1 0
9 7 8 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0
6 1 4 5 0 8 2 7 3 9
9 8 7 6 5 4 3 2 1 0
-
Sắp xếp mảng giảm dần Tìm phần tử nhỏ nhất, đổi xuống cuối
Sắp Xếp Lựa Chọn
37Lập Trình Cơ Bản
void sapXepLuaChon(int mang[], int so_phan_tu){
for (int j = so_phan_tu – 1; j > 0; j--){
// int iMin = searchMin(mang, j + 1);int iMin = 0;for (int i = 0; i
-
Thêm & Loại Dữ Liệu
38
Đặt vấn đề: Sinh viên đăng ký lớp môn học
Sinh viên lần lượt đăng ký (thêm vào danh sách)
Sinh viên rút khỏi lớp môn học (loại khỏi danh sách)
Kích thước của danh sách lớp môn học ban đầu
Số lượng sinh viên thực sự của lớp môn học
Lập Trình Cơ Bản
-
Thêm & Loại Dữ Liệu
39
Thêm hay loại dữ liệu trong mảng làm thay đổisố phần tử mảng, không thay đổi kích thước Biến số quản lý số phần tử thực sự của mảng Biến số này trong khoảng chỉ số hợp lệ của mảng Chương trình phải quản lý biến số này
Thêm dữ liệu Tăng số phần tử mảng Phải kiểm tra mảng có đầy hay không
Loại dữ liệu Giảm số phần tử mảng Phải kiểm tra phần tử có trong mảng hay không
Lập Trình Cơ Bản
-
Thêm vào cuối cùng, sau phần tử cuối cùng Nếu mảng chưa đầy, thêm được, trả về true
Tăng biến quản lý số phần tử thực sự
Thêm Dữ Liệu – Mảng Chưa Sắp Xếp
40Lập Trình Cơ Bản
6 1 4 5 0 8 … … … …
i=66 1 4 5 0 8 2 … … …
6 1 4 5 0 8 2 … … …
2
2
2
-
Thêm vào cuối cùng, sau phần tử cuối cùng Nếu mảng chưa đầy, thêm được, trả về true
Tăng biến quản lý số phần tử thực sự
Thêm Dữ Liệu – Mảng Chưa Sắp Xếp
41Lập Trình Cơ Bản
bool insert(int a[], int & soPT, int gia_tri){
if (soPT < SO_SINH_VIEN){
a[soPT] = gia_tri;soPT++;return true;
}return false;
}
-
Phần tử bị loại có chỉ số là index (cần phải tìm trước)
Đổi chỗ phần tử này với phần tử cuối cùng
Giảm biến quản lý số phần tử thực sự
Loại Dữ Liệu – Mảng Chưa Sắp Xếp
42Lập Trình Cơ Bản
6 1 4 5 0 8 … … … …
i=56 1 4 5 0 8 … … … …
i=46 1 4 5 0 8 … … … …
i=36 1 4 5 0 8 … … … …
6 1 4 8 0 5 … … … …
6 1 4 8 0 … … … … …
5
5
5
5
5
5
-
Phần tử bị loại có chỉ số là index (cần phải tìm trước)
Đổi chỗ phần tử này với phần tử cuối cùng
Giảm biến quản lý số phần tử thực sự
Loại Dữ Liệu – Mảng Chưa Sắp Xếp
43Lập Trình Cơ Bản
bool delete(int a[], int & soPT, int gia_tri) {int index = search(a, soPT, gia_tri);if (index != -1) {
int tmp = mang[soPT - 1];mang[soPT - 1] = mang[index];mang[index] = tmp;soPT--;return true;
}return false;
}
-
Tìm vị trí thêm, từ đó lùi các phần tự ra sau một chỉ số
Tăng biến quản lý số phần tử thực sự
Thêm Dữ Liệu – Mảng Đã Sắp Xếp
44Lập Trình Cơ Bản
0 1 4 5 6 8 … … … …
i=50 1 4 5 6 8 8 … … …
i=40 1 4 5 6 6 8 … … …
i=30 1 4 5 5 6 8 … … …
i=20 1 4 4 5 6 8 … … …
i=10 1 2 4 5 6 8 … … …
2
2
2
2
2
2
-
Tìm vị trí thêm, từ đó lùi các phần tự ra sau một chỉ số
Tăng biến quản lý số phần tử thực sự
Thêm Dữ Liệu – Mảng Đã Sắp Xếp
45Lập Trình Cơ Bản
bool insert(int a[], int & soPT, int gia_tri) {if (soPT < SO_SINH_VIEN) {
int index = soPT – 1;while (gia_tri < a[index]) {
a[index + 1] = a[index];index--;
}a[index + 1] = gia_tri;soPT++;return true;
}return false;
}
-
Tìm vị trí phần tử để loại
Từ vị trí đó đồn các phần tự lên trước một chỉ số
Giảm biến quản lý số phần tử thực sự
Loại Dữ Liệu – Mảng Đã Sắp Xếp
46Lập Trình Cơ Bản
0 1 4 5 6 8 … … … …
i=50 1 4 5 6 8 … … … …
i=40 1 4 5 6 8 … … … …
i=30 1 4 5 6 8 … … … …
i=30 1 4 6 6 8 … … … …
i=40 1 2 6 8 … … … … …
5
5
5
5
5
5
-
Tìm vị trí phần tử để loại
Từ vị trí đó đồn các phần tự lên trước một chỉ số
Giảm biến quản lý số phần tử thực sự
Loại Dữ Liệu – Mảng Đã Sắp Xếp
47Lập Trình Cơ Bản
bool delete(int a[], int & soPT, int gia_tri){
int index = search(a, soPT, gia_tri);if (index != -1) {
for (int i = index; i < soPT - 1; i++)a[i] = a[i + 1];
soPT--;return true;
}return false;
}
-
Mảng Nhiều Chiều
48Lập Trình Cơ Bản
O
X
X O
O X X X X O
O O X
X O O O O X
mang[0]
mang[1]
mang[2]
mang[3]
mang[4]
mang[5]
mang[6]
mang[7]
mang[8]
mang[9]
-
Noughts & Crosses – Tic Tac Toe
49
Khởi tạo bàn chơi In bàn chơi Kiểm tra ô có được phép không Chọn ô chơi ngẫu nhiên Kiểm tra có ai thắng chưa Chọn ô có thể được chơi
Lập Trình Cơ Bản
-
Noughts & Crosses – Tic Tac Toe
50Lập Trình Cơ Bản
void initBoard(char board[][COL], int ROW) {for (int _row = 0; _row < ROW; _row++)
for (int _col = 0; _col < COL; _col ++)board[_row][_col] = ' ';
}
void printBoard(char board[][COL], int ROW) {for (int _row = 0; _row < ROW; _row++)
for (int _col = 0; _col < COL; _col++)cout
-
Noughts & Crosses – Tic Tac Toe
51Lập Trình Cơ Bản
int main(){
char board[ROW][COL];initBoard(board);printBoard(board);int _row, _col;char player = O_PLAYER;do {
_row = rand() % ROW;// _col = rand() % COL;// play(board, _row, _col, player);system("CLS");// printBoard(board);
} while (true);return 0;
}