Function trong C#

Các bạn đã giải bài tập chưa, nếu chưa thì tập giải đi nha. Trong khi giải bài tập, có những bài các bạn sẽ viết code rất là dài trong hàm Main. Điều này cũng bình thường thôi, nhưng mà nó sẽ làm cho chúng ra rối mắt khi đọc lại code, hoặc khi người khác review code của các bạn viết cũng rất khó khăn, hoặc có một số đoạn code các bạn có thể dùng đi dùng lại ở một vài chổ trong chương, chẳng lẽ cứ phải viết lại (hoặc copy/paste xuống dưới). Để viết code cho gọn, các bạn sẽ tách các đoạn logic code ra thành từng hàm, sau đó gọi lại hàm đó ở nhưng nơi mà các bạn muốn. Hôm nay, tui sẽ giới thiệu về cách viết hàm như thế.

1. Khái niệm hàm:

Hàm là một khối các dòng lệnh được đặt tên, để thực thi một thao tác nào đó, sau đó trả về một kết quả mong muốn. Hàm được tạo khi ta có nhu cầu sử dụng lại một khối lệnh nào đó nhiều lần ở những nơi khác nhau trong chương trình.

Cấu trúc của một hàm như sau:

Ở đây, tạm thời các bạn hiểu từ khóa static là để chúng ta có thể gọi cái hàm này trong hàm Main của chương trình nhá. Sau này học hướng đối tượng thì các bạn sẽ tìm hiểu kỹ hơn.

Các bạn chú ý, lệnh return là lệnh dùng để kết thúc một hàm đồng thời trả giá trị ra khỏi hàm. Thông thường, return sẽ được đặt ở cuối hàm, nhưng cũng có trường hợp ta có thể đặt return ở bất kỳ nơi đâu trong thân hàm tùy theo hoàn cảnh cụ thể.

Nếu như hàm của các bạn không cần phải trả giá trị về thì các bạn viết như sau:

Các bạn thay return_type bằng từ khóa void (có nghĩa là không trả giá trị gì), không cần dùng lệnh return. Đa số trường hợp, các bạn sẽ không dùng lệnh return, nhưng trong trường hợp cần dùng lệnh return để thoát khỏi hàm thì các bạn viết là return null;

Còn một lưu ý nữa là các bạn không được viết hàm bên trong một hàm khác nha. Cái này các bạn mới học thường viết như vầy lắm nà:

Để sử dụng hàm, các bạn chỉ cần gọi tên hàm như sau:

2. Tham số của hàm:

Khi viết hàm, chúng ta sẽ có nhu cầu là truyền cái gì đó vào trong hàm, sau đó tính toán, làm đủ thứ trò trong thân hàm, sau đó trả giá trị ra ngoài hàm. Do đó, để truyền giá trị vào trong hàm, ta cần cái tham số (parameter) để nhận giá trị đầu vào này.

Các biến p1, p2, …pn được gọi là biến tham số của hàm.

Ta viết lại hàm Add() với 2 tham số là x, y để làm phép công 2 số bất kỳ:

Biến: a, b. Biểu thức: (a * 2), (b + 5). Số nguyên: 3, 15 được gọi là các đối số (Argument) của hàm Add()

3. Phân loại tham số trong C#:

Trong C#, chúng ta có tất cả 6 loại tham số:

  1. Value parameter
  2. Reference parameter
  3. Output parameter
  4. In parameter
  5. Optional parameter
  6. Parameter array

Đối với Parameter Array thì chúng ta sẽ học trong bài Array.

4. Cách truyền tham số:

4.1. Value Parameter:

Giá trị truyền vào trong hàm sẽ được copy ra từ đối số (đa số trường hợp chúng ta sẽ truyền theo kiểu này). Điều này có nghĩa là nếu trong thân hàm các bạn có thay đổi giá trị của tham số thì cũng không ảnh hưởng đến giá trị của đối số.

Ví dụ kinh điển: hàm Swap là hàm hoán đổi giá trị của hai số a = 5, b = 10 ==> mong muốn sau khi hoán đổi: a = 10, b = 5

Kết quả:

Before call method:

a=5,b=10

After call method:

a=5,b=10

trước và sau khi gọi hàm Swap, giá trị của a, b vẫn không đổi. Các bạn xem hình sau sẽ hiểu cơ chế:

