Một Số Kỹ Thuật Lập Trình Căn Bản Cần Nắm Cho Sinh Viên Năm nhất

1. Kỹ thuật cắm cờ (Falg)

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");

}

 2. Kỹ thuật tạo biến đếm

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;

}

 3. Kỹ thuật tính chuổi dãy số liên tục

đượ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;

}

 4. Kỹ thuật lưu 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;

 5. Kỹ thuật lưu trữ 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 Avà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;

}

 6. Kỹ thuật 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;

}

 (TRÊN ĐÂY LÀ NHỮNG KỸ THUẬT ĐƯỢC TÔI SỬ DỤNG ĐỂ GIẢI QUYẾT MỘT SỐ VẪN ĐỀ TRONG HỌC TẬP VÀ LÀM VIỆC RẤT HIỆU QUẢ)

 

Cách xóa ghi nhớ của trình duyệt

Cookie là một dạng bản ghi được tạo ra và lưu lại trên trình duyệt khi người dùng truy cập một website. Chúng là “bạn” nhưng cũng có thể là “thù” với người lướt web.

Để máy tính chạy trình duyệt web nhanh, bạn cần phải xóa cookie định kỳ trên máy tính. Trường hợp xóa cookie cũng được dùng khi người dùng ghi nhớ mật khẩu của nhiều trang web, làm rò rỉ thông tin cá nhân của người sử dụng.

Trình duyệt hỏi lưu thông tin Username và Password:

Khi người dùng đăng nhập vào một trang web trình duyệt sẽ hiện thị khung hỏi lưu đăng nhập.

- Đối với Cốc Cốc:

Trình duyệt hỏi ghi nhớ

- Đối với Firefox:

Firefox hỏi ghi nhớ đăng nhập

Nếu người dùng vô tình Click vào lưu ghi nhớ đăng nhập, trình duyệt web sẽ lưu lại thông tin username và password lại. Mỗi khi người dùng vào trang web đã được lưu thì thông tin username và password sẽ tự điền vào khung đăng nhập.

Cách xóa cookie:

Bạn chỉ cần bấm tổ hợp các phím: Ctrl + Shift + Delete

Ctrl + Shift + Delete

Hình minh họa

Khung xóa dữ liệu cookie của trình duyệt sẽ hiển thị.

- Đối với Cốc Cốc:

Xóa cookie cốc cốc

Lưu ý: Bạn cần chọn "Mọi thứ" để xóa toàn bộ cookie đã lưu và Check vào các ô như hình ở trên.

- Đối với Firefox:

 

Xóa cookie Firefox

Lưu ý: Bạn cần chọn "Mọi thứ" để xóa toàn bộ cookie đã lưu và Check vào các ô như hình ở trên.

*Cuối cùng bạn Cilck xóa để hoàn tất việc xóa cookie.

Bằng việc xóa cookie của bạn theo định kỳ sẽ làm giảm nguy cơ của việc lạm dụng thông tin vô tình hay cố ý lưu trữ trong cookie.

Chúng tôi khuyên bạn không nên chọn lưu đăng nhập nếu máy tính bạn đang dùng không phải máy tính cá nhân của bạn.

Gợi ý code, giải thuật đọc, ghi file excel từ trang ĐKHP regis.agu.edu.vn (ĐH AN GIANG) hoặc những trang regis tương tự

1. Hướng dẫn đọc file excel regis.agu.edu.vn ==> import sqllite (Đăng kí học phần trực tuyến)

- Ý tưởng: đọc từng dòng, từng cột dựa vào thư viện poi3.jar

HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);
HSSFSheet mySheet = myWorkBook.getSheetAt(0);
Iterator rowIter = mySheet.rowIterator();
while (rowIter.hasNext()) {
 HSSFRow myRow = (HSSFRow) rowIter.next();
 if(myRow.getRowNum()>=13) {
 Iterator cellIter = myRow.cellIterator();
 while (cellIter.hasNext()) {
 HSSFCell myCell = (HSSFCell) cellIter.next();
 Log.d("NguyenNgocTan", "" + myCell.getStringCellValue().toString()+" socot:"+myCell.getColumnIndex());
 int SOCOT=myCell.getColumnIndex();
 if(SOCOT==1)
 MMH=myCell.getStringCellValue().toString();
 else if(SOCOT==6)
 TENMH=myCell.getStringCellValue();
 else if(SOCOT==34)
 PHONGHOC=myCell.getStringCellValue();
 else if(SOCOT==26)
 THU=myCell.getStringCellValue();
 else if(SOCOT==28)
 TIETBATDAU=myCell.getStringCellValue();
 else if(SOCOT==29)
 SOTIET=myCell.getStringCellValue();
 else if(SOCOT==36)
 TGHOC=myCell.getStringCellValue();
 }
}

- Giải thích:
+ myRow.getRowNum()>=13: Đọc dòng chứa nội dung mã môn học đầu tiên
+ SOCOT=GIÁ TRỊ: Do số cột trên file excel của regis quá nhiều. Có những cột null giá trị do trộn ô (merge cell). Để biết số cột và giá trị như thế nào. Chúng ta dựa vào dòng

Log.d("NguyenNgocTan", "" + myCell.getStringCellValue().toString()+" socot:"+myCell.getColumnIndex());

==> Ý nghĩa là để Log ra nội dung cột và thứ tự cột

2. Xem TKB theo tuần. 

- Hình ảnh Cột tuần trong TKB của regis.agu.edu.vn (ĐH AN GIANG)

- Ý tưởng:

B1: Đọc từng ký tự trong cột thời gian học

B2: Kiểm tra xem số tuần học

     + Nếu số tuần học >=10. Thì gán số tuần học =số tuần học % 10 (VD: 11%10=1 -> tuần thứ 11)

     + Nếu số tuần học <=10. Thì giữ nguyên số tuần được chọn.

- Code tham khảo: (Cột thời gian học) ThoiGianHoc.Substring((SoTuanHoc-1),SoTuanHoc).equals(SoTuanHoc)

3. Tính số tuần, thứ trong tuần tuần dựa vào thời gian bắt đầu nhập học và thời gian đang chọn

- Ý tưởng:

     + B1: Lấy thời gian đang chọn - thời gian bắt đầu =A thời gian

     + B2: Tính số tuần =(A thời gian / 1000*60*60*24)/7

     + B3: Tính thứ trong tuần (Lưu ý: Thứ =1 là chủ nhật):

Calendar c = Calendar.getInstance();
c.setTime(Common.Static_NGAY_THANG_NAM_SELECT);
int Thu_TrongTuan = c.get(Calendar.DAY_OF_WEEK);

 - Code tham khảo

Long TRU_THOIGIAN= (Common.Static_NGAY_THANG_NAM_SELECT.getTime()-Common.Static_NGAY_THANG_NAM_CSDL.getTime());
  int SoTuan=Integer.valueOf(String.valueOf((TRU_THOIGIAN/(1000*60*60*24))/7));
  Calendar c = Calendar.getInstance();
  c.setTime(Common.Static_NGAY_THANG_NAM_SELECT); // yourdate is a object of type Date
  int Thu_TrongTuan = c.get(Calendar.DAY_OF_WEEK);
  if(Thu_TrongTuan==1)
     txt_thu.setText("CHỦ NHẬT");
  else
     txt_thu.setText("THỨ "+(Thu_TrongTuan));

4. Tải Ứng Dụng Xem Thời Khóa Biểu ĐHAG (Regis.agu.edu.vn): Đang Cập Nhật Ứng Dụng Trong TG Sớm Nhất

Không gõ được dấu tiếng việt trên phần mềm C#,JAVA, WEB,MISA

Biểu hiện: Chúng ta gõ dấu tiếng việt được trên  Word, Excel, powerpoint … bình thường, nhưng gõ ở phần mềm C#, JAVA, MISA... không được. (Thông thường sẽ rơi vào hệ HĐH >=WIN8)
  • Nguyên nhân 1: Do chưa tắt UAC (Change User Account Control Settings)
  • Hướng giải quyết : Vào Start/ Control Panel/ UserAccount/ Change User Account Control Settings. Tiếp đó, trên thanh trượt, các bạn di chuột về Never notify, sau đó nhấn OK, chương trình hiển thị cảnh báo, tiếp tục nhấn OK sau đó thực hiện khởi động lại máy. 
  • Nguyên nhân 2: Do chưa run administrator Unikey, phần mềm
  • Hướng giải quyết : Đặt chuột phải vào biểu tượng chạy Unikey --> chọn Properties --> chọn Tab Compatibility , tích vào ô Run this program as an administrator/ nhấn Apply/ Ok. Sau đó kết thúc Unikey và mở lại. (làm tương tự đối với biểu tượng chạy phần mềm MISA ngoài màn hình)
Ngoài 2 nguyên nhân trên: Do Unikey bị thiếu quyền, hoặc bạn đang mở quá nhiều bộ gõ cùng lúc, hoặc bộ cài Unikey bạn đang sử dụng chưa phù hợp với win của bạn đang dùng.
 

Truy vấn CSDL với SQL mẫu tin > 10^10000(giả sử) và commandtimeout

- Bài toán đặt ra: Chúng ta đang sử dụng ngôn ngữ C#(Visual studio). Kết nối đến DATABSE SQL. Trên giao diện sẽ C# sẽ hiển thị DS khách hàng trong SQL( chú ý: table khách hàng có số dòng > 10^10000)
- Vấn đề xảy ra trong bài toán này.
+ Sẽ không load được dữ liệu vào form.
- Nguyên nhân:
+ Trên C#. Đối tượng lệnh sqlcommand sẽ có thời gian commandtimeout mặc định =30s.(.commandtimeout hiểu cơ bản có nghĩa là thời gian để thực thi kết quả trả về từ CSDL thông qua đối tượng lệnh sqlcommand)
+ Do CSDL với số dòng tương đối nhiều > 10^10000 ( thời gian để select câu này trong sql là > 30s)
==>Thời gian để thực hiện câu select từ sql trả về là > 30s. Nhưng thời gian đợi kết quả trả về là =30s. nên không load được dữ liệu
- Khắc phục: Thêm vào sqlcommand..commandtimeout =thời gian