Wednesday, August 19, 2015

Đại Số Trừu Tượng

Đại số trừu tượng là một ngành toán học nghiên cứu các cấu trúc đại số như nhóm, vành, trường, hay các cấu trúc tổng quát khác.

I. Nhóm
1. Định nghĩa:  
Nhóm (G, *) là một tập hợp G với một phép toán hai ngôi * thỏa mãn các tiên đề sau:
G1. Tính đóng: Với ∀a, b ∈ G, thì a * b ∈ G.
G2. Tính kết hợp: Với ∀a, b, c ∈ G, thì (a * b) * c = a * (b * c).
G3. Phần tử đơn vị (trung hòa): Có một phần tử đơn vị e ∈ G
sao cho a * e = a và e * a = a với mỗi phần tử a ∈ G.
G4. Phần tử nghịch đảo: Với mỗi phần tử a ∈ G, có một phần tử nghịch đảo a-1 ∈ G
sao cho a * a-1 = e và a-1 * a = e.
Chú ý:
1) Ta đã dùng kí hiệu * cho phép toán của nhóm.
Khi + là phép toán của nhóm thì tổng của a và b sẽ là a+b.
Khi . là phép toán của nhóm thì tích của a và b sẽ là a.b; ta thường viết ab thay cho a.b.
Thông thường, tổng hay tích không có nghĩa là cộng hay nhân những con số.
2) Khi không có sự lầm lẫn, ta dùng G thay cho (G,*).
2. Ví dụ:  
1) Tập số thực (R) là một nhóm với phép cộng (+):
a. Với ∀a, b ∈ R: a + b ∈ R, (tính đóng).
b. Với ∀a, b, c ∈ R: (a + b) + c = a + (b + c), (tính kết hợp).
c. Với ∀a ∈ R: a + 0 = a, (0 là phần tử đơn vị).
d. Với ∀a ∈ R: –a + a = 0, (-a là phần tử đối lập).
2) Tập số thực khác không (R*) là một nhóm với phép nhân (.):
a. Với ∀a, b ∈ R*: ab ∈ R*, (tính đóng).
b. Với ∀a, b, c ∈ R*: (ab)c = a(bc), (tính kết hợp).
c. Với ∀a ∈ R*: a1 = a, (1 là phần tử đơn vị).
d. Với ∀a ∈ R*: aa-1 = 1, (a-1 là phần tử nghịch đảo).
3) Tập Z5 = {0, 1, 2, 3, 4} là một nhóm với phép cộng modulo 5.

 








Giả sử mỗi số của tập Z5 là một điểm nằm trên vòng tròn đơn vị và cách đều nhau.
Để cộng a và b, bắt đầu với a và di chuyển theo chiều kim đồng hồ b đơn vị quanh vòng tròn, thì a + b sẽ là điểm cuối.
Ví dụ: 3 + 2 = 0, 3 + 3 = 1, …
Như vậy:
a. Với ∀a, b ∈ Z5: a + b ∈Z5, (tính đóng).
b. Với ∀a, b, c ∈ Z5: (a + b) + c = a + (b + c), (tính kết hợp).
c. Với ∀a ∈ Z5: a + 0 = a, (0 là phần tử đơn vị).
d. Với ∀a ∈ Z5: a + (5 – a) = 5, trùng với 0, (5-a là phần tử đối lập).
4) Tương tự, tập Zn = {0, 1, 2, 3, …, n – 1} là một nhóm với phép cộng modulo n.
Zero là phần tử đơn vị, n-a là phần tử đối lập của a vì a + (n - a) = n.