a, b đã được copy giá trị ra một vùng nhớ khác (màu cam), khi đó x, y chỉ tham chiếu đến giá trị vùng nhớ màu cam thôi, khi thay đổi giá trị x, y trong thân hàm thì cũng chỉ thay đổi giá trị trên vùng nhớ màu cam thôi. Cho nên cuối cùng giá trị của a,b ở vùng nhớ màu xanh không thay đổi. Đó là các truyền tham trị (value parameter)

4.2. Reference parameter:

Để thay đổi được giá trị của a, b sau khi gọi hàm Swap, ta dùng kiểu tham chiếu như sau, ta thêm từ khóa ref vào trước tham số và đối số khi muốn thay đổi giá trị.

Các biến truyền theo kiểu ref phải được khởi tạo giá trị trước khi truyền, và trong thân hàm ta có thể không thay đổi giá trị của nó cũng được

Kết quả:

Before call method:

a=5,b=10

After call method:

a=10,b=5

Sau khi gọi hàm Swap, thì giá trị của a, b đã thay đổi. Xem hình sau để hiểu cơ chế:

Do ta dùng từ khóa ref, cho nên lúc này a và x đều tham chiếu đến cùng một vùng nhớ do đó khi thay đổi giá trị của x thì a cũng thay đổi luôn (tương tự cho b và y).

4.3. Output parameter:

Thằng này thì dùng từ khóa out cho tham số và đối số. Nó cũng giống như truyền theo kiểu ref, giá trị của biến sẽ thay đổi sau khi gọi hàm.

Chú ý là nó khác kiểu ref ở điểm sau: có thể không cần khởi tạo giá trị trước khi truyền vào hàm, nhưng trong thân hàm bắt buộc phải thay đổi hoặc gán giá trị mới cho nó.

Kết quả:

Before call method:

a=0

After call method:

a=15

4.4. In parameter:

Cái loại này cũng ít dùng, nhưng tui cũng nói sơ qua cho các bạn biết. Truyền biến kiểu này thì dùng từ khóa in ở trước tham số và đối số, kiểu truyền biến của nó cũng giống như ref nhưng có điều là ta không thể thay đổi giá trị của nó trong thân hàm. Dùng kiểu này khi ta muốn chắc chắn rằng biến ta truyền vào có thể được dùng nhưng không thể được thay đổi.

4.5 Optional parameter:

Optional parameter là tham số cho phép ta đặt cho tham số một giá trị mặc định, có nghĩa là nếu ta không truyền đối số cho nó thì nó sẽ lấy giá trị mặc định đó để sử dụng.

Kết quả:

Name: Peter, Age: 18

Name: Mike, Age: 18

Name: Sarah, Age: 24

Chú ý: khi muốn truyền đối số cho hàm mà không theo thứ tự của tham số, các bạn viết như sau: tham_số: đối_số

Tóm lại, đối với tham số của hàm, thì 3 kiểu value, ref, out thì được dùng nhiều.

Bài tập cho các bạn, các bạn viết lại các bài tập ở bài trước bằng cách tạo hàm và gọi nó trong hàm Main nhé.

 

Read More

Bài 10: Tính tổng của n số nguyên dương đầu tiên

Bài 10:  Nhập số n > 0. Tính S(n) = 1 + 2 + 3 + … + n.

Solution:

Cho vòng lặp for chạy từ 1 -> n, ta cộng dồn từng số vào một biến sum

Run code online: https://repl.it/@lmdat/bai-10

Read More

Bài 05: Nhập một tháng có giá trị từ 1 – 12. Cho biết tháng đó thuộc quý mấy

Bài 05: Nhập một tháng có giá trị từ 1 – 12. Cho biết tháng đó thuộc quý mấy

Solution:

1. Kiểm tra tháng nhập vào phải là số > 0 và < 13

2. Kiểm tra xem tháng nhập vào thuộc đoạn nào:

1-3: quý I

4.6: quý II

7-9: quý III

10-12: quý IV

Run code online: https://repl.it/@lmdat/bai-05

Read More

Bài 02: Nhập 2 số thực x, y. Kiểm tra xem chúng cùng dấu hay trái dấu

Bài 02: Nhập 2 số thực x, y. Kiểm tra xem chúng cùng dấu hay trái dấu

Solution:

1. Kiểm tra tích của x và y, nếu > 0 thì cùng dấu, nhỏ hơn 0 thì trái dấu

