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

GIÁO TRÌNH TIN HỌC_LẬP TRÌNH C ++ NÂNG CAO potx

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 (493.32 KB, 5 trang )

22/04/2011
1
Lập trình C++
nâng cao
22/04/2011
1
Dzoãn Xuân Thanh
22/04/2011
1
KHÁI NIỆM
 Mảng thực chất là một biến được cấp phát bộ nhớ liên
tục và bao gồm nhiều biến thành phần.
 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.
22/04/2011
2
0 1 2 3 4 5 6 7 8 9
Giá trị
Vị trí
KHAI BÁO
 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
22/04/2011
3
< Kiểu dữ liệu > < Tên mảng > [ < Số phần tử tối đa của mảng> ] ;
TRUY XUẤT
Vị trí 0 1 2 3 4
A[0] A[1] A[2] A[3] A[4]
22/04/2011


4
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
22/04/2011
5
CÁC THAO TÁC TRÊN MẢNG
 Nhập
 Xuất (liệt kê)
 Tìm kiếm
 Đếm
 Sắp xếp
 Kiểm tra mảng thỏa điều kiện cho trước
 Tách/ ghép mảng
 Chèn / xóa
22/04/2011
6
22/04/2011
2
NHẬP XUẤT MẢNG
#define MAX 100
void NhapMang (int a[], int n)
{
for (int i = 0; i < n; i ++)
{
cout<<“Nhap phan tu thu “<<i<<“: “;
cin>>a[i];
}

}
22/04/2011
7
void XuatMang (int a[], int n)
{
for (int i = 0; i < n; i ++)
cout<<a[i]<<“\t”;
}
void main ( )
{
int a[MAX] , n;
cout<<“Nhap kich thuoc mang: “;
cin>>n;
NhapMang (a,n);
cout<<“Cac gia tri cua mang vua nhap: ”<<endl;
XuatMang (a,n);
}
22/04/2011
8
LIỆT KÊ CÁC PHẦN TỬ THỎA ĐK CHO TRƯỚC
Mẫu 1:
void LietKeXXX(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] thỏa điều kiện)
Xuất a[i];
}
Mẫu 2:
void LietKeXXX(int a[], int n, int x)
{

for (int i = 0; i<n; i++)
if (a[i] thỏa điều kiện so với x)
Xuất a[i];
}
22/04/2011
9
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; i<n; i++)
if (a[i] %2 ==0)
cout<<a[i]<<“\t”;
}
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; i<n; i++)
if (a[i] > x)
cout<<a[i]<<“\t”;
}
22/04/2011
10
ĐẾM
Mẫu 1:
int DemXXX(int a[], int n)
{
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] thỏa điều kiện)
d++;

return d;
}
22/04/2011
11
Mẫu 2:
int DemXXX(int a[], int n, int x)
{
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] thỏa điều kiện so với x)
d++;
return d;
}
22/04/2011
12
22/04/2011
3
Ví dụ 1: Đếm các phần tử có giá trị là số nguyên tố
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; i<n; i++)

if (LaSNT(a[i]) ==true)
d++;
return d;
}
22/04/2011
13
Ví dụ 2: Đếm các phần tử có giá trị nhỏ hơn x có trong mảng
int DemNhoHonX(int a[], int n, int x)
{
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] < x)
d++;
return d;
}
22/04/2011
14
TÌM KIẾM
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;
}
22/04/2011
15
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;
}
22/04/2011
16
KIỂM TRA XEM MẢNG CÓ THỎA ĐIỀU
KIỆN CHO TRƯỚC
TH1: 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.
TH2: 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.
22/04/2011
17
Mẫu TH1:
bool KiemTraTonTaiXXX(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] thỏa điều kiện)
return true;
return false;
}

Mẫu TH2:
bool KiemTraXXX(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] không thỏa điều kiện)
return false;
return true;
}
22/04/2011
18
22/04/2011
4
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;
}
22/04/2011
19
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; i<n; i++)
if (a[i] >= 0)
return false;
return true;

}
22/04/2011
20
TÍNH TỔNG, GIÁ TRỊ TRUNG BÌNH CÓ
ĐIỀU KIỆN
Mẫu tính tổng:
int TongXXX(int a[], int n)
{
int s = 0;
for (int i = 0; i<n; i++)
if (a[i] thỏa điều kiện)
s += a[i];
return s;
}
22/04/2011
21
Mẫu tính trung bình:
float TrungBinhXXX(int a[], int n)
{
int s = 0;
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] thỏa điều kiện)
{
s += giatri;
d ++;
}
if (d==0)
return 0;
return (float) s / d;

}
22/04/2011
22
Ví dụ 1: 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; i<n; i++)
if (a[i] %2!=0)
s += a[i];
return s;
}
22/04/2011
23
Ví dụ 2: 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; i<n; i++)
if (a[i] < 0)
{
s += a[i];
d++;
}
if (d == 0)
return 0;
return (float)s / d;
}

22/04/2011
24
22/04/2011
5
SẮP XẾP
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;
}
22/04/2011
25

×