II. Tính chất của nhóm:
1. Định lý: Phần tử đơn vị của một nhóm (G, *) là duy nhất.
Chứng minh:
Giả sử (G,*) có hai phần tử đơn vị là e và f.
Thì theo G3, ta có ef = e và ef = f. Suy ra, e = f.
Vậy, phần tử đơn vị của (G, *) là duy nhất, ký hiệu eG. 
2. Định lý: Phần tử nghịch đảo của mỗi phần tử thuộc (G, *) là duy nhất.
Chứng minh:
Giả sử một phần tử g ∈ G có hai phần tử nghịch đảo là h và k.
Thì h = he = h(gk) = (hg)k = ek = k (theo G2, G3, G4).
Vậy, phần tử nghịch đảo của một phần tử g ∈ G là duy nhất, ký hiệu g-1. 
3. Định lý: Với ∀a, b, c ∈ (G, *),
1) Nếu ab = ac, thì b = c.
2) Nếu ba = ca, thì b = c.
Chứng minh:
1) Giả sử ab = ac, thì nhân hai vế bên trái của ab = ac với a-1, ta có:
a-1(ab) = a-1(ac)
(a-1a)b = (a-1a)c
eb = ec
b = c
2) Tương tự, nhân hai vế bên phải của ba = ca với a-1, ta có b = c. 
4. Định lý: Với ∀a, b ∈ (G, *), nếu ab = e thì a = b-1 và b = a-1.
Chứng minh:
Nếu ab = e, thì ab = a a-1 và b = a-1. Tương tự, a = b-1. 
5. Định lý: Với ∀a ∈ (G, *), thì (a-1)-1 = a.
Chứng minh:
Theo G4, thì a-1a = e.
Theo định lý 4, thì a là nghịch đảo của a-1, đó là a = (a-1)-1. 
6. Định lý: Với ∀a, b∈ (G, *), thì (ab)-1 = b-1a-1.
Chứng minh:
Ta có (ab)(b-1a-1) = a(bb-1)a-1 = aea-1 = aa-1 = e (theo định lý 4). 
Chú ý: Theo G2 (Tính kết hợp) thì (ab)c = a(bc), nghĩa là dấu ngoặc không cần thiết và thứ tự không thay đổi. Vậy,
(a1a2…an)-1 = an-1…a2-1a1-1
7. Định nghĩa:
1) Nhóm G gọi là hữu hạn nếu tập G có số lượng phần tử hữu hạn.
2) Nhóm G gọi là vô hạn nếu tập G có số lượng phần tử vô hạn.
8. Định nghĩa (Bậc của nhóm):
Nếu G là nhóm hữu hạn, thì số lượng phần tử của tập G được gọi là bậc của G, kí hiệu là #G hay |G|.

III. Nhóm con
1. Định nghĩa:
Một tập con H của G, viết H ⊆ G, được gọi là một nhóm con (H, *) của một nhóm (G, *) nếu H thỏa mãn các tiên đề về nhóm và sử dụng cùng phép toán *.
2. Ví dụ:
1) Với phép cộng, Z ⊆ Q ⊆ R ⊆ C.
2) Với phép nhân, nhóm số hữu tỉ khác không Q* là một nhóm con số thực khác không R*, kí kiệu Q* ⊆ R*:
a. Mỗi số hữu tỉ khác không là một số thực khác không.
b. Tích của bất kỳ hai số hữu tỉ khác không là số hữu tỉ khác không.
c. Nghịch đảo của bất kỳ số hữu tỉ khác không là số hữu tỉ khác không.
3) Tập {e} là nhóm con của mọi nhóm.
3. Định nghĩa:
1) Một nhóm con tách biệt H của G, viết H ⊂ G, là một nhóm con khác G .
2) Một nhóm con không tầm thường của G là bất kỳ nhóm con tách biệt nào của G chứa một phần tử khác eG.
4. Định lý: Nếu H là một nhóm con của G, thì phần tử đơn vị eH của H là phần tử đơn vị eG của G.
Chứng minh:
Nếu h ∈ H, thì h * eH = h; vì h ∈ G, h * eG = h.
Vậy, eH = eG.
5. Định lý: Nếu H là một nhóm con của G, và h là một phần tử của H, thì nghịch đảo của h ∈ H là nghịch đảo của h ∈ G.
Chứng minh:
Gọi h và k là các phần tử của H, với h * k = e, thì h * h-1 = e vì h thuộc G.
Vậy, k = h-1.
6. Định lý: Nếu S là một tập con không rỗng của G, thì S là một nhóm con của G nếu và chỉ nếu với ∀a, b ∈ S, a * b-1 ∈ S.
Chứng minh:
1) Nếu với ∀a, b ∈ S, a * b-1 ∈ S, thì:
e ∈ S, vì a * a-1 = e ∈ S.
Với ∀a ∈ S, e * a-1 = a-1 ∈ S.
Với ∀a, b ∈ S, a * b = a * (b-1)-1 ∈ S.
Vậy, các tiên đề về nhóm được thoả mãn, nên S là một nhóm con của G.
2) Ngược lại, nếu S là một nhóm con của G, thì các tiên đề về nhóm được thoả mãn.
Vậy, phần tử đơn vị của S là phần tử đơn vị e của G.
Theo G4, với ∀b ∈ S, b-1 ∈ S.
Theo G1, a * b-1 ∈ S.
7. Định lý: Nếu S là một tập con không rỗng của G, thì S là một nhóm con của G nếu và chỉ nếu với ∀a, b ∈ S, 
a * b ∈ S và a-1 ∈ S.
Chứng minh: Tương tự như định lý trên.


