C++ Cơ bản dành cho người mới học lập trình

Bắt đầu học lâp trình bằng ngôn ngữ C++
4.6 (432 ratings) Instead of using a simple lifetime average, Udemy calculates a
course's star rating by considering a number of different factors
such as the number of ratings, the age of ratings, and the
likelihood of fraudulent ratings.
1,041 students enrolled
$19
$25
24% off
Take This Course
  • Lectures 72
  • Length 7 hours
  • Skill Level Beginner Level
  • Languages Vietnamese
  • Includes Lifetime access
    30 day money back guarantee!
    Available on iOS and Android
    Certificate of Completion
Wishlisted Wishlist

How taking a course works

Discover

Find online courses made by experts from around the world.

Learn

Take your courses with you and learn anywhere, anytime.

Master

Learn and practice real-world skills and achieve your goals.

About This Course

Published 7/2016 Vietnamese

What are the requirements?

  • Cần có một máy tính chạy Windows hoặc Mac hoặc Linux
  • Đường truyền internet tương đối tốt
  • Có kế hoạch học tập nghiêm túc

What am I going to get from this course?

  • Biết cách lập trình cơ bản
  • Có khái niệm về lập trình C++
  • Biết cách sử dụng thư viện C++ để chuẩn bị cho khóa học hướng đối tượng

What is the target audience?

  • Dành cho người không biết hoặc biết một ít lập trình
  • Dành cho học sinh / sinh viên muốn học lập trình, đặc biệt là C++
  • Dành cho người ngành khác, muốn chuyển sang ngành CNTT
  • Không dành cho người biết lập trình hoặc lập trình viên
  • Không dành cho người đã lập trình trong vòng 6 tháng gần đây

What you get with this course?

Not for you? No problem.
30 day money back guarantee.

Forever yours.
Lifetime access.

Learn on the go.
Desktop, iOS and Android.

Get rewarded.
Certificate of completion.

Curriculum

Section 1: Giới thiệu khóa học
05:44

Đạt là Embdded Software Engineer với hơn 5 năm kinh nghiệm, trong đó hơn 2 năm đầu làm việc ở Việt Nam và 3 năm, hiện nay, ở Singapore. Công việc chính của mình là nghiên cứu và phát triển các dự án Embedded viết bằng C/C++ và một số ngôn ngữ khác.

Ngoài thời gian đi làm, Đạt còn là một giảng viên Online. Trong khoảng hơn 3 năm gần đây Đạt bắt đầu dạy lập trình online trên Youtube. Các bạn có thể xem qua một số khóa học Đạt dạy trên Youtube. Các khóa học trên Youtube bao gồm C/C++ và Python với hơn 12k người sub và hơn 1.5 triệu views.

Mục tiêu dạy học của Đạt là đem đến kiến thức thực dụng cho mọi người, giúp cho các bạn học sinh, sinh viên định hướng được tương lai. Đồng thời các khóa học của mình còn có thể giúp cho các bạn ngành khác muốn chuyển ngành sang lập trình hoặc muốn ôn lại kiến thức lập trình. Qua quá trình dạy học, đã có nhiều người gửi email cảm ơn vì nhờ các khóa học đã giúp họ tìm được việc làm. Đạt mong muốn trong tương lai sắp tới mình có thể giúp được nhiều người hơn nữa.

Ngoài ra, Đạt còn là người sáng lập cộng đồng Dạy Nhau Học ở địa chỉ DayNhauHoc Com với mục tiêu mang đến kiến thức cho tất cả mọi người. Hướng mọi thành viên dạy cho người khác học. Bởi vì dạy chính là học.

Trong khóa học này, Đạt hi vọng sẽ mang đến các kiến thức tổng quan về ngôn ngữ C++ để làm nền tảng cho các khóa học C++ sắp tới.

Khóa học này bao gồm 5 khóa học nhỏ

  • C++ Cơ bản dành cho người mới học lập trình dạy các khái niệm cơ bản của C++, cách sử dụng thư viện để xây dựng chương trình
  • C++ Hướng đối tượng tập trung về hướng đối tượng, giới thiệu về lập trình giao diện, đồ họa
  • C++ Cấu Trúc Dữ Liệu và Giải Thuật tập trung về thư viện chuẩn STL như cách sử dụng vector, list, map và một số thuật toán như sort, find, ...
  • C++ Lập trình giao diện với Qt hướng dẫn cách lập trình giao diện với Qt
  • C++ Viết chương trình Hack Game với Qt hướng dẫn cách đọc vùng nhớ / ghi vùng nhớ lên một game, sử dụng Qt để thiết kế giao diện hoàn chỉnh


