۰۪۪۫۫●۪۫۰-SolitaryWolf--IT--Let's share together-۰۪۪۫۫●۪۫۰

The place for everyone to discuss anything that you like..specially for Information Technology... Software,Hardware,Program C,C++,C# and more...

1. Giảm thời gian hiển thị của thumbnail trong Taskbar

Đôi khi việc xem trước trạng thái hiện tại của một chương trình mà không cần chuyển sang nó thật sự tiện lợi. Windows 7 cung cấp tính năng nhỏ được gọi là thumbnail, nhờ đó mỗi khi người dùng di chuyển chuột qua một tab chương trình trong taskbar, thumbnail của nó sẽ hiển thị. Tuy nhiên bạn có thể phải chờ khá lâu để thấy được thumbnail. Thủ thuật sau đây sẽ giúp bạn cải thiện tình trạng này.
Lưu ý: tạo điểm khôi phục trước khi tiến hành chỉnh sửa bất kỳ điều gì trong registry!
Trước tiên bạn kích Start và nhập vào regedit trong hộp search. Nhấn Enter.
Duyệt tới HKEY_CURRENT_USER\Control Panel\Mouse.
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết
Kích đúp chuột vào khóa MouseHoverTime. Giá trị mặc định là 400, bạn có thể thay đổi thành 150 (thời gian được tính bằng miligiây) để giảm thời gian hiển thị thumbnail. Kích OK để lưu thay đổi và thoát khỏi trình soạn thảo registry. Sau đó khởi động lại máy tính để cảm nhận sự khác biệt.
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết

2. Ngăn chặn việc ngốn và rò rỉ bộ nhớ của Windows 7

a.Windows luôn sử dụng bộ nhớ RAM để lưu trữ toàn bộ thành phần của các chương trình máy tính, dịch vụ và thư viện đang chạy. Ngoài ra, RAM còn lưu trữ mọi chương trình nào mà nó nghĩ rằng bạn có thể sử dụng. Tính năng này được biết đến với tên SuperFetch. SuperFetch hiểu những ứng dụng bạn hay sử dụng và tải trước vào trong bộ nhớ, do đó hệ thống của bạn sẽ phản ứng lại nhanh hơn. SuperFetch dùng phối hợp mức ưu tiên thông minh để hiểu những ứng dụng nào bạn hay sử dụng. Ví dụ những việc cuối tuần khác với những việc hàng ngày, do đó máy tính của bạn sẽ sẵn sàng làm với những gì mà bạn muốn. Windows 7 có thể cũng ưu tiên những ứng dụng của bạn hơn là những chương trình chạy phía sau (Background), do đó khi bạn quay trở lại, máy tính sẽ rời trạng thái nghỉ và ngay lập tức bắt đầu làm việc. Tuy nhiên nhiều người dùng đã phàn nàn về vấn đề tốn bộ nhớ của Windows 7, đối với những hệ thống có bộ nhớ RAM thấp có thể giảm thiểu tình trạng này bằng cách vô hiệu hóa Superfetch:
Kích Start > Control Panel. Ở chế độ hiển thị mặc định bạn chọn “System and Security” (trong Windows Vista là “System and Maintenance”).
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết
Kích chọn “Administrative Tools”.
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết
Tại đây bạn kích “Services” để mở cửa sổ dịch vụ Services. Duyệt đến dòng có tên Superfetch > chuột phải chọn Properties:
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết
(Hoặc bạn có thể vào trực tiếp cửa sổ Services bằng cách nhập services.msc vào hộp search của menu Start).
Trong Properties, mục Startip type mặc định là Automatic, bạn kích vào đó và đổi thành Disabled. Kích nút Stop bên dưới và chờ một chút để ứng dụng bị vô hiệu hóa. Sau đó kích OK.
Bằng cách vô hiệu hóa Superfetch máy tính của bạn sẽ “dễ thở” hơn. Có thể cần khởi động lại để có hiệu quả. Tuy nhiên, việc máy tính sử dụng nhiều bộ nhớ còn có nhiều nguyên nhân khác như virus, chạy chương trình làm rò rỉ bộ nhớ... Vì vậy bạn cần giám sát việc sử dụng tài nguyên thường xuyên bằng công cụ task manager (Ctrl+Shift+Esc).


b/Microsoft Hotfixes Windows 7 Memory Leak - KB979444 - đó là tên của bản hotfix được MS tung ra hồi tháng 2 năm nay nhằm khắc phục tình trạng rò rỉ ram sau 1 thời gian sử dụng máy, ví dụ 1 người ở diễn đàn tomshardware.com từng than thở như sau :
i am experiencing some memory leaks after long uptime (about 6-7 hours),on startup the memory seems to reach 680 max, after i am leaving it idle for 1 night (or less, about 3 hours) the memory usage is on 1.5gb , i tried to turn off Superfetch And prefetch but nothing happens, the memory consuming is still there , the major problem is that it causes my downloads to be corrupted
this thread is my last resort before moving back to XP
system info (if some of you need):
c2q q9400
2gb ram 800mhz dual channel
gigabyte ga-ep45-ud3l
cm690
500w enermax tomahawk
hd4870 vapor x
(đại khái là lúc mở máy thì khoảng 680 MB ram, sau 1 thời gian để yên máy lại tăng lên tới 1.5 gb ram)

Và 1 người đã cài bản vá xác thực :


I downloaded the Microsoft hotfix from http://support.microsoft.com/hotfi [...] num=979444 and the problem appears to be gone. I now have an up time of 5 days 8 hours and counting. The system seems solid. A multi layered problem indeed.
Như vậy bản vá này thật sự hữu hiệu.Lưu ý là bản vá này không có trong windows update mà phải request từ MS mới có, bạn nên tải và cài ngay 
32-bit : http://thehotfixshare.net/board/inde...showfile=11707

64-bit :
http://thehotfixshare.net/board/inde...showfile=11706

c.Ai xài Win 7 chắc đều cảm thấy window explorer của win 7 còn khá nhìu lỗi như : stopped working liên tục, CPU hay bị 100%... Mình cũng thường xuyên gặp tình trạng này, sau 2 tháng "ăn hành" của nó cuối cùng mình cũng tìm ra nguyên nhân : do phần load thumbnail của explorer chưa hoàn thiện cho lắm. Có nhìu cách để khắc phục những lỗi trên, cách của mình thì rất đơn giản : vào Explorer\Tools\FolderOption\View tick chọn ô đầu tiên "Always show icons, never thumbnails" , hãy thử dùng trong vài ngày các bạn sẽ thấy sự khác biệt rõ rệt.  

 d.K-lite codec part . Bạn cài bản mới nhất về hoặc xóa đi là chạy lại ngon ngay.
Nên nhớ xóa triệt để các file bị lỗi. Nếu không bạn mở thư mục ấy ra vẫn treo máy như thường.

 
Sơ lược:

- Đây không phải là Virus mà mọi người vẫn lầm tưởng. Cho dù bạn scan cả ngày cũng không ra Virus đâu.
- Tình trạng khi bạn mở file flv hoặc thư mục chứa nó sẽ dẫn đến tình trạng treo máy. Mở không được, xóa không xong. Máy tính ì ạch như thời Napoleon cởi trần.

Nguyên nhân:

- Các tệp tin bị lỗi khi tải về, hay xảy ra với các file flv. Khi kích hoạt explorer không đọc được cứ cố load dẫn đến tình trạng lỗi chiếm full CPU. Nếu mở prossess ra sẽ thấy nó chiếm 90 đến 99 CPU. Máy tính không treo hơi phí.
- Mình không biết nó có lây lan hay không nhưng cứ giết nhầm hơn là bỏ sót. Khoanh vùng những file đó lại. Dấu hiệu nhận biết nó là khi mở file hoặc thư mục đó ra là treo máy. Mở không được, xóa không xong.

