Bài 8 – Mảng một chiều (Dãy)
Khái niệm mảng một chiều
Khai báo mảng
Nhập/xuất mảng
Các bài toán về mảng một chiều
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 1
1. Khái niệm mảng một chiều
Mảng một chiều là một công cụ cho
phép tổ chức quản lý dữ liệu dưới dạng
“dãy”
Ví dụ:
Xét dãy sA:
ố sau đây:
5
4
7
1
9
A0
A1
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
A2
A3
A4
Tin học đại cương 2 2
Các phần tử của mảng
Mảng một chiều bao gồm nhiều phần tử,
mỗi phần tử được đặc trưng bởi hai yếu
tố: Giá trị của phần tử và vị trí của phần
tử trong mảng
Một phần tử bất kỳ của mảng thường
được kí hiệu là A[i], trong đó:
+ A là tên mảng
+ i là vị trí của phần tử trong mảng
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 3
2. Khai báo mảng
Muốn sử dụng mảng một chiều trong
chương trình thì phải khai báo nó
Khai báo mảng thực chất là sự khai báo
đồng thời nhiều biến có cùng kiểu dữ liệu
Có nhiều cách khai báo khác nhau
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 4
Các cách khai báo mảng một chiều:
Cách 1:
KiểuDL TênMảng[Số phần tử tối đa];
Ví dụ 1:
int A[100];
Mảng này có tối đa 100 phần tử, mỗi phần
tử là một số nguyên
Khai báo trên sẽ tạo ra 100 biến nguyên:
A[0], A[1], ... , A[99]
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 5
Ví dụ 2:
char B[60];
Mảng này có tối đa 60 phần tử, mỗi
phần tử là một kí tự
Khai báo trên sẽ tạo ra 60 biến kiểu kí tự:
B[0], B[1], ... , B[59]
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 6
Cách 2:
vector <KiểuDL> TênMảng(Số phần tử tối đa);
Ví dụ:
vector < int > A(100);
Mảng này có tối đa 100 phần tử, mỗi phần
tử là một số nguyên
Chú ý: Muốn sử dụng cách khai báo này thì phải
viết dòng sau đây ở đầu chương trình:
#include <vector>
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 7
3. Nhập/xuất mảng
Nhập dữ liệu cho mảng từ bàn phím:
Thực chất là nhập dữ liệu cho nhiều biến,
do đó cần sử dụng vòng lặp.
Ví dụ 1:
Nhập một dãy số nguyên có 8 phần tử.
Cần lặp 8 lần!
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 8
Các lệnh nhập:
int A[8];
for (int i = 0; i < 8; i ++)
{
cout << "Nhap so thu " << i << " = " ;
cin >> A[i] ;
}
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 9
Các lệnh xuất (hiển thị):
Ví dụ 2:
Hiện dãy số vừa nhập (8 phần tử) ra màn hình.
cout << "Day vua nhap la: ";
for (int i = 0; i < 8; i ++) cout << A[i] << " " ;
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 10
Chương trình:
#include <iostream>
using namespace std;
main()
{ int A[8];
for (int i = 0; i < 8; i ++)
{
cout << "Nhap so thu " << i << " = " ;
cin >> A[i] ;
}
cout << "Day vua nhap la: ";
for (int i = 0; i < 8; i ++) cout << A[i] << " " ;
Bộ môn Kỹ thuật máy tính – Khoa
}
CNTT
Tin học đại cương 2 11
Cách 2:
#include <iostream>
#include <vector>
using namespace std;
main()
{ vector < int > A(8);
for (int i = 0; i < 8; i ++)
{
cout << "Nhap so thu " << i << " = " ;
cin >> A[i] ;
}
cout << "Day vua nhap la: ";
B for (int i = 0; i < 8; i ++) cout << A[i] << " " ;
ộ môn Kỹ thuật máy tính – Khoa
}
CNTT
Tin học đại cương 2 12
Bài tập:
Nhập một dãy số thực có N phần tử (N là
một giá trị bất kỳ nhập từ bàn phím).
Hiện dãy vừa nhập ra màn hình.
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 13
Nội dung chương trình:
#include <iostream>
using namespace std;
main()
{ float A[100]; int N ;
cout << "Nhap N = "; cin >> N ;
for (int i = 0; i < N; i ++)
{
cout << "Nhap so thu " << i << " = " ;
cin >> A[i] ;
}
cout << "Day vua nhap la: ";
for (int i = 0; i < N; i ++) cout << A[i] << " " ;
Bộ } môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 14
4. Các bài toán về mảng một chiều
Bài toán tính tổng, đếm số lượng, trung
bình cộng
Bài toán tìm giá trị lớn nhất, nhỏ nhất, vị
trí phần tử
Thêm bớt phần tử
Bài toán đổi chỗ, sắp xếp dãy
...
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 15
Ví dụ 1:
Nhập một dãy có N số thực từ bàn phím
rồi tính tổng của chúng
Hiện tổng và hiện dãy ra màn hình.
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 16
Thuật toán tính tổng?
+ Ban đầu tổng S bằng 0
+ Mỗi khi nhập được một số thì đem cộng
nó vào tổng S
(Lặp lại N lần)
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 17
Thuật toán tính tổng N số:
S = 0;
cout << "Nhap N = "; cin >> N ;
for (int i = 0; i < N; i ++)
{
cout << "Nhap so thu " << i << " = " ;
cin >> A[i] ;
S = S + A[i] ;
}
cout << " Tong S = " << S ;
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 18
Bài tập:
Nhập một dãy có N số thực từ bàn phím
rồi tính trung bình cộng của chúng
Hiện trung bình cộng và hiện dãy ra màn
hình.
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 19
Bài tập ứng dụng:
1. Nhập lượng mưa của bảy ngày trong tuần
từ bàn phím rồi tính lượng mưa trung bình.
2. Giả sử một học kì có N môn học. Hãy
nhập điểm các môn học từ bàn phím rồi
tính điểm trung bình của học kì
(tạm coi các môn có hệ số bằng nhau)
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 20
Ví dụ 2:
Nhập một dãy có N số thực từ bàn phím rồi tính
tổng các phần tử dương của dãy.
Hiện tổng và hiện dãy ra màn hình.
Thuật toán:
+ Ban đầu tổng S bằng 0
+ Lần lượt so sánh các phần tử của dãy với 0:
Nếu Phần tử A[i] > 0 thì cộng A[i] vào tổng S
if (A[i] > 0 ) S = S + A[i];
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 21
Bài tập:
Nhập một dãy có N số nguyên từ bàn
phím rồi tính tổng các phần tử chẵn của
dãy.
Hiện tổng và hiện dãy ra màn hình.
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 22
Ví dụ 3:
Nhập một dãy có N số nguyên từ bàn phím rồi
đếm số lượng các phần tử chẵn của dãy.
Hiện số lượng đếm được và hiện dãy ra màn
hình.
Thuật toán:
+ Cần khai báo thêm biến chứa số lượng: D
+ Ban đầu biến D bằng 0
+ Kiểm tra lần lượt từng phần tử của dãy:
Nếu Phần tử A[i] chẵn thì tăng D lên 1
Bộ môn Kỹ thuật máy tính – Khoa
if (A[i] % 2 == 0 ) D = D + 1;
CNTT
Tin học đại cương 2 23
Bài tập:
1. Nhập một dãy có N kí tự từ bàn phím.
Đếm xem trong dãy có bao nhiêu chữ 'K'.
Hiện số lượng và hiện dãy ra màn hình.
2. Nhập một dãy có N số nguyên từ bàn phím
rồi tính trung bình cộng các phần tử chẵn
của dãy.
Hiện trung bình cộng và hiện dãy ra màn
hình.
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 24
Bài tập ứng dụng:
Nhập điểm tổng kết của N sinh viên trong
lớp từ bàn phím.
Hãy cho biết lớp có bao nhiêu sinh viên
đạt học bổng (điểm tổng kết ≥ 7)
Bộ môn Kỹ thuật máy tính – Khoa
CNTT
Tin học đại cương 2 25