Download Visual Studio

You can download Visual Studio here.

Download Dev C++

You can download Dev C++ here.

Download Python

You can download Python here.

Vài điều cho các bạn trẻ

Quà tặng cuộc sống.

Thứ Sáu, 30 tháng 6, 2017

[C++] Bài 4: Hằng và biến trong C++

"Variables represent storage locations in the computer's memory. Literals are constant values that are assigned to variables."

 Stating out with C++ - Tony Gaddis

1. Hằng trong C++ (Literals Constants)

      Ta có thể định nghĩa hằng là một giá trị không đổi trong quá trình sử dụng. Trong C++ hằng là một giá trị được đặt trực tiếp trong chương trình và nó là không đổi vì bạn không thể thay đổi giá trị của nó. Với cách đơn giản nhất có thể nói rằng hằng là giá trị của biến vì đây là cách dùng thông dụng nhất của hằng (nhưng không phải là duy nhất).
      Ví dụ:
int x = 5; //5 là hằng nguyên được gán vào biến x hay biến x được gán giá trị nguyên là 5
double y = 1.23123; //1.23123 là hằng số thực được gán vào biến y hay biến y được gán giá trị thực là 1.23123
      Đối với các hằng số, ta có thể thêm các hậu tố (suffixes) để chỉ rõ kiểu dữ liệu của chúng. Các hậu tố thường đi kèm là u (unsigned), l (long), f (float). Đối với số nguyên thì việc này cũng không quá cần thiết. Đối với số thực dấu phẩy động, mặc định kiểu dữ liệu được định nghĩa là double, để đưa về dạng float ta dùng hậu tố f.
Ví dụ:
unsigned int n = 100u;
long m = 1245l;
float x = 126.36f;
      C++ cũng hỗ trợ các hằng ký tự và chuỗi (string).
Ví dụ:
char c = 'A';
cout<< "Hello World!!";

2. Biến hằng (Symbolic Constants)


      Tác giả xin được gọi nó là biến hằng, trong C++, hằng được chia ra làm 2 loại đó là hằng (Literals) và (tạm gọi) biến hằng (Symbolic). Biến hằng cũng là một hằng nhưng nó không cố định mà có thể thay đổi (!). Nói cách khác biến hằng là hằng có thể thay đổi giá trị của nó bất cứ thời điểm nào ta muốn. Nghe thì sai sai nhưng thật ra thì lại đúng đúng, nếu ai từng học C++ rồi thì ta có thể biết đến 2 từ khoá là constant và #define đúng không?? Và ta được biết nó là để khai báo hằng, nhưng thật ra là ta hiểu sai về nó chứ không phải được dạy sai đâu nhá (!). Ta cứ nghĩ nó là hằng, là hằng đơn thuần (Literals), thế mà nhiều người vẫn thay đổi nó mà không nhận ra nó là biến hằng (Symbolic).
      Với biến hằng ta phải gán giá trị khởi tạo cho nó trước nếu không sẽ xảy ra lỗi.
Ví dụ:
const int n = 5;
const int n {5};
      Với biến hằng ta có thể khai báo chúng với giá trị khởi tạo là một biến.
Ví dụ:
int x;
cin>>x;
const int n {x}; //biến hằng n được gán giá trị khởi tạo là giá trị của biến x
     Như đã nói ở trên, ta có thể dùng 2 cách để khai báo một biến hằng.
Ví dụ:
const int n = 5;
#define n 5;
      Tuy nhiên ta lại không hay (không khuyến khích) sử dụng khai báo chỉ thị #define để khai báo một biến hằng bởi vì:
Thứ nhất: việc khai báo bằng chỉ thị #define gây khó khăn cho trình biên dịch do khi biên dịch, trình biên dịch không trực tiếp thay giá trị được định nghĩa của biến hằng vào mà phải tìm xem biến hằng được định nghĩa ở đâu rồi mới quay lại biên dịch đoạn code đó.
Thứ hai: việc sử dụng #define có thể gây ra xung đột giữa các biến sử dụng, về phạm vi sử dụng của biến (biến cục bộ và biến toàn cục) sẽ được nói ở phần biến.
      Vậy nên ta không khuyến khích sử dụng chỉ thị #define để khai báo biến hằng mà thay vào đó ta sử dụng khai báo const.