11:23
  1. Tại sao lại học lập trình?
    1. Bởi vì lập trình dạy chúng ta cách suy nghĩ
  2. Mục tiêu khóa học C++ cơ bản
  3. Tại sao lại chọn C++?
Section 2: Thiết lập môi trường lập trình
07:35

Hướng dẫn cách cài dặt VS 2015 chi tiết

04:50

Hướng dẫn cách cài dặt Code::Blocks chi tiết

06:27

Hướng dẫn cách sử dụng c9.io

Article

Cài đặt Code::Blocks trên Linux và XCode trên Mac

Section 3: Khái niệm cơ bản
05:13

* C++ hiện đại

    Ta có nhiều phiên bản C++
    C++98 - chuẩn hóa năm 98, được dùng nhiều
    C++11 - các project mới đang được chuyển dần sang
    C++14 - là phiên bản extend(mở rộng) của C++11.
    Khóa học này có sử dụng C++14
    C++17 - là phiển bản tương lai, đang được chuẩn bị :)
    Mỗi phiên bản là một sự thay đổi, bổ sung, lượt bớt để phù hợp với thời đại.
    C++ vẫn đang phát triển không ngừng ...

C++ Standard Library
    Hay còn gọi là thư viện chuẩn hoặc STL
    C++ có một bộ thư viện chuẩn thuộc dạng khủng nhất trong các ngôn ngữ lập trình
    Trong các cuộc thi giải thuật trên thế giới, thí sinh thường chọn C++ vì lý do
        Tốc độ xử lý nhanh
        Có bộ thư viện đầy đủ
        tính toán
        xử lý chuỗi
        sắp xếp, tìm kiếm
        quản lý dữ liệu
        nhập xuất

05:39
  1. Compile (biên dịch) một chương trình
  2. Linking (liên kết) chương trình
06:23

Phân tích chương trình hello world

03:30

Biên dịch(compile) chương trình

04:21

Liên kết (linking) chương trình

03:58
  • Ôn tập cực kỳ quan trọng, bạn không được bỏ qua
  • Tạo một project bằng
    • Visual Studio
    • CodeBlocks hoặc c9.io
  • Tự gõ tay vào toàn bộ nội dung của chương trình đầu tiên
  • Compile và chạy chương trình này
  • Tự sửa những lỗi có thể mắc phải khi code chương trình đầu tiên
13:11

Giải bài tập cho chương trình đầu tiên

07:39

Giải bài tập cho chương trình đầu tiên phần tiếp theo

Nói thêm về Comments
08:19
03:31

* Namespace

    Một project lớn sẽ có nhiều hàm khác nhau, các hàm này có thể bị trùng tên.
    Điều này dẫn đến việc chương trình của mình sẽ gọi nhầm hàm :)
    Ví dụ bạn có thể viết một hàm tên là sort. Nhưng trong thư viện chuẩn cũng có hàm sort. Khi bạn gọi sort, có thể là thư viện chuẩn được gọi.
    Để tránh điều này, ta cần namespace

* namespace std
    Namespace được đặt trước tên hàm trong namespace đó
    Đó là lý do tại sao ta hay viết std::cout, std::endl
        Bởi vì std là namespace
        cout và endl thuộc về namespace std
    Dấu :: được gọi là “scope resolution operator” dịch là
        toán tử phân giải phạm vi
    Nếu mình muốn có một đối tượng cũng tên là cout, thì mình có thể tạo namespace riêng. 
        Ví dụ dnh::cout ...

* Tạo namespace như thế nào?

    namespace dnh {
        // Tất cả mọi hàm, biến được khai báo trong
        // cặp ngoặc nhọn này đều thuộc về namespace dnh
        // Ví dụ nếu ta có hàm foo trong này
        // thì gọi hàm foo bằng dnh::foo

        int foo() { /* do something sily */ }
    }

* Hàm main trong namespace?
    Không được !!! Ngôn ngữ C++ không cho phép cho main() vào namespace
    Vậy main() có thuộc namespace nào không?
    Có, main() thuộc về namespace toàn cục, hay còn gọi là global namespace
    Tất cả mọi thứ được khai báo mà không thuộc vào namespace nào sẽ thuộc về global namespace. Có thể gọi mà không cần một cái name gì đặt ở phía trước :)

