Thứ Sáu, 28 tháng 2, 2014

Code C++: Viết hàm đếm số lượng các giá trị phân biệt có trong mảng



Viết hàm đếm số lượng các giá trị phân biệt có trong mảng

int demchusokhacnhau(int a[],int n){

       int dem = 1;

       bool flag = false;

       for(int i = 0;i<n;i++){

              for( int j = i + 1;j < n ;j++){

                    flag = false;

                    if(a[i]==a[j]){

                          flag = true;

                          break;

                   }
             if(!flag && j==n-1){

                     dem ++;

             }

          }

         break;

      }

     return dem ;

}

Tag: C, C++, mảng 1 chiều, mảng một chiều, array, one dimension array

Code C++: Cho mảng một chiều các số nguyên. Viết hàm tìm số chẵn lớn nhất nhỏ hơn mọi giá trị lẻ có trong mảng.



Cho mảng một chiều các số nguyên. Viết hàm tìm số chẵn lớn nhất nhỏ hơn mọi giá trị lẻ có trong mảng.

int timsochanlonnhat(int a[],int n){

int minle = 2147483647; // số nguyên lẻ lớn nhất

int maxchan = -2147483648; // số nguyên chẵn nhỏ nhất

for(int i = 0;i < n; i++){

           if(a[i]%2==0) {

                  if(maxchan < a[i] && minle > a[i] ){

                  maxchan = a[i];

           }

}else{

          if(minle > a[i]){

          minle = a[i];

 }
}
}
return maxchan;
}

Tag: C, C++, mảng 1 chiều, mảng một chiều, array, one dimension array

Code C++: Cho mảng một chiều các số nguyên. Viết hàm tìm chữ số xuất hiện nhiều nhất trong mảng.



Cho mảng một chiều các số nguyên. Viết hàm tìm chữ số xuất hiện nhiều nhất trong mảng.
int timchuso(int a[],int n){

int temp[100];

int max = 0;

int number = a[0];

// Khởi tạo giá trị 0 cho mảng

for(int j = 0;j<100;j++){

temp[j]=0;

}

//Tìm chữ số xuất hiện

for(int i = 0 ; i < n ; i++){

temp[a[i]]=temp[a[i]] + 1;

if(max < temp[a[i]]){

max = temp[a[i]];

number = a[i];

}

}

printf("%d\n",max);

return number;

}

Tag: C, C++, mảng 1 chiều, mảng một chiều, array, one dimension array

Thứ Sáu, 21 tháng 2, 2014

PHP: Tự động tạo mật khẩu ngẫu nhiên - PHP Password Generating


Tự động tạo mật khẩu ngẫu nhiên - PHP Password Generating
PHP Code:
<?php
function genPwd($length=6) {
   $password = '';
   $possible = '23456789bcdfghjkmnpqrstvwxyz';
   $i = 0;
   while ($i < $length) {

      $password .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
      $i++;
   } 
   return $password;
}
?>
Cách sử dụng:
Cóp và dán đoạn mã trên vào trang của bạn, sau đó gọi hàm genPwd() như sau:
<?php
   $password = genPwd(8);
?>
Kết quả:
Đoạn mã trên cho phép tự động tạo mật khẩu ngẫu nhiên có độ dài bất kỳ được tổ hợp từ các ký tự xác định trước.
Mật khẩu ngẫu nhiên được sinh ra có độ dài 8 ký tự: m1ztpxw8
Chú ý:
Nếu không có độ dài ký tự trong hàm genPwd() thì mặc định sẽ chọn độ dài mật khẩu là 6. Biến $possible trong hàm genPwd() có thể được chỉnh sửa để quy định các ký tự xác định được sử dụng.

Tag: PHP, Password Generating, tự tạo mật khẩu, an toàn thông tin

PHP: Lớp kết nối MySQL với PHP bằng câu lệnh đơn giản

PHP Code:
class mysql{
var $property = array(
    'hostname'    => 'localhost',
    'database'    => '',
    'username'    => '',
    'password'    => '',
);
function mysql($info){
foreach($this->property as $k    => $v){
$this->property[$k]=$info[$k];
}
}
function connect(){
$flag = @mysql_pconnect($this->property['hostname'],$this->property['username'],$this->property['password']);
if(!$flag)    die("can not connect to server. may be server bussy");
$flag= @mysql_select_db($this->property['database'],$flag);
if(!$flag) die("can not select database now");
}
}
Lưu vào trong 1 file ví dụ “global.php”;
Để dễ dàng khi kết nối bạn viết thêm 1 file init.php file này có chứ năng tạo các thông tin cấu hình cơ bản như kết nối mysql, lấy thông tin thành viên …
ví dụ
PHP Code:
<?php
$dbinfo = array(
'hostname'    => 'localhost',
'database'    => 'databasename',
'username'    => 'root',
'password'    => 'root',
);
include("includes/global.php");
$db = new mysql($dbinfo);
$db->connect();
?>
Như vậy file nào cần kết nối database bạn chỉ cần inlclude file init.php vào là ok;
PHP Code:
include("init.php");

Tag: PHP, MySQL, Apache, Database, Connection, dbinfo

PHP: Các hàm PHP xử lý chuỗi


Các hàm PHP xử lý chuỗi

1: addcslashes :Trích dẫn chuỗi kí tự với những vạch chéo trong kiểu C
- Cấu trúc :addcslashes(string with special characters);

2: addslashes :Trích dẫn chuỗi kí tự với những vạch chéo
- Cấu trúc : addcslashes(a string with special characters);