3. Biến trong C++ (Variables)


      Biến là thành phần mà ta luôn sử dụng cho mỗi chương trình C++. Biến như đã được định nghĩa ở trên đầu bài nó cho phép ta sử dụng bộ nhớ của máy tính để lưu trữ và làm việc với các giá trị. Để sử dụng một biến ta buộc phải khai báo biến đó trước.'
Ví dụ:
int x;
float y = 532.333;
      Việc khai báo biến chúng ta cho máy tính và trình biên dịch biết được tên biến , kiểu dữ liệu của biến và giá trị khởi tạo của biến. Với một biến khi được khai báo mà chưa khởi tạo thì tuỳ theo trình biên dịch gán giá trị khởi tạo cho nó. Ví dụ trong Dev C là ), trong Visual Studio là 0xccccc,...
      Trong C++, ta chia biến ra làm 2 loại là biến cục bộ/địa phương (Local) và biến toàn cục (Global).
        Biến cục bộ là biến chỉ được khai báo và sử dụng trong một phạm vi nhất định như một hàm, một biểu thức, một vòng lặp. Biến toàn cục là biến được sử dụng trong cả chương trình.
Ví dụ:
#include <iostream>
using namespace std;
int x = 5;
int main()
{
        while(x>0)
        {
                  int a = 1;
                  cout << a<< end;
                  x--;
         }
        return 0;
}
         Trong ví dụ trên, x là biến toàn cục có thể sử dụng mọi chỗ trong hàm main(), còn a là biến cục bộ, chỉ sử dụng trong vòng while, nếu ra khỏi vòng while biến a không có giá trị và ta phải khai báo lại để sử dụng.
        Chú ý:
Không được phép khai báo biến hai lần trong cùng một phạm vi (1 hàm, 1 vòng lặp,...).
Không khuyến khích sử dụng tên biến cục bộ và toàn cục trùng nhau (mặc dù được phép) để tránh nhầm lẫn giữa các biến 

Thứ Năm, 29 tháng 6, 2017

[C++] Bài 3: Tên và Kiểu dữ liệu trong C++


1. Tên trong C++

Các từ khoá trong C/C++

Auto
Break
Case
Char
Continue
Default
Do
Double
Enum
Extern
Float
For
If
Int
Long
Register
Short
Signed
Sizeof
Static
Switch
Typedef
Union
Unsiged
Volatile
while












Các từ khoá trong C++

Asm
Bool
Catch
Class
Delete
Dynamic_cast
Explicit
False
Inline
Mutable
Namespace
New
Private
Protected
Public
Reinterpret_cast
Static_cast
Template
This
Throw
Try
Typeid
Typename
Using
Wchar_t













Quy ước đặt tên trong C++

Trong một chương trình C++, chúng ta sử dụng rất nhiều tên hay định danh (identificater) như tên chương trình, tên hàm, tên biến,… Với mỗi tên trong chương trình ta phải khai báo chúng trước khi được sử dụng.

Tên là dãy các ký tự liền nhau bao gồm các chữ cái thường a, b, c,…, các chữ cái hoa A, B, C,…, các chữ số 0, 1, 2,…, và dấu gạch dưới _. Tên không thể bắt đầu bằng chữ số và không chứa các ký tự đặc biệt khác.

Ví dụ:

Tên đúng: abc123_, Abc12345,…

Tên sai: 123abc, #ab

Trong C++ phân biệt chữ thường và chữ hoa nên các tên như PI, pi, Pi, pI là khác nhau.
Tên không được trùng với các từ khoá có sẵn trong C++.

Chú thích trong C++