05:05

* Số Thập Phân
    Hàng ngày ta sử dụng hệ thập phân, ví dụ như 113, 911
    Mình đọc lên mấy số này và hiểu ngay là
        Một trăm Mười Ba
        Chín trăm Mười Một
    Mình hiểu được như thế là bởi vì mình biết
        113 = 1 * 10^2 + 1 * 10^1 + 3 * 10^0
            100 + 10 + 3
        911 = 9 * 10^2 + 1 * 10^1 + 1 * 10^0
            900 + 10 + 1
    Ta gọi đây là hệ số 10, thấy ở đâu cũng có số 10 không :D

* Số Nhị Phân
    Tuy nhiên máy tính thì không có 10 ngón tay như mình để có thể dùng hệ số 10 :D
    Máy tính chỉ hiểu 2 tín hiệu, on hoặc off. Thế nên máy tính rành hệ nhị phân hơn
    Ví dụ số 101 với máy tính sẽ là số 5 bởi vì
        101 = 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1*2*2 + 0*2 + 1*1
            = 4 + 0 + 1 = 5 ...

* Đổi số thập phân ra nhị phân
    Dùng máy tính :) Bấm Win + gõ calculator
    Học thuộc lòng các giá trị thông dụng

* Đổi bằng tay
    Cách này mình được học ở bậc phổ thông
    cho số n là hệ 10, để đổi sang hệ 2 mình làm như sau
    lấy n(5) chia lấy dư (mod) cho 2 => 5 % 2 = 1
        Dư ghi lại (1)
    gán n bằng n / 2 (bỏ phần dư) => 5 / 2 = 2
    lặp lại các bước trên cho tới khi n = 0
        2 % 2 = 0 => dư ghi lại (0)
        n = 2 / 2 = 1
        1 % 2 = 1 => dư ghi lại (1)
        n = 1 / 2 = 0 -- ngừng
    Ghi ngược số dư, ta được hệ 2 của 5 là: 101

Section 4: Nền tảng lập trình
07:48
  • nhập dữ liệu từ bàn phím
  • nhập vào tên
  • nhập vào tuổi
  • in ra màn hình
  • tất cả được tài trợ bởi hàm cin xD
06:57

Biến là gì?

Có thể làm gì với biến

  • tính toán trên biến với các phép toán + - * /
  • gán giá trị trên biến =

Có mấy kiểu biến

  • nhiều, nhưng có các kiểu chính sau
  • int = số nguyên bao gồm số âm và số dương
  • double = số mẻ xD
  • char = ký tự 'x' hoặc 'y' hoặc 'z'
  • string = chuỗi như “le tran dat” hoặc “day nhau hoc”
  • bool = luận lý tức là đúng(true) hoặc sai(false)

ví dụ về các kiểu dữ liệu

  • double so_me = 3.3;
  • char ky_tu = 'x'
  • bool isLifeFair = false;
08:57

Một số điều cần biết

  • cin dừng lại khi gặp khoảng trắng
    • cin sẽ đọc tiếp cho biến tiếp theo
    • Không thể nhập chuỗi có khoảng trắng bằng cin
  • nếu cin phát hiện lỗi, nó sẽ bỏ qua việc đọc dữ liệu
  • biến chưa gán giá trị sẽ chứa giá trị rác
    • Giá trị rác là giá trị random
    • hoặc giá trị được định nghĩa trước dành cho các biến chưa được gán giá trị
  • Khi việc đọc dữ liệu bị bỏ qua thì biến không bị gán giá trị mới
  • với << ta có thể dùng nhiều dấu << liên tiếp thì >> cũng có thể làm tương tự


01:37

Sửa bài tập:


  • Sửa lại chương trình nhập tên và tuổi để in ra số tháng thay vì số tuổi.
    • Ví dụ khi nhập vào 28, chương trình sẽ in ra 28 * 12 = 336 tháng
  • Sửa lại chương trình nhập tên và tuổi để có thể nhập vào số thực, hay còn gọi là số lẻ
    • ví dụ có thể nhập vào 28.08


07:24