3: bin2hex :Chuyển đổi dữ liệu dạng nhị phân sang dạng biểu diễn hệ hexa
- Cấu trúc :bin2hex(string);

4: chop :Tách bỏ nhưng khoảng trắng từ cuối một chuỗi

5: chr : Cho một kí tự đặc biệt trong bảng mã
- Cấu trúc : chr(numeric);

6: chuck split : Tách một chuỗi thành các chuỗi nhỏ hơn

7: convert cyr string :Chuyển đổi từ một kí tự kirin sang một kí tự khác

8: count_chart : Cho thông tin về các kí tự dùng trong chuỗi

9: crc32 : Tính toán sự thừa vòng đa thức của một chuỗi
Tự động tạo ra chu ki kiểm tra tổng thừa của đa thức dài 32bit trong một chuỗi

10: crypt :Một cách mã hóa một chuỗi

11: echo : In ra một hay nhiều chuỗi

12: explode :Tách một chuỗi ra bởi chuỗi kí tự

13: fprintf :Viết một định dạng chuỗi ra một dòng

14: get html translation table :Cho ra bảng dịch bằng cách sử dung các thủ tục

html entity decode :

15: hebrev :Chuyển đổi văn ban logic khó hiểu sang văn ban trưc quan

16: hebrevc :Chuyển đổi văn ban logic khó hiểu sang văn ban trưc quan với sự chuyển đổi dòng mới

17: html entity decode :Chuyển đổi tấtcả cácthực thể HTML sang những kí tự có thể dùng được của chúng

18: htmlentities :Đổi tất cả các kí tự được sử dung sang các thực thể HTML

19: htmlspecialchars :Đổi những kí tự đặc biệt sang các thực thể của HTML

20: implode :Nối các phần tử của mảng với một chuỗi

21: join :Hàm này là một bí danh của hàm implode

22: levenshtein :Tính khoảng cách giữa hai chuỗi

23: localeconv :Lấy ra thông tin quy cách số

24: lstrim-- Strip whitespace from the beginning of a string
Xoá khoảng trắng từ phần tử đầu tiên của chuỗi

25: md5_file-- Calculates the md5 hash of a given filename
Mã hoá md5 tên file

26: md5 -- Calculate the md5 hash of a string
Mã hoá md5 1 chuỗi

27: metaphone -- Calculate the metaphone key of a string
Tính siêu khoá âm thanh của 1 chuỗi

28: money_format -- Formats a number as a currency string
Định dạng 1 số như 1 chuỗi tiền tệ

29: nl_langinfo -- Query language and locale information
Ngôn ngữ truy vấn và biên tập thông tin

30: nl2br -- Inserts HTML line breaks before all newlines in a string
Chèn 1 dòng ngắt HTML trước tất cả những dòng mới trong 1 chuỗi

31: number_format -- Format a number with grouped thousands
Định dạng 1 số với hàng nghìn chữ số

32: ord -- Return ASCII value of character
Trả lại giá trị ASCII của kí tự

33: parse_str -- Parses the string into variables
Phân tách chuỗi thành các biến số

34: print -- Output a string
In ra 1 chuỗi

35: printf -- Output a formatted string
In ra 1 chuỗi được định dạng

36: quoted_printable_decode -- Convert a quoted-printable string to an 8 bit string
Chuyển 1 chuỗi có thể in trích dẫn sang 1 chuỗi 8 bit.(Giải mã)

37: quotemeta -- Quote meta characters
Trích dẫn kí tự đặc biệt

38: rtrim -- Strip whitespace from the end of a string
Xoá khoảng trắng từ phần tử cuối cùng của chuỗi

39: setlocale -- Set locale information
Thiết lập vị trí thông tin

40: sha1_file -- Calculate the sha1 hash of a file
Mã hoá sha1 1 file

41: sha1 -- Calculate the sha1 hash of a string
Mã hoá sha1 1 chuỗi

42: similar_text -- Calculate the similarity between two strings
Cho số kí tự giống nhau của 2 chuỗi

43: soundex -- Calculate the soundex key of a string
Tính khoá chỉ âm của 1 chuỗi

44: sprintf -- Return a formatted string
Trả lại 1 chuỗi được định dạng

45: sscanf -- Parses input from a string according to a format
Phân tách chuỗi theo 1 định dạng

46: str_ireplace -- Case-insensitive version of str_replace().
Tương tự str_ replace().

47: sscanf -- Parses input from a string according to a format
Phân tích từ loại nhập vao từ một chuỗi theo một định dạng

48: str_ireplace -- Case-insensitive version of str_replace().
->Thay thế ngược lại khi chuỗi đã bị thay thế bằng str_replace()

49: str_pad -- Pad a string to a certain length with another string
Co một chuỗi tới một độ dài nào đó với một chuỗi khác

50: str_repeat -- Repeat a string
Lặp lại một chuỗi

51: str_replace -- Replace all occurrences of the search string with the replacement string
Thay thế tất cả các biến cố của chuỗi tìm kiếm với một chuỗi thay thế

52: str_rot13 --Perform the rot13 transform on a string
Thực hiện mã hoá theo rot 13 trên 1 chuỗi

(Rot-13 :Trong các nhóm tin của mạng USENET, đây là một kỹ thuật mật mã hoá đơn giản, nó làm dịch từng ký tự đi 13 vị trí trong bảng chữ cái (cho nên e sẽ thành r). Mật mã rot- 13 được dùng cho mọi thông báo tin bất kỳ nào có thể làm mất sự thú vị của một người nào đó (như) cách giải cho một trò chơi chẳng hạn hoặc xúc phạm một số người đọc (như) bài thơ về tình dục chẳng hạn. Nếu người đọc cho giải mã thông báo tin này bằng cách phát ra một lệnh thích hợp, thì người đọc đó - chứ không phải tác giả của thông báo - sẽ phải chịu trách nhiệm đối với sự khó chịu do việc đọc thông báo gây ra.)