Khi viết một chương trình, để giải thích rõ các câu lệnh, các hàm hay mục đích sử dụng của các biến ta thường sử dụng chú thích. Việc sử dụng chú thích là không bắt buộc nhưng vô cùng cần thiết để thể hiện sự chuyên nghiệp và dễ hiểu cho chương trình mình viết ra.

Chú thích trong C++ được đặt sau dấu // nếu chỉ chú thích trên một dòng, khi hết dòng thì chú thích chấm dứt. Nếu muốn chú thích trên nhiều dòng, ta sử dụng cặp /* để bắt đầu và */ để kết thúc chú thích.
Ví dụ:
/*đây là chương trình đầu tiên của tôi
chương trình mang tên Hello World!!*/
int main()//Hàm main
{
     cout << “Hello World!!”<<endl;
     return 0;
}

2. Các kiểu dữ liệu trong C++

Kiểu dữ liệu dựng sẵn

Kiểu dữ liệu (Data type) có thể hiểu là một tập hợp các giá trị mà một biến thuộc kiểu đó có thể nhận được và trên đó xác định một số phép toán.
Trong C/C++ có 5 kiểu dữ liệu cơ bản gồm
      char               Kiểu dữ liệu ký tự
      int                Kiểu dữ liệu số nguyên
      float             Kiểu dữ liệu số thực
      double          Kiểu dữ liệu số thực chính xác kép
      void               Kiểu dữ liệu không gì cả
Kiểu dữ liệu char (character) là kiểu dữ liệu ký tự có bộ nhớ lưu trữ cho mỗi hằng/biến là 1 byte (8 bits), các ký tự được biểu diễn bằng chữ cái nằm trong dấu nháy đơn: ‘A’, ‘a’, ‘9’,…
Kiểu dữ liệu int (integer) là kiểu dữ liệu số nguyên có bộ nhớ lưu trữ là 2 bytes (16 bits) có khả năng biểu diễn được các số nguyên có giá trị từ -32768 đến 32767.
Kiểu dữ liệu float là kiểu dữ liệu số thực lưu trữ các dữ liệu chứa phần thập phân có bộ nhớ lưu trữ là 4 bytes (32 bits).
Kiểu dữ liệu double là kiểu số thực có bộ nhớ lưu trữ là 8 bytes (64 bits).
Kiểu void là kiểu dữ liệu không lưu trữ gì cả và không có giá trị trả về sau khi chạy chương trình.
Ví dụ:
int main()
{
     char x = ‘a’;
     int n = 100;
     float f = 1.234;
     double m = 0.8084397;
     //Your code here
     return 0;
}
Với các kiểu dữ liệu cơ bản trên ta có các kiểu dữ liệu mở rộng của chúng tương ứng như long int, long double,…
Ngoài ra, C++ cung cấp thêm hai kiểu dữ liệu nứa đó là
      bool               kiểu dữ liệu logic trả về giá trị đúng (true) hoặc sai (fale)
            wchar_t         kiểu dữ liệu ký tự mở rộng của char, sử dụng 16 bits thay vì 8 bits như char giúp ta viết được các ký tự không nằm trong bảng ASCII.

Kiểu dữ liệu bậc cao, người dùng tự định nghĩa

Ta có các kiểu dữ liệu bậc cao hơn như sau
            array             tập các phần tử có cùng kiểu dữ liệu (dãy)
            pointer         con trỏ, trỏ vào địa chỉ của ô nhớ
            reference     tham chiếu, khá giống con trỏ nhưng kém hiệu quả hơn
            structure     kiểu cấu trúc
            union             kiểu liên minh, một ô nhớ có thể chứa nhiều kiểu dữ liệu
            class             lớp, cao cấp hơn cáu trúc, là cơ sở của lập trình hướng đối tượng
Các kiểu dữ liệu bậc cao và người dùng định nghĩa sẽ được trình bày cụ thể tại các bài riêng.

Thứ Tư, 28 tháng 6, 2017

Vài điều cho các bạn trẻ


