Professional Documents
Culture Documents
Macro Function
#include <stdio.h> #include <stdio.h>
#define MAX(A, B) ((A) > (B) ? (A) : (B)) int timMax(int, int); // prototype
int main() int main()
{ {
int a = 5, b = 7; int a = 5, b = 7;
float c = 5.6, d = 4.5; printf("\nMAX= %d", timMax (a, b));
printf("\nMAX= %d", ((a) > (b) ? (a) : (b))); return 0 ;
return 0 ; }
} int timMax(int x, int y) Gọi hàm
{
return ((x) > (y) ? (x) : (y));
}
▪ Mà phải dùng từng phần tử trong chúng. Mỗi phần tử được dùng như một biến
đơn.
int a[6];
a[1] = -2;
cin>>a[0]; // nhập vào a[0]
cout<<a[0]*a[1];
Biến mảng là tham số của hàm
▪ Tham số được khai báo như khai báo biến mảng.
Ví dụ: void SapXepTang(int a[100]);
Tham số kiểu mảng truyền cho hàm chính là địa chỉ của phần tử đầu tiên của mảng
Có thể không cần xác định số phần tử của mảng
Mảng được chuyển tham chiếu (Mảng có thể thay đổi nội dung sau khi thực hiện hàm)
Ví dụ: Hàm xuất nội dung một mảng các số nguyên:
void xuatMang(int a[], int N);
Ví dụ: Hàm nhập nội dung một mảng các số nguyên:
void nhapMang(int a[], int &N); // lưu ý khi nhập N trong hàm
Biến mảng là tham số của hàm
Lưu ý: Số lượng phần tử thực sự truyền qua biến khác
void SapXepTang(int a[100], int N);
void SapXepTang(int a[], int N);
cout<<endl;
}
Hàm Tìm Kiếm
#include <iostream>
int TimKiem(int a[], int n, int x) using namespace std;
{ void NhapMang(int a[], int &n);
for (int i= 0; i < n; i++) void XuatMang(int a[], int n);
if (a[i] == x) int TimKiem(int a[], int n, int x);
return i; int main()
{
int A[100], N, x, k;
return -1;
NhapMang(A,N);
} XuatMang(A,N);
cout<<"tim phan tu x:";
cin>>x;
k = TimKiem(A,N,x);
if (k!=-1)
cout<<"\n x tai vi tri:"<<k;
else
cout<<"\n khong tim thay";
return 0;
}
Ví dụ:
Tính tổng
int Tong(int a[], int n)
{
int tong = 0;
for (int i= 0; i < n; i++)
if (a[i] thỏa yêu cầu bài toán) // tùy yêu cầu điều kiện khác nhau
tong = tong + a[i];
return tong;
}
Ví dụ
Đếm số lượng phần tử thỏa điều kiện
return dem;
}
Ví dụ: Kỹ thuật đặt cờ hiệu
Kiểm tra mảng a có phải là mảng toàn các số nguyên tố hay không?
return max;
}
Ví dụ : Kỹ thuật cầm canh (Sentinel)
Giả sử có đủ vùng nhớ để gán a[n] = x; trước vòng lặp while
Tìm kiếm phần tử x trong mảng - > chuyện gì xảy ra?????
0 1 2 3
A
Ví dụ:
0 int a[10][20], b[10][20];
1 float c[5][10];
char d[10][20];
2
Truy xuất đến một phần tử
Thông qua chỉ số: truy xuất thông tên mảng và chỉ số tại dòng và cột tương ứng
<tên biến mảng>[<chỉ số dòng>][<chỉ số cột>];
B[0][3]
int B[3][5];
1 6 -2 3
0 37 43 51
B[1][0] 1 93 34 0
cout<<endl;
}
}
Hàm nhập mảng và xuất mảng
void xuatmang(int a[][MAX], int m , int n)
{ int i , j;
for(i =0; i<m;i++)
{
for(j=0; j<n; j++) Goi ham trong ham main
{ int main()
cout<<a[i][j] << “ ”;
{
int a[MAX][MAX];
}
int n,m;
cout << endl; // in xuống dòng nhapmang(a,m,n);
} xuatmang(a,m,n);
} return 0;
}
Tính tổng một cột
int TongCot(int a[][100], int m, int c)
{
int i, tong;
tong = 0;
return tong;
}
Tìm kiếm
int TimKiem(int a[][100], int m, int n, int x)
{
int i, j;
for (i=0; i<m; i++)
for (j=0; j<n; j++)
if (a[i][j] == x)
{
cout<<"tai dong:"<<i;
cout<<"tai cot:"<<j;
return 1;
}
return 0;
}
Structure
▪ Struct (Cấu trúc) : là kiểu dữ liệu gồm một nhóm các thành phần có kiểu không
giống nhau, mỗi thành phần được xác định bằng một tên riêng biệt.
Để cho mỗi số seed khác nhau người ta thường dùng kèm với unsigned int
time(NULL) trong thư viện time.h, hàm time(NULL) trả về số giây đã trôi qua kể từ
ngày 1/1/1970.
▪ Hàm srand() thường được gọi trước khi gọi hàm rand()
Tạo ngẫu nhiên trong C/C++
▪ Hàm rand()
Cú pháp: int rand(void);
Trả về một số nguyên giả random trong khoảng từ 0 đến RAND_MAX.
Hằng RAND_MAX được định nghĩa trong stdlib.h đảm bảo ít nhất bằng 32767.
Nếu chỉ dùng hàm rand() thì sẽ cho ra những số random giống nhau mỗi lần chạy, vì
vậy người ta thường khai báo srand(time(NULL)) trước để kết quả random mỗi lần
mỗi khác nhau.
int main()
{
srand (time(NULL)); // seed initialization
for (int i = 0; i < 10; ++i)
{
float r = (float) (rand()) / (float) (RAND_MAX);
printf("%f\n", r);
}
return 0;
}
Tạo ngẫu nhiên trong C/C++
C++ code
#include <iostream> /* std::cout, std::enld */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
int main()
{
srand (time(NULL)); // seed initialization
for (int i = 0; i < 10; ++i)
{
float r = static_cast <float> (rand()) / static_cast <float> (RAND_MAX);
std::cout << r << std::endl;
}
return 0;
}
Sparse matrix vs. Dense matrix
▪ Ma trận thưa (Sparse matrix) là loại ma trận có kích thước lớn nhưng phần lớn các
phần tử là 0.
▪ Thực hiện tính tóa trên ma trận thưa, ta thường quan tâm đến không gian lưu trữ
và tốc độ tính toán sao cho tối ưu nhất.
Sparse matrix - applications
Ví dụ: The NYC subway system
Biễu diễn bằng ma trận kề
Mỗi trạm có liên kết với nhau sẽ được biễu diễn bởi một trọng số (khác 0 )
trong ma trận.
Ví dụ