Khắc phục:

- Có 3 bước:
+ Bước 1
: Khi bạn bị treo máy. Bấm tổ hợp phím Ctrl + Alt + Delete để mở Task Manager. Chọn Prossess và End Prossese xóa cái explorer.exe làm treo máy đó đi. Màn hình của bạn sẽ mất thanh Taskbar. Đừng lo, đọc bước 2.
+ Bước 2
: Bạn nhìn lên trên. Tại menu File chọn New Task, chọn đường dẫn đến Winrar.exe ( trình nén và giải nén file ) mở nó lên. Nếu không có thì chịu khó vào Google.com search với từ khóa winrar để tải về.
+ Bước
3: Bạn tìm đường dẫn từ phần mềm Winrar để tới các folder và file mà bạn nghi là chứa file bị lỗi. Chọn và xóa bằng nút Delete của Winrar.

Xong xuôi bạn tắt hết đi và bấm tổ hợp phím Ctrl + Alt + Delete và chọn log off. Giờ thì máy của bạn ngon như cũ rồi. Không tin thì kiểm tra lại và quay lại đây cảm ơn mình 1 câu nhé 
! 

3. Thêm chương trình vào Startup nhanh chóng

Với những chương trình hàng ngày bạn cần sử dụng, việc cho phép chúng tự khởi động cùng Windows mặc dù có thể gây chậm hệ thống lúc mới bắt đầu, nhưng cũng rất tiện lợi bởi người dùng không cần mở từng chương trình một. Chỉ cần khởi động Windows và chờ một chút và toàn bộ những thứ cần thiết sẽ xuất hiện và sẵn sàng để sử dụng.
Tất cả những gì bạn cần làm là thêm các shortcut vào thư mục Startup trong All Programs của menu Start 
Kích và giữ chuột tại shortcut của chương trình cần thêm vào, di chuyển vào biểu tượng menu Start:
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết
Sau đó (vẫn giữ chuột) rê chuột tới thư mục Startup vào chèn vào trong:
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết
Hoặc bạn có thể vào Start > All Programs > chuột phải vào thư mục Startup > Open. Sau đó thêm các shortcut vào cửa sổ vừa mở.

4. Ẩn tùy chọn Update không cần thiết trong Windows

Các bản cập nhật mới nhất thường chứa những bản vá bảo mật hay bổ sung tính năng mới giúp máy tính tránh các lỗ hổng và chạy ổn định hơn. Tuy nhiên không phải bản vá nào cũng cần thiết đối với mọi người dùng, chẳng hạn như các gói ngôn ngữ... Nếu không muốn cập nhật những chương trình này bạn có thể ẩn chúng đi, và chỉ để lại những phần quan trọng.
Đầu tiên mở cửa sổ Windows Update, kích vào liên kết các bản cập nhật tìm thấy:
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết
Chọn những phần muốn ẩn, kích chuột phải và chọn Hide Updates:
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết
Sau đó những phần này sẽ bị mờ đi và bạn có thể tiến hành cập nhật những bản vá quan trọng khác.
Nếu muốn khôi phục lại những bản đã bỏ qua này, vào Start >> All Programs >> Windows Update. Chọn Restore Hidden Updates từ menu bên trái:
4 kinh nghiệm trong Windows 7 có thể bạn chưa biết
Chọn các mục cần thiết và kích Restore, sau đó chúng sẽ được thêm vào danh sách bản cập nhật và bạn có thể tiến hành cài đặt như bình thường:















4 kinh nghiệm trong Windows 7 có thể bạn chưa biết

Nguồn :tổng hợp

Đây là một ghi chú nhỏ của mình khi mình học về lập trình. Bài viết này nói về các quy tắc đặt tên thường được dùng trên thế giới. Công việc đặt tên cho biến, hàm, lớp, cấu trúc, … trong lập trình là công việc thường ngày và ít được chúng ta để ý. Tuy nhiên có một vấn đề quan trọng là: “sẽ như thế nào khi ta làm việc nhóm.”.
Có bao giờ bạn lên mạng down về một source code và tham khảo chưa. Nếu đã từng thì chắc hẳn bạn sẽ biết sẽ khó như thế nào khi phải đặt mình vào cách viết code của người khác. Mỗi người có thói quen và sở thích riêng nên việc viết code dựa theo sở thích sẽ tạo nên rào cản cho việc làm nhóm.
Như vậy, hôm nay, mình viết ghi chú này, đầu tiên là để ghi lại cho bản thân, kế tiếp là giúp cho các bạn – đặc biệt là các newbie các rockie mới biết đến lập trình – biết hiểu và tập một thói quen tốt.Tất nhiên là nội dung bài viết này không dài, cũng không mấy quan trọng nếu như bạn không quan tâm. Tuy nhiên mình vẫn hi vọng đóng góp được điều gì đó khi các bạn đọc các bài viết trong blog của mình.

I. Sau đây là quy tắc đặt tên trong lập trình:

1. Pascal Case (còn được gọi là Upper Camel Case): quy tắc này yêu cầu viết hoa các chữ cái đầu tiên của mọi từ
Vd:
T
hisIsPascalCase
2. Camel Case (còn được gọi là Lower Camel Case): quy tắc này hơi đặt biệt một tí. Chữ cái đầu tiên của từ đầu tiên viết thường. Các từ còn lại viết hoa chữ cái đầu tiên.
Vd:
t
hisIsCamelCase

II. Pascal và Camel Case được sử dụng lúc nào?

* Class, Struct : Pascal Case (Upper Camel Case)
1class SinhVien
2{
3...
4};
* Function, Method : Camel Case (Lower Camel Case)
1int lamBaiTap()
2{
3...
4}
* Variable : Camel Case (Lower Camel Case)
1int hocPhi = 1400000;     //1.400.000 vnđ : khiếp quá
* Constant : viết in hoa mọi ký tự và giữa các từ dùng dấu “_” (dấu gạch chân)
1#define MY_MAX 100
2 ...
3const int MY_MIN = 10;

III. Định nghĩa Hungary (một số tài liệu gọi là định danh Hungary)

Đây là một quy tắc nữa được dùng dùng để đặt tên cho biến. Quy tắc này có thể di kèm với Camel Case (Lower Camel Case). Mục tiêu của quy tắc này giúp tăng khả năng nhận biết kiểu dữ liệu của biến bằng cách gắn vào trước mỗi biến một số ký tự mô tả kiểu dữ liệu của chúng.
Vd:
int iTuSo;     //bạn có thể thấy ký tự “i” là đại diện cho int
Sau đây là các ký tự thường gặp
c : char, WCHAR, TCHAR
by : byte
n : short interger
i : int
l : long
f: float, flag
x, y, z : các biến tọa độ trục
b : bool, boolean
w : WORD, unsigned short
dw : DWORD, unsigned long
s : string
sz : string terminated by zero
h : handle
p : pointer
Ngoài những ký tự trên thì còn những ký tự khác nữa mà bạn sẽ gặp. Tuy nhiên bấy nhiêu trên kia đã dư rồi. Ví dụ như kiểu WORD hay DWORD là những kiểu dữ liệu mà bạn sẽ chẳng bao giờ gặp nếu như bạn không bao giờ đụng đến lập trình “C for Windows” (hay còn gọi là lập trình Win32 API). Bạn nên lưu ý là nó khác với lập trình Windows nha.

IV. Những cách ngoài luồng mà mình giới thiệu không phải là chuẩn mà là một thói quen được người ta hay sử dụng. Không biết đúng không nên các bạn nào biết thì chỉ nhá.