1. Đừng lãng phí thời gian nữa. Khi các bạn cả ngày ngồi lướt new feeds Facebook thì xã hội đã bỏ các bạn quá xa rồi. Tụ tập ít thôi, shopping ít thôi, mạng xã hội ít thôi. Nếu tốt nghiệp Đại học mà bạn vẫn phải nhờ vả xin việc, thì nên tự hỏi cả thời Đại học bạn đã giết thời gian thế nào.

2. Đừng để công nghệ chi phối mình. Dùng Internet để học, để giải trí, để kết nối, chứ đừng biến nó thành cuộc sống. Không nhất thiết ăn gì, mặc gì, nghĩ gì, làm gì, khó chịu gì, yêu thương gì cũng phải post lên mạng xã hội. Không cần thiết phải biến mình thành nô lệ của chiếc "Smart Phone" . Nếu đi ra ngoài chơi thì đừng cắm đầu vào điện thoại; nếu định chơi với điện thoại, thì đừng ra ngoài.

3. Tiêu tiền cho đúng cách. Cái gì cần dùng và có ích thì hẵng mua, cái gì chỉ để khoa trương thì đừng mua. Nếu không cần thiết phải lên đời điện thoại từ iPhone 6 lên iPphone 7 chỉ vì chụp hình đẹp hơn một chút thì dùng iPhone 6 cũng được. Đừng có khoa trương khi thực chất bản thân chưa làm được gì.
Nếu vẫn sống chật vật với đồng lương mới ra trường, hay vẫn phải xin tiền bố mẹ, thì đi xe đạp cũng được, không cần đi Vision hay Vespa làm gì. Đồng tiền kiếm thực sự không dễ.

4. Sống có kỷ luật đi. Đừng có lười biếng, lộn xộn, hay ham vui quá đà. Tự kiểm soát cuộc sống cuả mình, vì không ai làm điều đó hộ mình cả. Tuổi trẻ, đừng biến cuộc sống của mình thành một mớ hỗn độn.

5. Đọc sách. Sách gì cũng được, miễn là đừng để não mình rơi vào tình trạng chán tư duy, chán thay đổi, và thậm chí là thấy chán đời. Tuổi trẻ, có biết bao nơi phải đến, bao người thú vị phải gặp, bao thứ để học, và bao điều hay ho để làm. Lúc nào thấy chán nản, nên đi mua một cuốn sách mới.

6. Đừng trì hoãn. Việc cần làm thì phải ép mình làm, mà làm cho xong. Ai cũng sống ngần ấy thời gian, người ta hơn nhau ở cái biết dùng thời ấy thế nào. Trì hoãn là lười biếng. Trì hoãn là không tôn trọng thời gian của chính mình, không tôn trọng chính mình.
Không ai ăn cắp hay giết thời gian của bạn cả, chỉ có bạn tự giết chết thời gian của chính mình, giết chết tuổi trẻ của chính mình. Tuổi trẻ chỉ có một lần, nên nghĩ kỹ về điều đó.

7. Đi thật nhiều. Mỗi bước đi xa hơn là một bước lớn khôn hơn, để biết trân trọng quãng đời này, thực ra chỉ vài chục năm, không dài như mình tưởng.
Đi đúng nghĩa của đi. Đi trải nghiệm, cảm nhận, suy ngẫm, chứ không phải đi theo phong trào. Đi ào ào và chỉ để pose hình thì cũng không khác gì không đi là mấy.




8. Rèn luyện sự tự tin từ bây giờ đi. Mình không tin vào mình thì không ai tin mình cả. Cũng như luyện tập thể chất, tinh thần cũng phải luyện. Nếu sợ không làm được thì phải ép mình làm, thất bại nhiều lần rồi thì khắc hết sợ. Nếu sợ nói trước đám đông thì càng nên nói trước đám đông, sợ giao tiếp thì càng nên giao tiếp.
Tự tin không phải là thứ tự dưng có, nhưng chắc chắn là luyện được. Phải tự tin là mình làm được thì làm việc mới thành.

