Tài liệu Ngôn ngữ lập trình c&c++ ( Phạm Hồng Thái) P7 - Pdf 87


ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Khoa Công nghệ Thông tin
PHẠM HỒNG THÁI
ng
 L
 III. MẢNG DỮ LIỆU
1. Mảng một chiều
a. Ý nghĩa
Khi cần lưu trữ một dãy n phần tử dữ liệu chúng ta cần khai báo n biến tương ứng
với n tên gọi khác nhau. Điều này sẽ rất khó khăn cho người lập trình để có thể nhớ và
quản lý hết được tất cả các biến, đặc biệt khi n lớn. Trong thực tế, hiển nhiên chúng ta
gặp rất nhiều dữ liệu có liên quan đến nhau về một mặt nào đó, ví dụ chúng có cùng kiểu
và cùng thể hiện một đối tượng: như các toạ độ của một vectơ, các số hạng của một ma
trận, các sinh viên của một lớp hoặc các dòng kí tự của một văn bản … Lợi dụng đặc
điểm này toàn bộ dữ liệu (cùng kiểu và cùng mô tả một đối tượng) có thể chỉ cần chung
một tên gọi để phân biệt với các đối tượng khác, và để phân biệt các dữ liệu trong cùng
đối tượng ta sử dụng cách đánh số thứ tự cho chúng, từ đó việc quản lý biến sẽ dễ dàng
hơn, chương trình sẽ gọn và có tính hệ thống hơn.
Giả sử ta có 2 vectơ trong không gian ba chiều, mỗi vec tơ cần 3 biến để lưu 3 toạ
độ, vì vậy để lưu toạ độ của 2 vectơ chúng ta phải dùng đến 6 biến, ví dụ x1, y1, z1 cho
vectơ thứ nhất và x2, y2, z2 cho vectơ thứ hai. Một kiểu dữ liệu mới được gọi là mảng
một chiều cho phép ta chỉ cần khai báo 2 biến v1 và v2 để chỉ 2 vectơ, trong đó mỗi v1
Chương 3. Cấu trúc điều khiển và dữ liệu kiểu mảng

− Dạng khai báo thứ 2 cho phép khởi tạo mảng bởi dãy giá trị trong cặp dấu {},
mỗi giá trị cách nhau bởi dấu phảy (,), các giá trị này sẽ được gán lần lượt cho
các phần tử của mảng bắt đầu từ phần tử thứ 0 cho đến hết dãy. Số giá trị có
thể bé hơn số phần tử. Các phần tử mảng chưa có giá trị sẽ không được xác
định cho đến khi trong chương trình nó được gán một giá trị nào đó.
− Dạng khai báo thứ 3 cho phép vắng mặt số phần tử, trường hợp này số phần tử
được xác định bởi số giá trị của dãy khởi tạo. Do đó nếu vắng mặt cả dãy khởi

60
Chương 3. Cấu trúc điều khiển và dữ liệu kiểu mảng
tạo là không được phép (chẳng hạn khai báo int a[] là sai).
Ví dụ:
• Khai báo biến chứa 2 vectơ
a, b
trong không gian 3 chiều:
float a[3] , b[3] ;

• Khai báo 3 phân số
a, b, c;
trong đó a = 1/3 và b = 3/5
:

int a[2] = {1, 3} , b[2] = {3, 5} , c[2] ;
ở đây ta ngầm qui ước thành phần đầu tiên (số thứ tự 0) là tử và thành phần
thứ hai (số thứ tự 1) là mẫu của phân số.
• Khai báo mảng
L
chứa được tối đa 100 số nguyên dài:
long L[100] ;
• Khai báo mảng dong (dòng), mỗi dòng chứa được tối đa 80 kí tự:

Để khắc phục nhược điểm này, trong các chương sau C++ cung cấp một kiểu dữ
liệu mới gọi là lớp, và cho phép NSD có thể định nghĩa riêng phép cộng cho 2 mảng
tuỳ ý, khi đó có thể viết một cách đơn giản và quen thuộc c = a + b để cộng 2 phân số.
d. Ví dụ minh hoạ
Ví dụ 1 : Tìm tổng, tích 2 phân số.
void main()
{
int a[2], b[2], tong[2], tich[2] ;
cout << "Nhập a. Tử = " ; cin >> a[0] ; cout << "mẫu = " ; cin >> a[1] ;
cout << "Nhập b. Tử = " ; cin >> b[0] ; cout << "mẫu = " ; cin >> b[1] ;
tong[0] = a[0]*b[1] + a[1]*b[0] ; tong[1] = a[1] * b[1] ;
tich[0] = a[0]*b[0]; tich[1] = a[1] * b[1] ;
cout << "Tổng = " << tong[0] << '/' << tong[1] ;
cout << "Tích = " << tich[0] << '/' << tich[1] ;
}

Ví dụ 2 : Nhập dãy số nguyên, tính: số số hạng dương, âm, bằng không của dãy.
void main()
{
float a[50], i, n, sd, sa, s0; // a chứa tối đa 50 số

cout << "Nhập số phần tử của dãy: " ; cin >> n; // nhập số phần tử
for (i=0; i<n; i++) { cout << "a[" << i << "] = " ; cin >> a[i]; } // nhập dãy số
sd = sa = s0 = 0 ;
for (i=1; i<n; i++) {
if (a[i] > 0 ) sd++;
if (a[i] < 0 ) sa++;
if (a[i] == 0 ) s0++;
}
cout << "Số số dương = " << sd << " số số âm = " << sa ;

Ví dụ 4 : Nhập và sắp xếp tăng dần một dãy số. Thuật toán được tiến hành bằng cách
sắp xếp dần từng số hạng bé nhất lên đầu dãy. Giả sử đã sắp được i-1 vị trí, ta sẽ tìm số
bé nhất trong dãy còn lại (từ vị trí thứ i đến n-1) và đưa số này lắp vào vị trí thứ i. Để
thực hiện, chúng ta so sánh a[i] lần lượt với từng số a[j] trong dãy còn lại (tức j đi từ
i+1 đến n), nếu gặp a[j] bé hơn a[i] thì đổi chỗ hai số này với nhau.
void main()
{
float a[100], i, j, n, tam;
cout << "Cho biết số phần tử n = " ; cin >> n ;
for (i=0; i<n; i++) {cout<<"a[" <<i<< "] = "; cin >> a[i] ;} // nhập dữ liệu
for (i=0; i<n; i++) {
for (j=i+1; j<n; j++)
if (a[i] > a[j]) { tam = a[i]; a[i] = a[j]; a[j] = tam; } // đổi chỗ
}

63


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status