1. Hệ thống thông tin
- Xây dựng và thiết kế các hệ thống thông tin quản lý nhỏ: Hệ thống kế toán doanh thu; kế toán chi phí; Quản lý Khách sạn; hệ thống bán hàng; xuất/ nhập hàng; Quản lý kho bãi; quản lý lương; điểm....
- Xây dựng và thiết kế các hệ thống thông tin thông minh sử dụng khai phá dữ liệu (Data Mining) như: Phân cụm (clustering), phân loại (classifying).
2. Trí tuệ nhân tạo: Sử dụng các thuật toán của trí tuệ nhân tạo trong các bài toán dự báo và chẩn đoán: Mạng nơ ron (Neural Network); TT genetic; các TT phân cụm Kmeans; ...
3. Hệ thống ERP: Tìm hiểu lý thuyết, xây dựng và thiết kế một phần trong hệ thống ERP dựa trên mã nguồn mở như: hệ thống bán hàng, quản lý khách hàng,...
4. Khác: Phân tích và thiết kế các CSDL phân tán; Thiết kế dịch vụ Web;...
Thứ Hai, 16 tháng 5, 2011
Chủ Nhật, 8 tháng 5, 2011
Chủ Nhật, 3 tháng 4, 2011
Gợi ý đề tài thảo luận
- Bài toán: Xếp lịch hội thảo
Gợi ý:
- Sắp xếp không giảm theo thời điểm kết thúc.
- Chọn lịch đầu tiên trong danh sách
- Lặp quá trình tìm một cuộc họp tiếp theo có thời điểm bắt đầu không lớn hơn thời điểm kết thúc của cuộc họp trước đó.
- Bài toán: Vận chuyển hàng tối ưu- Lập dãy tỉ số thời gian vận chuyển và cước phạt vận chuyển. ưu tiên thời gian vận chuyển nhanh trước. Nếu cùng thời gian vận chuyển thì ưu tiên tiền phạt; nếu tiền phạt mất nhiều thì vận chuyển trước
-Tạo mảng ghi lại số thứ tự các mặt hàng
- Cách làm bằng cách sắp xếp tăng tỉ số nói trên;
* Chú ý tên[i] =i chính là thứ tự loại hàng cần vận chuyển; nên khi sắp xếp cần phải đổi chỗ cả thứ tự mặt hàng
-Bài toán: Kho sửa tầu
* Lưu ý bài toán cần kiểm tra tính hợp lệ của hoán vị toa tàu ở đường ray ra, dãy các toa ở đường ray vào mặc định là dãy 1, 2, ..., n theo thứ tự từ trái qua phải.
- Gọi (b) = {b1, b2, ..., bn} là dãy toa tàu ở đường ray vào, thì bi = i với i = 1, 2, ..., n.
- Gọi (a) = {a1, a2, ..., an} là dãy các toa tàu ở đường ray ra. Việc kiểm tra tính hợp lệ của dãy (a) như sau:
Lần lượt xét các toa tàu ai ở đường ray ra theo chiều từ trái sang phải, nghĩa là i tăng dần từ 1, 2, ..., đến n.
- Với mỗi toa ai ta tìm xem nó có trong đường ray vào không.
- Nếu ai có trong (b) thì mọi toa tàu d có có chỉ số nhỏ hơn ai chắc chắn đã được đưa vào kho sửa chữa, ví dụ với n = 5, nếu a1 = 4 thì chắc chắn các toa 1, 2, 3 đã được đưa vào kho sửa chữa. Khi đó ta đưa tất cả các toa d này vào kho (tức là đẩy chúng vào một ngăn xếp), trước khi xét toa tầu tiếp theo ở đường ray ra - Nếu ai không có trong (b) thì chắc chắn nó phải ở trong kho, hơn nữa phải ở vị trí cửa kho sửa chữa (đỉnh ngăn xếp). Nếu ai có ở vị trí cửa kho thì ta “lấy nó ra” khỏi kho, nếu ngược lại thì chứng tỏ dãy (a) là dãy hoán vị không hợp lệ tại i, và đây là dấu hiệu duy nhất để kiểm tra một dãy (a) có hợp lệ hay không.
=========
Tất cả các bài cần phải thể hiện thuật toán và cài đặt bằng chương trình cụ thể
Thứ Hai, 28 tháng 3, 2011
Hàm friend của hai lớp
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <iomanip.h>
class DIEM;
class SINHVIEN
{ char hoten[25];
int tuoi;
public:
int masv;
char *gethoten(){return hoten;}
friend void nhapdiem(SINHVIEN s, DIEM &d);
friend void xemdiem(SINHVIEN s, DIEM &d);
void nhap(void)
{
cout <<"\n nhap ho ten "; gets(hoten);
cout <<"\n nhap ma sv "; cin>>masv;
cout <<"\n nhap tuoi "; cin>>tuoi; cin.clear();
}
void xem(void)
{
cout <<"\n ho ten sinh vien: "<<hoten;
cout <<"\n tuoi la: "<< tuoi << endl;
}
};
//
class DIEM
{ float diem;
public:
float getdiem() {return diem;}
void putdiem(float d1) {diem=d1;}
friend void nhapdiem(SINHVIEN s, DIEM &d);
friend void xemdiem(SINHVIEN s, DIEM &d);
};
//
void nhapdiem(SINHVIEN s, DIEM &d)
{
float d2;
cout <<"\n nhap diem cho sinh vien " <<s.masv <<": ";
cin >> d2;
d.putdiem(d2);
}
//
void xemdiem(SINHVIEN s, DIEM &d)
{
cout <<"\n thong tin sinh vien: " ;
cout<<"\nma sv: " <<s.masv;
cout<<"\nho ten: " << s.gethoten();
cout<<"\ndiem: "<<d.getdiem()<<endl;
}
//
const maxn=50;
void main () {
clrscr();
SINHVIEN s[maxn];
DIEM d[maxn];
int n, i;
cout<<"\nSo sinh vien: "; cin>>n; cin.clear();
for(i=1; i<=n; i++) s[i].nhap();
cout<<"\nThong tin vua nhap la: \n";
for(i=1; i<=n; i++) s[i].xem();
cout<<"\nNhap diem cho tung sinh vien: \n";
for(i=1; i<=n; i++) nhapdiem(s[i],d[i]);
for(i=1; i<=n; i++) xemdiem(s[i],d[i]);
getch();
}
#include <stdio.h>
#include <conio.h>
#include <iomanip.h>
class DIEM;
class SINHVIEN
{ char hoten[25];
int tuoi;
public:
int masv;
char *gethoten(){return hoten;}
friend void nhapdiem(SINHVIEN s, DIEM &d);
friend void xemdiem(SINHVIEN s, DIEM &d);
void nhap(void)
{
cout <<"\n nhap ho ten "; gets(hoten);
cout <<"\n nhap ma sv "; cin>>masv;
cout <<"\n nhap tuoi "; cin>>tuoi; cin.clear();
}
void xem(void)
{
cout <<"\n ho ten sinh vien: "<<hoten;
cout <<"\n tuoi la: "<< tuoi << endl;
}
};
//
class DIEM
{ float diem;
public:
float getdiem() {return diem;}
void putdiem(float d1) {diem=d1;}
friend void nhapdiem(SINHVIEN s, DIEM &d);
friend void xemdiem(SINHVIEN s, DIEM &d);
};
//
void nhapdiem(SINHVIEN s, DIEM &d)
{
float d2;
cout <<"\n nhap diem cho sinh vien " <<s.masv <<": ";
cin >> d2;
d.putdiem(d2);
}
//
void xemdiem(SINHVIEN s, DIEM &d)
{
cout <<"\n thong tin sinh vien: " ;
cout<<"\nma sv: " <<s.masv;
cout<<"\nho ten: " << s.gethoten();
cout<<"\ndiem: "<<d.getdiem()<<endl;
}
//
const maxn=50;
void main () {
clrscr();
SINHVIEN s[maxn];
DIEM d[maxn];
int n, i;
cout<<"\nSo sinh vien: "; cin>>n; cin.clear();
for(i=1; i<=n; i++) s[i].nhap();
cout<<"\nThong tin vua nhap la: \n";
for(i=1; i<=n; i++) s[i].xem();
cout<<"\nNhap diem cho tung sinh vien: \n";
for(i=1; i<=n; i++) nhapdiem(s[i],d[i]);
for(i=1; i<=n; i++) xemdiem(s[i],d[i]);
getch();
}
Thứ Sáu, 18 tháng 3, 2011
Một số bài tập luyên tập
Đây chỉ là bài tập mang tính tham khảo, sẽ còn được bổ sung hay cập nhật.
1. Xây dựng hàm tìm giá trị lớn nhất trong mảng số nguyên.
2. Xây dựng hàm tìm phần tử dương đầu tiên trong mảng
3. Xây dựng hàm tìm phần tử âm đầu tiên trong mảng
4. Xây dựng hàm tìm phần tử chẵn đầu tiên trong mảng
5. Xây dựng hàm tìm phần tử lẻ đầu tiên trong mảng.
6. Xây dựng hàm tìm phần tử chẵn cuối cùng trong mảng
7. Xây dựng hàm tìm phần tử lẽ cuối cùng trong mảng
8. Xây dựng hàm tìm vị trí chẵn cuối cùng trong mảng.
9. Xây dựng hàm tìm vị trí dương đầu tiên trong mảng
10. Xây dựng hàm tìm vị trí âm đầu tiên trong mảng
11. Xây dựng hàm tìm vị trí chẵn đầu tiên trong mảng
12. Xây dựng hàm tìm vị trí lẻ đầu tiên trong mảng. 13. Xây dựng hàm tìm vị trí chẵn cuối cùng trong mảng
14. Xây dựng hàm tìm vị trí lẽ cuối cùng trong mảng
15. Xây dựng hàm tìm vị trí chẵn cuối cùng trong mảng.
16. Xây dựng hàm tìm vị trí số hoàn thiện cuối cùng trong mảng.
17. Xây dựng hàm tìm số nguyên tố đầu tiên trong mảng.
18. Xây dựng hàm tìm vị trí đầu tiên của số nguyên tố trong mảng.
19. Xây dựng hàm tìm số nguyên tố lớn nhất trong mảng.
20. Xây dựng hàm tìm vị trí số nguyên tố lớn nhất trong mảng.
21. Xây dựng hàm tìm vị trí số hoàn thiện đầu tiên trong mảng.
IV. tính tổng và trung bình
1. Xây dựng hàm tính tổng các phần tử của mảng.
2. Xây dựng hàm tính tổng các phần tử có chỉ số lẽ
3. Xây dựng hàm tính tổng các phần tử chẵn.
int sum_array_3(int a[MAX], int n);
4. Xây dựng hàm tính tổng các phần tử lẽ.
int sum_array_4(int a[MAX], int n);
5. Xây dựng hàm tính tổng các phần tử có chỉ số chẵn.
int sum_array_5(int a[MAX], int n);
6. Xây dựng hàm tính tổng các phần tử chia hết cho 3
int sum_array_6(int a[MAX], int n);
7. Xây dựng hàm tính tổng các phần tử có chỉ số chia hết cho 3.
int sum_array_7(int a[MAX], int n);
8. Xây dựng hàm tính tổng các phần tử mảng là số nguyên tố.
int sum_array_8(int a[MAX], int n);
9. Xây dựng hàm tính tổng các phần tử vừa chia hết cho 5 và chia hết cho 10
int sum_array_9(int a[MAX], int n);
10. Xây dựng hàm tính tổng các phần tử mảng lớn hơn X.
int sum_array_10(int a[MAX], int n);
11. Xây dựng hàm tính tổng các phân tử mảng nhỏ hơn X.
int sum_array_11(int a[MAX], int n);
12. Xây dựng hàm tính tổng các phần tử chia hết cho X
int sum_array_12(int a[MAX], int n);
13. Xây dựng hàm tính tổng các phần tử không chia hết cho X
int sum_array_13(int a[MAX], int n);
14. Xây dựng hàm tính tổng các phần tử chính phương của mảng.
int sum_array_14(int a[MAX], int n);
15. Xây dựng hàm tính tổng các phần tử chính phương của mảng.
int sum_array_15(int a[MAX], int n);
16. Xây dựng hàm tính trung bình các phần tử mảng.
float average_array_1(int a[MAX], int n);
17. Xây dựng hàm tính trung bình các phần tử có chỉ số lẽ
float average_array_2(int a[MAX], int n);
18. Xây dựng hàm tính trung bình các phần tử chẵn.
float average_array_3(int a[MAX], int n);
19. Xây dựng hàm tính trung bình các phần tử lẽ.
float average_array_4(int a[MAX], int n);
20. Xây dựng hàm tính trung bình các phần tử có chỉ số chẵn.
float average_array_5(int a[MAX], int n);
21. Xây dựng hàm tính trung bình các phần tử chia hết cho 3
float average_array_6(int a[MAX], int n);
22. Xây dựng hàm tính trung bình các phần tử có chỉ số chia hết cho 3.
float average_array_7(int a[MAX], int n);
23. Xây dựng hàm tính trung bình các phần tử mảng là số nguyên tố.
float average_array_8(int a[MAX], int n);
24. Xây dựng hàm tính trung bình các phần tử vừa chia hết cho 5 và chia hết cho 10
float average_array_9(int a[MAX], int n);
25. Xây dựng hàm tính trung bình các phần tử mảng lớn hơn X.
float average_array_10(int a[MAX], int n, int X);
26. Xây dựng hàm tính trung bình các phân tử mảng nhỏ hơn X.
float average_array_11(int a[MAX], int n, int X);
27. Xây dựng hàm tính trung bình các phần tử chia hết cho X
float average_array_12(int a[MAX], int n, int X);
28. Xây dựng hàm tính trung bình các phần tử không chia hết cho X
float average_array_13(int a[MAX], int n, int X);
V. Các kỹ thuật đếm
1. Xây dựng hàm đếm các phần tử chẵn
int count_array_1(int a[MAX], int n);
2. Xây dựng hàm đếm các phần tử lẽ.
int count_array_2(int a[MAX], int n);
3. Xây dựng hàm điếm các phần tử chẵn.
int count_array_3(int a[MAX], int n);
4. Xây dựng hàm đếm các phần tử lẽ
int count_array_4(int a[MAX], int n);
5. Xây dựng hàm đếm các phần tử chia hết cho 3
int count_array_5(int a[MAX], int n);
6. Xây dựng hàm đếm các phần tử chia hết cho 3 hoặc chia hết cho 5.
int count_array_6(int a[MAX], int n);
7. Xây dựng hàm đếm các phần tử dương chia hết cho 3
int count_array_7(int a[MAX], int n);
8. Xây dựng hàm đểm các phần tử âm chia hết cho 2
int count_array_8(int a[MAX], int n, int X);
9. Xây dựng hàm đếm số lần xuất hiện của phần tử X.
int count_array_9(int a[MAX], int n);
10. Xây dựng hàm đểm trong mảng xem có bao nhiêu số nguyên tố.
int count_array_10(int a[MAX], int n);
11. Xây dựng hàm đếm trong mảng có bao nhiêu số hoàn thiện.
int count_array_11(int a[MAX], int n);
VI. Các thao tác thêm phần tử vào mảng
1. Xây dựng hàm thêm một phần tử(K) vào đầu mảng.
int add_array_1(int a[MAX], int n, int K);
2. Xây dựng hàm thêm một phần tử(K) vào cuối mảng.
int add_array_2(int a[MAX], int n, int K);
3. Xây dựng hàm thêm một phần tử(K) vào sau phần tử X.
int add_array_3(int a[MAX], int n, int K, int X);
4. Xây dựng hàm thêm một phần tử(K) vào vị trí sau M
int add_array_4(int a[MAX], int n, int K, int M);
5. Xây dựng hàm thêm một phần tử(K) vào mảng đã sắp xếp sao cho mảng không đổi thứ tự sắp xếp.
int add_array_5(int a[MAX], int n, int K);VII . Các thao tác xóa một phần tử mảng
1. Xây dựng hàm xóa phần tử cuối cùng của mảng
int del_array_1(int a[MAX], int n);
2. Xây dựng hàm xóa phần tử đầu tiên của mảng.
int del_array_2(int a[MAX], int n);
3. Xây dựng hàm xóa phần tử sau phần tử X
int del_array_3(int a[MAX], int n, int X);
4. Xây dựng hàm xóa phần tử sau vị trị M
int del_array_4(int a[MAX], int n, int M);
5. Xây dựng hàm xóa các phần tử có giá trị trong mảng trùng nhau.
int del_array_5(int a[MAX], int n);
6. Xây dựng hàm xóa các phần tử mảng chia hết cho 3.
int del_array_6(int a[MAX], int n);
7. Xây dựng hàm xóa các phần tử mảng có giá trị âm.
int del_array_7(int a[MAX], int n);
8. Xây dựng hàm xóa các phần tử có giá trị dương.
int del_array_8(int a[MAX], int n);
9. Xây dựng hàm xóa các phần tử không phải là số nguyên tố.
int del_array_9(int a[MAX], int n);
10. Xây dựng hàm xóa các phần tử là số nguyên tố.
int del_array_10(int a[MAX], int n);VII I. Các thao tác sao chép mảng(5 bài)
1. Xây dựng hàm sao chép giá các phần tử của mảng a vào mảng b.
type_array copy_array_1(int a[MAX], int n);
2. Xây dựng hàm sao chép các phân tử có giá trị chẵn vào mảng khác.
type_array copy_array_2(int a[MAX], int n);
3. Xây dựng hàm sao chép các phần tử có giá trị lẽ vào mảng khác.
type_array copy_array_3(int a[MAX], int n);
4. Xây dựng hàm sao chép các phần tử có giá trị chia hết cho 2 và cho 3 vào mảng khác.
type_array copy_array_2(int a[MAX], int n);
5. Xây dựng hàm sao chép các phần tử của mảng có chỉ số chia hết cho 3 vào mảng khác.
type_array copy_array_2(int a[MAX], int n);
IX. Các thao tác ghép mảng(7 bài)
1. Xây dựng hàm ghép hai mảng a và b thành một mảng c.
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
2. Xây dựng hàm ghép mảng b vào mảng a.
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
3. Xây dựng hàm ghép mảng b vào mảng a mà các phần tử mảng a vẫn được sắp xếp theo thứ tự tăng dần(mảng a là mảng được sắp xếp tăng).
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
4. Xây dựng hàm ghép mảng b vào mảng a mà các phần tử mảng a vẫn được sắp xếp theo thứ tự giảm dần(mảng a là mảng được sắp xếp giảm).
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
5. Xây dựng hàm ghép hai mảng a và b sao cho các phần tử sau khi ghép được sắp xếp theo thứ tự tăng.
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
6. Xây dựng hàm ghép hai mảng a và b sao cho các phần tử sau khi ghép được sắp xếp giảm dần.
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
7. Xây dựng hàm ghép hai mảng a và b sao cho các phần tử của mảng a và mảng b được sắp xếp đan xen nhau(Chú ý: Nếu hai mảng có số phần tử khác nhau thì các phần tử còn lại của mảng có nhiều phần tử hơn được đưa vào sau).
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
MỘT SỐ BÀI TẬP VỀ DANH SÁCH LIÊN KẾT
Bài 1: Hãy tạo danh sách liên kết, mỗi phần tử của danh sách lưu trữ một số nguyên
1. Xây dựng hàm tạo phần tử và tạo danh sách liên kết đơn.
2. Xây dựng hàm tạo danh sách liên kết đơn bằng cách tự động nhập random
3. Xây dựng hàm xóa các phần tử trùng trên dslk đơn
4. Xây dựng hàm thêm 1 phần tử vào cuối danh sách liên kết đơn
5. Xây dựng hàm thêm 1 phần tử vào đầu danh sách liên kết đơn
6. Xây dựng hàm thêm phần tử y vào trước phần tử x trên danh sách liên kết đơn
7. Xây dựng hàm thêm phần tử y sau phần tử x trên danh sách liên kết đơn
8. Xây dựng hàm xóa phần tử trước phần tử X và xóa sau phần tử X
9. Xây dựng hàm xóa phần tử có giá trị x trên danh sách liên kết đơn
10. Xây dựng hàm xóa đầu, xóa cuối trên danh sách liên kết đơn
11. Xây dựng hàm tìm phần tử lớn nhất (max) trên danh sách liên kết
12. Xây dựng hàm viết hàm tìm phần tử X trong danh sach lien ket
13. Xây dựng hàm nối 2 danh sách liên kết đơn
14. Xây dựng hàm tách danh sách liên kết đơn
15. Xây dựng hàm cộng liên tiếp 2 phần tử trên danh sách liên kết đơn
16. Xây dựng hàm tìm phần tử chẵn lớn nhất, lớn hơn phần tử lẽ lớn nhất trên dslk đơn
17. Xây dựng hàm đảo ngược danh sách liên kết đơn
18. Xây dựng hàm xóa phần tử nhỏ nhất trên dslk đơn
19. Xây dựng hàm tìm phần tử lẽ cuối cùng và thêm 1 phần tử X trước phần tử đó trên dslk đơn
20. Xây dựng hàm tìm phần tử chẵn đầu tiên và thêm 1 phần tử X trước phần tử đó trên dslk đơn
21. Xây dựng hàm kiểm tra, đếm và in các số nguyên tố ra màn hình
22. Xây dựng hàm tính tổng các phần tử trên dslk đơn
23. Xây dựng hàm liệt kê tất cả các số âm trên dslk đơn
24. Xây dựng hàm sao chép các phần tử trên danh sách liên kết đơn
25. Xây dựng hàm xóa toàn bộ các phần tử trên dslk đơn
Bài 2: Hãy tạo danh sách liên kết, mỗi phần tử của danh sách lưu trữ thông tin của sinh viên(Họ tên, điểm)
1. Xây dựng hàm tạo danh sách sinh viên.
2. Xây dựng hàm tạo danh sách liên kết không có 2 sinh viên trùng tên
3. Xây dựng hàm thêm 1 sinh viên vào cuối danh sách liên kết đơn
4. Xây dựng hàm thêm 1 sinh viên vào đầu danh sách liên kết đơn
5. Xây dựng hàm thêm 1 sinh viên vào trước sinh viên x trên danh sách liên kết đơn
6. Xây dựng hàm thêm 1 sinh viên vào sau sinh viên x trên danh sách liên kết đơn
7. Xây dựng hàm xóa 1 sinh viên trước sinh viên X và xóa sau sinh viên X
8. Xây dựng hàm xóa 1 sinh viên có tên x trên danh sách liên kết đơn
9. Xây dựng hàm xóa 1 sinh viên đầu, xóa cuối trên danh sách liên kết đơn
10. Xây dựng hàm tìm sinh viên có điểm cao nhất trên danh sách liên kết.
11. Xây dựng hàm sắp xếp các sinh viên trong danh sách liên kết theo tên sinh viên.
12. Xây dựng hàm in ra sinh viên có điểm lớn nhất.
13. Xây dựng hàm in ra danh sách các sinh viên có điểm lớn hơn 5.
2. Xây dựng hàm tìm phần tử dương đầu tiên trong mảng
3. Xây dựng hàm tìm phần tử âm đầu tiên trong mảng
4. Xây dựng hàm tìm phần tử chẵn đầu tiên trong mảng
5. Xây dựng hàm tìm phần tử lẻ đầu tiên trong mảng.
6. Xây dựng hàm tìm phần tử chẵn cuối cùng trong mảng
7. Xây dựng hàm tìm phần tử lẽ cuối cùng trong mảng
8. Xây dựng hàm tìm vị trí chẵn cuối cùng trong mảng.
9. Xây dựng hàm tìm vị trí dương đầu tiên trong mảng
10. Xây dựng hàm tìm vị trí âm đầu tiên trong mảng
11. Xây dựng hàm tìm vị trí chẵn đầu tiên trong mảng
12. Xây dựng hàm tìm vị trí lẻ đầu tiên trong mảng. 13. Xây dựng hàm tìm vị trí chẵn cuối cùng trong mảng
14. Xây dựng hàm tìm vị trí lẽ cuối cùng trong mảng
15. Xây dựng hàm tìm vị trí chẵn cuối cùng trong mảng.
16. Xây dựng hàm tìm vị trí số hoàn thiện cuối cùng trong mảng.
17. Xây dựng hàm tìm số nguyên tố đầu tiên trong mảng.
18. Xây dựng hàm tìm vị trí đầu tiên của số nguyên tố trong mảng.
19. Xây dựng hàm tìm số nguyên tố lớn nhất trong mảng.
20. Xây dựng hàm tìm vị trí số nguyên tố lớn nhất trong mảng.
21. Xây dựng hàm tìm vị trí số hoàn thiện đầu tiên trong mảng.
IV. tính tổng và trung bình
1. Xây dựng hàm tính tổng các phần tử của mảng.
2. Xây dựng hàm tính tổng các phần tử có chỉ số lẽ
3. Xây dựng hàm tính tổng các phần tử chẵn.
int sum_array_3(int a[MAX], int n);
4. Xây dựng hàm tính tổng các phần tử lẽ.
int sum_array_4(int a[MAX], int n);
5. Xây dựng hàm tính tổng các phần tử có chỉ số chẵn.
int sum_array_5(int a[MAX], int n);
6. Xây dựng hàm tính tổng các phần tử chia hết cho 3
int sum_array_6(int a[MAX], int n);
7. Xây dựng hàm tính tổng các phần tử có chỉ số chia hết cho 3.
int sum_array_7(int a[MAX], int n);
8. Xây dựng hàm tính tổng các phần tử mảng là số nguyên tố.
int sum_array_8(int a[MAX], int n);
9. Xây dựng hàm tính tổng các phần tử vừa chia hết cho 5 và chia hết cho 10
int sum_array_9(int a[MAX], int n);
10. Xây dựng hàm tính tổng các phần tử mảng lớn hơn X.
int sum_array_10(int a[MAX], int n);
11. Xây dựng hàm tính tổng các phân tử mảng nhỏ hơn X.
int sum_array_11(int a[MAX], int n);
12. Xây dựng hàm tính tổng các phần tử chia hết cho X
int sum_array_12(int a[MAX], int n);
13. Xây dựng hàm tính tổng các phần tử không chia hết cho X
int sum_array_13(int a[MAX], int n);
14. Xây dựng hàm tính tổng các phần tử chính phương của mảng.
int sum_array_14(int a[MAX], int n);
15. Xây dựng hàm tính tổng các phần tử chính phương của mảng.
int sum_array_15(int a[MAX], int n);
16. Xây dựng hàm tính trung bình các phần tử mảng.
float average_array_1(int a[MAX], int n);
17. Xây dựng hàm tính trung bình các phần tử có chỉ số lẽ
float average_array_2(int a[MAX], int n);
18. Xây dựng hàm tính trung bình các phần tử chẵn.
float average_array_3(int a[MAX], int n);
19. Xây dựng hàm tính trung bình các phần tử lẽ.
float average_array_4(int a[MAX], int n);
20. Xây dựng hàm tính trung bình các phần tử có chỉ số chẵn.
float average_array_5(int a[MAX], int n);
21. Xây dựng hàm tính trung bình các phần tử chia hết cho 3
float average_array_6(int a[MAX], int n);
22. Xây dựng hàm tính trung bình các phần tử có chỉ số chia hết cho 3.
float average_array_7(int a[MAX], int n);
23. Xây dựng hàm tính trung bình các phần tử mảng là số nguyên tố.
float average_array_8(int a[MAX], int n);
24. Xây dựng hàm tính trung bình các phần tử vừa chia hết cho 5 và chia hết cho 10
float average_array_9(int a[MAX], int n);
25. Xây dựng hàm tính trung bình các phần tử mảng lớn hơn X.
float average_array_10(int a[MAX], int n, int X);
26. Xây dựng hàm tính trung bình các phân tử mảng nhỏ hơn X.
float average_array_11(int a[MAX], int n, int X);
27. Xây dựng hàm tính trung bình các phần tử chia hết cho X
float average_array_12(int a[MAX], int n, int X);
28. Xây dựng hàm tính trung bình các phần tử không chia hết cho X
float average_array_13(int a[MAX], int n, int X);
V. Các kỹ thuật đếm
1. Xây dựng hàm đếm các phần tử chẵn
int count_array_1(int a[MAX], int n);
2. Xây dựng hàm đếm các phần tử lẽ.
int count_array_2(int a[MAX], int n);
3. Xây dựng hàm điếm các phần tử chẵn.
int count_array_3(int a[MAX], int n);
4. Xây dựng hàm đếm các phần tử lẽ
int count_array_4(int a[MAX], int n);
5. Xây dựng hàm đếm các phần tử chia hết cho 3
int count_array_5(int a[MAX], int n);
6. Xây dựng hàm đếm các phần tử chia hết cho 3 hoặc chia hết cho 5.
int count_array_6(int a[MAX], int n);
7. Xây dựng hàm đếm các phần tử dương chia hết cho 3
int count_array_7(int a[MAX], int n);
8. Xây dựng hàm đểm các phần tử âm chia hết cho 2
int count_array_8(int a[MAX], int n, int X);
9. Xây dựng hàm đếm số lần xuất hiện của phần tử X.
int count_array_9(int a[MAX], int n);
10. Xây dựng hàm đểm trong mảng xem có bao nhiêu số nguyên tố.
int count_array_10(int a[MAX], int n);
11. Xây dựng hàm đếm trong mảng có bao nhiêu số hoàn thiện.
int count_array_11(int a[MAX], int n);
VI. Các thao tác thêm phần tử vào mảng
1. Xây dựng hàm thêm một phần tử(K) vào đầu mảng.
int add_array_1(int a[MAX], int n, int K);
2. Xây dựng hàm thêm một phần tử(K) vào cuối mảng.
int add_array_2(int a[MAX], int n, int K);
3. Xây dựng hàm thêm một phần tử(K) vào sau phần tử X.
int add_array_3(int a[MAX], int n, int K, int X);
4. Xây dựng hàm thêm một phần tử(K) vào vị trí sau M
int add_array_4(int a[MAX], int n, int K, int M);
5. Xây dựng hàm thêm một phần tử(K) vào mảng đã sắp xếp sao cho mảng không đổi thứ tự sắp xếp.
int add_array_5(int a[MAX], int n, int K);
1. Xây dựng hàm xóa phần tử cuối cùng của mảng
int del_array_1(int a[MAX], int n);
2. Xây dựng hàm xóa phần tử đầu tiên của mảng.
int del_array_2(int a[MAX], int n);
3. Xây dựng hàm xóa phần tử sau phần tử X
int del_array_3(int a[MAX], int n, int X);
4. Xây dựng hàm xóa phần tử sau vị trị M
int del_array_4(int a[MAX], int n, int M);
5. Xây dựng hàm xóa các phần tử có giá trị trong mảng trùng nhau.
int del_array_5(int a[MAX], int n);
6. Xây dựng hàm xóa các phần tử mảng chia hết cho 3.
int del_array_6(int a[MAX], int n);
7. Xây dựng hàm xóa các phần tử mảng có giá trị âm.
int del_array_7(int a[MAX], int n);
8. Xây dựng hàm xóa các phần tử có giá trị dương.
int del_array_8(int a[MAX], int n);
9. Xây dựng hàm xóa các phần tử không phải là số nguyên tố.
int del_array_9(int a[MAX], int n);
10. Xây dựng hàm xóa các phần tử là số nguyên tố.
int del_array_10(int a[MAX], int n);
1. Xây dựng hàm sao chép giá các phần tử của mảng a vào mảng b.
type_array copy_array_1(int a[MAX], int n);
2. Xây dựng hàm sao chép các phân tử có giá trị chẵn vào mảng khác.
type_array copy_array_2(int a[MAX], int n);
3. Xây dựng hàm sao chép các phần tử có giá trị lẽ vào mảng khác.
type_array copy_array_3(int a[MAX], int n);
4. Xây dựng hàm sao chép các phần tử có giá trị chia hết cho 2 và cho 3 vào mảng khác.
type_array copy_array_2(int a[MAX], int n);
5. Xây dựng hàm sao chép các phần tử của mảng có chỉ số chia hết cho 3 vào mảng khác.
type_array copy_array_2(int a[MAX], int n);
IX. Các thao tác ghép mảng(7 bài)
1. Xây dựng hàm ghép hai mảng a và b thành một mảng c.
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
2. Xây dựng hàm ghép mảng b vào mảng a.
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
3. Xây dựng hàm ghép mảng b vào mảng a mà các phần tử mảng a vẫn được sắp xếp theo thứ tự tăng dần(mảng a là mảng được sắp xếp tăng).
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
4. Xây dựng hàm ghép mảng b vào mảng a mà các phần tử mảng a vẫn được sắp xếp theo thứ tự giảm dần(mảng a là mảng được sắp xếp giảm).
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
5. Xây dựng hàm ghép hai mảng a và b sao cho các phần tử sau khi ghép được sắp xếp theo thứ tự tăng.
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
6. Xây dựng hàm ghép hai mảng a và b sao cho các phần tử sau khi ghép được sắp xếp giảm dần.
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
7. Xây dựng hàm ghép hai mảng a và b sao cho các phần tử của mảng a và mảng b được sắp xếp đan xen nhau(Chú ý: Nếu hai mảng có số phần tử khác nhau thì các phần tử còn lại của mảng có nhiều phần tử hơn được đưa vào sau).
type_array merge_array(int a[MAX], int n, int b[MAX], int m);
MỘT SỐ BÀI TẬP VỀ DANH SÁCH LIÊN KẾT
Bài 1: Hãy tạo danh sách liên kết, mỗi phần tử của danh sách lưu trữ một số nguyên
1. Xây dựng hàm tạo phần tử và tạo danh sách liên kết đơn.
2. Xây dựng hàm tạo danh sách liên kết đơn bằng cách tự động nhập random
3. Xây dựng hàm xóa các phần tử trùng trên dslk đơn
4. Xây dựng hàm thêm 1 phần tử vào cuối danh sách liên kết đơn
5. Xây dựng hàm thêm 1 phần tử vào đầu danh sách liên kết đơn
6. Xây dựng hàm thêm phần tử y vào trước phần tử x trên danh sách liên kết đơn
7. Xây dựng hàm thêm phần tử y sau phần tử x trên danh sách liên kết đơn
8. Xây dựng hàm xóa phần tử trước phần tử X và xóa sau phần tử X
9. Xây dựng hàm xóa phần tử có giá trị x trên danh sách liên kết đơn
10. Xây dựng hàm xóa đầu, xóa cuối trên danh sách liên kết đơn
11. Xây dựng hàm tìm phần tử lớn nhất (max) trên danh sách liên kết
12. Xây dựng hàm viết hàm tìm phần tử X trong danh sach lien ket
13. Xây dựng hàm nối 2 danh sách liên kết đơn
14. Xây dựng hàm tách danh sách liên kết đơn
15. Xây dựng hàm cộng liên tiếp 2 phần tử trên danh sách liên kết đơn
16. Xây dựng hàm tìm phần tử chẵn lớn nhất, lớn hơn phần tử lẽ lớn nhất trên dslk đơn
17. Xây dựng hàm đảo ngược danh sách liên kết đơn
18. Xây dựng hàm xóa phần tử nhỏ nhất trên dslk đơn
19. Xây dựng hàm tìm phần tử lẽ cuối cùng và thêm 1 phần tử X trước phần tử đó trên dslk đơn
20. Xây dựng hàm tìm phần tử chẵn đầu tiên và thêm 1 phần tử X trước phần tử đó trên dslk đơn
21. Xây dựng hàm kiểm tra, đếm và in các số nguyên tố ra màn hình
22. Xây dựng hàm tính tổng các phần tử trên dslk đơn
23. Xây dựng hàm liệt kê tất cả các số âm trên dslk đơn
24. Xây dựng hàm sao chép các phần tử trên danh sách liên kết đơn
25. Xây dựng hàm xóa toàn bộ các phần tử trên dslk đơn
Bài 2: Hãy tạo danh sách liên kết, mỗi phần tử của danh sách lưu trữ thông tin của sinh viên(Họ tên, điểm)
1. Xây dựng hàm tạo danh sách sinh viên.
2. Xây dựng hàm tạo danh sách liên kết không có 2 sinh viên trùng tên
3. Xây dựng hàm thêm 1 sinh viên vào cuối danh sách liên kết đơn
4. Xây dựng hàm thêm 1 sinh viên vào đầu danh sách liên kết đơn
5. Xây dựng hàm thêm 1 sinh viên vào trước sinh viên x trên danh sách liên kết đơn
6. Xây dựng hàm thêm 1 sinh viên vào sau sinh viên x trên danh sách liên kết đơn
7. Xây dựng hàm xóa 1 sinh viên trước sinh viên X và xóa sau sinh viên X
8. Xây dựng hàm xóa 1 sinh viên có tên x trên danh sách liên kết đơn
9. Xây dựng hàm xóa 1 sinh viên đầu, xóa cuối trên danh sách liên kết đơn
10. Xây dựng hàm tìm sinh viên có điểm cao nhất trên danh sách liên kết.
11. Xây dựng hàm sắp xếp các sinh viên trong danh sách liên kết theo tên sinh viên.
12. Xây dựng hàm in ra sinh viên có điểm lớn nhất.
13. Xây dựng hàm in ra danh sách các sinh viên có điểm lớn hơn 5.
Thứ Ba, 8 tháng 3, 2011
DFS
//Bai toan: Cho do thi G(V, E).
// 1. Cho biet do thi co lien thong khong
// 2. Neu do thi lien thong: Tim duong di dai nhat tu u0 den v0
//
//Algorithm: Deapth First Search
//Data structure: Ma tran ke
//Input: Text file
//Output: Text file
//
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
//
#define MAX 100
#define FINPUT "DFS2.INP"
#define FOUTPUT "DFS2.OUT"
//
int n,u0,v0;
int a[MAX][MAX];
//
void nhapdulieu(){
int i,j,x;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=0;
i=1;
ifstream fin(FINPUT);
fin>>n>>u0>>v0;
while (!fin.eof()){
fin>>j;
if (j==0) i++;
else {a[i][j]=1; a[j][i]=1;}
}
fin.close();
cout<<n<<", "<<u0<<", "<<v0<<endl;
for(i=1;i<=n;i++) {
cout<<i<<": ";
for(j=1;j<=n;j++)
if(a[i][j]>0) cout<<j<<",";
cout<<endl;
}
}
//
int pred[MAX];
//
void DFS(int u){
int v;
for(v=1;v<=n;v++)
if(a[u][v]==1 && pred[v]==0)
{ pred[v]=u;
DFS(v);
}
}
//
int path[MAX];
int lt,m;
//
void xuli(){
int u;
lt=1;
for(u=1;u<=n;u++) pred[u]=0;
pred[u0]=-1;
DFS(u0);
for(u=1;u<=n;u++)
if (pred[u]==0) lt=0;
if (lt) {
m=0;
u=v0;
do{
path[++m]=u;
u=pred[u];
}while (u!=-1);
}
}
//
void xuatketqua(){
ofstream fo(FOUTPUT);
if(!lt) fo<<"Do thi khong lien thong";
else{ fo<<"Duong di dai nhat can tim co do dai "<<m<<endl;
for(int i=m;i>0;i--)
fo<<path[i]<<"->";
}
fo.close();
}
//
int main(){
clrscr();
nhapdulieu();
xuli();
xuatketqua();
cout<<"done!"; getch();
return 0;
}
=====================
9 1 8
2 0
3 9 0
5 7 8 0
5 7 0
6 8 0
7 0
9 0
9 0
// 1. Cho biet do thi co lien thong khong
// 2. Neu do thi lien thong: Tim duong di dai nhat tu u0 den v0
//
//Algorithm: Deapth First Search
//Data structure: Ma tran ke
//Input: Text file
//Output: Text file
//
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
//
#define MAX 100
#define FINPUT "DFS2.INP"
#define FOUTPUT "DFS2.OUT"
//
int n,u0,v0;
int a[MAX][MAX];
//
void nhapdulieu(){
int i,j,x;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=0;
i=1;
ifstream fin(FINPUT);
fin>>n>>u0>>v0;
while (!fin.eof()){
fin>>j;
if (j==0) i++;
else {a[i][j]=1; a[j][i]=1;}
}
fin.close();
cout<<n<<", "<<u0<<", "<<v0<<endl;
for(i=1;i<=n;i++) {
cout<<i<<": ";
for(j=1;j<=n;j++)
if(a[i][j]>0) cout<<j<<",";
cout<<endl;
}
}
//
int pred[MAX];
//
void DFS(int u){
int v;
for(v=1;v<=n;v++)
if(a[u][v]==1 && pred[v]==0)
{ pred[v]=u;
DFS(v);
}
}
//
int path[MAX];
int lt,m;
//
void xuli(){
int u;
lt=1;
for(u=1;u<=n;u++) pred[u]=0;
pred[u0]=-1;
DFS(u0);
for(u=1;u<=n;u++)
if (pred[u]==0) lt=0;
if (lt) {
m=0;
u=v0;
do{
path[++m]=u;
u=pred[u];
}while (u!=-1);
}
}
//
void xuatketqua(){
ofstream fo(FOUTPUT);
if(!lt) fo<<"Do thi khong lien thong";
else{ fo<<"Duong di dai nhat can tim co do dai "<<m<<endl;
for(int i=m;i>0;i--)
fo<<path[i]<<"->";
}
fo.close();
}
//
int main(){
clrscr();
nhapdulieu();
xuli();
xuatketqua();
cout<<"done!"; getch();
return 0;
}
=====================
9 1 8
2 0
3 9 0
5 7 8 0
5 7 0
6 8 0
7 0
9 0
9 0
code for BFS
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
#define MAX 100
#define FINPUT "BFS2.INP"
#define FOUTPUT "BFS2.OUT"
typedef struct {
int front, rear;
int nodes[MAX];
} queue;
void init(queue *Q) {
Q->front = -1;
Q->rear = -1;
}
int empty(queue *Q) {
return (Q->front==Q->rear);
}
int full(queue *Q){
return (Q->rear+1 == Q->front);
}
void push(queue *Q, int x) {
if (full(Q)) {
cout<<"\n stack full";
return;
}
Q->rear++;
Q->nodes[Q->rear] = x;
}
int pop(queue *Q){
int x;
if(empty(Q)){
cout<< "\n Stack rong";
return NULL;
}
Q->front++;
x = Q->nodes[Q->front];
return (x);
}
queue *Q;
int n,u0,v0;
int a[MAX][MAX];
void nhapdulieu(){
int i,j,x;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=0;
i=1;
ifstream fin(FINPUT);
fin>>n>>u0>>v0;
while (!fin.eof()){
fin>>j;
if (j==0) i++;
else a[i][j]=1;
}
fin.close();
cout<<n<<" "<<u0<<" "<<v0<<endl;
for(i=1;i<=n;i++) {
cout<<i<<": ";
for(j=1;j<=n;j++)
if(a[i][j]>0) cout<<j<<",";
cout<<endl;
}
}
int pred[MAX];
int found;
void BFS(int u0,int v0){
int u,v;
for(u=1;u<=n;u++) pred[u]=0;
pred[u0]=-1;
found=0;
push(Q,u0);
while (!empty(Q) && !found){
/*step 1*/ u=pop(Q);
/*step 2*/ if(u==v0) found=1;
/*step 3*/ else
for(v=1;v<=n;v++)
if(a[u][v]==1 && pred[v]==0){
/* 3.1 */ pred[v]=u;
/* 3.2 */ push(Q,v);
}
} //while
}
void xuatketqua(){
int v,m;
int path[MAX];
ofstream fo(FOUTPUT);
if(!found) fo<<"No Solution";
else{ v=v0; m=0;
do {
path[++m]=v;
v=pred[v];
}while(v!=-1);
fo<<"Length of shorted path = "<<m<<endl;
cout<<"Length of shorted path = "<<m<<endl;
for(v=m;v>0;v--){
fo<<path[v]<<"->";
cout<<path[v]<<"->";
}
}
fo.close();
}
int main(){
clrscr();
nhapdulieu();
BFS(u0,v0);
xuatketqua();
cout<<"done!"; getch();
return 0;
}
======================
6 1 6
2 3 0
3 5 0
5 0
5 0
6 0
4 0
#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
#define MAX 100
#define FINPUT "BFS2.INP"
#define FOUTPUT "BFS2.OUT"
typedef struct {
int front, rear;
int nodes[MAX];
} queue;
void init(queue *Q) {
Q->front = -1;
Q->rear = -1;
}
int empty(queue *Q) {
return (Q->front==Q->rear);
}
int full(queue *Q){
return (Q->rear+1 == Q->front);
}
void push(queue *Q, int x) {
if (full(Q)) {
cout<<"\n stack full";
return;
}
Q->rear++;
Q->nodes[Q->rear] = x;
}
int pop(queue *Q){
int x;
if(empty(Q)){
cout<< "\n Stack rong";
return NULL;
}
Q->front++;
x = Q->nodes[Q->front];
return (x);
}
queue *Q;
int n,u0,v0;
int a[MAX][MAX];
void nhapdulieu(){
int i,j,x;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=0;
i=1;
ifstream fin(FINPUT);
fin>>n>>u0>>v0;
while (!fin.eof()){
fin>>j;
if (j==0) i++;
else a[i][j]=1;
}
fin.close();
cout<<n<<" "<<u0<<" "<<v0<<endl;
for(i=1;i<=n;i++) {
cout<<i<<": ";
for(j=1;j<=n;j++)
if(a[i][j]>0) cout<<j<<",";
cout<<endl;
}
}
int pred[MAX];
int found;
void BFS(int u0,int v0){
int u,v;
for(u=1;u<=n;u++) pred[u]=0;
pred[u0]=-1;
found=0;
push(Q,u0);
while (!empty(Q) && !found){
/*step 1*/ u=pop(Q);
/*step 2*/ if(u==v0) found=1;
/*step 3*/ else
for(v=1;v<=n;v++)
if(a[u][v]==1 && pred[v]==0){
/* 3.1 */ pred[v]=u;
/* 3.2 */ push(Q,v);
}
} //while
}
void xuatketqua(){
int v,m;
int path[MAX];
ofstream fo(FOUTPUT);
if(!found) fo<<"No Solution";
else{ v=v0; m=0;
do {
path[++m]=v;
v=pred[v];
}while(v!=-1);
fo<<"Length of shorted path = "<<m<<endl;
cout<<"Length of shorted path = "<<m<<endl;
for(v=m;v>0;v--){
fo<<path[v]<<"->";
cout<<path[v]<<"->";
}
}
fo.close();
}
int main(){
clrscr();
nhapdulieu();
BFS(u0,v0);
xuatketqua();
cout<<"done!"; getch();
return 0;
}
======================
6 1 6
2 3 0
3 5 0
5 0
5 0
6 0
4 0
Đăng ký:
Bài đăng (Atom)