Các phép toán trên số nguyên và số thực

  1. Các phép + - * /
  2. Phép lấy dư hay còn gọi là modulo: %
  3. Phép tăng 1: ++
  4. Phép giảm 1: --
  5. Phép tăng n: +=n
  6. Phép giảm n: -=n
  7. Phép nhân n: *=n
  8. Phép chia n: /=n
  9. phép chia lấy dư n: %=n (không áp dụng cho số thực)
  10. lấy căn: sqrt()
04:58

Giới thiệu các phép so sánh

  1. so sánh bằng ==
  2. so sánh khác !=
  3. so sánh lớn hơn >
  4. so sánh lớn hơn hoặc bằng >=
  5. so sánh bé hơn <
  6. so sánh bé hơn hoặc bằng <
03:18

Giới thiệu phép nối chuỗi với kiểu dữ liệu string

02:48

Khóa học này được thực hiện chung với nội dung bài viết hướng dẫn trên Dạy Nhau Học. Một số videos cần ra trước khi bài viết chuẩn bị xong cho nên Đạt quay trước.

Phần còn lại của bài viết đã được cập nhật trên diễn đàn, phần tiếp theo của khóa học sẽ được quay cùng với nội dung trên diễn đàn.

Điều này sẽ giúp cho các bạn có cơ hội đọc thêm tài liệu, hỏi trực tiếp trên mỗi bài học, ôn lại bài cũ, hướng dẫn người khác.

Đây là cách học hiệu quả nhất.

07:41

Bài này sẽ đi qua nội dung bài hướng dẫn được chuẩn bị bởi Vũ. Thông qua các bài hướng dẫn mình sẽ học ngôn ngữ C++. Thảo luận và hỏi đáp ở các topic ấy.

02:27

Ở bài này mình sẽ đi qua nhanh tài liệu chương trình đầu tiên với C++

Cấu trúc cơ bản của một chương trình CPP
05:58
03:02

Phần này mình đi qua lại cấu trúc cơ bản của một chương trình CPP, điểm qua một số bài tập và .. hết :D

03:15

Trong bài này mình học tới khái niệm một lệnh là gì. Một lệnh nói ngắn gọn là một dòng code.

Khối lệnh là nhiều dòng code, mà khối lệnh nó có một đặt điểm riêng mà Đạt sẽ nói sau.

Giới thiệu cho các bạn biết một số từ khóa trong ngôn ngữ C++

09:25

Trong bài này mình sẽ học khá nhiều thứ về std::cout, trong videos tiếp theo của videos này, bạn sẽ học thêm về các ký tự đặc biệt trong C++ mà ta có thể dùng std::cout để tương tác.


Ngoài ra, cout còn có thể được dùng để in ra kết quả của các phép toán.

06:43

Trong phần này ta sẽ học về các ký tự đặt biệt, dùng cout để in ra kết quả các phép toán.

Ôn tập và làm bài tập :)

06:36

Giới thiệu khái niệm Debug cùng các kiểu dữ liệu, nói thêm về kích thước của chúng.

Hằng số
05:40
Phạm vi của biến
09:26
Thời gian tồn tại của biến
05:07
03:27

* Các phép toán cơ bản

    Học cách sử dụng các phép toán cơ bản như phép cộng, trừ, nhân, chia, chia lấy phần dư, căn bậc 2, lũy thừa, giá trị tuyệt đối
    sử dụng thêm thư viện cmath để tính các phép toán phức tạp như căn bậc hai, lũy thừa, ...
* Toán tử một ngôi và hai ngôi
    unary operators
    binary operators

03:51

Thư viện cmath định nghĩa cho chúng ta một số hàm tính toán và chuyển đổi toán học cơ bản

Thư viện cmath
2 questions
04:35

Tăng giảm một biến với toán tử ++ và --

1 question

Ôn thêm toán tử tăng giảm

04:50

Trong bài này mình tìm hiểu về khái niệm độ ưu tiên. Mình chỉ cần nhớ độ ưu tiên cơ bản, không cần phải học thuộc bảng này.

Section 5: Thực hành với HackerRank
Cải tiến khóa học **** QUAN TRỌNG - CẦN XEM****
04:29
02:34

* Yêu cầu cần thiết

    Đã biết qua C++ hoặc vừa mới học xong khóa C++ cơ bản
    Khoái lập trình và muốn cải thiện kỹ năng của mình

