Bài giảng Tin đại cương - Bài 12: Mảng và kiểu dữ liệu vector - Trương Xuân Nam

Nội dung buổi trước: STRING

 Kiểu “string”: bản chất là dãy các kí tự viết liên

tiếp, được đánh thứ tự theo số nguyên bắt đầu

từ 0 (gọi là chỉ mục)

 Thư viện: #include

 Khai báo:

 string str;

 string w("Hello");

 string s = "Hello";

 Các hàm cơ bản: tham khảo giáo trình

 Chú ý về nhập liệu: dùng hàm getline

pdf 19 trang yennguyen 3400
Bạn đang xem tài liệu "Bài giảng Tin đại cương - Bài 12: Mảng và kiểu dữ liệu vector - Trương Xuân Nam", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Tin đại cương - Bài 12: Mảng và kiểu dữ liệu vector - Trương Xuân Nam

Bài giảng Tin đại cương - Bài 12: Mảng và kiểu dữ liệu vector - Trương Xuân Nam
TIN ĐẠI CƯƠNG
BÀI 12: MẢNG VÀ KIỂU DỮ LIỆU 
VECTOR
Nội dung buổi trước: STRING
 Kiểu “string”: bản chất là dãy các kí tự viết liên 
tiếp, được đánh thứ tự theo số nguyên bắt đầu 
từ 0 (gọi là chỉ mục)
 Thư viện: #include 
 Khai báo:
 string str;
 string w("Hello");
 string s = "Hello";
 Các hàm cơ bản: tham khảo giáo trình
 Chú ý về nhập liệu: dùng hàm getline
TRƯƠNG XUÂN NAM 2
Nội dung
1. Khuôn mẫu (template)
2. Kiểu dữ liệu mảng (vector)
 Giới thiệu
 Hệ thống chỉ mục
 Khởi tạo, nhập và xuất dữ liệu
 Một số hàm hỗ trợ
3. Kiểu mảng gốc
4. Bài tập
Trương Xuân Nam - Khoa CNTT 3
Khuôn mẫu (template)
Phần 1
Trương Xuân Nam - Khoa CNTT 4
Khuôn mẫu (template)
 Nhiều thuật toán có tính tổng quát, có thể áp 
dụng được cho nhiều loại dữ liệu khác nhau
 Ví dụ: tìm phần tử lớn nhất trong 2 phần tử
int max(int a, int b) {
if (a > b) return a; else return b;
}
double max(double a, double b) {
if (a > b) return a; else return b;
}
string max(string a, string b) {
if (a > b) return a; else return b;
}
Trương Xuân Nam - Khoa CNTT 5
Khuôn mẫu (template)
 Ngôn ngữ C++ cho phép chúng ta “tổng quát 
hóa” các đoạn mã tương tự này bằng cách sử 
dụng template
 Ví dụ: tìm phần tử lớn nhất trong 2 phần tử
template T max(T a, T b) {
if (a > b) return a; else return b;
}
 Sử dụng: máy tính sẽ tự động thay thế kiểu dữ 
liệu thích hợp trong từng tính huống cụ thể
cout << max(100,200) << endl;
cout << max(1.5,1.3) << endl;
Trương Xuân Nam - Khoa CNTT 6
Hàm 
max với 
kiểu int
Hàm max 
với kiểu 
double
Kiểu dữ liệu mảng (vector)
Phần 2
Trương Xuân Nam - Khoa CNTT 7
Giới thiệu
 Kiểu dữ liệu vector (mảng, dãy,) lấy ý tưởng 
từ khái niệm dãy số trong toán học
 Toán: X = (x1, x2,, xn)
 C++: X = (x[0], x[1],, x[n-1])
 Đặc điểm:
 Vector = các biến có cùng tên, phân biệt bởi chỉ số
 Vector không nhất thiết chỉ là dãy số, mà có thể là 
một dãy bất kỳ, chẳng hạn:
• Dãy các giá trị bool: vector
• Dãy string: vector
• Dãy của các dãy số nguyên: vector>
Trương Xuân Nam - Khoa CNTT 8
Giới thiệu
 Rất nhiều bài toán kĩ thuật và quản lý sử dụng 
vector để xử lý dãy (nhưng không phải là cách 
duy nhất), vài tình huống thực tế:
 Quản lý điểm số của sinh viên
 Thống kê xử lý số liệu (có bao nhiêu sinh viên loại 
giỏi, có bao nhiêu thi trượt,)
 Các bài toán kĩ thuật, tính toán dãy hoặc ma trận
 Xử lý hiệu ứng âm thanh, hình ảnh, video,
 Vector sử dụng kĩ thuật template (được giới 
thiệu ở phần trước)
Trương Xuân Nam - Khoa CNTT 9
Hệ thống chỉ mục
 Tương tự hệ thống chỉ mục của kiểu string
 Đánh thứ tự số nguyên, bắt đầu từ 0
 Viết bên trong cặp ngoặc vuông
 Mỗi một ô có thể xem như một biến độc lập