Wednesday, July 29, 2015

Ngôn Ngữ Lập Trình C#

I. Giới thiệu ngôn ngữ lập trình C#

1. Ngôn ngữ C#, đọc là “C-sharp”, là một ngôn ngữ lập trình hướng đối tượng, được Anders Hejlsberg ở Microsoft phát triển vào năm 2000 dựa trên C++ và Java.
C# là phần khởi đầu cho kế hoạch .NET của Microsoft, nó phụ thuộc mạnh mẽ vào Framework này.
Sau đó C# trở thành một ngôn ngữ đa năng được dùng để phát triển các phần mềm theo công nghệ Microsoft chạy trên hệ điều hành Windows.
Trong C#, Garbage-Collector (GC) quản lí bộ nhớ bằng cách tự động "dọn dẹp rác".
Chương trình C# có thể chạy trên nhiều nền tảng (platform) khác nhau bởi một môi trường thực thi thích hợp cho nền tảng đó. 

2. Thư viện chuẩn C#
.NET Framework là tập hợp của những thư viện lớp (class library) chuẩn. Thư viện lớp được tổ chức theo hệ thống của không gian danh hiệu. Tất cả những API làm sẵn là một phần của System hay Microsoft không gian danh hiệu. Những thư viện lớp này thêm vào một số lớn những hàm chung, dùng cho tất cả những ngôn ngữ hợp với CLI, như đọc và viết hồ sơ, vẽ họa đồ, điều hành cơ sở dữ liệu, và vận dụng văn kiện XML.
Thư viện lớp .NET Framework được chia làm hai phần:
1) FCL là tập hợp cốt lõi của những lớp dùng như API căn bản của CLR. Nó gồm những lớp trong mscorlib.dll, System.dll, và System.core.dll.
2) BCL là tập mẹ của FCL và coi như là thư viện lớp toàn thể. Nó gồm Windows Forms, ADO.NET, ASP.NET, Language Integrated Query (LINQ), Windows Presentation Foundation (WPF), Windows Communication Foundation (WCF), và Workflow Foundation (WF).

3. Từ khoá (key word) của C#
Sau đầy là các từ khóa riêng của C#, được sắp xếp theo thứ tự Alphabet:

abstract as base bool break
byte case catch char checked
class const continue decimal default
delegate do double else enum
event explicit extern false finally
fixed float for foreach goto
if implicit in int interface
internal is lock long namespace
new null object operator out
override params private protected public
readonly ref return sbyte sealed
short sizeof stackalloc static string
struct switch this throw true
try typeof uint ulong unchecked
unsafe ushort using virtual volatile
void while
Chú ý: Ngôn ngữ  C# là "case sensitive", nghĩa là C# phân biệt chữ hoa và chữ thường. Do vậy, ANH, Anh, anh là ba chữ khác nhau.

4. Cách đặt tên trong C#
Danh hiệu (identifier) dùng đặt tên cho các dữ liệu, không được dùng từ khóa riêng của C# và phải bắt đầu là một chữ cái, sau đó có thể là chữ cái, chữ số hay gạch dưới.
Thí dụ: X, y, z1, Lập_trình , …
C# phân biệt danh hiệu chữ thường và chữ hoa.
Do vậy, ANH, Anh, anh là ba chữ khác nhau.

5. Cài đặt trình biên dịch C#
Để chạy một chương trình C#, trước hết nó phải được biên dịch từ mã nguồn (chữ viết) thành mã máy (nhị phân). Đây là công việc của trình biên dịch.
Ta có thể tải xuống và cài đặt nó cho Window:

Download: Microsoft .NET Framework

Có hai cách để biên dịch một chương trình C# như sau:
1) Nếu dùng Trình biên dịch hàng (command-line compiler):
a. Ở cổng lệnh, viết csc tên chương trình.cs
Thí dụ: csc Hello.cs
b. Nhấn Enter.
2) Nếu dùng Môi Trường Phát Triển Tích Hợp (IDE - Intergrated Development Environment): chọn Compile hay theo những chỉ dẫn thích hợp.