* Mục tiêu khóa học
    Củng cố kỹ năng lập trình với C++
    Luyện code
    Code tốt hơn với Unit Test
    Cải tiến code :)
    Dựa trên nền tảng HackerRank

* HackerRank là gì?
    Hacker là gì?
    Là người khoái ngâm cứu cái mới :)
    HackerRank là gì?
    Là nơi dân lập trình vào luyện code
    Giống như nơi luyện cấp

* HackerRank có gì hay?
    Có hệ thống compiler online
    Đỡ mất công cài compiler trên máy
    Có hàng loạt các bài (quyền) code để ta luyện
    Có sẵn Unit Test để có thể biết được ta làm đúng hay sai
    Có các bài thi tuyển để vào làm các công ty to đầu trên thế giới
    Và hàng loạt cái hay khác ...

04:19

* Vào HackerRank thôi !!!

    Các bạn gõ vào browser ưa thích của mình đường dẫn: https://www.hackerrank.com/
    Nếu chưa có tài khoản thì các bạn bấm vào Sign UP
    Để nhanh chóng tạo tài khoản thì các bạn bấm Connect with
        Facebook - Google - Github
        Chọn cái nào cũng được

* Chọn khu vực luyện công :)
    Click vào Domains
    Chọn: 30 Days of Code
    30 Days of Code là một hệ thống luyện tập trong vòng 30 ngày để có thể giúp bạn học lập trình cơ bản
    Đây là 30 bài khác nhau, nói về những vấn đề cơ bản nhất trong lập trình
    Bây giờ mình vào xem vòng vòng 30 Days of Code xem thử nó có gì

* 30 Days of Code
    Sẽ mở từng bài mỗi ngày
    Sẽ cho mình thời gian vui chơi nhảy múa :)
    Học xong một bài thì chờ ngày hôm sau ta học tiếp
    Đạt có đăng ký 30 days of code chơi thử, nhưng mà cũng không có thời gian làm hết
    Thế nên Đạt sẽ vừa làm khóa học, vừa hoàn thành 30 days of code với các bạn

* Bắt tay vào luyện công nào :)
    Việc đầu tiên là bấm vào solve challenge
    Vì Đạt đã học xong một số bài rồi, nên trong phần 30 days of code của Đạt nó sẽ hiện nút Try Again

* Giao diện bài học
    Problem: Miêu tả vấn đề cần giải quyết
    Submissions: Lịch sử các giải pháp của mình
    Leaderboad: Bản xếp hạng, nó nhảm lắm =))
    Discussions: Chém gió, chia sẻ “bí kíp”, không nên xem trước khi làm bài =))
    Editorial: Bài giải, chưa giải được bài thì nó sẽ có cái khóa. Nếu cố tình xem bài giải thì bài đấy không được tính điểm
    Tutorial: Giáo trình, nhưng quên nó đi, Đạt sẽ chém gió giúp các bạn phần đấy

06:50

* Ngày 0: Hello, Wolrd!

    Vũ như cẩn, Hello, Wolrd! là bài đầu tiên
    Mục tiêu: của bài này là giúp ta làm quen với HackerRank
    Nhiệm vụ: 
        Đọc vào một dòng từ stdinput, HackerRank sẽ tự đồng truyền vào giúp mình, quá phẻ ^_^
        Sau đó mình sẽ in ra 2 dòng
            Hello, Wolrd
            Dòng vừa mới nhập vào từ stdin

* Xem lòng vòng ngày 0
    Nếu các bạn tự học, thì cái đầu tiên cần xem là task
    Nó sẽ cho bạn biết mình cần phải làm gì
    Trong bài này thì mình đã biết là nhập vào một chuỗi
    In ra Hello, Wolrd và chuỗi vừa nhập
    Sau đó là xem thêm các phần còn lại
    Đạt thấy quan trọng nhất là Sample Input và Sample Output. Vì nó cho mình biết được dữ liệu nhập vào là gì, yêu cầu in ra là gì?
    Phần quan trọng nhất là Editor

* Run code và submit code
    Run code: dùng để test thử code chạy đúng chưa với một vài test case đơn giản
    Submit Code: Dùng để gửi code lên test toàn bộ các test case xem có pass được bài học không
    Test Case: Là một bộ test bao gồm dữ liệu đầu vào và dữ liệu mong muốn đầu ra. Do HackerRank họ làm sẵn. Đây chính là giá trị của HackerRank. Làm bộ test này rất mất thời gian. Ta cố tận dụng bộ test này để luyện code nhé

