Please wait...

Top Bar -->

Bài 5. Nhập dữ liệu từ thiết bị chuẩn.

date_range 2017-03-24

Hi. Rất vui khi gặp lại các bạn trong TUT hướng dẫn lập trình C++ cơ bản. Trong bài viết trước mình đã giới thiệu với các bạn về biến và kiểu dữ liệu trong C++. Hôm nay chúng ta sẽ cùng nhau tìm cách đưa dữ liệu vào chương trình. Bắt đầu ngay thôi.

5.1. Đặt vấn đề.

Các bạn còn nhớ phương trình bậc nhất 5x -30 = 0 ở bài trước không. Bây giờ mình sẽ áp dụng kiến thức về biến để viết chương trình trên.

#include <iostream>
using namespace std;
int main()
{
     int a = 5;
     int b = -30;
     cout<< "5x - 30 = 0" << endl;
     cout<< "x = " << -b/a;
}
  • Dòng 5, 6: Mình tạo ra hai biến “a” và “b”, gán giá trị lần lượt là 5 và -30. Mình đặt tên biến là “a” và “b” để ngầm hiểu rằng chúng là hệ số của phương trình bậc nhất. Các bạn cũng nên tạo thói quen đặt tên biến làm sao mà khi người khác đọc code của các bạn có thể hiểu ngay được biến đó mang ý nghĩa gì.
  • Dòng 7, 8: Hiển thị phương trình cần giải và kết quả nhận được sau khi giải phương trình.

Các bạn chạy thử xem vừa ý chưa: (hình).

Nhưng như mình đã nói ở bài viết trước. Khi hai hệ số a, b thay đổi các bạn sẽ phải thay đổi lại giá trị cho 2 biến “a” và “b” của chương trình để nhận được kết quả chính xác. Vậy làm sao để chương trình của chúng ta có tính tuỳ biến, tức là khi hai hệ số thay đổi chúng vẫn sẽ nhận được kết quả chính xác mà không phải gán lại giá trị cho hai biến “a” và “b”. Vâng! Sau đây các bạn sẽ được tìm hiểu cách nhập dữ liệu từ thiết bị chuẩn biện pháp để giải quyết vấn đề trên.

5.2. Sử dụng câu lệnh cin để nhập dữ liệu.

Chúng ta có rất nhiều cách để có thể đưa dữ liệu vào trong chương trình, dưới đây là một số cách:

  • Nhập dữ liệu từ thiết bị nhập chuẩn.
  • Lấy dữ liệu từ File.
  • Nhận dữ liệu từ thiết bị khác gửi đến.
  • Sinh dữ liệu ngẫu nhiên.

Như tiêu đề bài viết, mình sẽ nói về cách nhập dữ liệu từ thiết bị chuẩn. “Thiết bị chuẩn là gì mà sao nó nói nhiều thế nhỉ. Không giải thích thì làm sao mà người ta hiểu được”. Chắc chắn có bạn đang nghĩ điều này đúng không :D. Thực ra thiết bị chuẩn trong C++ nó không phải điều gì ghê gớm đâu ạ. Đây này mình đang dùng nó để viết bài cho các bạn thôi. Cái bàn phím đó, nói thiết bị chuẩn cho ra vẻ vậy thui :D.

Ngược lại với xuất dữ liệu sử dụng đối tượng cout và toán tử “<<“, để có thể nhập dữ liệu chúng ta có cin cộng với toán tử “>>“. Cũng tương tự như việc dẫn đường cho dữ liệu của đối tượng cout đến với stdout. Khi gặp câu lệnh cin, chương trình sẽ dừng lại để chúng ta có thể nhập dữ liệu. Việc nhập liệu kết thúc bằng dấu Enter. Lúc này dữ liệu của chúng ta nhập sẽ chuyển đến stdin. Việc còn lại của cin là đưa dữ liệu từ stdin vào biến. Lý thuyết nhiều quá rồi, thực hành thôi:

#include <iostream>
using namespace std;
int main()
{
    int bien1;
    cout<< "Nhap so nguyen: "; cin>> bien1;
    cout<< "So nguyen vua nhap: " << bien1;
}
  • Dòng 5: Khai báo biến để có thể lưu dữ liệu khi người dùng nhập.
  • Dòng 6: Thông báo cho người dùng việc nhập nhập dữ liệu.
  • Dòng 7: Câu lệnh cin giúp giá trị người dùng vừa nhập được đưa vào “bien1”.
  • Dòng 8: Hiển thị giá trị của “bien1”.

F11 để chạy và…….

Chương trình dừng lại để cho bạn có thể nhập dữ liệu.

Sau khi nhập dữ liệu các bạn ấn Enter để kết thúc việc nhập. Chương trình sẽ tiếp tục chạy: (hình).

Giờ mình có 2 vấn đề muốn đề cập tới các bạn:

  • Thứ nhất: Chương trình trên yêu cầu bạn nhập số nguyên đúng không. Không may chúng ta nhập số thực thì chuyện gì sẽ xảy ra nhỉ: (hình).


Cũng giống như khi các bạn khai báo biến mà gán giá trị không đúng với kiểu giá trị mà biến có thể lưu trữ vậy. Vậy thì làm sao để giúp người dùng nhập đúng dữ liệu. Vấn đề này mình sẽ nói ở những bài kế tiếp nhé.

  • Thứ hai: Chương trình trên chỉ có 1 biến nên chỉ cho phép lưu trữ 1 giá trị tại 1 thời điểm nhất định. Trường hợp người dùng nhập 2 số nguyên cách nhau bởi dấu cách thì sao nhỉ: (hình).


Các bạn có thể thấy ở trên mình đã nhập 2 số nguyên cách nhau bởi khoảng trắng (phím cách) nhưng vì chỉ có 1 biến để lưu giá trị nên số 5 sẽ được hiển thị lên màn hình. Vậy số 9 ở đâu, tất nhiên vì “không có nơi nào để đi” nên số 9 vẫn nằm trong đối tượng stdin. Khổ thân số 9 quá nhỉ. Giờ mình sẽ tìm “nhà” cho số 9 nè:

#include <iostream>
using namespace std;
int main()
{
    int bien1,bien2;
    cout<< "Nhap so nguyen: "; cin>>bien1>>bien2;
    cout<< "So nguyen vua nhap: "<<bien1<<" "<<bien2;
}

Mình đã khai báo thêm 1 biến là “bien2” đây chính là nơi sẽ “đón nhận đứa con bé bỏng” số 9 của chúng ta. Vẫn chưa đủ chúng ta cần phải “đưa nó về tận nhà nữa”. Ở câu lệnh cin mình đã thêm vào “bien2”. Khi “bien1” đã được đưa dữ liệu vào cin tiếp tục tìm kiếm trong sdtin xem có còn dữ liệu cho “bien2”. F11 để xem kết quả: (hình).

5.3. Chương trình giải phương trình bậc nhất.

Chúng ta sẽ viết lại chương trình. Cho phép người dùng nhập vào hệ số a và b. Hiển thị kết quả:

#include <iostream>
using namespace std;
int main()
{
    float a, b;
    cout<< "\n\n\t\t\t GIAI PHUONG TRINH BAC NHAT" << endl;
    cout<< "\nNhap he so a: "; 
    cin>>a;
    cout<< "\nNhap he so b: "; 
    cin>>b;
    cout<< "Ket qua: x = "<< -b/a;
}
  • Mình khởi tạo hai biến a, b mang kiểu dữ liệu là float. Tại sao không phải là int. Chúng ta cần đề phòng trường hợp phương trình bậc nhất có hệ số là số thực, vì vậy kiểu int là không hợp lí.

Kết quả: (hình)

Từ giờ các bạn có thể viết ra rất nhiều chương trình như tính diện tích hình chữ nhật nhập vào chiều dài , chiều rộng; tính chu vi tam giác….

Bài học này mình sẽ dừng ở đây. Nếu có gì không hiểu hoặc muốn góp ý các bạn có thể để lại comment ở cuối bài viết. Mình sẽ tiếp thu và cố gắng viết bài thật tốt. Bây giờ thì. Goodbye! See you again.