53: str_shuffle --Randomly shuffles a string
Thay đổi một chuỗi bằng cách xê dịch ngẫu nhiên

54: str_split -- Convert a string to an array
Đổi một chuỗi thành một mảng

55: str_word_count -- Return information about words used in a string
Trả lại thông tin về những từ đã sử dụng trong một chuỗi

56: strcasecmp -- Binary safe case-insensitive string comparison
So sánh chuỗi theo …case-insensitive.. nhị phân

57: strchr --Alias of strstr()
Bí danh của strstr()

58: strcmp --Binary safe string comparison
Sự so sánh chuỗi bằng cơ sở nhị phân

59: strcoll --Locale based string comparison
Nơi diễn ra sự so sánh cơ sở

60: strcspn -- Find length of initial segment not matching mask
Tìm độ dài của đoạn đầu tiên mà không tìm thấy trên bề mặt của chuỗi này đối với chuỗi kia.

61: strip_tags --Strip HTML and PHP tags from a string
Loại bỏ các thẻ HTML và PHP từ một chuỗi

62: stripcslashes -- Un-quote string quoted with addcslashes()
Loại bỏ các dấu slashe trong chuỗi do hàm addcslashes() tạo ra.

63: stripos -- Find position of first occurrence of a case-insensitive string
Tìm ra vị trí đầu tiên của chuỗi này trong chuỗi kia của trường hợp sử lý cặp chuỗi.

64: stripslashes -- Un-quote string quoted with addslashes()
Loại bỏ hàm addslashes(), hay nói cách khác, hàm này trả về giá trị ban đầu của chuỗi khi chuỗi bị hàm addslashes() chèn các dấu slashe ở các ký tự đặc biệt

65: stristr -- Case-insensitive strstr()
Loại bỏ hàm strstr() khi trong chuỗi có dấu chấm.

66: strlen --Get string length
Lấy độ dài của chuỗi

67: strnatcasecmp -- Case insensitive string comparisons using a "natural order" algorithm
So sánh chuỗi theo thứ tự abc, các ký tự được xét từ đầu đến cuối chuỗi
(VD: a2>a12>a11).

68: strnatcmp -- String comparisons using a "natural order" algorithm
So sánh chuỗi sử dụng thứ tự abc và thứ tự toán học, nhưng được tính trên toàn bộ chuỗi ( VD: a12 > a11>a2).

69: strncasecmp -- Binary safe case-insensitive string comparison of the first n characters
Là một hàm giống như strcasecmp(), khác ở chỗ hàm này có thể chỉ rõ số ký tự trong mỗi chuỗi đem so sánh.

70: strncmp: trả ra giá trị mà chuỗi1 dài hơn so với sâu hai.

71: strpos: Tìm vì trí xuất hiện đầu tiên của một chuỗi này trong chuỗi khác.

72: strrchr: Tìm kiếm vị trí xuất hiện cuối cùng của một kí tự trong chuỗi.

73: strrev: Đảo ngược một chuỗi.

74: strripos: Tìm vị trí cuối cùng của chuỗi này khiến nó khác một chuỗi cho trước.

75: strrpos: Tìm vị trí lần xuất hiện cuối cùng cùng của một kí tự trong một chuỗi.

76: strspn: Tính xem độ dài đoạn đầu của một chuỗi mà chứa toàn các kí tự thuộc chuỗi khác.

77: strstr: Lấy ra một đoạn của chuỗi từ vị trí xuất hiện kí tự cho trước.

78: strtok: chia cắt chuỗi.

79: strtolower: biến kí tự chữ hoa thành chữ thường.

80: strtoupper: biến kí tự chữ thường thành chữ hoa.

81: strtr: chuyển đổi kí tự theo một qui tắc nào đó.

82: substr_compare: không có thông tin.

83: substr_count: Tính số lần xuất hiện của một chuỗi này trong một chuỗi khác.

84: substr_replace: thay thế một đoạn văn bản trong phạm vi một đoạn của chuỗi kí tự.

85: substr: trả ra một phần của chuỗi.

86: trim: Loại bỏ kí tự thừa(whitespace)ở đầu và cuối mỗi chuỗi.

87: ucfirst: viết hoa kí tự đầu tiên của một chuỗi.

88: ucwords: viết hoa kí tự đầu tiên của mỗi từ.

89: vprints: xuất ra một chuỗi được định dạng

90: vsprint: quai lại một chuỗi định dạng.

91: wordswarp: chia chuỗi kí tự ra thành các sâu con nhờ một kí tự xác định.

Thứ Năm, 20 tháng 2, 2014

SQL Server: Câu lệnh truy vấn trong SQL Server 2005 (Select Command)


Câu lệnh truy vấn trong SQL Server 2005 (Select Command)

Các lệnh và các mệnh đề cơ bản trong SQL Server 2005
Lệnh SELECT

SELECT là một lệnh truy vấn dữ liệu cơ bản trong SQL. Có rất nhiều mệnh đề con tuỳ chọn trong câu lệnh SELECT.