06:00

* Ngày 1: Kiểu dữ liệu

    Mục tiêu: Ôn lại kiểu dữ liệu trong C++
    Nhiệm vụ: 
        Bài này mình có sẵn 3 biến: i, d, s
        Mình cần khai báo 3 kiểu dữ liệu: int, double và string
        Sau đó mình sẽ in ra 3 dòng
            Tổng của biến i và biến int mình tạo ra
            Tổng của biến d và biến double mình tạo ra
            Nối chuỗi s và chuỗi mình tạo ra ...

* Giải pháp 1

    // Declare second integer, double, and String variables.
    int my_int;
    double my_double;
    std::string my_string;
    // Read and save an integer, double, and String to your variables.
    std::cin >> my_int;
    std::cin >> my_double;
    std::getline(std::cin, my_string);
    // Print the sum of both integer variables on a new line.
    std::cout << my_int + i << std::endl;       
    // Print the sum of the double variables on a new line.
    std::cout << my_double + d << endl;
    // Concatenate and print the String variables on a new line
    // The 's' variable above should be printed first.
    std::cout << s + my_string << std::endl;

* Giải pháp 2
    // Declare second integer, double, and String variables.
    int my_int;
    double my_double;
    std::string my_string;
    // Read and save an integer, double, and String to your variables.
    std::cin >> my_int;
    std::cin >> my_double;
    // remove whitespace
    std::getline(std::cin, my_string);
    // Print the sum of both integer variables on a new line.
    std::cout << my_int + i << std::endl;       
    // Print the sum of the double variables on a new line.
    std::cout << std::fixed << std::setprecision(1) << my_double + d << endl;
    // Concatenate and print the String variables on a new line
    // The 's' variable above should be printed first.
    std::cout << s + my_string << std::endl;

* Giải pháp final
    // Declare second integer, double, and String variables.
    int my_int;
    double my_double;
    std::string my_string;
    // Read and save an integer, double, and String to your variables.
    std::cin >> my_int;
    std::cin >> my_double;
    // remove whitespace
    std::getline(std::cin >> std::ws, my_string);
    // Print the sum of both integer variables on a new line.
    std::cout << my_int + i << std::endl;       
    // Print the sum of the double variables on a new line.
    std::cout << std::fixed << std::setprecision(1) << my_double + d << endl;
    // Concatenate and print the String variables on a new line
    // The 's' variable above should be printed first.
    std::cout << s + my_string << std::endl;

03:31

* Mục tiêu: Ôn lại các phép toán trong C++

* Nhiệm vụ: 
    Tính tổng tiền của một bữa ăn
    HackerRank sẽ truyền vào giá bữa ăn, tiền tip và thuế
    Sau đó mình sẽ in ra tổng giá tiền của bữa ăn ...

* Đề bài
    Đề bài nhập vào 3 biến double: mealCost, tipPercent, taxPercent
    Mình cần in ra tổng giá trị của bữa ăn ...

* Giải pháp 1
    double mealCost;
    double tipPercent;
    double taxPercent;
    
    cin >> mealCost >> tipPercent >> taxPercent;

    double tip = mealCost * tipPercent / 100;
    double tax = mealCost * taxPercent / 100;
    double totalCost = mealCost + tip + tax;

    cout << "The total meal cost is " << totalCost << " dollars.";

* Giải pháp Final
    double mealCost;
    double tipPercent;
    double taxPercent;
    
    cin >> mealCost >> tipPercent >> taxPercent;

    double tip = mealCost * tipPercent / 100;
    double tax = mealCost * taxPercent / 100;
    double totalCost = mealCost + tip + tax;

    cout << "The total meal cost is " << round(totalCost) << " dollars.";

    return 0;

06:39

* Mục tiêu: Phân biệt sự khác nhau giữa class và thực thể

* Nhiệm vụ: 
    HackerRank sẽ khai báo sẵn một class cho mình
    Mình sẽ khai báo hàm dựng, hàm kiểm tra tuổi, và hàm tăng tuổi
        Hàm kiểm tra tuổi
            Nếu tuổi < 13 => in ra You are young ..
            Nếu tuổi >= 13 và <= 18 thì là You are teenager ..
            ngược lại là You are Old