6. Cấu trúc một chương trình C#:
C# là ngôn ngữ lập trình hướng đối tượng. Do vậy:
1) Chương trình C# là một cấu trúc lớp.
Lớp được định nghĩa như sau:
         Class Tên lớp { }
Từ khoá class dùng khai báo Tên lớp hay Tên chương trình.
Tên lớp thường là chữ hoa.
Giữa cặp dấu móc {} là Thân của lớp, dùng định nghĩa lớp.
2) Chương trình thường có một hoặc nhiều hàm, được gọi là phương thức.
Phương thức được định nghĩa như sau:
         Loại dữ kiện Tên phương thức () {những câu lệnh;}
Loại dữ kiện là loại giá trị được trả lại cho vật gọi sau khi phương thức được hành sử.
Tên phương thức là chữ thường.
Mỗi chương trình C# có một phương thức tên “Main” (chính). Phương thức Main() là điểm bắt đầu của chương trình C#. Trình biên dịch C# sẽ không biên dịch mã của chương trình, nếu không tìm thấy phưong thức Main().
Ngoặc đơn () sau tên phương thức có thể chứa những giá trị gọi là đối số của phương thức, đuợc cách biệt bởi dấu phẩy.
3) Giữa cặp dấu móc {} là những câu lệnh để thi hành những nhiệm vụ của chương trình. Mỗi câu lệnh phải được kết thúc bởi dấu chấm phẩy (;).

7. Viết chương trình C#:
Thông thường, chương trình đầu tiên cho một ngôn ngữ lập trình là chương trình viết một câu chào, như  “Hello World”, theo những bước sau đây:
1) Mở trình viết chữ, như Notepad, viết những hàng sau:
// Chương trình C# thứ nhất.
Đây là dòng chú thích, bắt đầu bằng dấu so (//), chúng không có bất kì một ảnh hưởng nào đến hoạt động của chương trình.
Chú thích:
Trong lập trình, chú thích dùng để làm rõ ý nghĩa của chương trình.
Trong C# có hai cách để chú thích:
// Chú thích theo dòng
/* Chú thích theo khối */
Chú thích theo dòng bắt đầu bằng cặp dấu so (//) cho đến cuối dòng.
Chú thích theo khối bắt đầu bằng /* và kết thúc bằng */ và có thể bao gồm nhiều dòng.
2)      class Hello
           {
           }
Lớp Hello được khai báo với từ class.
3) Giữa cặp dấu móc {} của lớp Hello là một phương thức Main
         static void Main()
           {
           }
Phương thức Main được khai báo với từ static, sẽ được giải thích khi ta học về lập trình hướng đối tượng.
void, nghĩa là không được trả lại gì khi phương thức được hành sử.
Ngoặc đơn () cho biết phương thức này không có đối số.
4) Giữa cặp dấu móc {} của phương thức Main là một câu lệnh gọi phương thức Console.WriteLine trong lớp System.
         System.Console.WriteLine("Hello world");
Giữa cặp dấu đơn, phương thức Console.WriteLine cần một dãy kí tự trong ngoặc kép. Dãy này là Hello World.
5) Kiểm tra chương trình giống như sau đây:

         // Chương trình C# thứ nhất.
         class Hello
           {
                 static void Main()
                 {
                       System.Console.WriteLine("Hello world");
                 }
           }

6) Lưu giữ chương trình này với tên “Hello.cs”

8. Biên dịch chương trình C#:
Chương trình C# được biên dịch qua hai bước sau:
Thứ nhất, chương trình C# được dịch thành MSIL ( Microsoft Intermediate Language) có dạng hành sử (executable).
Thứ hai, trình dịch JIT (Just-in-time compiler) dịch MIL dạng hành sử thành 
mã máy (machine language code) thích hợp cho mỗi nền tảng máy.


​











Tập nguồn Hello.cs được biên dịch thành tập Hello.exe theo những bước sau:
1) Ở cổng lệnh, viết lệnh cd với đường dẫn tới Hello.cs
2) Ở cổng lệnh, viết
        csc Hello.cs –o Hello.exe
rồi nhấn Enter để biên dịch Hello.cs thành Hello.exe

9. Chạy chương trình
Ở cổng lệnh, viết
        Hello
rồi nhấn Enter thì chương trình cho kết quả sau:
           Hello World



Du lịch Canada