Cấu trúc SELECT – FROM – WHERE
Cú pháp:
SELECT <Danh sách các cột> FROM <Danh sách bảng> WHERE <Điều kiện>;
Trong đó:
+ <Danh sách các cột>: Là danh sách các cột hoặc biểu thức của các cột được đưa vào kết quả truy vấn.
+ <Danh sách bảng>: Là danh sách các bảng mà từ đó các cột được lấy ra
+ <Điều kiện>: Là một biểu thức logic xác định các bản ghi thoả mãn điều kiện của câu lệnh.
Ví dụ 1: Hiển thị tên, tuổi của bảng sinh viên:
SELECT Ten, Tuoi 
FROM tblsinhvien;

Ví dụ 2: Hiển thị tên, học lực của những sinh viên có học lực >=7 trong bảng sinh viên:
SELECT Ten, HocLuc
FROM tblsinhvien
WHERE HocLuc>=7;

Truy vấn sử dụng các hàm MAX, MIN, AVG, SUM, COUNT

Hàm MAX
Chức năng: Cho giá trị lớn nhất trong cột
Ví dụ 3Hiển thị học lực cao nhất trong danh sách sinhvien
SELECT Max(HocLuc) AS DiemCaoNhat
FROM tblsinhvien;

Hàm MIN
Chức năng: Cho giá trị nhỏ nhất trong cột
Ví dụ 4Hiển thị học lực nhỏ nhất trong danh sách sinhvien
SELECT Min(HocLuc) AS DiemThapNhat
FROM tblsinhvien;

Hàm AVG
Chức năng: Cho giá trị tung bình cộng trong cột
Ví dụ 5: Hiển thị học lực trung bình của cột học lực trong danh sách sinhvien
SELECT AVG(HocLuc) AS DiemTB
FROM tblsinhvien;

Hàm SUM
Chức năng: Cho tổng giá trị trong cột
Ví dụ 6: Hiển thị tổng học lực của cột học lực trong danh sách sinhvien
SELECT SUM(HocLuc) TongHL
FROM tblsinhvien;

Hàm COUNT
Chức năng: Cho biết số phần tử ( hàng) trong cột
Ví dụ 7: Đếm số bản ghi (hàng) của cột học lực trong danh sách sinhvien
SELECT COUNT(HocLuc) AS SoSinhVien
FROM tblsinhvien;

Truy vấn sử dụng các phép AND, OR, IN, BETWEEN, NOT, ALL
- AND: Phép và logic
- OR: Phép hoặc logic
- IN: Là phần tử của…
- BETWEEN: Là phần tử giứa các phần tử …
- NOT: Phép phủ định
- ALL: Là tất cả những phần tử …
Ví dụ 8: Đưa ra danh sách những sinh viên có điểm >= 8.5 và có quê = “Hải Phòng”
SELECT *
FROM tblsinhvien
WHERE (diem>=8.5) AND ( que = “Hải Phòng’);
Ví dụ 9: Đưa ra danh sách những sinh viên có quê = “Nam Định” hoặc “Thanh Hóa”
SELECT *
FROM tblsinhvien
WHERE (que = “Nam Định”) OR (que = “Thanh Hóa”);
Ví dụ 10: Đưa ra danh sách những nhân viên có kết quả là 8, 9, 10
SELECT *
FROM tblDiem
WHERE KetQua IN (8, 9, 10);
Ví dụ 11: Đưa ra danh sách những sinh viên có kết quả nằm trong khoảng [5,7]
SELECT *
FROM tblDiem
WHERE KetQua BETWEEN 5 and 7;
Ví dụ 12: Đưa ra danh sách những sinh viên có quê không phải là “Hải Dương”
SELECT *
FROM tblsinhvien
WHERE que NOT(SELECT que FROM tblsinhvien
WHERE (que = ”Hải Dương”));
Ví dụ 13: Hiển thị tất cả kết quả của sinh viên
SELECT ALL KetQua
FROM tblDiem;

Truy vấn thay đổi tên cột, tên bảng và hiển thị các cột từ nhiều bảng khác nhau,

- Muốn hiển thị các cột từ nhiều bảng khác nhau thì trong câu lệnh SELECT chúng ta phải làm như sau:
SELECT < Danh sách Tên_bang.Tên_cột>
FROM <Danh sách Tên_bảng>
WHERE <Điều kiện nối bảng>;
- Có thể đặt tên các cột trong kết quả các truy vấn bằng cách đặt tên mới vào sau cột được chọn ngăn cách bởi từ khoá AS, tương tự ta có thể đặt tên mới cho các bảng
Ví dụ 14: Hiển thị danh sách sinh viên bao gồm tên, kết quả từ bảng tblsinhviên và bảng tbldiem:
SELECT tblsinhvien.Ten AS Ten, tblDiem.KetQua AS KQ
FROM tblsinhvien AS sv, tblDiem AS sd
WHERE (sv.MaSV = sd.MaSV);

Truy vấn sử dụng lượng từ DISTINCT/ ALL

* Để tránh tình trạng đưa ra các bộ (hàng/bản ghi) trùng lặp trong các kết quả truy vấn thì SQL có lượng từ DISTINCT.
Ví dụ 15: Hiển thị các mã đề tài được sinh viên đăng ký trong bảng đề tài
SELECT DISTINCT MaDT FROM tblsinhvien;

* Để hiển thị tất cả các hàng (lấy cả các hàng có giá trị trùng nhau ) ta dùng lượng từ ALL
Ví dụ 16: Hiển thị tất cả các MaDT mà bảng sv_dtai có
SELECT ALL MaDT
FROM tblDiem;

Chú ý: Ngầm định (nếu không viết Distinct/All) thì máy hiểu là All

Truy vấn sử dụng mệnh đề GROUP BY

- Để hiển thị các bản ghi theo nhóm ta dùng mệnh đề GROUP BY
Ví dụ 17: Hiển thị bảng đề tài theo nhóm mã đề tài
SELECT MaDT
FROM tbldetai
GROUP BY MaDT;

