Nơi chia sẻ bài tập, tài liệu, kiến thức về lập trình, thủ thuật máy tính, tiếng Nhật công nghệ thông tin,...
15/12/15
Bài tập cơ bản về vòng lặp (Phần 1)
Với các bạn đang học Nhập môn lập trình thì bài tập vòng lặp ngoài giúp làm quen với cách dùng vòng lặp còn giúp phát triển tư duy lập trình, giải thuật. Mình sẽ giới thiệu một số dạng bài tập vòng lặp cơ bản, một số ví dụ cùng với hướng giải quyết. Tất cả code tham khảo đều được viết dưới dạng hàm trong ngôn ngữ C/C++.
Ở Phần 1 mình sẽ hướng dẫn cách làm dạng bài vẽ hình. Các dạng bài khác sẽ được trình bày ở các phần tiếp theo.
9/11/15
Hướng dẫn sử dụng tính năng Debug trong Visual Studio 2015
Debug là một công việc mà hầu hết người lập trình đều phải thực hiện để tìm lỗi trong phần mềm của mình. Visual Studio đã hỗ trợ khá mạnh tính năng này để giúp đơn giản hơn trong việc tìm lỗi sản phẩm. Trong bài viết này mình sẽ hướng dẫn các bạn sử dụng tính năng Debug trên phiên bản mới nhất của Visual Studio, hiện tại là bản 2015. Các thao tác sẽ được thực hiện trên Visual Studio Enterprise 2015.
Một số thành phần cơ bản
Breakpoints: Là điểm mà chương trình sẽ dừng lại để cho phép bạn chạy từng bước các dòng code. Có thể đặt nhiều breakpoint trong chương trình.
Các cửa sổ theo dõi biến: Giúp bạn theo dõi sự thay đổi của biến hoặc hàm cho mỗi bước chạy. Nếu một biến có sự thay đổi giá trị thì sẽ có màu đỏ để phân biệt. Có 3 loại:
Sơ lược về Debug của Visual Studio
Debug trong Visual Studio cho phép bạn chạy chương trình từng bước để xem sự thay đổi giá trị của biến, trả về của hàm,... qua đó phát hiện những lỗi logic trong chương trình.Một số thành phần cơ bản
Breakpoints: Là điểm mà chương trình sẽ dừng lại để cho phép bạn chạy từng bước các dòng code. Có thể đặt nhiều breakpoint trong chương trình.
Các cửa sổ theo dõi biến: Giúp bạn theo dõi sự thay đổi của biến hoặc hàm cho mỗi bước chạy. Nếu một biến có sự thay đổi giá trị thì sẽ có màu đỏ để phân biệt. Có 3 loại:
- Autos: Hiển thị tự động các biến, hoặc hàm trả về trong các dòng code trước.
- Locals: Tương tự Autos nhưng chỉ hiển thị các biến liên quan trong nội bộ hàm hoặc khối lệnh.
- Watch: cửa sổ tùy chỉnh cho phép bạn xem chỉ các biến mà bạn yêu cầu hoặc giá trị tùy chỉnh bất kỳ. Visual Studio cho phép bạn mở tối đa 4 cửa sổ Watch.
Thanh công cụ Debug: cung cấp các nút lệnh để bạn thực hiện Debug chương trình.
Cửa sổ Call Stack: Chứa lời gọi hàm trong ngăn xếp. Nếu chỉ debug ở mức độ cơ bản thì cũng không cần quan tâm cửa sổ này lắm.
Cửa sổ Diagnostic Tool: Chứa các công cụ chẩn đoán nâng cao. Cung cấp biểu đồ thời gian thực bộ nhớ, CPU,... mà chương trình sử dụng. Ngoài ra nó còn hiển thị các sự kiện được bắt và thời gian bắt.
21/8/15
Cài đặt và sử dụng bộ gõ tiếng Nhật trên Windows 10
Cũng giống như trên Windows 8.1 hay Windows 7, bộ gõ tiếng Nhật Microsoft IME được tích hợp sẵn trong hệ điều hành và bạn có thể bật lên để dùng một cách dễ dàng. Trong bài viết này mình sẽ hướng dẫn các bạn cài đặt bộ gõ này và một vài cách thức sử dụng nó.
Cài đặt
Chọn Start Menu -> Settings -> Time & language -> Region & language. Trong mục Languages bạn chọn Add a language như hình dưới:
Một danh sách các ngôn ngữ hiện ra, chọn Japanese.
Vậy là phần cài đặt đã xong.
Sử dụng bộ gõ tiếng Nhật
Để bật chế độ gõ tiếng Nhật bạn có thể chọn vào Language bar ở Taskbar và chọn Japanese.
Cách thứ hai bạn có thể dùng phím tắt Windows + Space và nhấn Space liên tiếp để chọn đến bộ gõ tiếng Nhật.
Cài đặt
Chọn Start Menu -> Settings -> Time & language -> Region & language. Trong mục Languages bạn chọn Add a language như hình dưới:
Một danh sách các ngôn ngữ hiện ra, chọn Japanese.
Vậy là phần cài đặt đã xong.
Sử dụng bộ gõ tiếng Nhật
Để bật chế độ gõ tiếng Nhật bạn có thể chọn vào Language bar ở Taskbar và chọn Japanese.
Cách thứ hai bạn có thể dùng phím tắt Windows + Space và nhấn Space liên tiếp để chọn đến bộ gõ tiếng Nhật.
19/8/15
Danh sách liên kết vòng và một số thao tác
Chúng ta cùng tìm hiểu một cấu trúc dữ liệu cũng khá hữu ích là Danh sách liên kết vòng (Circular Linked List). Nó biểu diễn một cách tự nhiên các cấu trúc dạng tròn như các góc của đa giác, v.v... DSLK vòng có hai dạng thường thấy là dạng vòng đơn và vòng kép.
Dạng vòng đơn thực chất là một danh sách liên kết đơn có phần tử cuối trỏ về phần tử đầu tiên. Nó cũng có nhược điểm là chỉ duyệt từ một chiều. Dạng vòng kép cũng là một danh sách liên kết kép có phần tử cuối trỏ về đầu và đầu trỏ ngược về cuối.
Với DSLK vòng ta cần biết một vài thao tác cơ bản đủ dùng và các thao tác này sẽ được minh họa bằng C++. Bài này chỉ nói về danh sách liên kết vòng kép và bạn cũng nên sử dụng vòng kép để việc code lại đơn giản hơn.
Tổ chức dữ liệu
Một danh sách gồm có các phần tử gọi là node, mỗi node gồm 1 biến chứa dữ liệu và một hoặc nhiều biến con trỏ để liên kết với các node khác. Dưới đây là khai báo cấu trúc node:
Do cấu trúc này ở dạng vòng nên một danh sách ta chỉ cần chọn một phần tử đầu thôi.
Dạng vòng đơn thực chất là một danh sách liên kết đơn có phần tử cuối trỏ về phần tử đầu tiên. Nó cũng có nhược điểm là chỉ duyệt từ một chiều. Dạng vòng kép cũng là một danh sách liên kết kép có phần tử cuối trỏ về đầu và đầu trỏ ngược về cuối.
Với DSLK vòng ta cần biết một vài thao tác cơ bản đủ dùng và các thao tác này sẽ được minh họa bằng C++. Bài này chỉ nói về danh sách liên kết vòng kép và bạn cũng nên sử dụng vòng kép để việc code lại đơn giản hơn.
Tổ chức dữ liệu
Một danh sách gồm có các phần tử gọi là node, mỗi node gồm 1 biến chứa dữ liệu và một hoặc nhiều biến con trỏ để liên kết với các node khác. Dưới đây là khai báo cấu trúc node:
struct DoublyNode { <datatype> info; DoublyNode* prev, *next; };
Do cấu trúc này ở dạng vòng nên một danh sách ta chỉ cần chọn một phần tử đầu thôi.
struct DoublyList { DoublyNode* head; };
17/8/15
Danh sách liên kết kép và các thao tác cơ bản
Nếu bạn đã đọc bài viết về Danh sách liên kết đơn thì có thể thấy việc tổ chức dạng danh sách tiện lợi hơn rất nhiều so với dùng mảng. Tuy nhiên, danh sách liên kết đơn vẫn có nhược điểm là chỉ có thể duyệt từ đầu đến cuối. Vì vậy, một số thao tác sẽ rất khó cài đặt trên nó. Danh sách liên kết kép có thể khắc phục nhược điểm này. Hầu hết các thao tác điều giống với danh sách liên kết đơn nhưng mình cũng khuyên các bạn nên đọc bài: Danh sách liên kết đơn và các thao tác cơ bản trước khi đọc bài viết này. Các thao tác được minh họa bằng C++.
Tổ chức dữ liệu
Với danh sách liên kết kép, mỗi phần tử sẽ liên kết với phần tử đứng trước và sau nó trong danh sách.
Mỗi phần tử trong danh sách (node) gồm biến lưu dữ liệu và 2 con trỏ liên kết tới phần tử trước và sau nó.
Khai báo phần tử của danh sách:
Một danh sách thì gồm nhiều phần tử, các phần tử đã liên kết nhau, mà đây là cấu trúc dữ liệu động nên ta cần biết phần tử đầu và phần tử cuối của danh sách.
Khai báo cấu trúc danh sách:
Các thao tác cơ bản
Tạo danh sách rỗng
Khi bạn tạo một biến kiểu List như trên thì 2 con trỏ thành viên được tạo ra, tuy nhiên chúng chưa được khởi tạo giá trị. Thao tác với con trỏ rỗng thì nguy hiểm nên cần thiết phải gán NULL cho 2 con trỏ này.
Tổ chức dữ liệu
Với danh sách liên kết kép, mỗi phần tử sẽ liên kết với phần tử đứng trước và sau nó trong danh sách.
Mỗi phần tử trong danh sách (node) gồm biến lưu dữ liệu và 2 con trỏ liên kết tới phần tử trước và sau nó.
Khai báo phần tử của danh sách:
struct Node { <datatype> info; Node *prev, *next; };
Một danh sách thì gồm nhiều phần tử, các phần tử đã liên kết nhau, mà đây là cấu trúc dữ liệu động nên ta cần biết phần tử đầu và phần tử cuối của danh sách.
Khai báo cấu trúc danh sách:
struct List { Node *head, *tail; }Có thể minh họa danh sách liên kết kép như sau:
Các thao tác cơ bản
Tạo danh sách rỗng
Khi bạn tạo một biến kiểu List như trên thì 2 con trỏ thành viên được tạo ra, tuy nhiên chúng chưa được khởi tạo giá trị. Thao tác với con trỏ rỗng thì nguy hiểm nên cần thiết phải gán NULL cho 2 con trỏ này.
void CreateList(List &list) { list.head = list.tail = NULL; }
23/7/15
Kiểu dữ liệu trong C
Trong C có 5 kiểu dữ liệu cơ bản:
Kiểu số nguyên
Kiểu số nguyên trong C là
Ví dụ:
Kiểu số thực
Trong C có 2 kiểu số thực là
Kiểu
Tùy nhu cầu mà người ta sử dụng
Lưu ý: tính toán với các kiểu dữ liệu thực luôn có sai số.
Ví dụ:
int
, float
, double
, char
, void
. Ngoài ra khi kết hợp với các từ khóa signed
, unsigned
, long
, short
ta còn có thêm các kiểu dẫn xuất. Kiểu cấu trúc struct
trong C cho phép ta định nghĩa các kiểu dữ liệu mới dựa trên các kiểu dữ liệu cơ bản. Kiểu con trỏ là kiểu dữ liệu đặc biệt dùng lưu địa chỉ của biến khác.Kiểu số nguyên
Kiểu số nguyên trong C là
int
, được dùng để lưu trữ số nguyên. Đây là kiểu dữ liệu cơ bản nhất trong các ngôn ngữ lập trình. Giá trị của kiểu int
không cố định mà phụ thuộc vào trình biên dịch, thông thường là 4 bytes.Ví dụ:
int a; int a = 5; int a, b;
Kiểu số thực
Trong C có 2 kiểu số thực là
float
và double
, cho phép lưu trữ cả phần thập phân của một số.Kiểu
float
có giá trị 4 bytes và có độ chính xác tới 6 chữ số thập phân. Kiểu double
có giá trị 8 bytes và chính xác tới 10 chữ số. Tuy nhiên độ chính xác này là tương đối và còn phụ thuộc vào hệ điều hành.Tùy nhu cầu mà người ta sử dụng
float
hay double
, nếu tính toán không yêu cầu độ chính xác cao nên dùng kiểu float
để tiết kiệm bộ nhớ.Lưu ý: tính toán với các kiểu dữ liệu thực luôn có sai số.
Ví dụ:
float a = 5.7; double b = 6; //=> 6.0
13/7/15
Các phạm vi truy xuất trong một lớp đối tượng C++
Khi xây dựng một class, chắc chắn bạn sẽ phải xác định phạm vi truy cập cho các thuộc tính và phương thức trong class đó. Mục đích của việc này nhằm quy định các thành phần nào có thể được truy cập, thay đổi từ bên ngoài, thành phần nào là riêng tư.
Có thể hiểu phạm vi truy xuất này cũng giống như biến toàn cục và biến cục bộ. Biến toàn cục có thể được truy cập từ tất cả các hàm sau khai báo nó, còn biến cục bộ chỉ có thể được truy cập nội bộ trong hàm.
Trong C++, phạm vi truy cập được xác định qua 3 từ khóa: public, private và protected.
Có thể hiểu phạm vi truy xuất này cũng giống như biến toàn cục và biến cục bộ. Biến toàn cục có thể được truy cập từ tất cả các hàm sau khai báo nó, còn biến cục bộ chỉ có thể được truy cập nội bộ trong hàm.
Trong C++, phạm vi truy cập được xác định qua 3 từ khóa: public, private và protected.
- public: Các thành phần mang thuộc tinh này đều có thể được truy cập từ bất kỳ hàm nào, dù ở trong hay ngoài lớp.
- private: Các thành phần mang thuộc tinh này chỉ có thể được truy cập bên trong phạm vi lớp. Vì trong C++ cho phép định nghĩa phương thức ngoài khai báo lớp nên phạm vi lớp được hiểu là bên trong khai báo lớp và bên trong các định nghĩa thuộc lớp.
- protected: Các thành phần mang thuộc tinh này chỉ có thể được truy cập bên trong phạm vi lớp và các lớp con kế thừa nó. Như vậy, nếu một lớp không có lớp con kế thừa nó thì phạm vi protected cũng giống như private.
Một ngoại lệ chỉ có trong C++ đó là định nghĩa friend. Một hàm hoặc lớp friend có thể truy cập vào các thành phần private và protected của lớp với hàm đó (hàm friend) hoặc với các đối tượng khác (lớp friend) với điều kiện phải được khai báo trước trong lớp.
Một số lưu ý về phạm vi truy xuất trong C++:
Một số lưu ý về phạm vi truy xuất trong C++:
- Phạm vi truy xuất trong C++ được xác định trong qua các nhãn trong khai báo lớp. Nhãn bao gồm từ khóa và dấu hai chấm.
- Mỗi nhãn có phạm vi ảnh hưởng từ lúc khai báo đến khi gặp nhãn khác hoặc hết khai báo lớp.
- Nếu không chỉ rõ nhãn đầu tiên thì ngầm định nó có phạm vi truy cập là private.
Đăng ký:
Bài đăng (Atom)