2. Nếu x và y đều = 0 hoặc x = 0 hay y = 0 thì thông báo là không xác định

Run code online: https://repl.it/@lmdat/bai-02

Read More

bài 01: Viết chương trình tìm số lớn nhất giữa 3 số thực x, y, z

Bài 01:  Viết chương trình tìm số lớn nhất giữa 3 số thực x, y, z

Solution:

1. Tìm số lớn hơn giữa 2 số x và y, tạm gọi là max.

2. Sau đó tìm giá trị lớn hơn giữa max và z.

Chú ý: Các bạn có thể dùng hàm Math.max() để lấy giá trị lớn nhất giữa 2 số. Nhưng trong bài thì tui không sử dụng mà làm theo cái solution trên.

Run code online: https://repl.it/@lmdat/bai-01

Read More

Câu lệnh điều khiển trong C#

Đặt một câu hỏi như thế này nhé. Nếu có sẳn chương trình “Giải Phương trình Bậc 2”, vậy ta có thể giải luôn “Phương Trình Bặc 1” trong đây luôn được không? Hay muốn in ra màn hình 1000 lần câu “I Love You” mà không cần phải viết 1000 lần cầu lệnh in màn hình không? Câu trả lời là có, và câu lệnh điều khiển sẽ giúp các bạn.

Vậy câu lênh điều khiển là gì? Đơn giản, câu lệnh điều khiển là các câu lệnh giúp lập trình viên “bẻ lái” chương trình của mình sao cho thích hợp với các giá trị của dữ liệu đầu vào hoặc giá trị dữ liệu phát sinh trong quá trình một chương trình nó đang chạy. C# cho chúng ta các loại câu lệnh điều khiển như sau:

  • Câu lệnh rẽ nhánh – If
  • Câu lệnh lựa chọn – switch … case
  • Câu lệnh vòng lặp
  • Câu lệnh break và continue

1. Câu lệnh rẽ nhánh – if:

Trong câu lệnh rẽ nhánh, ta có các loại như sau:

if

Nếu điền kiện trả về (sử dụng toán tử logic) là:

true: chương trình sẽ thực hiện các lệnh trong khối ngoặc { }

false: bỏ qua, không thực hiện.

Chú ý: Nếu trong khối lệnh if chỉ có một câu lệnh thì ta không cần dấu ngoặc { } (như dòng 2, 3 trong ví dụ trên)

if … else

Khác với khối if, true thì thực hiện, false thì bỏ qua. Thì với if … else nếu điền kiện logic là:

true: thực hiện các lệnh trong đấu ngoặc { } của if, cụ thể là Statement-1

false: thực hiện các lệnh trong đấu ngoặc { } của else, cụ thể là Statement-2

if … else if [… else if] … else

Nếu chúng ta có nhiều hơn 2 lựa chọn thì sử dụng khối lệnh if … else if [… else if] … else

Tới đây thì đã có bài tập cho các bạn làm rồi đấy  Overjoy

 

2. Câu lệnh lựa chọn switch … case:

 

Cách dùng switch … case cũng giống như if … else if [… else if] … else nhưng khác một điểm là: các bạn để ý nhé, cứ mỗi một value của từng case mà thỏa cái expression của switch thì nó thực hiện các lệnh bên trong nó và cuối cùng phải có lệnh break để kết thúc cái case đó và thoát ra khối lệnh switch … case.

Nếu như không có lệnh break thì nó sẽ nhảy xuống trường hợp kế tiếp để thực hiện. Nếu không có value nào thỏa expression thì nó nhảy vào default luôn sau đó mới thoát khối lệnh switch … case

 

3. Câu lệnh vòng lặp

Chúng ta thường sử dụng các vòng lặp sau: for, while, do … while

for:

Nếu condition còn là true thì Statement sẽ còn được thực hiện. Vòng lặp sẽ dừng nếu Condition là false hoặc dùng lệnh break;

Đơn giản

Với đoạn code trên thì:

Initializer là int i = 0; Condition là i < 10; IterationExpr là i++. Theo như hình vẽ thì:

  1. Đầu tiên vòng lặp for sẽ kiểm tra xem i có nhỏ hơn 10 hay không, lúc này i=0 nhỏ hơn 1000.
  2. Tiếp theo là nó sẽ thực hiện câu lệnh Console.Writeline(“I Love You”);
  3. Sau đó nó sẽ tăng giá trị i lên 1 bằng lệnh i++, rồi quay lên bước 1 để kiểm tra i tiếp và cứ như thế cho đến khi i có giá trị là 1000 thì lúc này điều kiện i < 1000 là false, khi đó vòng lặp for kết thúc.