m_ : người ta thường thêm ký tự này vào trước tên biến thành viên (thuộc tính) của lớp để phân biệt với biến thường.
1class ABC
2{
3protected:
4int m_iNumber;   //"m" là viết rút gọn của member
5float m_fNumber;
6};
fn : đây là viết tắt của function. Bạn có để ý là khi viết tên hàm theo Lower Camel Case thì trông nó có vẻ gì đó không xứng vì chữ cái đầu bị “teo” lại. Do vậy mà theo mình, người ta hay viết thêm fn vào vừa để chỉ rõ đây là hàm và vừa để tên hàm luôn được viết hoa chữ cái đầu tiên.
VD: int fnTenHam( )
Ngoài ra còn nhiều quy tắc khác nữa tạo nên điểm nhấn cho đoạn code của bạn mà không ảnh hưởng đến cấu trúc chung nên bạn cứ an tâm sáng tạo nha.
V.Còn đây là quy ước đặt tên trong visual basic của microsoft
Cung cấp cho bạn các quy ước đặt tên được sử dụng bởi Microsoft tư vấn dịch vụ (MCS).
Tài liệu này là một superset của các mã hóa công ước Visual Basic được tìm thấy trong Visual Basic "Programmer's Guide." 

Đối tượng công ước đặt tên cho các đối tượng tiêu chuẩn

Bảng dưới đây xác định các tiền tố MCS tên đối tượng tiêu chuẩn. Những tiền tố là phù hợp với những tài liệu trong Visual Basic lập trình hướng dẫn.
Prefix    Object Type                           Example
-------------------------------------------------------
ani       Animation button                      aniMailBox
bed       Pen Bedit                             bedFirstName
cbo       Combo box and drop down list box      cboEnglish
chk       Checkbox                              chkReadOnly
clp       Picture clip                          clpToolbar
cmd (3d)  Command button (3D)                   cmdOk (cmd3dOk)
com       Communications                        comFax
ctr       Control (when specific type unknown)  ctrCurrent
dat       Data control                          datBiblio
dir       Directory list box                    dirSource
dlg       Common dialog control                 dlgFileOpen
drv       Drive list box                        drvTarget
fil       File list box                         filSource
frm       Form                                  frmEntry
fra (3d)  Frame (3d)                            fraStyle (fra3dStyle)
gau       Gauge                                 gauStatus
gpb       Group push button                     gpbChannel
gra       Graph                                 graRevenue
grd       Grid                                  grdPrices
hed       Pen Hedit                             hedSignature
hsb       Horizontal scroll bar                 hsbVolume
img       Image                                 imgIcon
ink       Pen Ink                               inkMap
key       Keyboard key status                   keyCaps
lbl       Label                                 lblHelpMessage
lin       Line                                  linVertical
lst       List box                              lstPolicyCodes
mdi       MDI child form                        mdiNote
mpm       MAPI message                          mpmSentMessage
mps       MAPI session                          mpsSession
mci       MCI                                   mciVideo
mnu       Menu                                  mnuFileOpen
opt (3d)  Option Button (3d)                    optRed (opt3dRed)
ole       OLE control                           oleWorksheet
out       Outline control                       outOrgChart
pic       Picture                               picVGA
pnl3d     3d Panel                              pnl3d
rpt       Report control                        rptQtr1Earnings
shp       Shape controls                        shpCircle
spn       Spin control                          spnPages
txt       Text Box                              txtLastName
tmr       Timer                                 tmrAlarm
vsb       Vertical scroll bar                   vsbRate
    

Đối tượng quy ước đặt tên cho các đối tượng cơ sở dữ liệu

Prefix        Object Type          Example
------------------------------------------
db            ODBC Database        dbAccounts
ds            ODBC Dynaset object  dsSalesByRegion
fdc           Field collection     fdcCustomer
fd            Field object         fdAddress
ix            Index object         ixAge
ixc           Index collection     ixcNewAge
qd            QueryDef object      qdSalesByRegion
qry (suffix)  Query (see NOTE)     SalesByRegionQry
ss            Snapshot object      ssForecast
tb            Table object         tbCustomer
td            TableDef object      tdCustomers

    
Lưu Ý: Bằng cách sử dụng một hậu tố cho các truy vấn cho phép mỗi truy vấn để được sắp xếp với bảng liên kết trong hộp thoại Microsoft Access (thêm bảng, danh sách các bảng ảnh chụp).

Quy ước đặt tên đơn

Các ứng dụng thường xuyên sử dụng một sự phong phú của điều khiển menu. Kết quả là, bạn cần một bộ khác nhau của công ước đặt tên cho các điều khiển. Tiền tố đơn kiểm soát nên được mở rộng vượt ra ngoài nhãn hiệu đầu tiên mnu bằng cách thêm một tiền tố bổ sung cho mỗi cấp độ làm tổ, với các chú thích cuối cùng trình đơn ở phần cuối của chuỗi tên. Ví dụ:
Menu Caption Sequence   Menu Handler Name
Help.Contents           mnuHelpContents
File.Open               mnuFileOpen
Format.Character        mnuFormatCharacter
File.Send.Fax           mnuFileSendFax
File.Send.Email         mnuFileSendEmail
    
Khi công ước này được sử dụng, tất cả thành viên của một nhóm cụ thể đơn được liệt kê bên cạnh mỗi khác trong đối tượng danh sách thả xuống hộp (trong mã cửa sổ và cửa sổ bất động sản). Ngoài ra, tên điều khiển menu rõ ràng tài liệu các mục trình đơn mà họ được kết nối vào.

Quy ước đặt tên cho các điều khiển khác

Cho mới điều khiển không được liệt kê ở trên, hãy thử để đi lên với một tiền tố ba nhân vật duy nhất. Tuy nhiên, nó là quan trọng để rõ ràng hơn để dính vào ba ký tự.
Đối với điều khiển bắt nguồn từ, chẳng hạn như một hộp danh sách nâng cao, mở rộng các tiền tố bên trên vì vậy mà có là không có sự nhầm lẫn hơn kiểm soát mà thực sự được sử dụng. Một tên viết tắt thấp hơn trường hợp cho các nhà sản xuất cũng thường sẽ được thêm vào tiền tố. Ví dụ, một ví dụ kiểm soát tạo ra từ các chuyên Visual Basic 3D khung có thể sử dụng một tiền tố của fra3d để tránh nhầm lẫn mà điều khiển đang thực sự được sử dụng. Một nút lệnh từ MicroHelp có thể sử dụng cmdm để phân biệt nó từ nút chuẩn lệnh (cmd).

Điều khiển bên thứ ba

Mỗi điều khiển bên thứ ba được sử dụng trong một ứng dụng nên được liệt kê trong các ứng dụng tổng quan phần bình luận, cung cấp tiền tố được dùng cho việc kiểm soát, tên đầy đủ của các điều khiển, và tên của các nhà cung cấp phần mềm:
Prefix    Control Type        Vendor
cmdm      Command Button      MicroHelp
    

Thay đổi và thói quen đặt tên

Tên biến và chức năng có cấu trúc sau: <prefix> <body> <qualifier> <suffix>
Part          Description                                  Example
--------------------------------------------------------------------------
<prefix>      Describes the use and scope of the variable. iGetRecordNext
<body>        Describes the variable.                      iGetNameFirst
<qualifier>   Denotes a derivative of the variable.        iGetNameLast
<suffix>      The optional Visual Basic type character.    iGetRecordNext%
    