9. Sống có lý tưởng lên. Nghĩ thoáng ra, nghĩ rộng ra, làm thật nhiều vào và đừng sợ sai. Đạp lên định kiến với áp lực xã hội mà sống. Tuổi trẻ, phải sống như chưa từng được sống.

10. Cứ yêu đi. Đổ vỡ cũng không sao, buồn cũng không sao, đau cũng không sao. Đổ vỡ thì làm lại, làm lại hai lần chưa được thì nhiều lần. Đừng sợ không tìm thấy người yêu mình cả đời, chỉ sợ mình quá hèn nhát không dám yêu thêm. Tình yêu là cách nhanh nhất khiến người ta hoàn thiện bản thân.

11. Độc thân cũng được. Độc thân thì vui kiểu độc thân, dành thời gian mà làm nhiều thứ cho riêng mình. Đừng có vì thấy người ta có đôi có cặp còn mình Valentine một mình và kêu gào FA hay sinh chán nản. Cô đơn cũng là cái hay.

12. Đừng lập gia đình quá sớm. Đừng ổn định quá sớm. Hãy độc thân tới khi nào thực sự sẵn sàng cho một cuộc sống mà mình phải gắn với rất nhiều sự ràng buộc và trách nhiệm. Nếu chưa cảm thấy mình có thể chăm sóc tốt cho bản thân mình, thì đừng vội lập ra đình. Hãy tập sống cuộc đời một mình cho tốt đã. Ai hỏi bao giờ lấy chồng hay lấy vợ, thì cứ kệ đi.

13. Phải độc lập. Phải cố gắng. Tự mình học, tự mình cố gắng, tự mình kiếm việc làm, tự mình kiếm tiền, tự xây dựng sự nghiệp. Rồi sau này có con cái, sẽ có nhiều hơn những câu chuyện để kể. Có nhiều con đường dễ để đi, nhưng nếu con đường được trải thảm sẵn thì đi tới đích rồi cũng chả thấy gì vui thú. Những gì tự mình có mới là cuả mình.
*****Nghĩ khác đi. Tìm cái mới, nghĩ điều mới, làm điều mới, thậm chí là điều điên rồ và kỳ quặc.
Tuổi trẻ, đừng sống mòn như một chiếc máy cũ kỹ, hay như một con robot đã được lập trình****
-------
Vì mình còn trẻ, nên không điều gì là không thể.

:)
Hoàng Ngọc Quỳnh
United Kingdom
11/5/2017

Hai năm nữa hãy về Bách Khoa lấy bằng đại học nhé...