Truy vấn có sử dụng mệnh đề HAVING

- Mệnh đề HAVING thường được sử dụng cùng mệnh đề GROUP BY. Sau HAVING là biểu thức điều kiện. Biểu thức điều kiện này không tác động vào toàn bảng được chỉ ra ở mệnh đề FROM mà chỉ tác động lần lượt từng nhóm các bản ghi đã chỉ ra tại mệnh đề GROUP BY.
Ví dụ 18: Đếm xem có bao nhiêu đề tài đã được sinh viên đăng ký tham gia
SELECT MaDT
FROM tbldetai
GROUP BY MaDT
HAVING COUNT(*);

Truy vấn có sử dụng mệnh đề ORDER BY

- Mệnh đề ORDER BY được dùng để sắp xếp dữ liệu trong bảng theo chiều tăng hoặc giảm (ASC hoặc DESC) của một cột nào đó.
- Mệnh đề ORDER BY nếu đứng sau GROUP BY thì miền tác động của sắp xếp là trong từng nhóm của cột được chỉ ra trong GROUP BY.
Ví dụ 19: Sắp xếp bảng sinhvien theo chiều giảm dần của cột học lực
SELECT *
FROM tblsinhvien
ORDER BY hl DESC;

Truy vấn lồng nhau
Trong lệnh SELECT có thể được lồng nhiều mức
Ví dụ 20: Hiển thị sinh viên có học lực cao nhất
SELECT *
FROM tblsinhvien
WHERE hl = (SELECT MAX (hl) FROM tblsinhvien);

Ví dụ 21: Hiển thị hođệm, tên của những sinh viên có kết quả >= 8 và có tên đề tài là Pascal
SELECT hodem,ten
FROM tblsinhvien
WHERE MaSV IN (SELECT MaSV
FROM tblDiem
WHERE (kq >= 8) AND
( MaDT IN ( SELECT MaDT FROM tbldetai
WHERE tendt = “Pascal”)));

Tag: SQL Server, T-SQL, SQL Server 2005, Select Command, Truy vấn sql

Code C#: Mã hóa cổ điển Vigenere (Vigenere Cipher)


(VIGENERE CIPHER)
///HÀM MÃ HÓA
static void VigenereEncrypt(ref StringBuilder s, string key)
{
    for (int i = 0; i < s.Length; i++) s[i] = Char.ToUpper(s[i]);
    key = key.ToUpper();
    int j = 0;
    for (int i = 0; i < s.Length; i++)
    {
        if (Char.IsLetter(s[i]))
        {
            s[i] = (char)(s[i] + key[j] - 'A');
            if (s[i] > 'Z') s[i] = (char)(s[i] - 'Z' + 'A' - 1);
        }
        j = j + 1 == key.Length ? 0 : j + 1;
    }
}
///HÀM GIẢI MÃ
static void VigenereDecrypt(ref StringBuilder s, string key)
{
    for (int i = 0; i < s.Length; i++) s[i] = Char.ToUpper(s[i]);
    key = key.ToUpper();
    int j = 0;
    for (int i = 0; i < s.Length; i++)
    {
        if (Char.IsLetter(s[i]))
        {
            s[i] = s[i] >= key[j] ?
                      (char)(s[i] - key[j] + 'A') :
                      (char)('A' + ('Z' - key[j] + s[i] - 'A') + 1);
        }
        j = j + 1 == key.Length ? 0 : j + 1;
    }
}
///HÀM CHÍNH
public static void MainMethod()
{
    StringBuilder s = new StringBuilder("ArkPhaze");
    const string key = "KeyData";
    VigenereEncrypt(ref s, key);
    Console.WriteLine(s);
    VigenereDecrypt(ref s, key);
    Console.WriteLine(s);
}
Tag: C, C++, C#, mã hóa cổ điển, Vigenere, Vigenere Cipher, an toàn, bảo mật

Code C#: Mã hóa cổ điển Rail-Fence (Rail Fence Cipher)


(RAIL FENCE CIPHER)
///MÃ HÓA
public static string Encrypt(int rail, string plainText)
{
    List<string> railFence = new List<string>();
    for (int i = 0; i < rail; i++)
    {
        railFence.Add("");
    }

    int number = 0;
    int increment = 1;
    foreach (char c in plainText)
    {
        if (number + increment == rail)
        {
            increment = -1;
        }
        else if (number + increment == -1)
        {
            increment = 1;
        }
        railFence[number] += c;
        number += increment;
    }

    string buffer = "";
    foreach (string s in railFence)
    {
        buffer += s;
    }
    return buffer;
}
///GIẢI MÃ
public static string Decrypt(int rail, string cipherText)
{
    int cipherLength = cipherText.Length;
    List<List<int>> railFence = new List<List<int>>();
    for (int i = 0; i < rail; i++)
    {
        railFence.Add(new List<int>());
    }

    int number = 0;
    int increment = 1;
    for (int i = 0; i < cipherLength; i++)
    {
        if (number + increment == rail)
        {
            increment = -1;
        }
        else if (number + increment == -1)
        {
            increment = 1;
        }
        railFence[number].Add(i);
        number += increment;
    }

    int counter = 0;
    char[] buffer = new char[cipherLength];
    for (int i = 0; i < rail; i++)
    {
        for (int j = 0; j < railFence[i].Count; j++)
        {
            buffer[railFence[i][j]] = cipherText[counter];
            counter++;
        }
    }

    return new string(buffer);

}
///CHƯƠNG TRÌNH CHÍNH
static void Main(string[] args)
{
    int key = 4;
    string plainText = "I Made Ronaldo";

    string cipherText   = RailFence.Encrypt(key, plainText);
    string decryptText  = RailFence.Decrypt(key, cipherText);

    Console.WriteLine("Plain Text   : " + plainText);
    Console.WriteLine("Cipher Text  : " + cipherText);
    Console.WriteLine("Decrypt Text : " + decryptText);

}
Tag: C, C++, C#, mã hóa cổ điển, Rail-Fence, Rail-Fence Cipher, an toàn, bảo mật