Cho đếp phức tạp:

lồng if trong for:

lồng switch … case trong for:

while:

  • Trong khi condition còn là true thì Statement được thực hiện. Nếu condition là false hoặc gặp câu lệnh break; thì dừng và thoát khỏi vòng lặp.
  • Đối với vòng lặp while thì nó kiểm tra condition trước khi thực hiện.

Condition là z > 0. Nếu i vẫn còn lớn hơn 0 thì thực hiện vòng lặp.

Đoạn code trên thực hiện như sau:

  1. Đầu tiên z có giá trị là 5, kế tiếp vòng lặp while sẽ kiểm tra xem z có lớn hơn 0 hay không, lúc này z=5 lớn hơn 0.
  2. Thực hiện lệnh Console.WriteLine(z); Sau đó thực hiện lệnh z -= 1 để giảm giá trị z xuống còn 4.
  3. Tiếp tục quay lên bước 1 kiểm tra tiếp z có lớn hơn 0 hay không cho đến khi lệnh z -= 1 giảm giá trị xuống còn 0 thì lúc này condition z > 0 là false, khi đó vòng lặp while dừng lại và giá trị z in ra mằn hình là từ 5 4 3 2 1.

Một ví vụ khác, Secret Number:

do … while:

 

  • Thực hiện Statement trong khi Condition là true. Nếu condition là false hoặc gặp lệnh break; thì dừng.
  • do … while thì ngược với while là nó thực hiện Statement ít nhất 1 lần rồi mới kiểm tra condition.
  • Các bạn chú ý cái dấu ; màu đỏ sau đóng ngoặc của condition nhé, không có là nó báo lỗi đấy.

Condition là k < 10.

Đoạn code này nó chạy như vậy nè các bạn:

  1. Đầu tiên nó thực hiện câu lệnh Console.WriteLine(k++); và đồng thời tăng giá tri k thêm 1 bằng lệnh k++.
  2. Rồi sau đó nó mới kiểm tra k xem có nhỏ hơn 10 hay không, lúc này k=1 vẫn nhỏ hơn 10.
  3. Tiếp tục quay lên bước 1 thực hiện câu lệnh Console.WriteLine(k++); và lại tăng k thêm 1 cho đến khi k có giá trị là 10 thì vòng lặp dừng.

Viết lại ví dụ Secret Number:

4. Break và Continue:

  • Break: dùng để thoát khỏi vòng lặp hoặc kết thúc một case của switch.
  • Continue: dùng để bỏ qua những dòng lệnh sau nó và tiếp tục vòng lặp.

Break:

Continue:

Để tiện cho việc viết code, tui giới thiệu các bạn một số hàm tính toán và hàm nhập xuất console:

Nhập xuất màn hình:

Sử dụng lớp Console trong namespace System

Console.Write() In một chuỗi ra màn hình
Console.WriteLine() In một chuỗi ra màn hình, kết thúc chuỗi là ký tự xuống dòng
Console.Read() Đọc một ký tự được nhập từ bàn phím
Console.ReadLine() Đọc một chuỗi ký tự được nhập từ bàn phím

 

Để Convert các giá trị nhập vào từ bàn phím. Chúng ta dùng lớp Convert:

Convert.ToInt16() Convert.ToDouble()
Convert.ToInt32() Convert.ToBoolean()
Convert.ToInt64() Convert.ToString()
Convert.ToFloat() Convert.ToChar()

 

Tính toán:

Sử dụng lớp Math cũng trong namespace System:

Math.Abs(x) Lấy trị tuyệt đối của x
Math.Max(x, y) Trả về giá trị lớn hơn
Math.Min(x, y) Trả về giá trị nhỏ hơn
Math.Sqrt(x) Lấy căn bậc 2 của x
Math.Pow(x, n) Lũy thừa bậc n của x
Math.Round() Làm tròn số
Math.Floor(x) Làm tròn dưới
Math.Ceiling(x) Làm tròn trên

BÀI TẬP:

Bài 01: Viết chương trình tìm số lớn nhất giữa 3 số thực x, y, z được nhập từ bàn phím.