Trương Xuân Nam - Khoa CNTT 10
Trương Xuân Nam - Khoa CNTT
Khai báo, khởi tạo dữ liệu
 Thư viện: #include 
 Khai báo biến:
vector m; // dãy giá trị logic
vector a(10); // dãy 10 số nguyên
vector b(10, 0.5); // dãy 10 số 0.5
 Một vài chú ý khi thao tác biến vector:
 Nên sử dụng hàm size() để lấy độ dài của dãy
 Nếu không được chỉ rõ, vector sẽ có độ dài = 0
 Rất cẩn thận khi sử dụng cách khai báo thứ 2
 Vector có thể khai báo lồng nhau (phức tạp)
vector> A(10);
11
Nhập dữ liệu
// nhập kích cỡ của dãy trước
cout > n;
// tạo dãy có đúng n phần tử
vector a(n);
// nhập từng phần tử từ bàn phím
for (int i = 0; i < a.size(); i++) {
// in ra lời mời: "A[0] = "
cout << "A[" << i << "] = ";
// nhập dữ liệu vào vector
cin >> a[i];
}
Trương Xuân Nam - Khoa CNTT 12
Xuất dữ liệu
// in ra dòng thông báo "A = "
cout << "A = ";
// in ra từng phần tử của vector
// mỗi phần từ cách nhau bởi dấu trống
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
// in xong thì xuống dòng
cout << endl;
Trương Xuân Nam - Khoa CNTT 13
Một số hàm hỗ trợ
 Có rất nhiều hàm do thư viện vector cung cấp 
để thao tác dãy (xem bảng 6-2 và phụ lục)
 Một số hàm thông dụng:
 v.clear(): xóa rỗng vector v
 v.empty(): trả về true nếu vector v rỗng
 v.pop_back(): bỏ phần tử cuối cùng ra khỏi v
 v.push_back(e): chèn e vào cuối vector v
 v.size(): trả về số phần tử của vector v
 v.back(): trả về giá trị của phần tử cuối cùng của v
 v.resize(m): chỉnh lại cỡ của vector thành m phần 
tử (giữ nguyên giá trị những phần tử cũ)
Trương Xuân Nam - Khoa CNTT 14
Kiểu mảng gốc
Phần 3
Trương Xuân Nam - Khoa CNTT 15
Kiểu mảng gốc
 Ngoài vector, C/C++ còn có thể sử dụng kiểu 
mảng gốc với cách viết đơn giản hơn
 Khai báo biến:
bool[100] x; // dãy x có 100 giá trị logic
 Ưu điểm:
 Viết đơn giản, không cần thư viện vector
 Sử dụng chỉ mục để truy cập các biến bên trong
 Nhược điểm:
 Không có hàm hỗ trợ
 Kích thước là hằng số, không thay đổi được
Trương Xuân Nam - Khoa CNTT 16
Bài tập
Phần 4
Trương Xuân Nam - Khoa CNTT 17
Một số bài tập cơ bản
1. Nhập số nguyên dương N và dãy N số thực, 
in ra các số vừa nhập
2. Nhập dãy N số thực và tính tổng tất cả các số 
trong dãy
3. Nhập dãy N số thực và tính trung bình cộng 
của các số trong dãy
4. Nhập dãy N số nguyên và tính trung bình 
cộng các số dương trong dãy
5. Nhập dãy N số thực, tìm giá trị lớn nhất trong 
dãy
Trương Xuân Nam - Khoa CNTT 18
Một số bài tập cơ bản
6. Nhập dãy N số nguyên, hãy tìm xem có bao 
nhiêu số trong dãy có giá trị bằng số lớn nhất 
của dãy
7. Nhập dãy N số thực, đếm và in ra màn hình 
các số trong dãy có giá trị nhỏ hơn trung bình 
cộng của dãy
8. Nhập dãy N số thực, sắp xếp lại các số trong 
dãy giảm dần theo giá trị
9. Nhập danh sách N sinh viên, sắp xếp lại danh 
sách theo sinh viên theo thứ tự từ điển
Trương Xuân Nam - Khoa CNTT 19

File đính kèm:

  • pdfbai_giang_tin_dai_cuong_bai_12_mang_va_kieu_du_lieu_vector_t.pdf