Code C#: Mã hóa cổ điển Affine (Affine Cipher)


///Hàm mã hóa Affine (Affine Encryption)
/// e(x) = (ax + b)(mod m). Note: a & m là số nguyên tố cùng nhau.

public static string AffineEncrypt(string plainText, int a, int b){
string cipherText = "";

char[] chars = plainText.ToUpper().ToCharArray();

foreach (char c in chars){
      int x = Convert.ToInt32(c - 65);
      cipherText += Convert.ToChar((( a * x + b ) % 26) + 65);
}

return cipherText;
}

/// Hàm giải mã Affine (Affine Decryption)
/// d(x) = aInverse * (e(x) − b)(mod m).

public static string AffineDecrypt(string cipherText, int a, int b){
string plainText = "";

int aInverse = MultiplicativeInverse(a); 

char[] chars = cipherText.ToUpper().ToCharArray();

foreach (char c in chars){
    int x = Convert.ToInt32(c - 65);
    if (x - b < 0) x = Convert.ToInt32(x) + 26;
    plainText += Convert.ToChar(((aInverse * (x - b)) % 26) + 65);
} 
    return plainText;
}

public static int MultiplicativeInverse(int a){
for (int x = 1; x < 27; x++){
    if ((a * x) % 26 == 1)
    return x;
}
throw new Exception("No multiplicative inverse found!");

}

Tag: C, C++, C#, mã hóa cổ điển, Affine, Affine Cipher, an toàn, bảo mật, Security

Code C#: Mã hóa cổ điển Ceasar (Ceasar Cipher)



///Ceasar Cipher/Ceasar Encription
using System;
class Program{
static string Caesar(string value, int shift) {
char[] buffer = value.ToCharArray();
for (int i = 0; i < buffer.Length; i++){
// Letter.
char letter = buffer[i];
// Add shift to all.
letter = (char)(letter + shift);
// Subtract 26 on overflow.
// Add 26 on underflow.

if (letter > 'z') {
letter = (char)(letter - 26);
}
else if (letter < 'a') {
letter = (char)(letter + 26);
}
// Store.
buffer[i] = letter;
}
return new string(buffer);
}

static void Main()
{
string a = "test";
string b = Caesar(a, 18); // Ok
string c = Caesar(b, -18); // Ok

string d = Caesar(a, 1); // Ok
string e = Caesar(d, -1); // Ok

string f = "exxegoexsrgi";
string g = Caesar(f, -4); // Ok

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
Console.WriteLine(e);
Console.WriteLine(f);
Console.WriteLine(g);
}
}
Tag: C, C++, C#, mã hóa cổ điển, Ceasar, Ceasar Cipher, an toàn, bảo mật

Thứ Tư, 19 tháng 2, 2014

Code C-C++: Tìm ma trận chuyển vị trong C++


#include<iostream>
#include<iomanip>
using namespace std;
int M[50][50];
void NhapMaTran(int A[50][50], int n, int m){
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
cout<<"\n A["<<i<<","<<j<<"]= ";
cin>>A[i][j];
}
}
void InMaTran(int B[50][50], int n,int m){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
cout<<setw(3)<<B[i][j]; 
cout<<"\n";

}
}
void ChuyenVi(int F[50][50], int n,int m){
for(int j=0;j<m;j++){
for(int i=0;i<n;i++)
cout<<setw(3)<<F[i][j]; 
cout<<"\n";
}
}
main(){
int r,c;
cout<<"\n So dong = "; cin>>r;
cout<<"\n So cot = "; cin>>c;
NhapMaTran(M,r,c);
cout<<"\n Ma tran vua nhap: \n";
InMaTran(M,r,c);
cout<<"Ma tran chuyen vi: \n";
ChuyenVi(M,r,c);
}
Tag: C, C++, ma trận, mảng 2 chiều, mảng hai chiều, ma trận chuyển vị, array

Code C-C++: Phép toán cộng, nhân hai ma trận

#include<conio.h>
#include<iostream.h>
#define max 100
/*Nhap ma tran*/
void NhapMaTran(float A[max][max], int m, int n){
   for(int i = 0; i<m; i++)
   for(int j = 0; j<n; j++) {
      cout<<"a["<<i<<"]["<<j<<"] = ";
      cin>>A[i][j];
   }
}