Hà nội, thứ ba ngày 27 tháng 6 năm 2017, trời sáng gió nhẹ mà se se khác hẳn những ngày hè nóng nực thường thấy, phố xá yên tĩnh lạ, Urban Station cũng ít khách hơn và tâm trạng của ai đó cũng trùng xuống. Ngày hôm nay là ngày cuối cùng tao gặp mày với tư cách là một sinh viên của trường đại học Bách Khoa Hà Nội.
Biết ngày này sẽ đến từ cái hôm mà mày nói với tao quyết định ra đi của mày, nhưng tao vẫn buồn, vẫn không thể kìm nén được sự buồn tủi giăng kín tâm trạng mình. Quán café có 4 khách ngồi, 2 người tâm trạng thư giãn, hai người kia không nói ra nhưng cũng cảm nhận một nỗi buồn phảng phất dễ nhận ra. Thế là cuối cùng tao với mày đã không còn học cùng nhau nữa, cuối cùng như một quy luật tự nhiên xảy ra với tao là những người bạn thân nhất, tốt nhất lần lượt rời xa tao. Đứa thứ nhất – niềm hãnh diện của tao khi quen hắn – đã bỏ bạn bè mà sang Nhật Bản với tư cách là học sinh ưu tú nhất K13 SIE. Ngày tạm biệt hắn tao hãnh diện phết, vui và ghen tị với hắn lắm, vừa là bạn vừa là idol của tao đã đi mất rầu *cười*. Hắn đi như một điều tất yếu mà ai cũng biết vì sự chăm chỉ, trách nhiệm của hắn trong việc học, con người của lý trí và bản lĩnh, biết thế mà vẫn ghen tị vãi @@
Mày ấy. Ngày mày nói với tao là mày nghỉ học để theo đuổi ước mơ, tao sock cả sáng hôm ấy. Học thì giỏi, kiến thức xã hội tốt, biết suy nghĩ và cư xử đúng đắn chứ dốt nát gì đâu chứ mà nghỉ học?? Nhưng những lời mày nói khiến tao tự tủi hổ và khâm phục thêm bản lĩnh của mày. Khi quen biết mày, tao cũng không biết rằng mình quen được một người như vậy là một điều may mắn mà tao không nhận ra. Mày là người dạy tao những cách cư xử, lối sống hàng ngày, là người dám nghĩ, dám nói, dám nhận trách nhiệm. Từng nhớ có những lần mà mày sỉ vả tao không thương tiếc vì cái thói ích kỷ của mình khiến tao hận mày thấu xương, nhưng cũng vì thế mà tao nhận ra đâu đó tao có một người bạn luôn quan tâm mình như vậy. Ba năm đại học, tao quen vô số bạn bè có lẽ là nhiều hơn cả số bạn tao quen trong 12 năm học phổ thông, nhưng cũng chính vì thế tao không biết rõ ai thật lòng thân với mình, tốt với mình. Nhưng mà cũng may mắn, tao có được những thằng bạn như mày, như cái gã Nhật Bổn kia kìa, như những đứa đang hết lòng giúp tao bây giờ này, chúng mày sống thật lòng với tao quá rồi đấy. 

Có đứa hơn tao một tuổi nhưng vẫn là bạn kể cho tao rằng cấp 3 hắn từng bỏ học làm mọi thứ trên Hà Nội tiếp xúc đủ thứ nhưng hắn không sa ngã, bị mọi người ghét bỏ rồi tự mình đứng lên học tiếp thi đỗ Bách Khoa và giờ là thần tượng của tao, của cái đất Quảng Bình đầy nắng, gió và cát ấy (cái này tao chém gió). Hiếm có ai thật lòng với tao như hắn, thế mà hắn đi mất rồi. Có đứa mới quen được một kỳ mà vẫn luôn sẵn lòng thức đêm vì tao hỏi ngu về C++, vì tao bảo máy tao lại cài ứng dụng chứa mã độc :v.
 Thế còn mày? Tao thấy mày khốn nạn lắm, cái thằng mà tao quen từ năm nhất chuyên ra nói vào tim đen của tao (dù thi thoảng sai) khiến tao giật mình. Tao ghét mày lắm mà tại sao tao lại chơi được với mày :3. Năm nhất, mày dạy tao đi thi nói không với phao khiến tao suýt tạch triết 1, bố mày thù tới giờ. Mày dạy tao thấy ngứa mắt thì phải nói khiến tao bị tụi nó ghét, còn dạy tao tỉ thứ nữa khiến tao thù mày tới tận giờ này. Nhưng mày cũng là đài tiếng nói của bạn bè, truyền đi thông điệp của bạn bè mà không ngại ngần gì cả (điều tao khâm phục nhất ở mày đấy). Mày cũng là đứa sống vì tập thể nữa (tuyệt cmn vời luôn @@). Thế mà mày lại ngừng việc học ở đây.