* Đề bài:
Đề bài nhập vào số lượng test cases, theo sau là số tuổi

* Solution:
class Person{
    public:
        int age;
        Person(int initialAge);
        void amIOld();
        void yearPasses();
    };

    Person::Person(int initialAge){
        // Add some more code to run some checks on initialAge
        if (initialAge > 0 )
            this->age = initialAge;
        else {
            this->age = 0;
            std::cout << "Age is not valid, setting age to 0." << std::endl;
        }
    }

    void Person::amIOld(){
        // Do some computations in here and print out the correct statement to the console 
        if (this->age < 13)
            std::cout << "You are young." << std::endl;
        else if (this->age < 18)
            std::cout << "You are a teenager." << std::endl;
        else
            std::cout << "You are old." << std::endl;
    }

    void Person::yearPasses(){
        // Increment the age of the person in here
        this->age ++;
    }

02:04

* Mục tiêu: Ôn lại Mảng

* Nhiệm vụ: 
    HackerRank nhập vào một mảng
    Mình sẽ in ra mảng đó, nhưng là in ngược

10:31

* Mục tiêu: Ôn lại dictionaries và maps

* Nhiệm vụ: 
    HackerRank vào tên một người
    Mình sẽ in ra số điện thoại của người đó trong danh bạ điện thoại, hoặc in ra “Not Found”

Section 6: Cấu trúc rẽ nhánh
05:26

Mình sẽ tìm hiểu boolean là gì, computer hiểu gì về thế giới :)

06:17

Các toán tử thao tác với kiểu boolean

Boolean
4 questions
07:20

Giới thiệu lệnh halt, jump, loop và exceptions

Giới thiệu một số cấu trúc điều khiển
3 questions
08:42

Làm quen với lệnh if, tìm hiểu các cách sử dụng của lệnh if

04:42

Giới thiệu cách viết tắt của lệnh if

07:42

* Mục tiêu: Ôn lại điều kiện if

* Nhiệm vụ: 
    HackerRank tryền vào một con số
        Nếu đó là số lẻ, in ra chữ “Weird”
        Nếu là số chẵn, mà nằm trong đoạn [2,5] in ra chữ “Not Weird”
        Nếu là số chẵn, mà nằm trong đoạn [6,20] in ra chữ “Weird”
        Nếu là số chẵn, mà lớn hơn 20 in ra chữ “Not Weird”
    Số này nằm trong đoạn [1, 100] tức
        1 <= n <= 100

* Đề bài
    Đề bài nhập vào 1 số n với 1 <= n <= 100
    Mình cần in ra "Weird" hoặc "Not Weird"

* Giải pháp 1
    if(N%2==0){
        if(N>20){
            cout<<"Not Weird";
        }
        if(N>=2 && N<=5){
            cout<<"Not Weird";
        }
        if(N>=6 && N<=20){
            cout<<"Weird";
        }
    }else{
        cout<<"Weird";
    }

* Giải pháp Final
    bool isOdd(int N) {
        return N & 1;
    }

    bool isWeird(int N) {
        bool weird = true;
        bool notWeird = !weird;

        if ( isOdd(N) )
            return weird;

        if (2 <= N && N <= 5)
            return notWeird;

        if (6 <= N && N <= 20)
            return weird;

        return notWeird;
    }

    int main(){
        int N;
        cin >> N;
        isWeird(N) ? cout << "Weird" : cout << "Not Weird";
        return 0;
    }

Lệnh if
3 questions
08:22

Lệnh switch case để thay thế cho lệnh if khi có nhiều trường hợp tương tự nhau cần sử lý.

Lệnh switch case
4 questions
Section 7: Cấu trúc vòng lặp
08:13

Cấu trúc vòng lặp khiến chương trình thực hiện lặp đi lặp lại một chuỗi các câu lệnh cho đến khi không còn thõa mãn một điều kiện nào đó.

Vòng lặp While
2 questions
05:20

Một biến thể của vòng lặp While. Khác While ở một điểm là vòng lặp này sẽ thực hiện ít nhất một lần. Trong khi while có thể sẽ không thực hiện lần nào nếu điều kiện đầu vào sai.

Vòng lặp do ... while
3 questions
06:31

Vòng lặp for được sử dụng rất phổ biến, có thể dùng để thay thế while và do ... while. Tuy nhiên, chọn vòng lặp nào phù hợp cho mỗi công việc là tốt nhất. Để biết cách chọn các bạn cần hiểu bản chất, mục đích của mỗi vòng lặp và kinh nghiệm lập trình.