/*Xuat ma tran*/
void XuatMaTran(float A[max][max], int m, int n) {
   for(int i=0 ; i<m; i++){
      cout<<endl;
      for(int j=0 ; j<n; j++)
         cout<<A[i][j]<<"\t";
   }
}
/*C = A+B*/
void CongMaTran(float A[max][max], float B[max][max], float C[max][max], int m, int n) {
   for(int i = 0; i<m; i++)
   for(int j = 0; j<n; j++)
      C[i][j] = A[i][j]+B[i][j];

}
/*A cap mxn * B cap nxp = C cap mXp*/
void NhanMaTran(float A[max][max], float B[max][max], float C[max][max], int m, int n, int p){
   for(int i = 0; i<m; i++)
      for(int k = 0; k<p; k++) {
         C[i][k]=0;
         for(int j = 0; j<n; j++)
            C[i][k] = C[i][k]+A[i][j]*B[j][k];
      }
}
/*Chuong trinh chinh*/
void main(){
   int m=3,n=2,p=3;
   float A[max][max],B[max][max],C[max][max],D[max][max];
   clrscr();
   cout<<"Nhap ma tran A cap "<<m<<"x"<<n<<endl;
   NhapMaTran(A,m,n);
   cout<<"Nhap ma tran B cap "<<m<<"x"<<n<<endl;
   NhapMaTran(B,m,n);
   cout<<"Nhap ma tran C cap "<<n<<"x"<<p<<endl;
   NhapMaTran(C,n,p);
   cout<<"Ma tran A\n";
   XuatMaTran(A,m,n);
   cout<<"\nMa tran B\n";
   XuatMaTran(B,m,n);
   cout<<"\nMa tran C\n";
   XuatMaTran(C,n,p);
   cout<<"\nMa tran D = A+B\n";
   CongMaTran(A,B,D,m,n);
   XuatMaTran(D,m,n);
   cout<<"\nMa tran D = A.C\n";
   NhanMaTran(A,C,D,m,n,p);
   XuatMaTran(D,n,p);
   getch();
}
Tag: Ma trận, mảng 2 chiều, mảng hai chiều, phép cộng, phép nhân, C, C++

Thứ Hai, 10 tháng 2, 2014

SEO nhà nghèo khoan cắt bê tông

Hôm trước mình có chia sẻ bài viết SEO – nhà nghèo vượt khó!? . Qua đó, hy vọng rằng một số bạn mới có cái nhìn đầy đủ hơn về SEO, và tiếp cận SEO đa chiều hơn. 

Mình biết, nhiều bạn sẽ nhìn vào con số (money) mà một số cho là “khủng” để kết luận rằng đó là marketing, truyền thông chứ không hẳn là SEO, rằng sức mình chưa đủ, hoặc khách hàng không có khả năng... Thực ra những điều đó không thật sự quan trọng, bởi vì cái mình muốn chia sẻ là cái nhìn đầy đủ về SEO, một kế hoạch hoàn chỉnh để thuyết phục khách hàng, biến hóa sao cho phù hợp là ở khả năng của mỗi người.

Trong bài viết hôm nay mình muốn chia sẻ với các bạn một chút về sự biến hóa đó. Chúng ta sẽ cùng thảo luận về cách nghiên cứu đối thủ, và lên kế hoạch SEO một cách “cụ thể” hơn – SEO theo cách của con nhà nghèo: hoàn toàn thủ công, không mạnh về tiền nhưng không phải ai cũng dễ dàng bắt nạt.

Khi các bạn là SEO nhà nghèo, đối thủ có tiềm lực kinh tế mạnh, vững vàng trên top, họ như khối bê tông cốt thép vững chãi vô cùng. Nhiệm vụ của SEO nhà nghèo là phải khôn khéo tìm ra điểm yếu và từng bước khoan cắt vào điểm yếu của khối bê tông để giành thắng lợi nhất định. Mình nói là thắng lợi nhất định chứ không phải là cuối cùng, vì nhiều đối thủ quá mạnh, chúng ta khôn khéo khai thác điểm chưa mạnh của họ để giành thắng lợi mảng nhất định chứ không có chuyện bạn tay không “hủy nhiệt” được đối thủ sừng sỏ đâu. Biết đâu trong mắt họ bạn thậm chí chưa được là đối thủ.

1. Ý tưởng  => Thống kê => Chọn lựa từ khóa.
Khi có hơi hướng của một dự án SEO, bạn sẽ nhận được yêu cầu cụ thể của khách hàng, hoặc phải lên một kế hoạch cụ thể trong đó có list từ khóa, ý tưởng từ khóa có thể thể đến từ nhiều nguồn khác nhau: gọi điện cho người thân, hỏi ý kiến chuyên gia, Google, hoặc từ chính bạn… Bạn có vài từ khóa chính bây giờ thì cần nhiều hơn. Trong bài viết này mình sẽ lấy ví dụ là từ khóa chữa bệnh trĩ chẳng hạn.

SEO nội dung: SEO nhà nghèo nghiên cứu đối thủ
Các bạn Vào Google Keyword Planner nhập từ khóa và nhận ý tưởng từ khóa theo nhóm, xuất ra file CSV.
Mở file vừa tải được và lọc đi các từ khóa không liên quan, với các từ khóa còn lại các bạn xếp hạng theo lượt tìm kiếm.

SEO nội dung: SEO nhà nghèo nghiên cứu đối thủ
Mình lọc lấy 200 từ trên tổng số 800 mà Google cung cấp
Theo như hình trên các bạn có thể thấy mình chia từ khóa ra làm 4 loại.
- Nhóm 1 là các từ khóa chính, sẽ làm cho trang chủ
- Nhóm 2 là các từ khóa liên quan, được làm cho catalogue
- Nhóm 3 là các từ khóa dài, dễ hơn
- Còn ở bên trái là các từ khóa được dùng để tham khảo, khoảng 200 từ được lọc ra từ 800 từ do Google gợi ý. Còn nhóm 1 + 2 + 3 được xây dựng dựa trên nhóm này. Chiến thuật của mình là đi từ dễ đến khó, nghĩa là SEO ngược từ nhóm 3, rồi tới nhóm 2, cuối cùng là nhóm 1, trong đó từ khóa chính “chữa bệnh trĩ” để sau cùng. Các từ khóa dài lên có tác dụng khích lệ tình thần SEOer, khách hàng đỡ sốt ruột và mang lại lượng traffic nhỏ nhất định. Nhiều lượng traffic nhỏ sẽ thành lớn.