Bài 02: Nhập 2 số thực x, y. Kiểm tra xem chúng cùng dấu hay trái dấu.

Bài 03: Giải phương trình bậc 1 ax + b = 0 với a, b là các số thực được nhập từ bàn phím.

Bài 04: Giải phương trình bậc 2 ax2 + bx + c = 0 với a, b, c là các số thực được nhập từ bàn phím. Xét luôn cả trường hợp phương trình bậc 1.

Bài 05: Nhập một tháng có giá trị từ 1 – 12. Cho biết tháng đó thuộc quý mấy.

Bài 06: Viết chương trình nhập ngày, tháng, năm. In ra màn hình ngày kế tiếp (ngày, tháng, năm)

Bài 07: Viết chương trình nhập ngày, tháng, năm. In ra màn hình ngày trước đó (ngày, tháng, năm)

Bài 08: Viết chương trình nhập ngày, tháng, năm. Tính xem ngày đó là ngày thứ bao nhiêu trong năm.

Bài 09: Nhập vào một số nguyên có giá trị từ 10 – 99999. In ra màn hình cách đọc số này.

Bài 10: Nhập số n > 0. Tính S(n) = 1 + 2 + 3 + … + n.

Bài 11: Nhập số n > 0. Tính S(n) = 12 + 22 + 32 + … + n2.

Bài 12: Nhập số n > 0. Tính S(n) = 1 + 1/2 + 1/3 + … + 1/n.

Bài 13: Nhập số n > 0. Tính S(n) = 1/2 + 1/4 + … + 1/2n.

Bài 14: Nhập số n > 0. Tính S(n) = 1+ 1/3 + 1/5 + … + 1/(2n+1).

Bài 15: Nhập số n > 0. Tính S(n) = 1/(1*2) + 1/(2*3) + … + 1/(n*(2n+1)).

Bài 16: Nhập số n > 0. Tính S(n) = 1/2 + 2/3 + 3/4 + … + n/(n+1)

Bài 17: Nhập số n > 0. Tính S(n) = 1 * 2 * 3 * … * n

Bài 18: Nhập số n > 0, x > 1. Tính F(x,n) = xn

Bài 19: Nhập số n > 0. Tính S(n) = 1 + (1 * 2) + (1 * 2 * 3)  + … + (1 * 2 * 3  … * n)

Bài 20: Nhập số n > 0, x > 1. Tính S(n) = x + x2/2! + x3/3! + … + xn/n!

Bài 21: Nhập số n > 0, x > 1. Tính S(n) = 1 + x2/2! + x4/4! + … + x2n/(2n)!

Bài 22: Nhập số n > 0, x > 1. Tính S(n) = 1 + x + x3/3! + x5/5! + … + x2n+1/(2n+1)!

Bài 23: Liệt kê tất cả “ước số” của số nguyên dương n.

Bài 24: Tính tổng tất cả “ước số” của số nguyên dương n.

Bài 25: Tính tích tất cả “ước số” của số nguyên dương n.

Bài 26: Liệt kê các “ước số lẻ” và “ước số chẳn” của số nguyên dương n.

Bài 27: Nhập số nguyên dương n > 0. Tính tổng các “ước số” của nó nhưng nhỏ hơn chính nó.

Bài 28: Tìm “ước số” lẻ lớn nhất của số nguyên dương n.

Bài 29:  Số hoàn thiện (hay còn gọi là số hoàn chỉnh, số hoàn hảo) là số nguyên dương có tổng các ước số nguyên dương(ko kể chính nó) bằng chính nó. Nhập một số nguyên dương n. Kiểm tra xem n có là số hoàn thiện hay không

Bài 30: Số nguyên tố là số chỉ chia hết cho 1 và chính nó. Nhập một số nguyên dương n. Kiểm tra xem n có là số nguyên tố hay không.

Bài 31: Số amstrong là số mà tổng lũy thừa bậc n của các chữ số bằng chính nó với n là số chữ số (153 = 1^3 + 5^3 + 3^3). Nhập một số nguyên dương n. Kiểm tra xem n có là số amstrong hay không

Bài 32: Số chính phương hay còn gọi là số hình vuông là số tự nhiên có căn bậc 2 là một số tự nhiên. Nhập một số nguyên dương n. Kiểm tra xem n có là số chính phương hay không.