Chẳng biết tao nên vui hay buồn khi mày chỉ nói với tao thôi ấy. Nhưng tao trân trọng những gì mày dành cho tao. Bề ngoài không ai biết tao chơi với mày và cũng chẳng ai nghĩ là tao chơi với mày và cũng chính lẽ đó khiến cho tao có được tình bạn bền chặt hơn với mày. Tao thầm cảm ơn mày khi những đứa bạn thân của mày không biết mày đi đâu còn thằng có vẻ không thân như tao lại được quyền chất vấn mày tại sao ra đi. Mày từng nói, mày học không có đam mê nên thấy xấu hổ khi đầu tư học. Vậy sao điểm mày cao thế.hic. Tao chỉ biết húc đầu vào học mấy thứ vớ vẩn, chán thì lại thôi nên không hiểu trách nhiệm đối với việc học của mày, thấy xấu hổ với mày quá.!!!
Ngày mày quyết định đi, tao chẳng biết nói gì, chỉ biết dặn mày một điều: “Hãy quay trở lại Bách Khoa để học lấy bằng đại học nhé!”. Và mày cũng đã hứa, mình có 7,5 năm ở trường cơ mà, lo gì *cười*. Tao hi vọng đến lúc mày về trường đi học thì nhớ mang ô tô qua chỗ tao làm bốc vác phụ hồ đón tao cho cái bọn làm cùng tao lúc ấy nó lác mắt ra @@. Đến vùng đất mới, nhớ hoàn thành ước mơ của mày, trở thành tỷ phú sau đó quay lại đây, lấy bằng đại học như Bill Gate nhé. Tao vẫn hẹn mày ở Urban Station và vẫn đi ô tô đến đó, có lái xe riêng, phục vụ xe và mất có 100k 1 tháng thôi.
Ba năm đại học của tao trôi qua tẻ nhạt và chẳng có gì ngoài những biến động và có những người bạn thân như mày và những thằng kia. Có đứa nó nói dù quên ai thì quên chứ không quên tao khiến tao muốn trói nó lại Việt Nam luôn. Còn mày, mày nói gì khiến tao phải viết cho mày? “Tao trân trọng mày và trân trọng tình bạn này” – Nó khiến tao muốn đốt hết tàu xe máy bay để mày không đi đâu khỏi Hà Nội nữa.
Mày từng nói với tao “Đời người ngắn lắm, mỗi con người chỉ sống một lần”
Tạm biệt,

Thứ Hai, 26 tháng 6, 2017

[C++] Bài 2: Vào ra cơ bản trong C++

1. Hàm ra cout

Trong C++, để hiện thị một nội dung trên DOS, ta cử dụng câu lệnh:
cout<<"Nội dung cần in ra";
Nội dung trong dấu nháy kép là một chuỗi ký tự mà người dùng muốn in ra trên giao diện DOS.
Ví dụ:
cout<<"Hello World!!";
Để sử dụng câu lệnh cout  ta cần khai báo các thư viện chuẩn sau:
#include<iostream>  //thư viện vào ra chuẩn
using namespace std;//không gian tên chuẩn (nếu không sử dụng câu lệnh này, ta cần viết std::cout)
Trong hàm ra chuẩn của C++ ta có các điều cần lưu ý như:
"\t" tương đương với việc sử dụng phím "tab" trong word.
"\n" tương đương với việc xuống dòng (enter) trong word, nhìn chung ta có thể coi "\n""endl" là như nhau. Cả hai đều hiển thị xuống dòng trong khi thực hiện lệnh, điểm khác nhau đó là cout<<endl thì tương đương với câu lệnh cout<<"\n"<<flush; Trong khuôn khổ bài học thứ 2 căn bản về C++, tác giả chỉ giải thích đơn giản như sau: "\n" chịu trách nhiệm xuống dòng còn "endl" sẽ xoá các thứ không cần thiết để xuống dòng in ra. Nói cách khác, ta có thể sử dụng "\n" trong các dòng và sử dụng "endl" ở cuối đoạn. Về sự khác nhau như thế nào và cụ thể ra sao, tác giả sẽ dành cho các bài viết sau nếu có liên quan.
Việc in một giá trị cụ thể (Không phải là xâu kí tự alphabet) ta có thể in trực tiếp giá trị đó ra màn hình mà không cần đặt trong dấu nháy.
Ví dụ:
cout<<2017;
Khi không sử dụng dấu nháy kép để in ra, C++ ngầm hiểu đó là biến có mang giá trị và sẽ in giá trị của biến có tên đó ra màn hình.
Ví dụ:
cout<<"Hello"; //kết quả in ra màn hình sẽ là Hello
cout<<Hello: //Kết quả in ra màn hình sẽ là giá trị được lưu trong biến có tên Hello.
Chương trình mẫu:
#include <iostream>