05:15

Tiếp tục giới thiệu một số cách sử dụng của vòng lặp for

Vòng lặp for
4 questions
08:03

Cách sử dụng lệnh break và continue để thay đổi luồng của vòng lặp

01:25

* Mục tiêu: Ôn lại vòng lặp

* Nhiệm vụ: 
    HackerRank nhập vào một số
    Mình sẽ in ra bảng cửu chương của số đó

05:04

* Mục tiêu: Ôn lại vòng lặp (nâng cao)

* Nhiệm vụ: 
    HackerRank nhập vào chuỗi
    Mình sẽ in ra chuỗi đó với các ký tự chỉ số chẵn bên trái, lẻ bên phải và cách nhau bằng một khoảng trắng

Section 8: Nâng cao về biến, kiểu dữ liệu
05:33

Đây là thư viện chuẩn <cstdint> được mang từ C sang để hỗ trợ code chuẩn hơn với kiểu dữ liệu nguyên

Kiểu ký tự
07:53
Kiểu ký tự
1 question
07:00

Giới thiệu khái niệm ép kiểu, tại sao lại có ép kiểu và cách máy tính suy nghĩ thế nào về ép kiểu

06:17

Đi vào chi tiết giải thích với ví dụ chứng minh ép kiểu

Ép kiểu dữ liệu
3 questions
04:27

Trong bài này mình sẽ hiểu cơ bản về địa chỉ của biến, đủ để học tiếp reference và sau này là con trỏ

06:49

Reference là alias hay là tên gọi khác của một biến, reference có thể thay thế biến khác.

Tham chiếu (reference)
2 questions
Section 9: Thực hành với Codefights
05:43

Cũng giống như HackerRank, CodeFights là một nền tảng giúp mình luyện code hằng ngày. Điểm khác biệt là codeFights được xây dựng như một mạng xã hội nên sẽ có nhiều tương tác giữa người chơi với nhau.

02:47

Đây là bài thứ hai của CodeFights, tính số lớn nhất có n chữ số

03:32

Cho n trẻ và m kẹo, cho rằng mọi đứa trẻ được ăn số kẹo là như nhau và kẹo thì không thể bẻ nhỏ ra được. Tính xem số kẹo tối đa mà số trẻ này có thể ăn được là bao nhiêu? Giả sử trẻ ăn bao nhiêu cũng hết :D

Students Who Viewed This Course Also Viewed

  • Loading
  • Loading
  • Loading

Instructor Biography

Le Tran Dat, Embedded Software Engineer / Instructor / Blogger

Đạt là Embdded Software Engineer với hơn 5 năm kinh nghiệm, trong đó hơn 2 năm đầu làm việc ở Việt Nam và 3 năm, hiện nay, ở Singapore. Công việc chính của mình là nghiên cứu và phát triển các dự án Embedded viết bằng C/C++ và một số ngôn ngữ khác.


Ngoài thời gian đi làm, Đạt còn là một giảng viên Online. Trong khoảng hơn 3 năm gần đây Đạt bắt đầu dạy lập trình online trên Youtube. Các bạn có thể xem qua một số khóa học Đạt dạy trên Youtube. Các khóa học trên Youtube bao gồm C/C++ và Python với hơn 12k người sub và hơn 1.5 triệu views.


Mục tiêu dạy học của Đạt là đem đến kiến thức thực dụng cho mọi người, giúp cho các bạn học sinh, sinh viên định hướng được tương lai. Đồng thời các khóa học của mình còn có thể giúp cho các bạn ngành khác muốn chuyển ngành sang lập trình hoặc muốn ôn lại kiến thức lập trình. Qua quá trình dạy học, đã có nhiều người gửi email cảm ơn vì nhờ các khóa học đã giúp họ tìm được việc làm. Đạt mong muốn trong tương lai sắp tới mình có thể giúp được nhiều người hơn nữa.

Ngoài ra, Đạt còn là người sáng lập cộng đồng Dạy Nhau Học ở địa chỉ DayNhauHoc Com với mục tiêu mang đến kiến thức cho tất cả mọi người. Hướng mọi thành viên dạy cho người khác học. Bởi vì dạy chính là học.

Ready to start learning?
Take This Course