Bài 33: Tìm USCLN, BSCNN của 2 số a và b.

Bài 34: Tính S(n) = √(2 + √(2 + √(2 + … + √(2 + √2)))), có n dấu căn

Bài 35: Tính S(n) = √(n + √(n-1 + √(n-2 + … + √(2 + √1)))), có n dấu căn

Bài 36: Tính S(n) = √(1 + √(2 + √(3 + … + √(n-1 + √n)))), có n dấu căn

Bài 37: Tính S(n) = √(n! + √((n-1)! + √((n-2)! + … + √(2! + √1!)))), có n dấu căn

Bài 38: nhập số nguyên dương n > 1. Tìm giá trị nguyên k lớn nhất sao cho S(k) < n, với S(k) = 1 + 2 + 3 + .. + k.

Bài 39: Đếm số lượng chữ số của một số nguyên dương n.

Bài 40: Tính tổng/tích các chữ số của một số nguyên dương n.

Bài 41: Đếm số lượng chữ số chẳn/lẻ của một số nguyên dương n.

Bài 42: Tính tổng lẻ và tích chẳn các chữ số của một số nguyên dương n.

Bài 43: tìm số đảo ngược của một số nguyên dương n. Ví dụ: 12 => 21, 1123 => 3211, 56435 => 53465

Bài 44: Tìm chữ số nhỏ nhất/lớn nhất của một số nguyên dương n.

Bài 45: Kiểm tra số nguyên dương n có phải là số đối xứng. Vi dụ: 131, 1221, 14341, 4566654

Bài 46: Viết chương trình in bảng cửu chương từ 1 – 9

Bài 47: Kiểm tra năm nhuận: Biết năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100

Bài 48: In dãy fibonacci. Ví dụ: 0, 1, 1, 2, 3, 5, 8, 13….

Bài 49: tính Pi bằng phương pháp Monte Carlo.

Bài 50: Nhập số nguyên dương n. Liệt kê các số chính phương, số nguyên tố, số hoàn thiện, số amstrong nhỏ hơn n

Read More

Kiểu dữ liệu – Biến – Toán tử trong C#

Trong bài hôm nay, tui sẽ nói qua các kiểu dữ liệu built-in của C#, cách khai báo biến và các toán tử thường sử dụng. Bài này hơi lý thuyết một tí, nhưng cũng phải ngó qua một tí xem sao nhé các bạn.

1. Kiểu dữ liệu built-in:

Các thông tin mà chúng ta tiếp cận hằng ngày trên khắp mọi nẻo của phương tiện truyền thông ví dụ như:

  • Giá USD hôm nay bao nhiêu
  • Chỉ số chứng khoán hôm nay lên hay xuống
  • Hôm nay ai sẽ bị làm “củi” để đốt lò……

Để hiển thị, lưu trữ các thông tin này thì chúng ta cần có kiểu dữ liệu để mang nó vào trong chương trình và sau đó xử lý. Vậy kiểu dữ liệu là gì?

Kiểu dữ liệu (data type) là một tập hợp gồm các nhóm dữ liệu:

  • Có cùng đặc tính
  • Có cùng các lưu trữ
  • Có cùng cách thao tác xử lý

Cụ thể trong C#, có các loại kiểu dữ liệu built-in như sau:

Integer

Name .NET Type Description Range
sbyte System.SByte 8-bit signed integer -128:127 (-27 : 27 – 1)
short System.Int16 16-bit signed integer -32,768:32,767 (-215 : 215 – 1)
int System.Int32 32-bit signed integer -2,147,483,648:2,147,483,647 (-231 : 231 – 1)
long System.Int64 64-bit signed integer -9,223,372,036,854,775,808:
9,223,372,036,854,775,807 (-263 : 263 – 1)
byte System.Byte 8-bit unsigned integer 0:255 (0 : 28 – 1)
ushort System.UInt16 16-bit unsigned integer 0:65,535 (0 : 216 – 1)
uint System.UInt32 32-bit unsigned integer 0:4,294,967,295 (0 : 232 – 1)
ulong System.UInt64 64-bit unsigned integer 0:18,446,744,073,709,551,615 (0 : 264 – 1)

Floating-Point:

Name .NET Type Description Range
float System.Single 32-bit, single-precision
floating point
-3.4 x 1038 : 3.4 x 1038
double System.Double 64-bit, double-precision
floating point
±5.0 x 10-324 : ±1.7 x 10308

 

