Search…

Các Kỹ Thuật Lập Trình Căn Bản

19/09/20206 min read
Khi mới bắt đầu học lập trình, thường thì các bạn sẽ giải các bài tập giúp nâng cao khả năng tư duy lập trình. Trong đó, có một số bài tập khá khó mà các bạn nghĩ hoài không ra. Với cách lập trình gán, so sánh thuần túy không giúp để giải quyết các bài toán lớn hơn. Ở đây tôi xin cung cấp cho các bạn một số kỹ năng lập trình cơ bản

Đối với lập trình cơ bản

Cắm cờ (flag)

Kỹ thuật cắm cờ là kỹ thuật đơn giản nhất, nó giúp bạn kiểm soát các trường hợp quan trọng.

Bạn sẽ lưu giá trị flag luôn luôn là một con số mặc định nào đó, thường là 0. Với các trường hợp đặc biệt khác, ta lưu giá trị nó làm các con số khác nhau để tiện cho việc xử lý.

Ví dụ như ở đây, tôi muốn kiểm tra đây có phải là số nguyên tố hay không. Tôi cài đặt 1 biến flag = 0, số đang kiểm tra là số x, khi x không phải là số nguyên  tố thì flag = 1. Sau đó dựa vào biến flag mà tôi quyết định có in ra màn hình.

//cài đặt biến x lưu giá trị của một con số nào đó, ví dụ như ở đây, tôi lấy x = 13;
int x = 13;

//cài đặt biến flag với giá trị là 0
int flag = 0;

//vòng lặp này để kiểm tra x có phải là số nguyên tố không
int i = 2;
while ( i < x )
{
	if ((x % i) == 0)
	{
		//khi x chia hết cho một số bất kỳ thì x không phải là số nguyên tố
		flag = 1;
	}
	i = i + 1;
}

//dựa trên giá trị của biến flag mà ta quyết định x là số nguyên tố hay không
if (flag == 0)
{
	printf("x la so nguyen to");
}
else
{
	printf("x khong phai so nguyen to");
}

Biến đếm

Biến đếm là một trong các kỹ thuật căn bản, giúp ta kiểm soát số lượng các trường hợp quan trọng.

Ta sẽ tạo một biến đếm với giá trị ban đầu là 0. Với mỗi lần trường hợp quan trọng xuất hiện, ta sẽ tăng biến đếm lên 1. Ví dụ như ở đây, tôi muốn xét dãy số từ 0 đến 20 có bao nhiêu số nguyên tố.

//cài đặt biến counter với giá trị là 0
int counter = 0;
int flag = 0;

//vòng lặp này để duyệt chuỗi số i từ 0 -> 20
int i = 0;

int j = 0;
while ( i <= 20 )
{
    //vòng lặp này để xét xem số i có phải là số nguyên tố hay không
    j = 2;
    //trả flag về giá trị 0 trước khi thực hiện vòng lặp
    flag = 0;
    while ( j < i )
    {
        if ((i % j) == 0)
        {
            flag = 1;
        }
        j = j + 1;
    }
    if (flag == 0)
    {
        //trong trường hợp đó là một số nguyên tố thì ta tăng biến đếm lên
        counter = counter + 1;
    }
    i = i + 1;
}

Tính chuỗi, dãy số liên tục

Cách tính này được sử dụng để xử lý các trường hợp cần tính lại giá trị của chính biến đó với giá trị cũ của nó. Ví dụ với chuỗi số S = 1 + 2 + 3 + .. + n

//tạo một biến để lưu giá trị
int s = 0;

while (i <= n)
{
	s = s + i;
    i = i + 1;
}

Biến tạm

Biến tạm là một kỹ thuật đơn giản dùng để lưu một giá trị của một biến khác trước khi nó bị thay đổi hoặc dùng để tính giá trị tạm thời cần được sử dụng ngay.

Ví dụ ta có biến a = 5 và biến b = 6. Ta cần hoán đổi sao cho a = 6 và b = 5. Nhưng khi a = b thì lúc đó cả a và b đều có giá trị là 6. Ta đã mất đi số 5 nên ta cần một biến tạm để lưu giá trị của a.

int a = 5;
int b = 6;
int temp = 0;

temp = a;
a = b;
b = temp;

Đối với xử lý mảng

Lưu giữ vị trí quan trọng

Phương thức này các bạn hay nhầm lẫn với việc lưu giữ giá trị quan trọng. Ví dụ trong một mảng có 10 phần tử:

 { 5, 1, 7, 9, 31, 12, 0, 8, 4, 11 }

Giá trị lớn nhất trong mảng là 31 nhưng vị trí của giá trị lớn nhất là 4.

//Giá trị n là số lượng phần tử của mảng, ví dụ như ở mảng phía trên, n có giá trị là 10
int n = 10;

int max = 0;
int i = 1;

while (i < n)
{
	if (A[max] < A[i])
	{
		max  = i;
	}
    i = i + 1;
}

Ngoài ra, nếu có nhiều vị trí quan trọng cần lưu giữ thì bạn có thể tạo thêm một mảng nữa và lưu vị trí các giá trị đó vào mảng đó. Ví dụ như ở đây, tôi có mảng A, tôi muốn lưu vị trí các phần tử là phần tử chẵn trong mảng A vào mảng B.

int A[10];
int B[10];

int counter = 0;
int i = 0;

while (i < 10)
{
	if (A[i] % 2 == 0)
	{
		B[counter] = i;
		counter = counter + 1;
	}
	i = i + 1;
}

Sắp xếp

Phương thức sắp xếp mảng đơn giản nhất đó là sử dụng giải thuật Interchange Sort. Giải thuật sử dụng 2 vòng lặp, với mỗi vòng lặp, lấy giá trị này xét với các giá trị khác trong mảng, nếu giá trị nào nhỏ hơn thì hoán đổi giá trị đó và giá trị đang xét. Ví dụ

int A[10];
int n = 10; //số lượng phần tử của mảng A

int i = 0;
int j = 0;
int temp = 0;

while (i < n)
{
	j = i + 1;
	while (j < n)
	{
		//nếu tìm được phần tử có giá trị nhở hơn giá trị
        //đang xét thì hoàn đổi nó với giá trị đang xét
		if (A[j] < A[i])
		{
			//thực hiện thao tác hoán đổi
			temp = A[i];
			A[i] = A[j];
			A[j] = temp;
		}
        j = j + 1;
	}
    i = i + 1;
}

Phụ lục

Các bạn có thể tham khảo các bài tập lập trình cơ bản ở dưới đây.

Bài tập lập trình căn bản: https://www.bugs.vn/io/c1Tx5g1

Bài tập lập trình mảng: https://www.bugs.vn/io/c1Tx5g1

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024