Việc chọn từ khóa cũng tùy thuộc vào bản thân từ khóa, từ khóa hot chưa chắc đã đem lại traffic, từ khóa hot mà đối thủ quá mạnh thì phải tìm tới thị trường ngách ( "núp gió chờ thời" ), từ khóa dễ mà không có traffic cũng bằng không.

2. Tìm hiểu và đánh giá đối thủ
Với các từ khóa tìm được ở bước 1, các bạn check thử xem đối thủ của mình là ai. Ở đây tôi lựa được 4 đối thủ, họ có mặt ở top 10, và là web có SEO.

SEO nội dung: SEO nhà nghèo nghiên cứu đối thủ
Việc tiếp theo là check đối thủ một cách toàn diện hơn

SEO nội dung: SEO nhà nghèo nghiên cứu đối thủ
Để check offpage đối thủ mình dùng Ahref – tài khoản miễn phí. Vì không thể soi hết link của đối thủ nên các bạn có thể kêt hợp với việc sử dụng một số công cụ khác cho phép check 500  – 1000 link, thế là đủ. Mình check luôn chủ sở hữu của web là ai, link là từ đâu, ai đang SEO, có chạy adword không, mức độ sử dụng Mạng xã hội của họ…

Nhận xét chung đối với cả 4 đối thủ: đều là các phòng khám, trung tâm y tế lớn, link chủ yếu là thông qua hệ thống vệ tinh, ít sử dụng MXh và có chạy adword. Tiện thể check đối thủ, thấy họ có thuê SEO, một trong số các bạn này có tham gia Thế giới SEO, mình liền vào profile và đọc post, comment của bạn này để có cái nhìn toàn diện hơn về đối thủ của mình. Vì thế các bạn làm SEO chú ý, lên diễn đàn SEO, để link chữ kí rồi chỉ nhăm nhăm Spam chỉ khiến đối thủ "nhìn bạn bằng nửa con mắt".

3. Lên danh sách Link Building
Tất nhiên các bạn phải tận dụng nguồn link của đối thủ (không phải vệ tinh). Kết hợp với nguồn link của bản thân. Mình thường sử dụng:

- Link từ web rao vặt, nhiều bạn chê là không hiệu quả, nhưng với mình thì có. Các bài trên trang rao vặt vẫn được mình format rất kĩ, đẹp, cung cấp đầy đủ thông tin, liên hệ, việc để backlink hay không còn tùy thuộc vào chiến dịch. Thường thì có, lúc cần đẩy mạnh quảng cáo, khuyến mại thì lại theo kiểu trăm hoa đua nở, cốt để nhiều người biết, không quá quan trong việc để link.

SEO nội dung: SEO nhà nghèo nghiên cứu đối thủ
Một số diễn đàn rao vặt, thường thì mình cần khoảng 50 cho mỗi web
- Từ các diễn đàn y tế, sức khỏe

SEO nội dung: SEO nhà nghèo nghiên cứu đối thủ
Cái náy có ưu điểm là dễ kiếm link và cùng chủ đề với web
Theo như hình trên thì link của diễn đàn Y sẽ trỏ về trang chính, link trên diễn đàn Sức khỏe thì trỏ về blog vệ tinh.
* Ngoài ra:
- Forum PR cao
- Các trang submit
- Vệ tinh…
Phương châm build link của mình là: đặt ý nghĩa quảng cáo lên trước, mỗi bài viết tại diễn đàn ngoài việc link thì việc quảng bá cho doanh nghiệp, website phải được ưu tiên hàng đầu. Vì thế: nói KHÔNG với SPAM.

4. Chuẩn bị khung nội dung
Dựa trên danh sách từ khóa, và các đối thủ đã nghiên cứu các bạn lên khung nội dung cho trang web.
SEO nội dung: SEO nhà nghèo nghiên cứu đối thủ

Theo hình trên thì cột bên trái là hệ thống menu cho tin – bài, bên phải là nhóm con hoặc chức năng của nhóm (tay trái).

5. Trả lời các câu hỏi
Vì là người làm SEO theo trường phái trọng nội dung nên với bất kì website nào khi nhận SEO mình luôn đặt ra nhiệm vụ đi tìm các câu hỏi, khúc mắc của khách hàng về sản phẩm, dịch vụ mà website cung cấp và đi tìm câu trả lời.

Như ở dưới đây, sơ bộ mình đã liệt kê 18 câu hỏi mà khách hàng quan tâm liên quan tới bệnh trĩ.
SEO nội dung: SEO nhà nghèo nghiên cứu đối thủ
Các câu hỏi được in đậm là các vấn đề mà mình cảm thấy thú vị và sẽ đào sâu. Mỗi câu hỏi sẽ là một bài, và tất nhiên không chỉ dừng ở 18 câu hỏi.

6. Mạng xã hội
Tất nhiên là phải làm rồi, nhưng mảng này trình của mình còn kém cũng chỉ là lập G+, Facebook, Tweet rồi viết được bài nào thì sau khi up lên web thì share lên MXH.

7. Kết luận
Mình đã chia sẻ với các bạn cách nghiên cứu đối thủ và tìm hướng SEO cho mình. Nhà giàu tiêu tiền cũng có cái khó, nhà nghèo tìm hướng đi cũng có cái khó riêng. Điểm quan trọng là ở khả năng

Tổng hợp – Phân tích – Đánh giá – Đưa ra lựa chọn - Thay đổi cho phù hợp

của mỗi người.