Mục tiêu: Con trỏ và mảng
Bài tập 1: Viết chương trình nhập vào 1 số n và tính tổng sau:
T = 1 + 2 + 3 + ... + n
Yêu cầu sử dụng hàm tính tổng sau:
Prototype: int tong (int *a, int *b): trả về tổng của 2 số mà 2 con trỏ a và b đang trỏ tới
Hướng dẫn:
B1: Khởi động Borland C 3.1 (như Assignment1)
B2: Vào menu File chọn New. Một file tên NONAME.CPP được tạo ra. Vào File chọn Save as và lưu file tên d:\bai2_1.cpp
B3: Đánh các dòng sau để khai báo thư viện cho chương trình và hàm main:
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	void main()
	{
	
	}
B4: chèn lệnh khai báo prototype dưới các lệnh khai báo thư viện và trên hàm main
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	int tong(int *a, int *b) ;	// khai bao prototype
	void  main()
	{
	
	}
B5: Thực thi hàm tong
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	int tong(int *a, int *b);	// khai bao prototype
	void  main()
	{
	
	}
	int tong(int *a, int *b)
	{
 	int s=0;			// khai bao bien tong s
	s = (*a)+(*b) ;
	return s;
	}
B6: Thực thi code cho hàm main va gọi hàm tong
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	int tong(int *a, int *b);	// khai bao prototype
	void  main()
	{
	int n=0; // khai báo và khởi động cho số n
	cout<<”Nhap gia tri so n= ”;
	cin>>n;			    // nhap gia tri so n	
	int t=0; // khai báo và khởi động cho tổng t
	for(int i=1 ; i <= n ; i++)   // cho i chay tu 1 đến n
	    {
		t+=tong(&t,&i);         
		}
   	cout<<"Tong T=1+2+3+…+n= "<< t;
   	getch();
	}
	int tong(int *a, int *b)
	{
 	int s=0;			// khai bao bien tong s
	s = (*a)+(*b) ;
	return s;
	}
B7: Nhấn F2 để lưu lại chương trình đã đánh. Nhấn F9 để biên dịch chương trình xem có lỗi hay không, nếu có thì cần phải sửa tất cả.
B8: Nhấn Ctrl+F9 để chạy chương trình. Với n=10, kết quả như hình dưới

Bài tập 2: Viết chương trình nhập vào một số n. Khởi tạo và nhập một mảng n số nguyên. Sau đó sắp xếp mảng đã cho theo thứ tự giảm dần.
Yêu cầu sử dụng 2 hàm sau:
Prototype: void swap (int *a, int *b): hoán đổi 2 giá trị của 2 con trỏ a và b đang trỏ tới.
void sap_xep(int *a, int length): sắp xếp mảng do con trỏ a trỏ tới và có chiều dài là length.
Hướng dẫn:
B1: Khởi động Borland C 3.1 (như Assignment1)
B2: Vào menu File chọn New. Một file tên NONAME.CPP được tạo ra. Vào File chọn Save as và lưu file tên d:\bai2_2.cpp.
B3: Đánh các dòng sau để khai báo thư viện cho chương trình và hàm main
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	void main()
    {

    }
B4: chèn lệnh khai báo prototype dưới các lệnh khai báo thư viện và trên hàm main
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	void swap (int *a, int *b); 
	// khai bao prototype hoán đổi 2 giá trị của 2 con trỏ a và b đang trỏ tới
	void sap_xep(int *a, int length);  
	// khai báo protopye sắp xếp mảng do con trỏ a trỏ tới và có chiều dài là length
	void  main()
	{
	
	}
B5: Thực thi hàm swap
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	void swap (int *a, int *b); 
	// khai bao prototype  hoán đổi 2 giá trị của 2 con trỏ a và b đang trỏ tới.
	void sap_xep(int *a, int length);  
	// khai báo protopye sắp xếp mảng do con trỏ a trỏ tới và có chiều dài là length.
	void  main()
	{

	}	
	void swap (int *a, int *b)
	{
 	int temp=0; // khai bao bien temp
	temp=*a;
	*a=*b;
	*b=temp; // hoán đổi 2 giá trị của 2 con trỏ a và b đang trỏ tới
	}