Decimal:

Name .NET Type Description Range
decimal System.Decimal 128-bit, high-precision decimal notation ±1.0 x 1028 : ±7.9 x 1028

 

Boolean:

Name .NET Type Description Range
bool System.Boolean True or false true or false

 

Char:

Name .NET Type Description Range
char System.Char Unicode character Represents a single 16-bit (Unicode) character

 

2. Biến – Variable:

Biến (variable) là một vùng bộ nhớ trên RAM, dùng để lưu giữ một giá trị nào đó khi chương trình đang chạy, và giá trị này có thể thay đổi hoặc không.

Một biến là một ánh xạ tương ứng của dữ liệu được chứa trên RAM.

Khai báo biến:

Khai báo biến trong C# được viết như sau:

<data_type> var_name;

hoặc:

<data_type> var_name = value | defined_var;

Giá trị phải tương ứng với kiểu dữ liệu

3. Toán tử – Operator:

Toán tử là các ký hiệu để thực thi một thao tác tính toán nào đó. C# cung cấp các loại toán tử như sau:

Simple Assignment Operators – Toán tử gán

  • Được sử dụng nhiều nhất khi lập trình.
  • Dùng để gán một giá trị hay một toán hạng bên phải cho toán hạng bên trái.
  • Ký hiệu là dấu “=”

Simple Arithmetic Operators – Toán tử số học

Giả sử có hai biến a = 17 và b = 4

Toán tử Mô tả Biểu thức Kết quả
+ Cộng a + b 21
Trừ a – b 13
* Nhân a * b 68
/ Chia (lấy phần nguyên) a / b 4
% Chia (lấy phần dư) a % b 1

 

Comparison Operators – Toán tử so sánh

Giả sử có hai biến a = 13 và b = 8

Toán tử tả Biểu thức Kết quả
> Lớn hơn a > b true
>= Lớn hơn hoặc bằng nhau a >= b true
< Nhỏ hơn a < b false
<= Nhỏ hơn hoặc bằng nhau a <= b false
== Bằng nhau a == b false
!= Không bằng nhau a != b true

 

Conditional Logical Operators – Toán tử logic điều kiện

Dùng để kết hợp kết quả của nhiều biểu thức điều kiện lại với nhau.

Giả sử có 4 biến: a = 10, b = 4, c = 5, d = 2

Toán tử Mô tả Biểu thức Kết quả
&& Logical AND (a > b) && (c > d) true
|| Logical OR (a < b) || (c > d) true
! Logical NOT !(a == b) true

 

Bitwise Operators – Toán tử logic trên bit

Đây là toán tử logic nhưng nó được sử dụng trên bit. Toán tử này cũng ít dùng

Toán tử tả Biểu thức
& Bitwise AND a & b
| Bitwise OR a | b
^ Bitwise XOR a ^ b
~ Bitwise Negation ~a

 

Shift Operators – Toán tử dịch chuyển bit

Là cách dịch bit qua trái hoặc qua phải. Sau khi dịch chuyển sang trái hoặc sang phải bao nhiêu bit, các bit còn trống thì thêm 0. Toán tử này cũng ít dùng, nên các bạn cũng không cần quan tâm nó nhiều lắm.

Giả sử: a = 34, b = 7

Toán tử tả Biểu thức Kết quả
>> Dịch sang phải 3 bit a >> 3 3
<< Dịch sang trái 3 bit b << 3 56

 

Increment and Decrement Operators – Toán tử tăng giảm

Dùng để tăng 1 hoặc giảm 1. Nó là kết hợp của một phép cộng/trừ với một phép gán.

Toán tử Biểu thức tả
++ (2 dấu cộng viết liền nhau) ++a Tăng giá trị thêm 1 và trả về giá trị mới
a++ Trả về giá trị hiện tại, sau đó tăng thêm 1
— (2 dấu trừ viết liền nhau) –a Giảm giả trị đi 1 và trả về giá trị mới
a– Trả về giá trị hiện tại, sau đó giảm đi 1

 

Assignment and Lambda Operators – Toán tử gán rút gọn

Cái này dùng hơi bị nhiều luôn nhé