int main()
{
        int Hello = 2017;//Khai báo biến Hello (sẽ nói ở bài hằng và biến)
        std::cout<<"Hello\n";//in ra màn hình chữ Hello
        std::cout<<Hello<<"\n";//in ra màn hình giá trị của biến Hello (2017)
        std::cout<<2018<<std::endl;//in ra màn hình số 2018
        return 0;
 }

Kết quả thu được trên Console như sau:



2. Hàm vào cin

Để nhập vào một giá trị, một ký tự hoặc một chuỗi ký tự nào đó ta có thể sử dụng hàm vào chuẩn trong C++ đó là cin. Cũng như cout, cin được khai báo bởi câu lệnh #include<iostream> và using namespace std;
cin nhập giá trị thông qua một biến được khai báo trước đó.
Ví dụ:
int tuoi;
cin>>tuoi;

cin cũng có thể nhập được nhiều giá trị cùng một lúc tương tự như cout xuất nhiều giá trị cùng lúc.
Ví dụ:
int tuoi,ngay,thang;
cin>>tuoi>>ngay>>thang;

Việc nhập giữa các biến có thể kết thúc bằng phím SPACE hoặc ENTER. Và ENTER là kết thúc nhập.
Với việc nhập xâu ký tự, ta có thể gặp một vài vấn đề chính như sau:
Ví dụ:
string ten;
cout<<"ho va ten"<<endl;
cin>>ten;
cout<<"Xin chao "<<ten;

Với việc sử dụng code như trên hình, tác giả đã nhập vào tên của mình được phân cách với nhau bởi dấu cách. Tuy nhiên kết quả nhận được là:


Ta có thể thấy ở đây kết quả in ra màn hình chỉ là "Tran", hoàn toàn không giống như những gì mà ta mong đợi. Điều này là do cin bị phân cách bởi các khoảng trắng nên nó chỉ lấy được các ký tự gần nhất trước khoảng trắng.
Để giải quyết vấn đề này, trong C++ ta có thể sử dụng hàm getline như sau:
getline(cin,ten);
Nhờ có hàm getline này mà sau khi bị phân cách bởi khoảng trắng, ta vẫn có thể lấy được toàn bộ dữ liệu từ cin ra màn hình:



Tuy nhiên bên cạnh đó thì getline vẫn tỏ ra khá "NGU", thật ra là nó nhiệt tình quá nên nó sẽ làm những việc không cần thiết.
Ví dụ:
int tuoi;
string ten;
cout<<"ban bao nhieu tuoi"<<endl;
cin>>tuoi;
cout<<"ho va ten"<<endl;
cin>>ten;
cout<<"Xin chao "<<ten;

 Và kết quả là:
 


Ta  có thể thấy kết quả lại không như mong muốn. Để giải thích điều này ta lại "đổ tội" cho thằng getline thôi :)))
Khi ta nhập tuổi vào và kết thúc bằng phím ENTER thì mặc định trong bộ đệm của cin nó đã mang ký tự ENTER rồi. Do đó, nhờ sự nhiệt tình không cần thiết của thanh niên getline mà ở cin tiếp theo ta nhận ngay ký tự ENTER vào và quá trình nhập kết thúc ở đây.
Để giải quyết vấn đề này, ta lại cần một hàm nữa đó là fflush(stdin); Hàm này có chức năng xoá đi bộ đệm đã có của cin và đưa cho ta một bộ đệm trống trước khi thực hiện câu lệnh getline(cin,ten);.



Về các vấn đề khác của xâu, tác giả sẽ đề cập thêm ở các phần sau. Trong khuôn khổ bài này, tác giả chỉ muốn đưa ra những điều căn bản nhất về cin và cout, các lỗi hay gặp với cin mà thôi.