Tải bản đầy đủ (.pdf) (54 trang)

Bài giảng kỹ thuật lập trình nâng cao chương 2 kiểu dữ liệu có cấu trúc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (632.17 KB, 54 trang )

TRƯỜNG CAO ĐẲNG CNTT TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN

KỸ THUẬT LẬP TRÌNH NÂNG CAO
Chương 2

KIỂU DỮ LIỆU CÓ CẤU TRÚC

1

Giảng Viên: ThS. Dương Thành Phết
Email:
Website:
Tel: 0918158670 – facebook.com/DuongThanhPhet


NỘI DUNG
1. Kiểu dữ liệu mảng 1 chiều

2. Các thao tác trên mảng 1 chiều
3. Mảng 2 chiều

4. Kiểu chuổi ký tự
5. Kiểu cấu trúc – Mảng cấu trúc

6. Kiểu tập tin - File

2
2



1. KIỂU DỮ LIỆU MẢNG 1 CHIỀU
1.1 Khái niệm

 Mảng thực chất là một biến bao gồm nhiều biến thành
phần được cấp phát bộ nhớ liên tục.
 Các thành phần của mảng là tập hợp các biến có cùng
kiểu dữ liệu và cùng tên. Do đó để truy xuất các biến
thành phần, ta dùng cơ chế chỉ mục (Vị trí).

Giá trị
0
3

Vị trí

1

2

3

4

5

6

7

8


9

3


1. KIỂU DỮ LIỆU MẢNG 1 CHIỀU
1.2. Khai báo

< Kiểu dữ liệu > < Tên mảng > [ < Số p.tử tối đa của mảng> ] ;

int a[100]; //Khai bao mang so nguyen a gom 100 phan tu
float b[50]; //Khai bao mang so thuc b gom 50 phan tu
char str[30]; //Khai bao mang ky tu str gom 30 ky tu

4
4


1. KIỂU DỮ LIỆU MẢNG 1 CHIỀU
1.3. Gán giá trị ban đầu cho mảng

int a[5] = {3, 6, 8, 1, 12};
 a[0] = 3, a[1] = 6, a[2] = 8, …
int a[10] = {0};
 a[0]=a[1]=a[2]=a[3]=…=a[9]=0

5
5



1. KIỂU DỮ LIỆU MẢNG 1 CHIỀU
1.4. Truy xuất

Vị trí

0

1

2

3

4

A[0]

A[1]

A[2]

A[3]

A[4]

6
6



2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
1. Nhập/Xuất mảng

void NhapMang (int a[], int n){
for (int i = 0; i < n; i ++){
cout<<“Nhap phan tu thu “<cin>>a[i];
}
}
void XuatMang (int a[], int n){
for (int i = 0; i < n; i ++)
cout<}
7

7


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
void main ( ){
int a[MAX] , n;
cout<<“Nhap kich thuoc mang: “;
cin>>n;
NhapMang (a,n);
cout<<“Cac gia tri cua mang vua nhap: ”<XuatMang (a,n);
}

8
8



