Archive for the ‘Study’ Category
Một số hàm mở rộng trên C/C++
Sau đây là một số hàm mở rộng ở console của C/C++ nhưng trong Codeblock không có.
Để dùng được nó các bạn phải tự viết hàm. Các hàm này sẽ rất hữu ích khi các bạn muốn viết một game nho nhỏ trên console với Codeblock.
Trình biên dịch: Codeblock
1. Hàm xoá màn hình
Header file:
#include <stdlib.h>
| system(“CLS”); |
2. Hàm tạo số ngẫu nhiên
Header file:
#include <stdlib.h>
#include <time.h>
| srand(time(NULL)); rand()%100+1; //tạo số nguyên ngẫu nhiên từ 1-100 |
Ví dụ in ra màn hình 20 số ngẫu nhiên từ 0-90
| #include <iostream> using namespace std; main() { char i; srand(time(NULL)); for(i=0;i<20;i++) cout<<rand()%91<<” “; } |
3. Hàm chuyển con trỏ đến toạ độ x,y trên màn hình console: gotoxy(x,y)
(màn hình console khi chưa resize được chia thành 80 cột và 24 hàng)
Header file:
#include <windows.h>
| void gotoxy(int x,int y) { HANDLE hConsoleOutput; COORD Cursor_an_Pos = {x-1,y-1}; hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hConsoleOutput , Cursor_an_Pos); } |
4. Các hàm tạo màu cho text và màu background cho console
+ hàm tạo màu cho text: textcolor(WORD color)
WORD sẽ mang giá trị từ 0-15
Header file:
#include <windows.h>
| void textcolor(WORD color) { HANDLE hConsoleOutput; hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info; GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info); WORD wAttributes = screen_buffer_info.wAttributes; color &= 0×000f; wAttributes &= 0xfff0; wAttributes |= color; SetConsoleTextAttribute(hConsoleOutput, wAttributes); } |
Bảng mã màu:

+ hàm tạo màu background
Header file:
#include <stdlib.h>
| system(“Color ab”); |
Trong đó a là màu background, b là màu text (ta có thể dùng hàm này để thay đổi màu cho text nhưng tốc độ thực thi chậm hơn textcolor).
Ví dụ: nền trắng, chữ hồng
| #include <iostream> #include <stdlib.h> using namespace std; main() { system(“Color FD”); cout<<”Hello world”; } |
Bảng mã màu:

5. Hàm thay đổi kích thước Console: resizeConsole(int width, int height)
Header file:
#define _WIN32_WINNT 0×0500
#include <windows.h>
| void resizeConsole(int width, int height) { HWND console = GetConsoleWindow(); RECT r; GetWindowRect(console, &r); MoveWindow(console, r.left, r.top, width, height, TRUE); } |
6. Hàm Delay()
Trong codeblock không hỗ trợ hàm Delay() vì thế ta có hàm thay thế là Sleep(), chức năng trì hoãn chương
trình trong một khoảng thời gian
Header file:
#include <windows.h>
| Sleep(1200); //trì hoãn 1200ms = 1.2 giây |
7. Hiển thị một ký tự c tại toạ độ x, y với màu color
Request: một số hàm đã định nghĩa ở trên
| void multiPut(int x,int y,char c, int color) { gotoxy(x,y); textcolor(color); printf(“%c”,c); gotoxy(40,20); } |
8. Thay đổi tiêu đều (Caption) cho chương trình
Header file:
#include <windows.h>
| SetConsoleTitle(“My program…”); //title = “My program…” |
9. Vẽ một hình chữ nhật có toạ độ 2 đỉnh (trên, trái – dưới, phải) là (x1,y1)-(x2,y2), với màu sắc color, có tiêu đề title và màu tiêu đề là ttColor
Request: một số hàm đã định nghĩa ở trên
| class cBoard { public: int x1,y1,x2,y2,width,height; inline void drawBoard(int x1, int y1, int x2, int y2, int color=14,char *title=NULL,int ttColor=15) { int i; multiPut(x1,y1,(char)218,color); //top-left multiPut(x2,y1,(char)191,color); //top-right multiPut(x1,y2,(char)192,color); //bottom-left multiPut(x2,y2,(char)217,color); //bottom-right textcolor(color); for(i=x1;i<x2-1;i++) //top border */ multiPut(i+1,y1,(char)196,color); for(i=x1;i<x2-1;i++) //bottom border */ multiPut(i+1,y2,(char)196,color); for(i=0;i<y2-y1-1;i++) /* left border */ multiPut(x1,y1+i+1,(char)179,color); for(i=0;i<y2-y1-1;i++) /* right border */ multiPut(x2,y1+i+1,(char)179,color); if (title!=NULL&&strlen(title)<(x2-x1)) for(i=0;i<strlen(title);i++) multiPut(i+(x2+x1)/2-strlen(title)/2,y1,*(title+i),ttColor); } }board; |
Ví dụ:
| int main() { clrscr(); SetConsoleTitle(“My program…”); system(“Color 80″); gotoxy(2,2); textcolor(12); //red cout<<char(3); //heart board.drawBoard(1,1,30,20,14,” This is demo program “,15); gotoxy(2,5); textcolor(10); cout<<”What next?”; board.drawBoard(5,7,20,12,9); resizeConsole(300,350); getch(); return 0; } |
Kết quả:

Code in ra màn hình bảng mã Ascii của các ký tự.
| #include <stdio.h> #include <conio.h> main() { for(int i=0;i<255;i++) printf(“%3d:%c”,i,i); getch(); } |
10. Một số hàm khác với console
system(“help”); //các lệnh trên DOS
// các hàm trong thư viện wincon.h
Một trang web rất hữu ích về Console với C/C++ (các bạn sẽ tìm thấy hàm bắt sự kiện của chuột như ở part5).
http://www.adrianxw.dk/SoftwareSite/Consoles/Consoles1.html
Tra cứu các hàm chuẩn trong C/C++
http://virus.dtvt.org/Documents/cpp.chm
Một số code mẫu của các hàm phía trên.
&&
Source game trên Console với C++
(game shoot đã hoàn thành, game xếp hình đang dở dang)
http://www.mediafire.com/?h9a4ksqhw9v7ag4
Ngoài ra còn 1 game (thả boom) dùng đồ hoạ trên DOS nữa ở đây
http://dtvt.org/dtvt.asp?TID=5894&title=c-game-th%E1%BA%A3-bom-c%E1%BB%B1c-kh%E1%BB%A7ng-graphics-h%C4%91t
Game development ebook
http://www.box.net/shared/xp1g5t6o0s
Một số game đơn giản trên nền console: xếp hình, shoot, đua xe đơn giản, rắn săn mồi… hoặc có thể tìm hiểu thêm về OpenGL hay DirectX, trí thông minh nhân tạo… để phát triển game xài đồ hoạ trên nền win (codeblock có hỗ trợ cái này).
Hoặc ai pro hơn có thể viết cái này.

Have fun!
How To Learn English!
Bài nì siu tầm đc trên mạng, hy vọng ju’p đc cho ai đó, but not me
How To Learn English!
Here are some tips which may help you to master the English Language!
Speak without Fear
The biggest problem most people face in learning a new language is their own fear. They worry that they won’t say things correctly or that they will look stupid so they don’t talk at all. Don’t do this. The fastest way to learn anything is to do it – again and again until you get it right. Like anything, learning English requires practice. Don’t let a little fear stop you from getting what you want.
Use all of your Resources
Even if you study English at a language school it doesn’t mean you can’t learn outside of class. Using as many different sources, methods and tools as possible, will allow you to learn faster. There are many different ways you can improve your English, so don’t limit yourself to only one or two. The internet is a fantastic resource for virtually anything, but for the language learner it’s perfect.
Surround Yourself with English
The absolute best way to learn English is to surround yourself with it. Take notes in English, put English books around your room, listen to English language radio broadcasts, watch English news, movies and television. Speak English with your friends whenever you can. The more English material that you have around you, the faster you will learn and the more likely it is that you will begin “thinking in English.” .
Listen to Native Speakers as Much as Possible
There are some good English teachers that have had to learn English as a second language before they could teach it. However, there are several reasons why many of the best schools prefer to hire native English speakers. One of the reasons is that native speakers have a natural flow to their speech that students of English should try to imitate. The closer ESL / EFL students can get to this rhythm or flow, the more convincing and comfortable they will become.
Watch English Films and Television
This is not only a fun way to learn but it is also very effective. By watching English films (especially those with English subtitles) you can expand your vocabulary and hear the flow of speech from the actors. If you listen to the news you can also hear different accents.
Listen to English Music
Music can be a very effective method of learning English. In fact, it is often used as a way of improving comprehension. The best way to learn though, is to get the lyrics (words) to the songs you are listening to and try to read them as the artist sings. There are several good internet sites where one can find the words for most songs. This way you can practice your listening and reading at the same time. And if you like to sing, fine.
Study As Often As Possible!
Only by studying things like grammar and vocabulary and doing exercises, can you really improve your knowledge of any language.
Do Exercises and Take Tests
Many people think that exercises and tests aren’t much fun. However, by completing exercises and taking tests you can really improve your English. One of the best reasons for doing lots of exercises and tests is that they give you a benchmark to compare your future results with. Often, it is by comparing your score on a test you took yesterday with one you took a month or six months ago that you realize just how much you have learned. If you never test yourself, you will never know how much you are progressing. Start now by doing some of the many exercises and tests on this site, and return in a few days to see what you’ve learned. Keep doing this and you really will make some progress with English.
Record Yourself
Nobody likes to hear their own voice on tape but like tests, it is good to compare your tapes from time to time. You may be so impressed with the progress you are making that you may not mind the sound of your voice as much.
Listen to English
By this, we mean, speak on the phone or listen to radio broadcasts, audiobooks or CDs in English. This is different than watching the television or films because you can’t see the person that is speaking to you. Many learners of English say that speaking on the phone is one of the most difficult things that they do and the only way to improve is to practice.
Finally
Have fun!
Các trình biên dịch C/C++ thông dụng
Borland C++ 3.1 (18,72M)
http://www.mediafire.com/download.php?znyy2mnmfii
Borland C++ 5.02 (84.95 M)
http://www.mediafire.com/download.php?vtykedcijhe
Đối với Borland C ++ 5.02 thì ko cài đc trên win vista… nhưng vẫn chạy đc
trên nó.
Nếu ai xài win vista thì nhờ máy người khác có cài XP sau đó setup Borland C++ 5.02 vào máy cài XP đó rồi copy toàn bộ file đã đc cài đặt vào trở lại máy mình (cài vista), làm cách đó thì xài đc.
Turbo C 3.1 (3.2M)
http://www.mediafire.com/download.php?zztweztudwm
Dev- C++ 4.9 (8.89M)
http://www.mediafire.com/download.php?wwo2zwzai1q
Visual C++ 6.0
Download ở đây
Hoặc ở đây:
http://www.mediafire.com/download.php?jqimam2kymn
CodeBlock (recommend)
http://sourceforge.net/projects/codeblocks/files/Binaries/8.02/codeblocks-8.02mingw-setup.exe/download
Tất cả các soft trên đều có pass là: dtvt.org
Cách làm robot dò đường đơn giản.
Hướng dẫn cách làm một robot dò đường đơn giản sử dụng Opamp so sánh (đúng hơn là một chiếc xe lần mò theo vạch đen
)
* Chuẩn bị:
- Linh kiện:
- 1 con Opamp loại 8 chân LM393 (2 kênh) hoặc loại 14 chân (4 kênh) LM324. Nếu không có loại LM có thể xài loại khác, như HA chẳng hạn.
- 2 con BJT loại NPN C1815 (hoặc loại khác cũng được).
- 2 quang trở.
- 2 led siu sáng (trắng).
- 6 điện trở 10k.
- 2 Mô tơ, loại cỡ 5V, có thể lấy từ xe đồ chơi của con nít (ở đây tớ lấy từ ổ CD-Rom 1 cái và chôm của thằng bạn 1 cái).
- Nguồn sử dụng 9V hoặc 4.5V (ở đây mình xài nguồn 9V).
- 2 điện trở hạn dòng cho led phát 1k (nếu xài nguồn 9V) và khoảng 220 ôm nếu xài nguồn 4.5V).
- Và các đồ phụ gia tráng trí khác, chủ yếu là led gắn vào cho đẹp, một vài cái dắt cắm, công tắc…
- Đồ dùng khác: mỏ hàn, chì hàn, kéo, băng keo đen (làm vạch)…
* Bắt đầu làm:
+ Phần mạch (ta tách riêng thành 2 phần, 1 phần cảm biến và 1 phần mạch chính cho dễ lắp đặt):
1. Bộ phận “cảm biến”:
-Cách làm:
Sử dụng 2 quang trở, 2 led phát, 2 trở hạn dòng cho led phát. Mắc theo sơ đồ sau:
| Ảnh đã được thu nhỏ .Click vào thanh này để thấy ảnh size nguyên gốc. (628 x 271) |

Ảnh thực tế:
| Ảnh đã được thu nhỏ .Click vào thanh này để thấy ảnh size nguyên gốc. (1024 x 768) |

Đặt 2 quang trở cách nhau khoảng 3.5cm-4cm, dùng băng keo đen quấn quanh quang trở để chống nhiễu. Ở đây mình sử dụng thêm 2 công tắc cho led phát để tắc ”khi cần thiết”.
-Nguyên lý hoạt động:
Khi có ánh sáng thì điện trở của quang trở sẽ giảm và ngược lại, điện trở của nó thay đổi cỡ từ 5k (khi có ánh sáng) đến 100k (không có ánh sáng), ta sử dụng 2 led phát làm nguồn sáng cho nó.
=> khi gặp nền trắng, ánh sáng sẽ phản xạ lên quang trở làm điện trở nó giảm xuống và khi gặp vạch đen (băng keo đen) thì ánh sáng sẽ khó phản xạ nên quang trở nhận ít ánh sáng => trở nó tăng. Từ đó dựa vào 2 quang trở, robot có thể phân biệt được vạch đen trên nền trắng (dưới sự hỗ trợ của opamp so sánh).

2. Mạch điều khiển moto (mạch chính)
Sử dụng 6 con trở 10k, Opamp, nguồn 9V, 2 con BJT.
Bjt C1815:

Nguyên lý hoạt động của BJT: miễn bàn.
Opamp LM 324:

Nguyên lý so sánh đơn giản của opamp thế này:
Nếu cho vào cổng (+) (cổng 3, 5, 10, 12) một điện áp lớn hơn điện áp cổng (-) (cổng 2, 6, 9, 13) thì ở cổng ra (cổng 1, 7, 8, 14) sẽ là mức dương, ngược lại là mức 0. Nhớ cấp nguồn cho Opamp ở 2 cổng 4 và 11.
Ở đây mình chỉ sử dụng 2 kênh là (1,2,3) và (5,6,7).
Sơ đồ:
| Ảnh đã được thu nhỏ .Click vào thanh này để thấy ảnh size nguyên gốc. (951 x 369) |

Ảnh thực tế (nhìn hơi rối mắt
) :
| Ảnh đã được thu nhỏ .Click vào thanh này để thấy ảnh size nguyên gốc. (1024 x 768) |

Và đây là mạch hoàn chỉnh (2 mạch trên ”cắm” lại với nhau thôi).
| Ảnh đã được thu nhỏ .Click vào thanh này để thấy ảnh size nguyên gốc. (956 x 621) |

+ Phần cơ (phần này hơi khổ).
Chuẩn bị 2 moto và thêm 2 bộ phận giảm tốc, bộ phận này giúp robot dễ ”cày” hơn nhưng chạy chậm hơn. Chạy chậm giúp robot dễ nhận vạch hơn vì mấy cảm biến này thay đổi hơi chậm (chậm mà chéc
).
2 moto ta sẽ gắn với 2 bánh sau, phía trước gắn 1 bánh xe có thể đổi hướng (giống bánh xe ở cái ghế của mấy cha giám đốc á, tất nhiên là xài loại nhỏ thôi). Nếu ko tìm ra loại bánh xe đó thì… đành phải tự chế thôi.
Bên dưới… xe
| Ảnh đã được thu nhỏ .Click vào thanh này để thấy ảnh size nguyên gốc. (1024 x 768) |

Bên trên (nói chung là nó cứ như miếng nhựa với 2 bánh xe, chụp ảnh từ di động cùi nên ảnh ko đẹp cho lắm
) 
| Ảnh đã được thu nhỏ .Click vào thanh này để thấy ảnh size nguyên gốc. (768 x 1024) |

+ Phần ”sân” (cái này tốn keo lắm).
Lấy khoảng 4-6 tờ A4 ghép lại thành sân, lấy keo đen dán lên làm vạch, nhớ dán cẩn thận, tránh gồ gề (chỗ uốn dễ bị ”lồi” keo) để xe có thể dễ bon bon trên vạch.
Đây đã tốn nửa cuộn keo đen (5k 1 cuộn) để dán đi dán lại cái sân mà chẳng ra hồn.
Hình ảnh:
| Ảnh đã được thu nhỏ .Click vào thanh này để thấy ảnh size nguyên gốc. (1024 x 768) |

* Nguyên lý hoạt động của toàn mạch:
- Khi 2 cảm biến đều nhận nền trắng:
Điện trở của 2 quang trở đều giảm xuống chừng 5k => cổng 3 và 5 của Opamp sẽ có áp cao hơn cổng 2 và 6 (cổng 2 và 6 ta phân áp cố định cho nó là 9/2=4.5V).
=> Cổng ra 1 và 7 của 2 kênh sẽ ở mức dương => kích 2 BJT dẫn
=> cả 2 moto đều quay
>Cả 2 moto đều quay, robot chạy thẳng.
- Khi cảm biến bên trái nhận vạch đen (robot đang lệch phải).
Điện trở của quang trở 1 sẽ tăng lên cỡ 50-80k => áp trên cổng 3 sẽ bé hơn 4.5V (áp trên cổng 2) => cổng ra 1 sẽ là 0V => BJT 1 sẽ ngưng dẫn => mô tơ 1 (bên trái) ngừng quay. Trong khi đó moto bên phải vẫn quay vì cảm biến phải nhận nền trắng.
>Moto trái ngừng, moto phải vẫn quay => robot sẽ rẽ sang trái.
- Tương tự khi cảm biến phải nhận vạch đen (robot đang lệnh trái).
>Moto phải ngừng, moto trái vẫn quay => robot sẽ rẽ phải.
Như vậy, robot (chiếc xe cà tàng) của chúng ta sẽ bám (lần, mò…) được vạch đen trên nền trắng.
Và cuối cùng là cờ líp của em nó:
Một vài lưu ý:
- Vì dòng ra của BJT ko lớn lắm nên xài moto từ xe đồ chơi con nít đôi khi ko chạy nổi.
- Phần sân làm thì nên có những khúc qua vừa phải, đừng cong quá mà cả 2 cảm biến đều nằm trên vạch đen thì robot sẽ ko nhúc nhích nữa.
- Có thể thay thế mấy con 10k trong mạch bằng biến trở 20k (vì đây mua biến trở 20k ko ra nên ko xài luôn).
- Có thể mắc thêm Diode bán dẫn vào mỗi moto để tránh dòng điện sinh ra từ moto có thể ảnh hưởng đến mạch (cái này nghe mấy anh làm robot nói vậy).
- Nếu robot chạy nhanh quá thì có thể nó sẽ ko bám đc vạch vì mấy con quang trở đáp ứng khá chậm, khắc phục bằng cách dùng hộp giảm tốc hoặc mắc song song với moto vài con led trang trí cho đẹp hoặc…. chờ cho pin yếu đi cũng đc
.
Chúc thành công!.