Tiền tố:
Bảng dưới đây xác định biến và chức năng tên tố dựa trên ký hiệu Hungary C cho Windows. Tiền tố này nên được sử dụng với tất cả các biến và hàm tên. Sử dụng các hậu tố cơ bản cũ (chẳng hạn như %, &, #, vv) không được khuyến khích.
Thay đổi và chức năng tên tiền tố:
Prefix    Converged    Variable Use         Data Type  Suffix
--------------------------------------------------------------------------
b         bln          Boolean              Integer    %
c         cur          Currency - 64 bits   Currency   @
d         dbl          Double - 64 bit      Double     #
                       signed quantity
dt        dat          Date and Time        Variant
e         err          Error
f         sng          Float/Single - 32    Single     !
                       bit signed
                       floating point
h                      Handle               Integer    %
i                      Index                Integer    %
l         lng          Long - 32 bit        Long       &
                       signed quantity
n         int          Number/Counter       Integer    %
s         str          String               String     $
u                      Unsigned - 16 bit    Long       &
                       unsigned quantity
          udt          User-defined type
vnt       vnt          Variant              Variant
a                      Array
    
Lưu Ý: các giá trị trong cột Converged đại diện cho những nỗ lực để kéo nhau tiêu chuẩn đặt tên cho Visual Basic, Visual Basic cho các ứng dụng, và truy cập cơ bản. Nó có khả năng rằng các tiền tố sẽ trở thành tiêu chuẩn của Microsoft tại một số điểm trong tương lai gần.
Phạm vi và sử dụng tiền tố:
Prefix         Description
g              Global
m              Local to module or form
st             Static variable
(no prefix)    Non-static variable, prefix local to procedure
v              Variable passed by value (local to a routine)
r              Variable passed by reference (local to a routine)
    
Ký hiệu Hungary là như có giá trị trong Visual Basic là trong C. Mặc dù hậu tố loại Visual Basic chỉ ra một biến loại dữ liệu, họ không giải thích những gì một biến hoặc chức năng được sử dụng cho, hoặc làm thế nào nó có thể được truy cập. Dưới đây là một số ví dụ:
iSend - đại diện cho một số của số lượng thư được gửi
bSend - A Boolean cờ xác định sự thành công của chiến dịch gửi qua
hSend - A xử lý giao diện Comm
Mỗi người trong số các tên biến cho biết một lập trình viên một cái gì đó rất khác nhau. Thông tin này sẽ bị mất khi tên biến giảm đến gửi %. Tiền tố phạm vi như g và m cũng giúp làm giảm vấn đề ganh đua tên đặc biệt là trong các dự án multi-developer.
Ký hiệu Hungary cũng được sử dụng bởi Windows C lập trình viên và không ngừng tham khảo tài liệu sản phẩm Microsoft và trong ngành công nghiệp lập trình sách. Ngoài ra, liên kết giữa lập trình c và lập trình viên sử dụng Visual Basic sẽ trở nên mạnh hơn nhiều như Visual C ++ phát triển hệ thống tăng động lượng. Chuyển đổi này sẽ gây ra nhiều Visual Basic lập trình di chuyển đến c cho lần đầu tiên và nhiều lập trình di chuyển thường xuyên trở lại và ra từ cả hai môi trường.

Cơ thể của biến và thói quen tên

Cơ thể của một biến hoặc thói quen tên nên sử dụng hỗn hợp trường hợp và cần miễn là cần thiết để mô tả mục đích của nó. Ngoài ra, chức năng tên nên bắt đầu với một động từ, ví dụ như InitNameArray hoặc CloseDialog.
Đối với các thuật ngữ thường được sử dụng hay dài, chuẩn chữ viết tắt được khuyến khích để giữ cho độ dài tên hợp lý. Nói chung, tên biến lớn hơn 32 ký tự có thể được khó khăn để đọc trên màn hình VGA.
Khi sử dụng chữ viết tắt, hãy chắc chắn rằng họ là nhất quán trong suốt toàn bộ ứng dụng. Ngẫu nhiên chuyển đổi giữa Cnt và số trong một dự án sẽ dẫn đến sự nhầm lẫn không cần thiết.

Vòng loại biến và thói quen tên

Các biến có liên quan và thói quen thường được sử dụng để quản lý và thao tác một đối tượng phổ biến. Trong những trường hợp này, sử dụng tiêu chuẩn vòng loại nhãn bắt nguồn từ biến và thói quen. Mặc dù đặt trong vòng loại sau khi cơ quan tên có vẻ một chút khó khăn (như trong sGetNameFirst, sGetNameLast thay vì sGetFirstName, sGetLastName), thực hành này sẽ giúp để danh sách các tên với nhau trong những biên tập viên Visual Basic thói quen, làm cho logic và cấu trúc của các ứng dụng dễ dàng hơn để hiểu. Bảng sau đây xác định vòng loại phổ biến và ý nghĩa tiêu chuẩn của họ:
Qualifier  Description (follows Body)
--------------------------------------------------------------------------
First      First element of a set.
Last       Last element of a set.
Next       Next element in a set.
Prev       Previous element in a set.
Cur        Current element in a set.
Min        Minimum value in a set.
Max        Maximum value in a set.
Save       Used to preserve another variable that must be reset later.
Tmp        A "scratch" variable whose scope is highly localized within the
           code. The value of a Tmp variable is usually only valid across
           a set of contiguous statements within a single procedure.
Src        Source. Frequently used in comparison and transfer routines.
Dst        Destination. Often used in conjunction with Source.
    

Người dùng xác định loại

Tuyên bố loại người dùng định nghĩa trong tất cả các mũ với _TYPE nối thêm vào cuối tên biểu tượng. Ví dụ:
Type CUSTOMER_TYPE
      sName As String
      sState As String * 2
      lID as Long
   End Type
    
Khi khai báo một biến thể hiện của một người dùng xác định loại, thêm một tiền tố cho tên biến để tham khảo các loại. Ví dụ:
   Dim custNew as CUSTOMER_TYPE
    

Đặt tên hằng

Cơ thể không đổi tên nên UPPER_CASE với underscores (_) giữa các từ. Mặc dù hằng số Visual Basic tiêu chuẩn bao gồm thông tin Hungary, tiền tố như tôi, s, g, và m có thể rất hữu ích trong sự hiểu biết giá trị và phạm vi của một hằng số. Tên liên tục, thực hiện theo các quy tắc tương tự như các biến. Ví dụ:
<mnUSER_LIST_MAX   ' Max entry limit for User list (integer value,
                     ' local to module)
   gsNEW_LINE        ' New Line character string (global to entire
                     ' application)
    

Biến thể loại dữ liệu

Có nếu bạn biết rằng một biến sẽ luôn luôn lưu trữ dữ liệu của một loại hình cụ thể, Visual Basic thể xử lý dữ liệu đó hiệu quả hơn nếu bạn khai báo một biến loại.
Tuy nhiên, kiểu biến thể dữ liệu có thể cực kỳ hữu ích khi làm việc với cơ sở dữ liệu, tin nhắn, DDE hoặc OLE. Nhiều cơ sở dữ liệu cho phép NULL như một giá trị hợp lệ cho một lĩnh vực. Mã của bạn cần phải phân biệt giữa NULL, 0 (zero), và "" (chuỗi rỗng). Nhiều lần, các loại hoạt động kinh doanh có thể sử dụng một thói quen chung loại dịch vụ mà không cần phải biết loại dữ liệu nhận được để xử lý hoặc đậu trên dữ liệu. Ví dụ:
   Sub ConvertNulls(rvntOrg As Variant, rvntSub As Variant)
      ' If rvntOrg = Null, replace the Null with rvntSub
      If IsNull(rvntOrg) Then rvntOrg = rvntSub
   End Sub
    
Là có một số nhược điểm, tuy nhiên, để sử dụng các biến thể. Báo cáo mã sử dụng phiên bản đôi khi có thể mơ hồ để các lập trình viên. Ví dụ:
   vnt1 = "10.01" : vnt2 = 11 : vnt3 = "11" : vnt4 = "x4"
   vntResult = vnt1 + vnt2  ' Does vntResult = 21.01 or 10.0111?
   vntResult = vnt2 + vnt1  ' Does vntResult = 21.01 or 1110.01?
   vntResult = vnt1 + vnt3  ' Does vntResult = 21.01 or 10.0111?
   vntResult = vnt3 + vnt1  ' Does vntResult = 21.01 or 1110.01?
   vntResult = vnt2 + vnt4  ' Does vntResult = 11x4 or ERROR?
   vntResult = vnt3 + vnt4  ' Does vntResult = 11x4 or ERROR?
    
Các ví dụ ở trên sẽ ít hơn nhiều mơ hồ và dễ dàng hơn để đọc, gỡ lỗi, và duy trì nếu thói quen chuyển đổi loại Visual Basic đã được sử dụng để thay thế. Ví dụ:
   iVar1 = 5 + val(sVar2)   ' use this (explicit conversion)
   vntVar1 = 5 + vntVar2    ' not this (implicit conversion)
    

Cho ý kiến của bạn mã

Tất cả các thủ tục và chức năng nên bắt đầu với một thảo luận ngắn gọn mô tả các đặc tính chức năng của những thói quen (những gì nó làm). Mô tả này nên không mô tả chi tiết thực hiện (làm thế nào nó để nó) bởi vì thường những xuyên thay đổi theo thời gian, kết quả công việc bảo trì bình luận không cần thiết, hoặc tệ hơn chưa, sai ý kiến. Mã chính nó và bất kỳ ý kiến cần thiết trong đường dây hoặc địa phương sẽ mô tả việc thực hiện.
Tham số truyền cho một thói quen nên được mô tả khi chức năng của họ không phải là rõ ràng và khi những thói quen dự kiến các tham số để trong một phạm vi cụ thể. Chức năng trả về giá trị và biến toàn cầu được thay đổi bởi những thói quen (đặc biệt là thông qua các tham số tham khảo) cũng phải được mô tả ở đầu của mỗi thói quen.
Bình luận tiêu đề thường lệ khối nên trông như thế này (xem phần tiếp theo "Định dạng của bạn mã" ví dụ):
Section    Comment Description
--------------------------------------------------------------------------
Purpose    What the routine does (not how).
Inputs     Each non-obvious parameter on a separate line with
           in-line comments
Assumes    List of each non-obvious external variable, control, open file,
           and so on.
Returns    Explanation of value returned for functions.
Effects    List of each effected external variable, control, file, and
           so on and the affect it has (only if this is not obvious)
    
Mỗi khai báo biến không nhỏ nên bao gồm một bình luận trong dòng mô tả việc sử dụng các biến được tuyên bố.
Biến, điều khiển, và thói quen nên được đặt tên rõ ràng đủ rằng trong dòng cho ý kiến là chỉ cần thiết cho chi tiết phức tạp hoặc không trực quan thực hiện.
Một tổng quan về các ứng dụng, liệt kê các đối tượng dữ liệu chính, thói quen, thuật toán, hộp thoại, cơ sở dữ liệu và tập tin hệ thống phụ thuộc, và như vậy nên được bao gồm ở đầu các.BAS mô-đun có chứa các dự án Visual Basic chung liên tục khai báo.
Lưu Ý: Cửa sổ dự án vốn đã mô tả danh sách các tập tin vào một dự án, do đó phần tổng quan này chỉ cần cung cấp thông tin về các tập tin quan trọng nhất và mô-đun, hoặc các tập tin, cửa sổ dự án không danh sách, chẳng hạn như khởi tạo (.INI) hoặc cơ sở dữ liệu tập tin.

Định dạng mã của bạn

Bởi vì rất nhiều lập trình viên vẫn còn sử dụng VGA màn hình, màn hình bất động sản phải được conserved càng nhiều càng tốt, trong khi vẫn cho phép mã định dạng, để phản ánh cấu trúc logic và làm tổ.
Tiêu chuẩn, tab-based, khối làm tổ lõm nên dấu cách 2-4. Hơn bốn không gian là không cần thiết và có thể gây ra phát biểu sẽ được ẩn hoặc vô tình cắt ngắn. Ít hơn hai không gian không đủ hiện logic làm tổ. Trong Microsoft Knowledge Base, chúng tôi sử dụng một không gian ba thụt lề. Sử dụng hộp thoại tùy chọn môi trường để đặt chiều rộng tab mặc định.
Những nhận xét tổng quan chức năng của một thói quen nên thụt vào một không gian. Những điều khoản cấp cao nhất mà theo những nhận xét tổng quan nên thụt vào một tab, với mỗi lồng nhau khối thụt vào một tab bổ sung. Ví dụ:
**************************************************************************
'Purpose:   Locate first occurrence of a specified user in UserList array.
'Inputs:    rasUserList():  the list of users to be searched
'           rsTargetUser:   the name of the user to search for
'Returns:   the index of the first occurrence of the rsTargetUser
'           in the rasUserList array. If target user not found, return -1.
'**************************************************************************

'VB3Line: Enter the following lines as one line
Function iFindUser (rasUserList() As String, rsTargetUser as String) _
   As Integer
   Dim i As Integer           ' loop counter
   Dim bFound As Integer      ' target found flag
   iFindUser = -1
   i = 0
   While i <= Ubound(rasUserList) and Not bFound
      If rasUserList(i) = rsTargetUser Then
         bFound = True
         iFindUser = i
      End If
   Wend
End Function
    
Biến và hằng số phi-chung nên được nhóm lại theo chức năng chứ không phải bởi đang được tách ra thành các khu vực bị cô lập hoặc tập tin đặc biệt. Visual Basic hằng số chung chung như HOURGLASS nên được nhóm lại trong một mô-đun đơn (VB_STD.BAS) để giữ cho họ tách biệt khai báo ứng dụng cụ thể.

Các nước sử dụng

Luôn luôn sử dụng một dấu "và" (&) khi concatenating chuỗi, và sử dụng dấu cộng (+) khi làm việc với các giá trị số. Bằng cách sử dụng một dấu cộng (+) với phi-số values, có thể gây ra vấn đề khi hoạt động trên hai phiên bản. Ví dụ:
   vntVar1 = "10.01"
   vntVar2 = 11
   vntResult = vntVar1 + vntVar2         ' vntResult =  21.01
   vntResult = vntVar1 & vntVar2         ' vntResult = 10.0111
    

Phạm vi

Biến nên luôn luôn được xác định với phạm vi nhỏ nhất có thể. Biến toàn cầu có thể tạo ra rất nhiều phức tạp nhà nước máy và làm cho logic của một ứng dụng rất khó hiểu. Biến toàn cầu cũng làm cho tái sử dụng và bảo trì mã của bạn khó khăn hơn. Biến trong Visual Basic có thể có lĩnh vực sau đây:
Scope             Variable Declared In:            Visibility
--------------------------------------------------------------------------
Procedure-level   Event procedure, sub, or         Visible in the
                  function                         procedure in which
                                                   it is declared
Form-level,       Declarations section of a form   Visible in every
Module-level      or code module (.FRM, .BAS)      procedure in the
                                                   form or code
                                                   module
Global            Declarations section of a code   Always visible
                  module (.BAS, using Global
                  keyword)
    
Trong một ứng dụng Visual Basic, chỉ sử dụng các biến toàn cầu, khi không có cách nào thuận tiện khác để chia sẻ dữ liệu giữa các hình thức. Bạn có thể muốn xem xét việc lưu trữ thông tin trong một kiểm soát thẻ tài sản, có thể truy cập trên toàn cầu bằng cách sử dụng cú pháp form.object.property.
Nếu bạn phải sử dụng các biến toàn cầu, đó là thực hành tốt để tuyên bố tất cả chúng trong một mô-đun duy nhất và nhóm chúng theo chức năng. Cung cấp cho các mô-đun một tên có ý nghĩa cho biết mục đích của nó, chẳng hạn như toàn cầu.BAS.
Ngoại trừ các biến toàn cầu (mà không nên được thông qua), thủ tục và chức năng nên chỉ hoạt động trên các đối tượng được truyền cho họ. Biến toàn cầu được sử dụng trong thói quen nên được xác định trong khu vực thảo luận chung tại đầu của những thói quen. Ngoài ra, vượt qua đối số để dự bị và chức năng sử dụng ByVal, trừ khi bạn rõ ràng muốn thay đổi giá trị của các đối số thông qua.
Viết mô-đun mã bất cứ khi nào có thể. Ví dụ, nếu ứng dụng của bạn sẽ hiển thị một hộp thoại, đặt tất cả các điều khiển và mã yêu cầu để thực hiện nhiệm vụ của hộp thoại trong một hình thức duy nhất. Điều này giúp giữ cho các ứng dụng mã tổ chức thành các thành phần hữu ích và giảm thiểu chi phí thời gian chạy của nó.

Điều khiển bên thứ ba

Lưu Ý: Sản phẩm thảo luận dưới đây được sản xuất bởi nhà cung cấp độc lập của Microsoft. Microsoft đưa ra không có bảo hành, ngụ ý hay cách khác, liên quan đến các sản phẩm hiệu suất hoặc độ tin cậy.
Bảng dưới đây liệt kê tiêu chuẩn đại lý của bên thứ ba tên nhân vật tiền tố được sử dụng với kiểm soát tiền tố:
Vendor               Abbv
-------------------------

MicroHelp (VBTools)  m
Pioneer Software     p
Crescent Software    c
Sheridan Software    s
Other (Misc)         o
    
Bảng dưới đây liệt kê tiêu chuẩn cấp kiểm soát tiền tố:
Control         Control     Abbr  Vendor     Example            VBX File
Type            Name                                            Name
--------------------------------------------------------------------------
Alarm           Alarm       almm  MicroHelp  almmAlarm          MHTI200.VBX
Animate         Animate     anim  MicroHelp  animAnimate        MHTI200.VBX
Callback        Callback    calm  MicroHelp  calmCallback       MHAD200.VBX
Combo Box       DB_Combo    cbop  Pioneer    cbopComboBox       QEVBDBF.VBX
Combo Box       SSCombo     cbos  Sheridan   cbosComboBox       SS3D2.VBX
Check Box       DB_Check    chkp  Pioneer    chkpCheckBox       QEVBDBF.VBX
Chart           Chart       chtm  MicroHelp  chtmChart          MHGR200.VBX
Clock           Clock       clkm  MicroHelp  clkmClock          MHTI200.VBX
Button          Command     cmdm  MicroHelp  cmdmCommandButton  MHEN200.VBX
                Button
Button          DB_Command  cmdp  Pioneer    cmdpCommandButton  QEVBDBF.VBX
Button (Group)  Command     cmgm  MicroHelp  cmgmBtton          MHGR200.VBX
                Button
                (multiple)
Button          Command     cmim  MicroHelp  cmimCommandButton  MHEN200.VBX
                Button
                (icon)
CardDeck        CardDeck    crdm  MicroHelp  crdmCard           MHGR200.VBX
Dice            Dice        dicm  MicroHelp  dicmDice           MHGR200.VBX
List Box (Dir)  SSDir       dirs  Sheridan   dirsDirList        SS3D2.VBX
List Box (Drv)  SSDrive     drvs  Sheridan   drvsDriveList      SS3D2.VBX
List Box (File) File List   film  MicroHelp  filmFileList       MHEN200.VBX
List Box (File) SSFile      fils  Sheridan   filsFileList       SS3D2.VBX
Flip            Flip        flpm  MicroHelp  flpmButton         MHEN200.VBX
Scroll Bar      Form Scroll fsrm  MicroHelp  fsrmFormScroll     ???
Gauge           Gauge       gagm  MicroHelp  gagmGauge          MHGR200.VBX
Graph           Graph       gpho  Other      gphoGraph          XYGRAPH.VBX
Grid            Q_Grid      grdp  Pioneer    grdpGrid           QEVBDBF.VBX
Scroll Bar      Horizontal  hsbm  MicroHelp  hsbmScroll         MHEN200.VBX
                Scroll Bar
Scroll Bar      DB_HScroll  hsbp  Pioneer    hsbpScroll         QEVBDBF.VBX
Graph           Histo       hstm  MicroHelp  hstmHistograph     MHGR200.VBX
Invisible       Invisible   invm  MicroHelp  invmInvisible      MHGR200.VBX
List Box        Icon Tag    itgm  MicroHelp  itgmListBox        MHAD200.VBX
Key State       Key State   kstm  MicroHelp  kstmKeyState       MHTI200.VBX
Label           Label (3d)  lblm  MicroHelp  lblmLabel          MHEN200.VBX
Line            Line        linm  MicroHelp  linmLine           MHGR200.VBX
List Box        DB_List     lstp  Pioneer    lstpListBox        QEVBDBF.VBX
List Box        SSList      lsts  Sheridan   lstsListBox        SS3D2.VBX
MDI Child       MDI Control mdcm  MicroHelp  mdcmMDIChild       ???
Menu            SSMenu      mnus  Sheridan   mnusMenu           SS3D3.VBX
Marque          Marque      mrqm  MicroHelp  mrqmMarque         MHTI200.VB
Picture         OddPic      odpm  MicroHelp  odpmPicture        MHGR200.VBX
Picture         Picture     picm  MicroHelp  picmPicture        MHGR200.VBX
Picture         DB_Picture  picp  Pioneer    picpPicture        QEVBDBF.VBX
Property Vwr    Property    pvrm  MicroHelp  pvrmPropertyViewer MHPR200.VBX
                Viewer
Option (Group)  DB_RadioGroup radp Pioneer   radqRadioGroup     QEVBDBF.VBX
Slider          Slider      sldm  MicroHelp  sldmSlider         MHGR200.VBX
Button (Spin)   Spinner     spnm  MicroHelp  spnmSpinner        MHEN200.VBX
Spreadsheet     Spreadsheet sprm  MicroHelp  sprmSpreadsheet    MHAD200.VBX
Picture         Stretcher   strm  MicroHelp  strmStretcher      MHAD200.VBX
Screen Saver    Screen Saver svrm MicroHelp  svrmSaver          MHTI200.VBX
Switcher        Switcher    swtm  MicroHelp  swtmSwitcher       ???
List Box        Tag         tagm  MicroHelp  tagmListBox        MHEN200.VBX
Timer           Timer       tmrm  MicroHelp  tmrmTimer          MHTI200.VBX
ToolBar         ToolBar     tolm  MicroHelp  tolmToolBar        MHAD200.VBX
List Box        Tree        trem  MicroHelp  tremTree           MHEN200.VBX
Input Box       Input (Text) txtm MicroHelp  inpmText           MHEN200.VBX
Input Box       DB_Text     txtp  Pioneer    txtpText           QEVBDBF.VBX
Scroll Bar      Vertical    vsbm  MicroHelp  vsbmScroll         MHEN200.VBX
                Scroll Bar
Scroll Bar      DB_VScroll  vsbp  Pioneer    vsbpScroll         QEVBDBF.VBX
    

VI. Lời cuối

Bạn có thấy là Pascal được gọi là Upper Camel Case, còn Camel Case được gọi là Lower Camel Case. Mình nghĩ là các bạn sẽ thắc mắc. Hiện trên thế giới vẫn còn rất nhiều tranh luận về vụ này. Tuy nhiên dù cái tên được tranh luôn nhưng việc áp dụng nó thì được mọi người công nhận và không bàn cãi. Và điều quan trọng là khi làm việc ở các công ty nào thì phải tuân theo quy tắc của công ty đó. 
Nguồn :microsoft.com,kscode.wordpress.com

 Bao gồm các phần lý thuyết hay đc mình tổng hợp từ nhiều sách và do mình tự viết theo những cái mình hiểu.Được chia làm 2 phần đó là lý thuyết và bt mình tự giải(phần bonus í).Bạn nào không hiểu gì hay cần code của bài toán nào cứ post lên mình sẽ giúp (nếu có thể:D)...


Chương I. Khái niệm đệ quy
Một đối tượng là đệ quy nếu nó được định nghĩa qua chính nó hoặc qua một đối tượng khác cùng dạng với nó bằng quy nạp.
Nếu lời giải của một bài toán P thực hiện bằng lời giải của bài toán P’ có dạng giống như P thì đó là một lời giải đệ quy. Nói cách khác, đệ quy trong tin học là dạng hồi quy trong toán học.
Một thủ tục (hàm) đệ quy gồm 2 phần:
- Phần neo (điều kiện dừng): phần nay thực hiện khi công việc đơn giản, có thể giải trực tiếp được.
- Phần đệ quy (lời gọi đệ quy): trong trường hợp bài toán chưa giải được bằng phần neo, ta xác định các bài toán con và gọi lại chính thủ tục (hàm) của nó với tham số khác để giải những các bài toán con đó.
Phần đệ quy thể hiện tính hồi quy của lời giải. Trong một thủ tục (hàm) đệ quy phải có đủ hai phần trên. Nếu không có phần neo thì thủ tục (hàm) sẽ thực hiện vô hạn. Vì vậy, nó rất quan trọng trong việc xác định tính hữu hạn của lời giải. 
1. Phân loại đệ quy
a. Đệ quy tuyến tính
Đệ quy tuyến tính là loại đệ quy đơn giản và có độ phức tạp dạng đa thức.
Cú pháp:
Code:
Kiểu_dữ_liệu TênHàm(<Danh sách tham số>) {
   if (<Điều kiện dừng>) 

   {
      …
      return <Giá trị trả về>;
   } 

   else 
   {
      …
      …TênHàm(<Danh sách tham số>); /*lời gọi chính nó 1 lần*/
      …
   }
}

Ví dụ: Tính n! được định nghĩa đệ quy như sau:  
C Code :
int Factorial(int n)
{
    if(n==1)return 1;
    else return n*Factorial(n-1);
}
b. Đệ quy nhị phân
Dạng đệ quy này cũng đơn giản và có độ phức tạp dạng đa thức. Sự phân cấp biến nhớ trong quá trình xử lý phát triển theo dạng cây nhị phân.
Cú pháp:
Code:
Kiểu_dữ_liệu TênHàm(<Danh sách tham số>) {
   if (<Điều kiện dừng>) 

   {
   …
   return <Giá trị trả về>;
   } 

   else //chứa lời gọi chính nó những 2 lần
   {
      …
      …TênHàm(<Danh sách tham số>);
      …
      …TênHàm(<Danh sách tham số>);
      …
   }
}

Ví dụ:  
C Code:
int RecursionF(int n)
{
    if(n==0)return 0;
    else if(n==1||n==2)return 1;
    else return RecursionF(n-1)+RecursionF(n-2);
}
c. Đệ quy phi tuyến
Chương trình con đệ quy phi tuyến là chương trình con đệ quy trực tiếp mà lời gọi đệ quy được thực hiện bên trong vòng lặp .Dạng đệ quy này tương đối phức tạp và thường được sử dụng trong thuật toán quay lui vét cạn. Tùy theo độ khó của bài toán mà ta xác định độ phức tạp của chương trình, hầu hết dạng đệ quy này có độ phức tạp dạng hàm mũ.
Cú pháp 1:
Code:
Kiểu_dữ_liệu TênHàm(<Danh sách tham số>)
{
   for (int i=1; i<=n; i++) 

   {
      …
      if(<Điều kiện dừng>)

      {
         …
      }
      else 

      {
         …
         TênHàm(<Danh sách tham số>);
         …
      }
   }
}

Cú pháp 2:
Code:
Kiểu_dữ_liệu TênHàm(<Danh sách tham số>)
{
   if(<Điều kiện dừng>){
      …
   }else {
      for (int i=1; i<=n; i++) {
         …
         TênHàm(<Danh sách tham số>);
         …
      }
   }
}
Ví dụ:
Tìm số hạng thứ n của dãy:
x(n)=n^2*x(0)+(n-1)^2*x(0)+(n-2)^2*x(0)+ +2^2*x(n-2)+1^2*x(n-1) với x(0)=0
C Code:
 long int TinhXn  (int n) 
{
 if(n==0)return1;
  long int s=0; 
 for(int i=1; i<=n; i++)
          s+=i*i*TinhXn(n-i);
 return s; 
}
d. Đệ quy hỗ tương
Dạng đệ quy này khá thú vị, thể hiện tính tương tác đệ quy giữa các đối tuợng cùng xử lý một bài toán với những trường hợp riêng. Tùy thuộc vào dạng toán xử lý ta tính được độ phức tạp của bài toán.
Cú pháp:
Code:
Kiểu_dữ_liệu TênHàm2(<Danh sách tham số>);
Kiểu_dữ_liệu TênHàm1(<Danh sách tham số>) {
   …
   TênHàm2(<Danh sách tham số>);
   …    
}
Kiểu_dữ_liệu TênHàm2(<Danh sách tham số>) {
   …
   TênHàm1(<Danh sách tham số>);
   …    
}

Ví dụ:  


Tìm số hạng thứ n của dãy sau:

x(0)=1y(0)=0x(n)=x(n-1)+y(n-1)khi n>0

y(n)=3*x(n-1)-2*y(n-1)khi n>0

C Code:




long int TinhYn(int n);
long int TinhXn(int n)
{
     if(n==0)return 1;
     return TinhXn(n-1)+TinhYn(n-1);
}
long int TinhYn (int n)
{
     if(n==0)return 0;
     return 3*TinhXn(n-1)-2*TinhYn(n-1);
}
2.Chú ý khi viết hàm đệ quy
Hàm đệ quy phải có 2 phần:
Phần dừng hay phải có trường hợp nguyên tố. Trong ví dụ ở trên thìtrường hợp n=0 là trường hợp nguyên tố.
Phần đệ quy: là phần có gọi lại hàm đang được định nghĩa. Trong vídụ trên thì phần đệ quy là n>0 thì n! = n * (n-1)!Sử dụng hàm đệ quy trong chương trình sẽ làm chương trình dễ đọc, dễ hiểu và vấn đề được nêu bật rõ ràng hơn. Tuy nhiên trong đa số trườnghợp thì hàm đệ quy tốn bộ nhớ nhiều hơn và tốc độ thực hiện chươngtrình chậm hơn không đệ quy.Tùy từng bài có cụ thể mà người lập trình quyết định có nên dùng đệquy hay không (có những trường hợp không dùng đệ quy thì không giải quyết được bài toán).

Bonus :
 1.In ra dãy fibonacci theo 3 cách:mảng,đệ quy,biến bình thường.
C Code:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define size 100
int main()
{
    int f[size],i,n;
    f[0]=0;
    f[1]=1;
    do
    {
        printf("input the ordinal number of the element(s) in Fibonacy Series :");      //Dùng mảng
        scanf("%d",&n);
        if(n<0)printf("the ordinal number of element(s) in Fibonacci Series must be greater than or equal to 0,input again\n");
    }
    while(n<0);
    if(n==1||n==2)printf("F%d is 1\n",n);
    else if(n==0)printf("F%d is 0\n",n);
    else
    {
        for(i=2;i<=n;i++)
            f[i]=f[i-1]+f[i-2];
        i--;
        printf("F%d is %d\n",n,f[i]);
    }
    system("pause");
    return 0;
}
/*int main()
{
    int first=0,next=1,result,n;
    do
    {
        printf("input the ordinal number of the element(s) in Fibonacy Series :");      //Dùng biến bình thường
        scanf("%d",&n);
        if(n<0)printf("the ordinal number of element(s) in Fibonacci Series must be greater than or equal to 0,input again\n");
    }
    while(n<0);
    for(int i=2;i<=n;i++)
    {
        result=first+next;
        first=next;
        next=result;
    }
    if(n==0)printf("F%d is 0\n",0);
    else if(n==1||n==2)printf("F%d is 1\n",n);
    else printf("F%d is %d\n",n,result);
    system("pause");
    return 0;
}*/
/*int RecursionF(int n);
int main()
{
    int n;
    do
    {
        printf("input the ordinal number of the element(s) in Fibonacy Series :");      //Dùng đệ quy
        scanf("%d",&n);
        if(n<0)printf("the ordinal number of element(s) in Fibonacci Series must be greater than or equal to 0,input again\n");
    }
    while(n<0);
    printf("F%d is %d\n",n,RecursionF(n));
    system("pause");
    return 0;
}
int RecursionF(int n)
{
    if(n==0)return 0;
    else if(n==1||n==2)return 1;
    else return RecursionF(n-1)+RecursionF(n-2);
}*/
2.Tính tổng các ước của 1 số:
C Code:

#include "stdio.h"
#include "stdlib.h"
int main()
{
    int n,s=0;
    printf("enter a positive integer :N=");
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        if(n%i==0)s+=i;
    printf("Sum of divisors is %d\n",s);
    system("pause");
    return 0;
}

3.Đổi từ hệ 16 sang hệ 10:
C Code:
#include "stdio.h"
#include "stdlib.h"
int main()
{
    int n;
    printf("nhap vao so he 10 :");
    scanf("%d",&n);
    printf("so do sang he 16 la%x\n",n);
    systen("pause");
    return 0;
}
4.Bảng bình phương các số từ 1 đến n:
C Code:
#include "stdio.h"
#include "stdlib.h"
int main()
{
    int n,i;
    printf("nhap vao 1 so n");
    scanf("%d",&n);
    printf("bang binh phuong cac so tu 1 den n\n");
    for(i=1;i<=n;i++)
        printf("so %d binh phuong la%d\n",i,i*i);
    system("pause");
    return 0;
}
5.Chèn 1 mảng vào 1 mảng đã sắp tăng sao cho mảng đó vẫn tăng:
C Code:
#include "stdio.h"
#include "stdlib.h"
#define size 40
void input(int n,int c[],int b[],int m);
void output(int n,int c[]);
void insertdirectly(int a[],int b,int pos,int &n);
void insertbtoc(int b[],int m,int c[],int &n);
int main()
{
    int b[size],c[size],m,n;
    printf("input the number of element of array B and array C");
    scanf("%d%d",&m,&n);
    input(n,c,b,m);
    insertbtoc(b,m,c,n);
    output(n,c);
    system("pause");
    return 0;
}
void input(int n,int c[],int b[],int m)
{
    for(int i=0;i<m;i++)
    {
        printf("b[%d]",i);
        scanf("%d",&b[i]);
    }
    for(int j=0;j<n;j++)
    {
        printf("c[%d]",j);
        scanf("%d",&c[j]);
    }
}
void output(int n,int c[])
{
    for(int i=0;i<n;i++)
        printf("%d ",c[i]);
}
void insertdirectly(int c[],int x,int pos,int &n)
{
    for(int j=n;j>pos;j--)
        c[j]=c[j-1];
    c[pos]=x;
    n++;
}
void insertbtoc(int b[],int m,int c[],int &n)
{
    int j,k;
    for(int i=0;i<m;i++)   
    {
        for(k=0;k<n;k++)
            if(b[i]<c[k])     
            {
                for(j=0;b[i]>c[j];j++);
                insertdirectly(c,b[i],j,n);
                break;
            }
            if(k==n)insertdirectly(c,b[i],k,n); 
    }
}
6.Chèn 1 phần tử vào 1 mảng 1 chiều:
C Code:

#include "stdio.h"
#include "stdlib.h"
void nhap(int n,int a[]);
void chen1phantu(int a[],int x,int &n,int y);
void xuat(int n,int a[]);
int main()
{
    int a[200],n,x,y;
    do
    {
        printf("nhap so phan tu mang");
        scanf("%d",&n);
        if(n<=0)printf("nhap sai,nhap lai\n");
    }
    while(n<=0);
    nhap(n,a);
    printf("nhap vi tri can chen va so can chen");
    scanf("%d%d",&x,&y);
    chen1phantu(a,x,n,y);
    printf("mang sau khi chen la");
    xuat(n,a);
    system("pause");
    return 0;
}
void nhap(int n,int a[])
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("a[%d]",i);
        scanf("%d",&a[i]);
    }
}
/*void chen1phantu(int a[],int x,int &n,int y)
{
    int i;
    for(i=n;i>x;i--)
        a[i]=a[i-1];
    a[x]=y;
    n++;
}*/
void chen1phantu(int a[],int x,int &n,int y)
{
    int i;
    n++;
    for(i=n-1;i>x;i--)a[i]=a[i-1];
    a[x]=y;
}
void xuat(int n,int a[])
{
    int i;
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}
7.Chèn kí tự vào 1 chuỗi:
C Code:

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
void insert(char ch,char* st,int pos,int len);
int main()
{
    char *st,ch;
    int pos;
    st=new char[20];
    printf("type a random string");
    fflush(stdin);
    gets(st);
    int len=strlen(st);
    do
    {
        printf("tell me the position u want to insert character ch ");
        scanf("%d",&pos);
        if(pos<0||pos>len)printf("Have mistake during input process,please input again\n");
    }
    while(pos<0||pos>len);
    printf("tell me the character u want to insert ");
    fflush(stdin);
    ch=getchar();
    insert(ch,st,pos,len);
    printf("the string after u inserted ");
    puts(st);
    system("pause");
    return 0;
}
void insert(char ch,char* st,int pos,int len)
{
    for(int i=len+1;i>pos;i--)
        st[i]=st[i-1];
    st[pos]=ch;
}
8.Chèn số 0 trước phần tử lẻ trong mảng 1 chiều:
C Code:

#include "stdio.h"
#include "stdlib.h"
void nhap(int n,int a[]);
void chenso0vaole(int &n,int a[]);
void xuat(int n,int a[]);
int main()
{
    int a[200],n;
    do
    {
        printf("nhap so phan tu mang");
        scanf("%d",&n);
        if(n<=0)printf("nhap sai,nhap lai\n");
    }
    while(n<=0);
    nhap(n,a);
    printf("mang sau khi them 0 vao so le la");
    chenso0vaole(n,a);
    xuat(n,a);
    system("pause");
    return 0;
}
void nhap(int n,int a[])
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("a[%d]",i);
        scanf("%d",&a[i]);
    }
}
void chenso0vaole(int &n,int a[])
{
    int i,j;
    for(i=0;i<n;i++)
    {
        if(a[i]%2!=0)
        {
            for(j=n;j>i;j--)
            {
                a[j]=a[j-1];
            }
            a[i]=0;
            n++;
            i++;
        }
    }
}
void xuat(int n,int a[])
{
    int i;
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}

Followers!

About this blog

When you're sad and have sorrow just visit me...^^

Total Pageviews

Most Viewer