2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Xuất các phần tử thỏa điều kiện
Mẫu 1:
void LietKeXXX(int a[], int n){
for (int i = 0; iif (a[i] thỏa điều kiện)
Xuất a[i];
}

9

Mẫu 2:
void LietKeXXX(int a[], int n, int x){
for (int i = 0; iif (a[i] thỏa điều kiện so với x)
Xuất a[i];
}

9


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Ví dụ 1: Liệt kê các phần tử có giá trị chẵn trong mảng

void LietKeChan(int a[], int n){
for (int i = 0; iif (a[i] %2 ==0)
cout<

}

10
10


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Ví dụ 2: Liệt kê các phần tử có giá trị lớn hơn x trong mảng

void LietKeLonHonX(int a[], int n, int x){
for (int i = 0; iif (a[i] > x)
cout<}

11
11


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
2.2. Đếm
Mẫu 1:
int DemXXX(int a[], int n){
int d = 0;
for (int i = 0; iif (a[i] thỏa điều kiện)
d++;
Mẫu 2:
return d;
int DemXXX(int a[], int n, int x){

}
int d = 0;
for (int i = 0; iif (a[i] thỏa điều kiện so với x)
d++;
return d;
}
12

12


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Ví dụ 1: Đếm các phần tử có giá trị là số nguyên tố

13

bool LaSNT(int k) {
int d = 0;
for (int i = 1; i <= k; i++)
if (k % i == 0)
d++;
return (d == 2);
}
int DemSNT(int a[], int n){
int d = 0;
for (int i = 0; iif (LaSNT(a[i]) ==true)
d++;
return d;

}


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Ví dụ 2: Đếm các phần tử có trong mảng mà giá trị nhỏ hơn x

int DemNhoHonX(int a[], int n, int x){
int d = 0;
for (int i = 0; iif (a[i] < x)
d++;
return d;
}

14


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
2.3. Tìm kiếm

15

Mẫu 1: Tìm và trả về vị trí phần tử có giá trị lớn nhất
int TimVTMax(int a[], int n){
int vtmax = 0;
for (int i = 0; i < n; i++)
if (a[i] > a[vtmax])
vtmax = i;
return vtmax; Mẫu 2: Tìm vị trí phần tử có giá trị x
}

(nếu x không xuất hiện trong mảng trả về -1)
int TimVTX(int a[], int n, int x){
for (int i = 0; i < n; i++)
if (a[i] == x)
return i;
return -1;
15
}


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
2.4. Kiểm tra mảng có thỏa đk cho trước
Trường hợp 1: Kiểm tra tồn tại một phần tử trong mảng
thỏa điều kiện nào đó cho trước  tìm phần tử thỏa điều
kiện để kết luận.
Mẫu 1:
bool KiemTraTonTaiXXX(int a[], int n){
for (int i = 0; iif (a[i] thỏa điều kiện)
return true;
return false;
}
16
16


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Trường hợp 2: Kiểm tra tất cả các phần tử thỏa điều
kiện nào đó cho trước  tìm phần tử không thỏa điều kiện
để kết luận mảng không thỏa điều kiện.

Mẫu 2:
bool KiemTraXXX(int a[], int n){
for (int i = 0; iif (a[i] không thỏa điều kiện)
return false;
return true;
}

17
17


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Ví dụ 1: Kiểm tra xem mảng có tồn tại số lẻ không?

bool KiemTraTonTaiLe(int a[], int n){
foreach (int giatri in a)
if (giatri % 2 != 0)
return true;
return false;
}

18
18


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Ví dụ 2: Kiểm tra xem mảng có toàn giá trị âm không?
(true: có/ false: không)
bool KiemTraToanAm(int a[], int n){

for (int i = 0; iif (a[i] >= 0)
return false;
return true;
}

19
19


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
2.5. Tính toán các phần tử trong mảng
Mẫu tính tổng:
int TongXXX(int a[], int n){
int s = 0;
for (int i = 0; iif (a[i] thỏa điều kiện)
s += a[i];
return s;
}

20
20


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Ví dụ: Tính tổng các phần tử có giá trị lẻ trong mảng

int TongLe(int a[], int n) {
int s = 0;

for (int i = 0; iif (a[i] %2!=0)
s += a[i];
return s;
}

21
21


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Mẫu tính trung bình:
float TrungBinhXXX(int a[], int n){
int s = 0;
int d = 0;
for (int i = 0; iif (a[i] thỏa điều kiện){
s += giatri;
d ++;
}
if (d==0)
return 0;
return (float) s / d;
}
22

22


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU

Ví dụ: Tính giá trị trung bình các phần tử có giá trị âm trong
mảng
float TrungBinhAm(int a[], int n){
long s = 0;
int d = 0;
for (int i = 0; iif (a[i] < 0){
s += a[i];
d++;
}
if (d == 0)
return 0;
return (float)s / d;
}
23

23


2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
2.6. Sắp xếp

Minh họa thuật toán

12

2

8


5

1

6

4

i=1

j=2
i=2

j=3
i=3

j=4
i=4

j=5
i=5

j=6
i=6

j=7
i=7

24
24



2. CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU
Mẫu phương thức sắp thứ tự tăng:
void SapTang(int a[], int n){
for (int i = 0; i < n-1; i ++)
for(int j = i+1; j < n; j ++)
if (a[i] > a[j])
HoanVi(a[i], a[j]);
}
void HoanVi(int &a, int &b){
int tam = a;
a = b;
b = tam;
}
25
25


×