Toán tử Biểu thức Biểu thức tương tương
+= a += (expr) a = a + (expr)
-= a -= (expr) a = a – (expr)
*= a *= (expr) a = a * (expr)
/= a /= (expr) a = a / (expr)
%= a %= (expr) a = a % (expr)
<<= a <<= (expr) a = a << (expr)
>>= a >>= (expr) a = a >> (expr)
&= a &= (expr) a = a & (expr)
|= a |= (expr) a = a | (expr)
^= a ^= (expr) a = a ^ (expr)

 

The Conditional Operator – Toán tử điều kiện

Condition ? expr_1 : expr_2;

Nếu condition có giá trị là true thì nó trả về expr_1, ngược lại thì trả về expr_2. Cái này khi học tới phần câu lệnh rẽ nhánh if, sẽ minh họa rõ hơn cho các bạn.

Tạm thời các bạn cứ chấp nhận như vậy đi. Sau này, khi vào các bài sau, có bài tập thì các bạn sẽ hiểu rõ hơn.

Read More

Tổng quan về ngôn ngữ C#

Do tui sẽ dùng ngôn ngữ C# là chính để minh họa các kỹ thuật lập trình, cho nên tui cũng muốn giới thiệu tổng quan về ngôn ngữ C# cho các bạn biết qua trước.

1. Lập trình là gì?

Nói theo cách bình dân học vụ thì lập trình là lập ra những chương trình bắt máy tính làm theo, thực thi một nhiệm vụ, một công việc nào đó. Ví dụ:

  • Chương trình giải phương trình bậc II
  • Chương trình soạn thảo notepad.
  • Chương trình kế toán.

Nhìn tổng thể thì một chương trình máy tính nó gồm 3 khối như sau:

2. Ngôn ngữ lập trình:

Để máy tính nó hiểu chúng ta muốn nói gì, thì phải có ngôn ngữ riêng để giao tiếp với nó, ra lệnh cho nó làm thì nó mới làm. Vậy là ngôn ngữ lập trình nó ra đời, tính đến thời điểm này thì có hàng tá ngôn ngữ từ dễ hiểu đến khó hiểu, ví dụ như: C, C++, C#, Java, PHP, Javascript, Python, Scala, Kotlin….. Đến đây, các bạn có thể ngạc nhiên: douma, mày giỏi dữ máy tính, hiểu hết hàng tá ngôn ngữ kia luôn hả?

Xin thưa là không, cái này chỉ là cách chúng ta chuyển tiếp ngôn ngữ tự nhiên (Tiếng Việt, Tiếng Tàu, Tiếng Thái, Tiếng Pháp….) sang ngôn ngữ lập trình thôi. Sau đó, sẽ có một trình biên dịch hoặc trình thông dịch để chuyển ngôn ngữ lập trình thành mã máy (chỉ là một dãy số 0 và 1) thì khi đó máy tính nó mới hiểu.

Cụ thể ở đây là ngôn ngữ C#. Có thể nói C# là ngôn ngữ chính trong .NET Framework của Microsoft với những điểm sáng sau:

  • C# là ngôn ngữ thuần hướng đối tượng.
  • Kết hợp được điểm mạnh của C/C++ và Java
  • Đơn giản, hiện đại, dễ học

3. Keyword trong C#:

Khi khai báo TÊN BIẾN, TÊN HÀM hoặc TÊN CLASS thì không được dùng những keyword này. Các keyword này đều phải viết chữ thường (lowercase) khi sử dụng.

abstract const extern int out short typeof
as continue false interface override sizeof uint
base decimal finally internal params stackalloc ulong
bool default fixed is private static unchecked
break delegate float lock protected string unsafe
byte do for long public struct ushort
case double foreach namespace readonly switch using
catch else goto new ref this virtual
char enum if null return throw void
checked event implicit object sbyte true volatile
class explicit in operator sealed try while

4. Quy tắc đặt tên biến, hàm, class:

  • Không có khoản trắng (space) giữa các ký tự.
  • Ký tự đầu tiên phải là: a-z, A-Z, _, @, không được là số 0-9 hoặc các ký tự đặc biệt: # % & ! *…
  • Các ký tự tiếp theo có thể là a-z, A-Z, 0-9, _, nhưng không chứa @ hoặc các ký tự đặc biệt: # % & ! *…

Để tiện cho việc thực hành, các bạn vào xem bài sau để cài đặt bộ Visual Studio bản Free:

https://codingpearls.com/revit-addin-csharp/cai-dat-visual-studio-2017-community.html

Read More