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
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
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:
- bai_giang_tin_dai_cuong_bai_12_mang_va_kieu_du_lieu_vector_t.pdf