B6: Thực thi hàm sap_xep
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	void swap (int *a, int *b); 
	// khai bao prototype  hoán đổi 2 giá trị của 2 con trỏ a và b đang trỏ tới.
	void sap_xep(int *a, int length);  
	// khai báo protopye sắp xếp mảng do con trỏ a trỏ tới và có chiều dài là length.
	void  main()
	{

	}
	void swap (int *a, int *b)
	{
 	int temp=0; // khai bao bien temp
	temp=*a;
	*a=*b;
	*b=temp; // hoán đổi 2 giá trị của 2 con trỏ a và b đang trỏ tới
	}

	void sap_xep (int *a, int length)
	{
    for(int i=0 ; i < length-1 ; i++) // cho i chạy từ đầu đến áp cuối mảng
	for (int j=i+1 ; j < length ; j++) // cho j chạy từ sau i đến cuối mảng
		{
		if (*(a+i)< *(a+j))
		swap((a+i) ,(a+j)); // hoán đổi 2 phần tử của mảng
    	}
	}
B7: Thực thi code cho hàm main va gọi hàm sap_xep
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	void swap (int *a, int *b); 
	// khai bao prototype  hoán đổi 2 giá trị của 2 con trỏ a và b đang trỏ tới.
	void sap_xep(int *a, int length);  
	// khai báo protopye sắp xếp mảng do con trỏ a trỏ tới và có chiều dài là length.
	void  main()
	{
 	int *m; // khai báo con tro mảng
	int n=0; // khai báo và khởi động cho số n
	cout<< "Nhap gia tri so n= ";
	cin>> n; // nhap gia tri so n
	m = new int[n]; // cap phat mot mang n so nguyen
	// nhap n so vao mang
   	for (int i = 0; i < n; i++) // cho i chạy từ phần tử thứ 0 đến thứ n-1
        {
        cout << "Nhap gia tri phan tu thu " << i << " = ";
	   	cin >> m[i];
        }
		cout << "Mang truoc khi sap xep:";
		for (int j = 0; j < n; j++) // cho j chạy từ phần tử thứ 0 đến thứ n-1
        {
        cout << m[j] << ",  ";
		}
		sap_xep(m, n);
		cout << "\nMang sau khi sap xep: ";
		for (int k = 0; k < n; k++)  // cho k chạy từ phần tử thứ 0 đến thứ n-1
        {
        cout << m[k] <<",  ";
		}
		getch();
		}
		
	void swap (int *a, int *b)
		{
		int temp=0; // khai bao bien temp
		temp=*a;
		*a=*b;
		*b=temp; // hoán đổi 2 giá trị của 2 con trỏ a và b đang trỏ tới
		}
		
	void sap_xep (int *a, int length)
		{
		for(int i=0 ; i < length-1 ; i++) // cho i chạy từ đầu đến áp cuối mảng
		for (int j=i+1 ; j < length ; j++) // cho j chạy từ sau i đến cuối mảng
		{
		if (*(a+i)< *(a+j))
		swap((a+i) ,(a+j)); // hoán đổi 2 phần tử của mảng
		}
		}
B8: Nhấn F2 để lưu lại chương trình đã đánh. Nhấn F9 để biên dịch chương trình xem có lỗi hay không, nếu có thì cần phải sửa tất cả.
B9: Nhấn Ctrl+F9 để chạy chương trình. Với n=10, kết quả như hình dưới

Bài tập 3: Viết chương trình nhập vào 1 số n. Khởi tạo và nhập vào một mảng 2 chiều gồm n hàng và n cột. Tính tổng tất cả các số có trên đường chéo chính.
Yêu cầu sử dụng 2 hàm sau:
Prototype: void nhap(int **a, int n)//nhập mảng 2 chiều [nxn] do con trỏ a trỏ tới
int tong_cheo (int **a, int n)// trả về tổng các phần tử trên đường chéo chính
Kết quả: