101
PHẠM CÔNG NGÓ É ĐẾN CD NHÀ XUẤT BÀN GtÁO DỤC VIỆT NAM

CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

PHẠM CÔNG NGÓ É

ĐẾN

CDNHÀ XUẤT BÀN GtÁO DỤC VIỆT NAM

Page 2: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

PHẠM CỒNG NGÔ

LẬP TDÌNH c »

từ cơ bản đến nâng cao(Tái bản lẩn thứ hai)

NHÀ X U Ấ T BẢN GIÁO DỤC VIỆT NAM

Page 3: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Công ly cổ phẩn Sắch Đại học - Dạy nghể - Nhà xuất bản Giáo dục Việt Nam gỉữ quyển công bế tác phẩm.

19 - 2010/CXB/178 - 2244/GD Mã số : 7B656yO - DAI

Page 4: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

L ờ i q iớ i rh iệuĐầu thế kỷ XXI, Microsoít đite ra một bộ Visual Studio ,NET (VS 7.0),

Có thể nói từ v s 2001 đến v s 2003 đã có một bước cải tiến đảng kể vể nội dung, Bộ Visual Studio 6.0 (với các ngôn ngữ Visual Basic 6.0, Visual C++ 6.0, ASP 3.0,...) đâ đem lại cho lập trình viên nhiều thuận tiện và lợi ích. Tuy nhiên khi bộ Visual Studio. NET đưỢc công bố thi mọi ngư<M đã chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ. Bộ Visual Studio 2003 đã chiếm tĩnh vi trí đáng kể trong mấy năm gán đáy. Từ đầu nãm 2006, bộ Visua! Studio 2005 (VS 8.0) đã xuất hiện ở Việt Nam và mọi ngưíỉí đã thử nghiệm sử dựng bộ .NET 2005 này. Tính từ 2001 đếh 2006. ba bộ .NET: 2001; 2003; 2005 íần lượt ra đcổ. Độĩ ngũ lập trinh viên không còn lạ với chúng và hầu hết các sinh \àên ngành Công nghệ thông tin, ngành Điện, Điện tử, Cơ khí, Kinh tế... đã bắt đầu học tập, nghiên cứu sử dụng chúng. Các trường và trung tâm hợp tác quốc tế như

"Hà Nội Genetic - Singapore", các tmng tâm của Austraiia, Pháp, Mỹ, Ân Độ ở Hà Nội. ửùinh phố Hổ Chí Minh hầu như giảng dạy cho sinh viên vcfi tỷ lệ phần trẫm rất cao về bộ Visual Studio .NET.

Dể đáp úhg yêu cầu tìm hiểu, học tập của sinh viên các ngành kỹ thuật, kinh tế nói chung và cúa các sinh viên ngành Công nghệ thòng tin nói riêng và đặc biệt cho nhũtig ai có nhu cầu tự học tập. vào kinh nghiệm giảng dạy từ năm 2002 đến nay về bộ .NET, tác giả biên soạn tài liệu này nhằm đáp ứhg phẩn nào cho các đối tượng trên.

Nêu các bạn đã có kiến thức về lập trinh C/C++ hoặc Javá thi việc học ngón ngữ c*f (C sharp) rất thuận lợi. Tuy nhiên đây là một cuốn sách dành cho sinh viên và các bạn tự học, do đó tài liệu đã cố gắng trinh bày thật dễ hiểu và ngắn gọn nhất.

Lđp tr ình c # từ cơ b â n đ ế n n â n g ca o bao gồm các lệnh chutrinh, điểu kiện, lựa chọn, về phương thức hay "hàm", lớp, ửiừỉỉ kế, nạp chồng hàm và toán tử trùng tên. uỷ nhiệm, quản lý sự kiện, đa luồng (multithreading). v.v...

Vể Visual Studio .NET đả có khá nhiều sách ở nước ngoài cũng như trong nước. Tuy nhiên để có một tài liệu tự học. tham khảo nhanh,

Page 5: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

ngắn gọn và dể hiểu tác giả đâ cố gắng dựa vào kinh nghiệm giảng dạy cũng như các bài giảng đã được soạn và chinh lý để cuốn sách được hoàn thiện hơn.

Cuốn sách này đưỢc xuất bản lần đầu cho nẻn không thể tránh khỏi khiếm khuyểt. Tác giả rất mong các bạn đồng nghiệp gần xa. các sinh viên sử dụng bộ sách này đóng góp ý kiến để lần tái bản sau được hoàn chinh hơn. Cuối cùng tác giả cũng có một lời mách nhỏ là tắt cả các chương trình trong sách đều đã chạy tốt trêii máy PC có cài đạt bộ Visual Studio 2003 và các bạn hãy cố gắng tự mỉnh đánh vào máy đề kiểm tra kết quả. đây cũng là một phương pháp tự học rất hiệu quả mà trong bao năm qua tác giả và đổng nghiệp đã sử dụng.

Mọi ý kiến góp ý và thư từ xin gửí về Công ty CP Sách ĐH - DN, 25 Hàn Thuyên, Hà Nội, hoặc email: [email protected]

TÁC GỈẢ

Hà Nội, 15 - 8 - 2007

Page 6: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

ChươNq 1. C ác nét cơ bẢN CỦA c #

1 .1. GIỚI THiỆU c #

c** (được phát âm là "C sharp") là một ngôn ngữ lập trinh hướng đối tưcfrig. hiện đại. tin cậy và được sử dụng nhiểu cho Internet, c** được kế thùầ từ các ngôn ngữ lập trình hưé^g đối tưcrtig quen thuộc khác như CTT. Java.

được xây dựtìg từ mộí nhóm các kỹ sư phần mềm của Microsoít do hai ngưâri lãnh đạo là Anders Hejlsberg và Scott Wiltamuth.

Các chưcffig trình c** chủ yếu được viết trong môi tn/cfríg "console" và môi trường "windows form". Để giới thiệu một chương trinh đầu tiên làm ví dụ, các bạn phải cài đạt bộ Visual Studio ,NET (2003) trong Windows 2000 hoặc Windows XP.

- Nhấn Start -> Program trong WừKÌows-

- Chọn Mlcrosoít Studio -NET 2003.

- Từ menu File -> New —> Project.

Nevv P ro je c t

Iwnpl8«s

J v is m I FTQỉ«ets• - J Vtsu«l

_ J s«tu(ỉ onct 0«pỉộ>iTwnt Pro}«ce• _ J o thtr ProjKt$

^ ỉtủdỉO SolưOon^

ềAâF f4Fr MOŨri«w « b A p p l(C « & o n *

- proỊect for aetông e ccmmand*ỉỉn« app cAGort

IImií;LocaOon:

<ỉppỉỉca6õn'

ConciiCr»rv

Conioi«Applicalỉon2

'11 B

ContohAppỊiCMion

C: ,g«o«ocứó firov/se

Nev> ẵữkỉbon I O>nsoỉe«%ppỉicoocti2 w Creat9 dlr«ctory fúr Sứlubdn

y/dl b« cre9(<đ d( C : '.9effCữcO6<,Conso<«Applic«DOA2\COQ«DỉeAp0UKWt2.

t L £ S S OK Mlp

Hình 1.1

Page 7: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Trong hình 1.1, phía trái Project Types chọn Visual c*f Project. ở phía phải Templates, chọn Console Application,

- Tại Textbox có nhãn Name; prgl.

- Tại Textbox có nhãn Location: C:\tu hoc csharp.

- Nhấn nút OK.

Sau đó. nhấn đồng thcrt 2 phím Ctrl + A để lự& chọn toàn bộ rồi bấm phím Delete.

Cuối cùng bạn gõ vào văn bản chương trình sau:

Ví dụ 1.1. Viết chưcmg trinh hiển thị trẽn màn hình dòng chữ: "Hello world !”.

using System; public class progl {public static void Main ()IConsole. WriteLine (" Hello Víorld !”);Console.ReadLineO;)}Đ ể chạy chương trình nhấn phím F5 và ta có dòng chữ hiển thị trên

màn hình:

S n ế t quá:Hello VVortd!

1.2. BĨẾN, BIỂU THỨC

Sử dtưig 26 chữ cái tiếng Anh thường và hoa:

~ a. b, c. d. e, f, g, h, i, j, k, 1, m. n, o. p, q. r, s, í. u, V, w, X, y, z.

- A . B, c , D,...w, X, Y. z.- 10 chữ số 0, 1, 2. 3, 4. 5 . 6 . 7, 8, 9.

- Dấu gạch dcfới _ (không phải dấu trừí.

Page 8: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Tên biến, biểu thức hoặc phương thửt (hay hàm) chỉ được sử dụng 63 kí tự trên mới hợp lệ, Ví dụ: Hanoi; HANOI; _Hanoi; Ha_noi.

^!5v.Cỉiú ý;

+ Chửsố 0.1.... 9 không được phép đặt vị trí đầu tiên của tên biến.

+ Tên biến không đưỢc phép đặt trùng với các từ khoá (keyword).

4- Tên biến phân biệí nhau bởi chữ thường và chữ hoa (điểu này khác hoàn toàn vtì ngôn ngữ Pascal).

+ Dấu gạch dưétì có thể đặt ở vi tri đầu hoặc giữa tên biến đều hợp lệ.

1.3. T ừ K H O Á (KEYVVORD)

Bàng 1.1. Từ khoã cùa ngôn ngữ c#abstrocí as base booibreak byte ose cotchchar checked ciass consícontinue decimal đefault đelegotedo double eise enumevent explicit extern falsetinally fixed fioat forforeach goto ịf implicltin Int ínterface internaiIs lOCQ íong namespacenew null object operatorout overrìde params prỉvateprotected publlc readonly resreturn sbyte sealed shortsifeof stackolloc statlc stiingstrucí swtch this throwínje try typeoí unií •ulong uncbeckeđ unsaíe ushortuslng Virtual voiđ whỉ)e

Page 9: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

1.4. KIÊU (TYPE)

Bàng 1.2. Mô tà câc kiểu dữ liệu xây dựng sân

Kiểu c# S6byte

Kiểu•NET

Mô tỏ

byte 1 Byte SỐ nguyên đưong không dốu: 0 4- 255char 2 Char Ký tụ Unicodebool 1 Booleon Già tfỊ logic true/ falsesbyte 1 Sbyte SỐ nguyên cố đâu: -128 + 127short 2 Intló SỐ nguyên cố ctóu giã trị: -32768 -r 32767.ushort ' 2 Uintìó SỐ nguyên không ddu: 0 -ỉ- 65.535ínt á Int32 Số nguyên cố đđu: -2.147,483.647 Ỷ

2.14^483.647uint 4 Uint32 SỐ nguyên không dốu: 0 -i- 4.294,967.295íloat 4 Singíe Kiểu dốu châm động giá ừ xấp xỉ tù

3.4E-38 đến 3,4E+38rvoì 7 chữ sổ có nghĩa

đouble 8 Double Kiểu ddu chốm động cỏ độ chính xỏc gâ’p đôi, giá ừ xốp xỉ to 1.7E-308 đến l,7E+308,với IS lỏchữsốcốnghía .

declm al 8 Decimal Cố độ chính xốc đến 28 con số và giở fr| thi*ip phân, đưoc dùng trong tính toán tài chính, kiểu này đỏi hỏi phài có hộu tố "m" hay "M" theo sau già trị.

long 8 Int64 SỐ nguyèn có dđu: -9,223.370.036,054,775,808 -í- 9.223.372.036.854.775.807

ulong 8 Uint64 SỐ nguyèn không đđu: 0 -f Oxffffmfffffffff

1.5. KHAI BÁO BĨẾN pECLARATION)

kiểu biâi ỉ , biến 2 = giá trị;

int a , b = 2;

double X = 1.456378, y, &.

string s = ''Hanoi”;

8

Page 10: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

iong m = 356L:

bytc vb = 67;

sbyte sb = -205:

Iishort u sl = 7653;

ulong u!l = 568u!;

íloa( f l = 1.367P:

tioubledl = 1.25439:

boo! b l = true;

char ch = ‘M';

decima! vdl = 1.28659M;

string s l » "Hd noi’’;

string s2 » 'Vieí nam";

btring s3 = s l + s2:

" ^ C h ú ỷ:

- Vcrt kiếu íioat sau giá trị gán cho biến luôn phải ghi thêm chữ F (viết hoa). Ví dụ; íloat f l = 1.2589F;

- Các kiểu biến khác không nhất thiết phải ghi thêm. Có thể bỏ chữL vẫn hỢp !ệ. Ví dụ: long 11 = 125987654L.

1.6. CÁC TOÁN TỦ SỐ HỌC

+ cộng- trù• nhân

/ chia% chia lổy số dư+ +-Ì, Í+ + lãng gió trị i lên 1 đon vị

—i; i - giòm giã trị i xuống 1 đon VỊVí dụ;

int a = 16. b = 3;

int q l * a + b; kết quả q l = 19:

92.LẬPT1ÚNH .NC>

Page 11: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

int q2 = a / b; kết quả q2 ® 5;

int q3 = a % b; kết quả q3 = 1;

double q4 = (doubie) a/b; kết quả q4 = 3.2

kiểu viết iệnh gán ngắn gọn:

i + = 5; tương đuơng i = i + 5;

= 4; tuơng đifc?ng i = i - 4;

* » 6; tuơng đương i = i • 6;

i / = 2; tương đưcMg i = i / 2;

1.7. TOÁN TỬ Q U A N HỆ VÀ LOGIC

> lớn hon>« íớn hơn hoộc bàng< nhó hon< s s nhỏ hon hoộc bàng

bồngkhông bàng

&& vò1! hoộcỊ phủ định

Ví dụ:if (<a > b) ỈÍ& (a > c)) lênh 1; if (a !* b) lệnh 2;

1.8. TOÁN TỬ XỬ LÝ BIT

& và bitt hoộc bỉt1 phù đ nh bií» đ ch phải (right shift)« d c h trói (ieftshift)A xor b il

102.L ầ fT rtlM ....N C £

Page 12: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Vĩ dụ 1.2.using System; class xulybit

s t â t i c VDíd Main(string (] args)

int a = Ỉ26, b = 86;int ql, q2, q3, q4, q5;ql = a & bq2 = a I b;q3 - a b;q4 = a » 2;q5 = b « 3;Consoỉe,W riteLine r a = "+a+” ; b = *'+b); Console. WriteLine (" ql = '’+ql+*'; q2 = *’+q2); Console. VíriteLine (*'q3 == ”+q3+"; q4 = ”+q4); Consoie.WriteLineq5 * *'+q5);Ccnsoie,ReadLine();}

P .K ế ỉ quả:

a = 126; b = 86; ^

q 1 = 86; q2 = 126; q3 = 40: q4 = 31; q5 = 688,Để hiểu được kết quả này ta nhớ lại bảng các phép toán logic VỞI bit:

o b a & b a b a-^b0 0 0 0 00 0 1

1 0 0 11 1 1 0

1 1

Page 13: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

+ Đổi cdc số d, b từ hệ 10 về hệ 16.

a = 126 -> a = {7E)i .

b = 86 -> b = (56)k;.

+ Đổi a từ hệ 16 về hệ 2.

a = (7E),^->0 1 1 1 1 1 1 0

q4 = a » 2 0 0 0 1 1 1 1 1

q4 = (lF )„ = (16+ 15ho= (31),0.+ Đổi b từ hệ 16 về hệ 2.

b = ( 5 6 ) , - » 0 1 0 1 0 1 1 0

q5 = b « 3; 0 1 0 1 0 1 1 0 0 0 0

2 B 0

q5 = (2B0)„ = (2.256 + 11.16)io = (688}jo.

1.9. CHÚ THÍCH

Cách chú thích các đểu dòng lệnh và đoạn iệnh chưcrtig trình trong cũng giống như trong C++ hay Java.

- Chú thích cho một dòng: / / dòng được chú thích đến hết dòng

- Chú thích cho nhiều dòng;

/* dòng 1 ;

dòng 2 ;

, dòng n;

V

1.10. KĩỂu LIỆT KÊ (ENUM)

Cú pháp kiểu liệt kê phải đặt từ khoá enum lẻn đầu: enurn E 1 { a, b, c = 15, d, e} ;Trong đó E1 !à tên biến có kiểu enum fliệt kê):

bằng số a lấy giá trị ngạ;ên bằng 0

b lấy giá trị 1

c lấy giá trị 15

1 2

Page 14: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

d lấy giá trị 16

e iấy giá trị 17

' S v i d ụ 1.3.using System; class Enumeration (enum El( a, b, c « 15, d, e} ; static void MainO IConsole.WriteLine (”Gia tri b » ’’+ {int)E1 .b);Console.WriteLine (*’Gia tri d » *'+ {int)El-d);Console.ReadLine ();}1

^ ^ K ế t q u ở .

Giá trị b = 1

Giá trị d = 16

1.11. KIÊU CẤU TRÚC - STRUCT

Kiểu struct giống như trong ngôn ngữ c. Stmct điíỢc định nghĩa với tất cả các biến có kiểu public đặt trên class và dưới using System.

Trong hàm Main 0 ta khai báo các biến có kiểu struct và gán trựt tiếp dữ liệu cho các biến struct qua toán tử chấm {dot operator).

s t r u G t S t l

public sfr\ng ten;Public int maso;}+ Khai báo biến struct trong hàm Mdin 0Stl p;+ Truy cập vào các biến trong struct p.ten = "Hoa"; p.maso = 555;

13

Page 15: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

s Ví dụ 1.4.using System; public struct stl{public string ten; public int mâso;)class ViduStruct {static '/oid MainO {stl p; / / k h ạ í bao bien p co kieu stlp. ten = Hoa" ;

t

p.maso » 555;Console.WriteLine (" Ten: ’’+p.ten+"\nMa so: "+p.maso>; Console.ReadLine ()}

S ^ K ế t quả:Ten: HoaMa so: 555

1.12. KIỂU M ẢNG (ARRAY)

+ Mảng một chiểu:int [ ] a - new int [ 10] ;+ Mảng hai chiều:double t ,) mat * new double [ 3,3) ;Mục này ta chỉ nêu kiểu khai báo mảng. Đ ể hiểu về mảng các bạn

xem ờ chương 5.

14

Page 16: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

ChươNq 2 . X uất NhẬp d ữ liỆu

2.1. XUẤT D ử LỈỆU RA MÀN HÌNH

2.1.1. Xuất dữ iiệu không định dạngint a = 15;double b » 123,45789;char ch * ’M*;string str * "Ha Noi”/Console .Hriteline (*‘a = b * ”+b);Console.Writeline("ch » str = ”+str);

2.1.2. Xuất dữ liệu có định dạng với số dấu phày độngfloat fl = 123.7658437; double dl = -?25.45<568;Console.Writeliner£l ={0:0.000); dl = { 1 rO.OOOO} " , fl,dĩ); Kết quá:

f1 = 123.766: d1 =325.4345

2.2. NHẬP DỬ LIỆU TỪ BÀN PHÍMstring s;//khai bảo chuỗi ký tự s int n;//khâi báo biến nguyên ns * Console.Readline0 / //các ký tự từ bần phím gán cho s n =* int 32. Parse (s);//chuyển đổi các ký tự số về giá trị số

I

Hoặc ta c6 thể viết gộp: int n/n = Int32.Parse(Console.ReađLine{));Hay: n » int. Parse (Console.ReadLine ());

ứng với một kiểu khai báo phải có một lệnh tương ứhg. Sau đây ta nêu iẽn bảng liệt kẻ của kiểu khai báo vcfi lệnh chuyển đổi chuỗi nhập từ bàn phím.

15

Page 17: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

shorta a = intló.Parse (Console.ReađLineO);ushort a a = Ulntlố.Parse (Consoie-ReadllnôO);unit a a = Ulnt32.Parse(Console,ReaơLineO);long a a = !ntó4.Parse (Consoie.ReadLineO);

uiong a a = Ulnt64,ParseCConsole,ReadLineO);string s s = Console.ReađLineO;

char chch = Char.Parse(Console.ReađLineO):ch = char.Parse(ConsoIe.ReadUneO):

fIoat aa » Single.ParseíConsole.ReadUneO);a * tloat.ParseCConsoỉe.ReađUneO);

đoubte aa = Double,Parse(Console.ReadUne());

a = double.Parse(Console.ReadLíneO);

c 5 \ / í dụ 2.1.using Systemĩ class InOut (static void MainO {■

int. ID; //ma so string narae; //ten float salarỵ; //luong uĩong tel; //díen thoai Console.Write("Nhap nia 80: ")ID = Int32.Parse(Console.ReadLine 0); Console.Write ("Nhap ten ỉ ") narae = Console-ReadLine0;Console.Write("Nầap luong: "); salary “ Single.Parse(C<msole.ReadLine()); Consứle.WriterNhap so dien thoai:- ") tel = UỊrít64.Parse(Console.ReadLine0); Consolẹ.Write ("Ma SOĨ "+ID);

16

Page 18: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Console.Wríte{"; Ten: ”+namet;Console.Write(”; Luong: ”+salary); Console.VỉriteLine {'•; So dien thoai; "+tel); Console.ReadLine0;// doi go mot phim

S ksí quá:Nhap ma so: 111 Nhap ten; An Nhap luong: 2000 Nhap so dien ỉhoai: 8676432 Ma so: 111; Ten: An; Luong: 2000; So dien thoai: 8676432

JềC* 17

Page 19: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

ChươNq f , C ác lệN h đ ỉỀ u khiỂN

Các lệnh điều khiến được chia làm ba nhóm:

- Lệnh iặp hay lệnh chu trình.

- Lệnh điều kiện.

- Lệnh lựa chọn.

3.1. CÁC LỆNH LẶP (LOOP)

Trong c6 bốn lệnh lặp; for; do... ivhile, while, íoreach.

3.1.1. Lệnh lặptorfor (bt khởi tao; bt điều kiên; bt thay đổi){lênh 1; lệnh 2;)Trong đó biểu thứt (bt) khởi tạo. biểu thức điều kiện và biểu thức

thay đổi đứttg tách nhau bởi dấu chấm phảy.

Ví dụ: for (int i = 0; i < 5; i++) {}

dụ 3.1. Sử dụng vòng lạp for để hiển thị bình phưcftig của số nguyên ỉ từ 0 đến 10 .

using System class LoopForl {statỉc void MaiTiO

for (int i ■ 0; i <3 10; i++)Console.writeLine ("i «= **+i+"; i*i »Console.ReadLine ();

18 &L>FTTÓNH. MC.B

Page 20: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Vòng lặp for còn thực hiện vóí các biểu thút phút tạp. Trong ba biểu thút tách nhau bởi dấu chấm phảy thì ở biểu thút khởi tạo và biểu thứt thay đổi có thể chứa nhiều biểu thức con và chúng tách nhau bc dấu phẳy còn biểu thức điều kiện thi có các phép toán quan hệ như && (và); !! (hoặc) tạo thành.

Vi dụ 3.2. Hiển thị các giá trị i và j đồng thời, using System; class LoopFor2 istatic void Mâin {)Iint i, j;for (i = 0, j = 5; {i < 4) && (j > 2); i++, j— ) Console.WriteLine{"i = "+i+"; j = "+j);Console.ReadLine();

H k ồ í quà:= 0 ;j = 5

= l ; j = 4

= 2 :j = 3

Nếu thay đổi toán tử && bằng toán tử I I ta sẽ có kết quả khác một chút. Các bạn hãy tự thay*đoi.

Vòng lặp for còn thựd hiện vófi biểu ứìứt có kiểu íloat, double.

Trong vòng íor. lệnh thay đổi được viết: for (double i = 0; i <= 2; i = i+0.1)

ở đây bước thay đổi (step) sẻ bằng 0. 1 .

3.1.2. Vòng lộp do ... whỉleVòng lặp do ... whiie cũng có 3 biểu thứC:

- Biểu ứiức khctì tạo.

19

Page 21: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

- Biểu thức thay đổi {sau khi thựt hiện lệnh).

- Biểu thứt kiểm ữa điều kiện. Nếu điều kiện thoẩ mãn (đúng) thi vòng lặp thựt hiện còn nếu điều kiện không ứíoả mãn (sai) thi vòng lặp kết thúc.

dụ 3.3. Tính binh phương giá trị i vcft bước thay đổi bằng 0.2 từ 0đến 2.

using System; c la ss Dol (stâtic void MainO ídouble i « 0; //lenh khoi tao do{Console.WriteLine (" i “ "+i+"; i*i « i+ ® 0.2; //lenh thay doi ) •while (i < 2); //lenh kiem tra dieu kien Console.ReadLine();

Vòng lặp do... while cũng được thực hiện đồng thời nhiểu biểu thửt (tương tự vòng lặp for). *

dụ 3.4. Hiển thị đống thcrt hai biếh i, j váí giá trị i giảm từ 2 đến 1 vóỉ bước lùi bằng 0 .2 và j tăng từ 0 đến 2 vóí bước tăng bằng 0.1.

using System; cldss Do2{static void MainO

20

Page 22: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

do{Console. MriteLine (" i = ".+1 +”; j = "+j); i- = 0.2; j+ = 0.1;Iwhile((i > 1) && (j < 2));Console.ReadLine();

ữ ^ K ế t quà:

= 2 : i = 0

= 1.8: j = 0.1 = 1 .6: j = 0.2

= 1.4: j = 0.3 = 1.2:j = 0.4

3.1.3. Vòng lộp whileTưỡng tự vòng lặp do ... while, vòng lặp while cũng có 3 biểu ứiủt:

- Biểu thức tạo.

- Biểu thứt kiểm tra điều kiện.

- Thực hiện lệnh và biểu thức ữiay đổi.

Điểm khác biệt của 2 vòng lặp này lầ lệnh do... while sẻ kiểm tra điểu kiện sau còn lệnh while kiểm tra điểu kiện tniớc rổi mcfi đến thụt hiện lệnh.

s Ví dụ 3.5. Ta viết lại chutsig trình cho ví dụ 3 .4 bằng lệnh vAile. using System; class While {static void MainO

2 1

Page 23: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

int i = Console.WriteLine(” i = "+i+“; j = "+j); i- - 0.2; j+ = 0.1;)Console.ReadLine ()/}

Kết quả tương tự như ở vá dụ 3.4.

3.1.4. Vổng lộp toreachLệnh íoreach thường sử dụng cho mảng. Cú pháp lệnh íoreach: foreach (kiểu tên in biểu thức lệnh)

I

{// lenh;

Trong đó in là từ khoá.

Ví dụ 3.6. Khai báo mảng một chiều các số nguyên đưỢc gán trước bao gồm cả số lẻ và số chẵn. Hãy hiển thị số lư<;mg các số ỉẻ và số lượng các số chẳn có trong mảng đó.

. using System; class ForEach {static void MainO fint [ ] arr = new intí 5] i 1, 4, 3, 6, 5} ; int odd = 0, even “ 0; foreach (int m in arr){if (m % 2 0)even++;e lseodd++;

22

Page 24: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Console. WriteLine (" So phan tu le odd = ''+odd); Consoie.WriteLineC'So phan tu chan even = "+even);Console.ReadLine{);I 1

Kết quà:

So phan tu le odd = 3 So phan tu chan even = 2

3.1,5, Lệnh break

Khi một vòng lặp đang ửìựt hiện, nếu thoả mãn một điều kiện nào đỏ thi ngắt vỏng lặp, ta dùng lệnh break.

í 5 v í d ụ 3.7.using System class Break {static void MainO{for (int i = 0; i < 100; i++){

> 150)break; if(i%2 == 0) - Console.Write(" "+i);}Console.ReađLine ()})

H K ế í quà:0 2 4 6 8 10 12

23

Page 25: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

3.2. LỆNH ĐIỂU KIỆN ♦

3.2.1. Cú phãp lệnh điều kiện + if (điều kiện) lệnh 1;

+ if {(Ííểu kiện) {lệnh 1; lệnh 2;\

+ if (điều kiện) lệnh 1;

else lệnh 2;

+ Lệnh điều kiện lồng nhau:

if (điều kiện 1)

(

ií (điều kiện 2) lệnh 1;

eỉse ỉệnh 2;

I

eìse

\

íf (điểu kiện 3) iệnh 3;

else lệnh 4;

1

l 5 v í dụ 3.8. Nhập ba số a, b, c từ bàn phím. Pim số lớn nhất của chúng.

using System; class lĩElse {static void MainO { ■float a, b, c, ml, max;Console.Write{"Enter a, b, c: "); a “ Single.Parse(Console.ReadLine()); b = Single.Parse (Console.ReadLineO ); c “ Single.Parse(Console.ReadLine0);

24

Page 26: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

if (a > b) Jĩìl ® a; else ml * b/ if (rol > c) max * ml; else màx - c;Console.writeLine {" a ^ ( 0) , b * { 1) , c « { 2} , a, b , c); Console.WriteLine Gia tri lon nhat »= ”+max);

H K ế í quả:Enter a, b, c; 8.5 15.2 2.8 a = 8,5, b= 15.2, c = 2.8 Giá trị lớn nhất = 15.2

Ví dụ 3.9. Hãy nhập vào điểm số củd các môn học. Thang để phèn loại điểm được biếu diễn trên trục số.

0 --------5 --------- 8 ---------10 (diem)

loại c loại B loại A

Cách 1: Sừ dụng câu lệnh ií với lệnh logic using System; class If {static voịd MainO

int diem/ //diemConsole.write ("Nhap diem: " ) /điem ® Int32.Parse(Console.ReadLine0);if((diem >— 0) 5t& (diem < 5))Console.WriteLine (" Xep loai c.”)/ if((diem >— 5) (diem < 8))Console.WriteLine (*’Xep loai B.");

4.lẠpti«nh..ì «ca25

Page 27: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

if{(diein> = 8) && (diem < = 10)) Console.WriteLine("Xep loai A."); if({diem< 0) !! (diem > 10)) Console.WriteLine("Diern khong hop le.”); Console.ReađLine();}}Cách 2. Sử dụng câu lệnh if... else lổng nhau.using System;class IfNested //if long nhau,

static void Main 0

ínt diera;Console.Vỉrite ("Nhap diem: ") diem = Int32.Parse{Console.ReadLineO ); if (diern >“ 8)i

ìf (diem > 10)Console.Write("Diem khong hop le.''); elseConsole.WriteLinerxep loai A.")}elseíif(diem >“ 5)Console.WriteLine("Xep loai B."); else (if (điern >* 0)Console.WriteLine("Xep ioai c . " ) else

26 tLẶPTNÌNK.jỊKU

Page 28: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Consoie.VirỉteLine r Diem khong hop le/');

Console,ReadLine();

3.2.2. Sủ dụng lệnh rút gọn cho if-.. else Khi viết cáu lệnh: if (x > y) max = X else max = y;ta có thể viết bằng câu lệnh đơn giản tuơng đương sau; max = (x > y ? X. : y ) ;

3.3. LỆNH LỤA C H Ọ N (SWITCH. .. CASE)

Lệnh 5Witch... case trong c # thường sử dụng biến lựa chọn chủ yếu là kiểu nguyên.

dụ 3-10. Nhập 2 số a , b. Tính, tổng, hiệu, tích, thương, using System; class SwitchCase (static void Main ()

I

ỉdouble ã, b;int pt;Console-Write ('* Nhap so a,b: *'); a = Double, Parse (Console.ReadLine ( ) ) ;

b = Doubie. Parse (Console.ReađLine ( J) ; do {Console. WriteLine (" M EN Ư *'); .

Console.WriteLine r 1. Cong/');Console.WriteLine 2. Tru:*');

27

Page 29: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Console.WriteLine(” 3. Nhan.*’ ); Console.WriteLiner* 4. Chia.” ) ; Consoie,WriteLiner 5* Thoat/M ; pt * Int32. Parse (Console .ReadLine 0 ); switch(pt)

{case 1: Console.VỉriteLine I**a + b * ” + (a+b)); break/

case 2: Console.VíriteLinera - b * ”+(a-b)); break;case 3: Console.MriteLine |"â * b = "4-(a'b)>; break;case 4: Console.WriteLine("a / b = ” + (a/b)); break;Câse 5: continue;

while(pt 5);

2 8

Page 30: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

C hirơN Q 4 . P hư ơN q T hứ c (M E ĩh o d )

P h ư ơ n g th ứ c c ũ n g g iố n g n h ư h à m tro n g n g ô n n g ữ C / C + + h o ặ c n g ô n n g ữ J a v a . P h ư ơ n g th íte c ó hai loạ i c h ín h : Phưcrtig th ứ c trả v ề g iá trị v à p h ư ơ n g th ứ c k iểu void .

T ro n g c h ư ơ n g 4 , tấ t c ả c á c h à m đ ề u c ó từ k h o á s ta tic trư ớ c k iểu vì tấ t c ả c á c h à m s ử d ụ n g à đ â y đ ề u th u ộ c c á c c h ư ơ n g tr ìn h "k h ô n g h ư ớ íig đ ố i tượng".

T ro n g c h ư ơ n g n à y và cả c á c c h ư ơ n g sau . th u ậ t n g ữ "p h ư ơ n g th ứ t” (m ethcxi), c ó khi đ ể c h o d ễ h iể u , n h ư tro n g n g ô n n g ữ C / C + + , ta c ó th ể g ọ i là "h à m " v ẩ n k h ô n g là m lệ ch n ộ i d u n g .

4 .1 . P H Ư Ơ N G T H Ứ C T R Ả V Ể M Ộ T G IÁ T R Ị

P h iftJng th ứ t n à y c ó k iểu flo a t, d o u b le , in t. s tr in g .. . B ê n ữ o n g p h ư đ n g t h ú t lu ô n c ó lệnh ;

r e t u r n { g í á _ t r ị ) ;

Đ ịn h n g h ĩa p h ư ơ n g th ú c t r ả về g iá trị, v í d ụ p h ư ơ n g t h ứ t t ín h tổ n g b ìn h p h ư ơ n g c ủ a a , b:

s t a t i c double Tinh(double a, double b){return â*a + b*b;)

K hi g ọ i p h ư ơ n g th ứ t . c ầ n p h ả i k h a i b á o b iế n v à g á n tê n phường th ú t c h o b iế n n ày .

in t m;m = T inh(a,b);

t 5 v ( d ụ 4 . J ,using System; c lass Methođl

s t a t ic double NhapOi

29

Page 31: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

{đouble a;Console. Write ("Nhap mot so: ” ); a = đouble.Parse(Console.ReađLine 0 return â;

/ / ----------------------------------------------------------- ----------- -

s t â t ic double Tinh(double a, double b){return(a*a + b*b);

1

/ / ------------------- ------- ----------------------------------------------s t a t ic voiđ Hienthi(đouble a, doubie b, double m) //Ham kieu void chi co đoi so "vao”

Console. VíriteLine (*' a “ " +a+" ; b* +b); Console.WriteLinernĩ * a*a + b*b *= "+m);

}/ / -----------------------------------------

s ta t ic void Main{strinqí ] args)

double a, b, m;â ■ N hâp();//goi ham V â gan cho bien a

b » NhapO ;//goi hara va gan cho bien bm ® Tìiìhía, b ) ; / /g o i haiĩi va gan cho bien moiHienthl(a, b/ m);//ham kieư voiđ khong co lenh ganConsole. ReadLine();}}

ữ ỉ< ế t quả:Nhap mot so; 2

Nhap mot so: 4

30

Page 32: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

a = 2 :b = 4

m = a*a + b*b = 20

4 .2 . P H U Ơ N G T H Ứ C K IÊ U V O ID

C ó người g ọ i phư cftig t h ứ t k iểu v o id là p h ư ơ n g th ứ c k h ô n g trả v ề g iá trị. T u y n h iê n n ế u phưcfrig th ứ c c ó đ ố i s ố là th a m c h iế u th ì n ó c ỏ t h ể trả v ể n h iể u g iá trị đ ồ n g thcrt. V ì v ậy , cỉ đ à y ta v ẫ n đ ể n g u y ê n k iểu "vo íd” m à k h ô n g c ầ n d ịc h ra t iế n g V iệ t.

C ó t h ể c h ia p h ư ơ n g t h ứ t k iểu v o id th à n h 4 loại:

1 - K iểu v o id k h ô n g c ó đ ố i số . N ó đ ư ợ c d ù n g đ ể h iể n th ị c á c th ô n gb á o .

v o i d M e th o d l 0 { }

2 - K iểu v o id c ó đ ố i s ố đ ư a v à o n h ư n g k h ô n g c ó đ ố i s ố lấy ra . N óth ư ờ n g d ù n g đ ể h iể n ử ỉị c á c th ô n g b á o . t ín h to á n m ộ t b iể u ứ i í t n à o đ ó rồ i h iể n th ị k ế t q u ả ra m à n h ìn h . «

3 - K iểu v o id k h ô n g c ó đ ố i s ố đ ư a vào n h ư h g c ó đ ố i s ố lấy r a k h ỏ i h à m . N ó th ư ờ n g d ù n g đ ể n h ậ p d ữ ỉiệu từ b à n p h ím v à đ ite ra k h ỏ i h àm . C á c đ ố i s ố lấy ra p h ả i là đ ố i s ố k iể u th a m c h iế u n h ư k iểu c ó từ k h o á re f h a y từ k h o á o u t.

4 - K iểu v o id c ó c ả đ ố i s ố v à o v à đ ố i s ố ra . C á c đ ố i s ố lấy ra p h ả i là đ ố i s ố k iể u th a m c h iế u n h ư k iể u c ó từ k h o á re f h a y từ k h o á o u t.

Vi dụ 4.2. C á c h à m s a u đ á y k h ô n g c ầ n p h ả i c ó đ ố i s ố vì n g a y đ ầ u c la ss , trố n tấ t c ả c á c h à m ta đ ặ t từ k h o á s ta tic c h o tấ t c ả c á c b iẽ h a , b . m . B a b iế n n à y g ọ i là b iế n to à n c ụ c - g loba!.

u s i n g S y s te m ; c l a s s M e th o d 2

(/ /g lo b a l v a r ia b le ,b ien toan cuc s t â t i c in t a, b, m; s t a t i c in t Inputo {

r 31

Page 33: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

in t a;a = Int32.Parse(Console.ReadLine()); return(a);)/ / - ........... - ----------------------- ------------------------s t a t i c in t CalO {m = a + b; return m;)/ / ---------------------------------

s t a t i c void Show()

(Console.WriteLine("a = "+a+"; b = "+b+"); Console.WriteLine("m = a + b = "+m);}/ / ------------------- -------------

s t a t ỉ c void MainO {Console.M riterEnter a * "); ã ” In p u to ;Console.Write("Enter b = "); b - ĩnput(); m = Cal ();Show{);Consũle. ReadLine();

ì }

H / í ế í quả:Enter a = 4

Enter b * 5

a = 4 ;b = 5

a + b = 9

32

Page 34: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

AX 1'RUYẾN ĐỖI SỐ KlỂu THAM CHIẾU c ó TỪ KHOÂ REF

HOẶC OUTK hi m u ố n đuci ra W iỏi h à m m ộ t th a m s ố n à o đ ó ta p h ả i s ử d ụ n g từ

k h o á re f h o ặ c từ k h o á o u t đ ặ t trư ớ c kiểu . Đ ể th ấ y đ ư ợ c ý n g h ĩa c ủ a từ k h o á rc í h o ặ c o u t ta x é t m ộ t ví d ụ sa u đ â y k h ô n g s ứ d ụ n g th a m c h iế u với từ k h o á re f h o ặ c o u t,

t 5 v í d ụ 4.3.using System;c la s s PassVaiue //truyen theo gia t r i - Passing by value {s t a t i c voỉd Hoandoiíint a, in t b) / / ã va b la gia t r i {ỉn t temp; tomp « a; a - b; b • temp;Console. Write í’*\nTrong hâm Hoandoi: a * ’'+â+” /b - "+b);)/ / ----------------------------- ---------------

public s t a t i c void MainO

in t a * 10, b — 25;Console,Write ("\nTruoc khi hoan doi: a * b = +b) /Hoandoi (a, b ) ;Console.Write ("\nSau khi hoan doi: a » ''+a+"; b « "+b); Console. ReadLine () ì

H K ế í quả:Truoc khi hoan đoi: a = 10; b = 25

Trong ham Hoandoi: a = 25; b = 10

S au khi hoan doi; a = 10; b = 25

$.iẬFTfim MCA33

Page 35: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

■ 'ỈS .N hận xét: N h ìn v à o k ế t q u ả ta th ấ y b ê n t ro n g h à m h o á n đ ổ i, c á c g iá tri c ụ a a v à b đ ư ợ c h o á n đ ổ i c h o n h a u . T u y n h iê n s a u k h i h o á n đ ổ i , g iá tri c ủ a a v à b iạĩ n h ư trư ớ c k h i h o á n đ ổ i, n g h ĩa là a = 1 0 v à b = 2 5 . Đ iể u n à y c ó n g h ĩa là h à m "H o a n đ o i" k h ô n g c ó tá c đ ụ n g h o á n đ ổ i.

C á c <5ối s ố c ủ a h à m "H o a n d o i '' k h ô n g s ử d ụ n g " th a m c h iế u ” m à ch l là c á c 'g iá tr i th ô n g thưc^ig .

4.3.1. Tù k h o ó ref

B ấ t k ỳ m ộ t đ ố i s ố n à o c ủ a h à m k h i c ầ n lấy ra k h ổ i h à m đ ề u p h ả i s ử d ụ n g k iể u ử ìa m c h iế u c ó từ k h o á re f đ ậ t trư ớ c k iểu . V í d ụ <fịnh n g h ĩa h à m In p u t đ ể n h ậ p c á c s ố từ b à n p h ím ;

's ta t ic void Input(ref double a, re f double b)

{Consoie.Hrite (" Nhap a, b: ■'); a = double. Parse (Console.ReadLine 0 ); b = doiứsle. Parse (Console.Re:adLine ());

}Đ iểu c ầ n n h ớ là k h i g ọ i h à m ta k h a i b á o c á c b iế n v à g á n g iá tr ị 0

h o ặ c g iá t i ị cụ t h ể c h o a , b . Đ ồ n g ứ iờ i c á c đ ố i s ố a , b p h ả i c ó từ k h o á re í đ ặ t trư ớ c tê n b iến ,

d o u b ỉe a “ 0 ; a o u o i t ì o v ; l í i p u t ( r e f a , r e f b> ;

dụ 4.4.using Sỵstati;

cXass PassReí //tn iyen theo tham chieu - Passing by reference

{s t a t i c v o i ữ 'H ọ a n đ o l ( r e f i n t a , r e f i n t b )

íi n t te m p ; tem p “ a ; a = b;

34 .Ò.ÍẬPTPá*t,MC.B

Page 36: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

b =* temp;Conscle. Write (”\nTrong ham Hoandoi a • "+d+” ; b = '*+b);I/ / --------------------------------------------

public s t a t i c void MainO1

in t a ® 10, b = 25;ConsoJe.WríteLiner\nTruoc khi hoah đoi: = **+a+’'; b = "+b); Hoandoi(ref a, ref b ) ;Conẩole.Writeliine(”\nSdu khi hoan doi: a = b ® "+b);Console.ReadLine();

H k ố í quá:Truoc khi hoan doi: a = 10; b = 25

Trong ham Hoanđoi: a = 25; b = 10

Sau khi hoan doi: a = 25: b = 10

'ĩ^ N h ậ n Két: Nhìn vào kết quả ta ứiấy bên trong hàm hoán đổi, các giá trị của a và b được hoán đổi cho nhau. Mặt khác sau khi hoán đổi. giá trị của a và b cũng được hoán đổi, nghĩa là a = 2 5 và b = 10. Điều này có nghĩa là hàm "Hoandoi" đã th ự t sự có tác dụng hoán đổi.

Khi gọi hàm "Hoandoi", các biến a, b có thể gán giá trị 0 , cũng có

thể gán giá trị khác 0 như ở trẽn gán a » 10 và b » 25.

Ví dụ sau đây sử dụng từ khoá ref cho hàm nhập số liệu từ bàn phím, khi gọi hàm ta phái gán giá trị bàng 0.

l 5 v i dụ 4,5.using System/ c ỉa ss RefVar

(s t a t ic void Input{ref double a ,r e f double b){

35

Page 37: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Console.Write("Enter a = "); a “ double.Parse(Console.ReadLine0 ) ;Console. Write ("Enter b ='')»■ b * double.Parse(Console.ReadLine{));

)/ / --------------------------------------------

s t a t ic void Calculate(double a, doutle b, re f double m){m = a*a + b*b;

/ / --------------------------- ----------------------------------------------------s t a t ic void Show (double a, double b, double in)

íConsole.WriteLinera = "+a-t"; b = "+b+"\n m = a*a + b*b = ''+íru);

)Ị ị -----------------------------------------------------------------------------------

public s t a t i c void MainO 1dot^le a = 0, double b * 0 double m = 0 Input(ref a, re f b ) ;Calculate(a, b, re f ni);Show(a, b, m)

Consoie. ReadLine();

)

H í í ế í q u ó ;Enter a = 2

Enter b. = 5

a = 2; b = 5

m = a*a + b*b = 29

36

Page 38: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

T ử k h o á o u t đ ư ợ c s ử d ụ n g n h ư từ k h o á r e í c h ỉ c ó m ộ t đ iể m k h á c b iệ t là kh i s ử d ụ n g từ k h o á o u t ta c h ỉ c ầ n khai b á o b iế n th a m c h iế u m à k h ô n g c ẩ n g á n g iá trị. T a v iế t lại ch ư cm g tr ìn h c ủ a ví d ụ 4 .5 với từ k h o á o u t.

V i dụ 4.6.usirig System; c la ss OutVar Is t a t i c void Input(out double a, out double b)I

Console .Write (" Enter a * "); a = double.Parse(Ccnsoĩe-ReadLine()) ;Console.Write("Enter b = "); b = double.Parse(Console.ReadLine());

/ / --------------------------------------------

s t a t i c void Calculate(double a, double b, out double m)

{m = a*a + b*b;

1

/ / ------- ---------------------------------------------- --------------- ----------s t a t i c void Show(double a, double b, double m)

(Console.WriteLine{"a “ "+a+"; b = ” +b);Console.WriteLine (" m = a*a + b*b = "+m);

}/ / ---------- 1 ---------- í -------------------------------------------- - ---------

public s t a t i c void MainO

doubie a, hf m; //Khong can gan g ia t r i Input(out a,* out b ) ;Calculate(a, b, out m);

4,3.2. ĩù khoó out

37

Page 39: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Show{a, b, m );

Console. BeadLine();

)1

S K ẽ V quá;Enter a = 2

Enter b = 5

a = 2; b = 5

m = a*a + b*b = 29

38

Page 40: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

ChươNq Lớp TRONq lẬp TRÌNh

hưỚNq đôi TưỢNq c # (cU ss)

T ừ chư cm g n à y t rở đ i, c á c c h ư ơ n g tr in h đ ư ợ c viết th e o p h ư ơ n g p h á p#

lậ p tr in h h ư ớ n g đ ố i tư ợ n g . L ậ p tr ìn h h ư ớ n g đ ố i tư ợ n g (O O P : O b jec t O r ie n te d P ro g ra m m in g ) là m ộ t p h ư ơ n g p h á p d ự a v à o k h á i n iệ m v ể lớ p vả

đ ố i tưcftng. L ớ p là m ộ t k iểu mcrt. L ớ p chứ ồ n h iề u đ ố i tư ợ n g . V í d ụ m ộ t lớp ô tô c ó n h iề u đ ố i tư ợ n g là c á c loạ i ô tô k h á c n h a u . L oại ô tô đ ó là m ộ t đ ố i tưỢ ng. G iố n g n h ư m ộ t s in h v iền là m ộ t đ ố i tư ợ n g c ủ a m ộ t lỏ p h ọ c . M ột

lớ p b a o g ồ m : th u ộ c t ín h (hay d ữ liệu), c á c th a o tá c (hay -p h ư ơ n g thức). M ộ t đ ố i tư ợ n g là ô tó sỗ c ó c á c th u ộ c tín h n h ư s ố c á n h c ử a , s ố b á n h x e . s ố

g h ế n g ồ i , . -. M ật k h á c ô tố p h ả i c ó c á c th a o tá c n h ư k h ở i đ ộ n g , c h ạ y , tă n g lố c . g iả m tố c . d ừ n g ,.. . Đ ó c h ín h là c á c p h ư ơ n g th ứ c c ủ a lớ p ô tô .

T h u ộ c tín h c ủ a lớ p c ó th ể k h a i b á o th e o c á c k iểu :

- p r iv a te ; c ố c th u ộ c t ín h k h a i b á o k iểu p r iv a te c h ỉ c ó h iệ u lự t n g a y t r o n g m ộ t lc ^ .

- p u b iic : c ó h iệ u lực c h o c ả c á c lá p k h ác . C á c phưcftíg t h ú t đ a p h ầ n đ ư ợ c k h a i b á o k iểu public .

- p ro te c te d : đuợc s ử d ụ n g c h o cá c b iêh th u ộ c 1ÓỊ> d ẫ n x u ấ t (icỊ) k ế thùồ).

1. Đ ịn h n g h ĩa m ộ t lớp;

c la s s Student

iprivate in t ID;

private str in g name;

public StudentO

{ }pubiic void InputO;

public void Show();

39

Page 41: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

2 . K h a i b á o đ ố i tư ợ n g ( s l) th u ộ c lớ p S tu d e n t:

Student 5 l = new S tu đ en tO ;

3 . T ru y c ậ p đ ố i tưỢ ng s l v à o c á c h à m th à n h v iên ;

s l . I n p u t 0 ;sl.Show{);

C á c h à m đ ịn h n g h ĩa b ê n t r o n g lcfp c ò n được g ọ i là h à m th à n h viên . C á c h à m n à y k h ô n g c ó từ k h o á s ta tic m à c h ỉ c ó từ k h o á p u b lic . v í dụ:

p u b l i c v o i d show ()

{ )

Ví dụ 5.1.using System;

c la s s persơn

ỉp rivate str in g name;

p rivate in t age;

private double Sâlary;/ / ---------- - --------------- -— --------------------

public personO //ham tao constructor

name * /age 0;Sâlary » 0;)/ / ------------------------------------------

public void inputo

Console, W rite T E n te r íiame: ” ) ;

name * C onsole.ReadLineO /

40

Page 42: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Console.Write ("Enter age: **);

age » Int32.Parse (Console.ReadLineO );

Console,Write (” Enter salary: ’*);

salary * Double, Parse (Console.ReadLine ());

1

/ / ----------------------------------------------------- --------------- -----------

public voiđ show()

{Consoie.WriteLine ('• name: ” +name+**/ age: **+age+"; sa lary

”+salary);

)/ / --------------------------------------------------------------------------------

public s t a t ic void MâinO

person p = new personO;

p .in p u t 0 ;

p.show{) ;

Console. ReađLíne();

B K ế í quỏ:

Enter nam e: Mai

E n te ra g e :2 5

E ntersalary : 1000

nam e: Mai; age; 25; saiary: 10Ũ0

5.1. HÀM TẠO (CONSTRUCTOR METHOD)

Khi khai báo m ột biếh, ta có thể gán giá trị cho biến. Ví dụ:

in t a, b = 5;

Hàm tạo ià m ột hàm đặc biệt được dùng để khcrt tạo dữ liệu cho đối

^ . 41

Page 43: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

tu ỵ n g . Đ ặ c đ iể m c ủ a h à m tạ o ;

H à m tạ o c ó tê n trù n g với tê n lớ p . V í d ụ 5 .1 ở t r ẽ n ta c ó h à m tạ o :

public personO

íname = ” ";

age = 0 ;

salarỵ = 0;

}

H à m tạ o k h ô n g c ó lệ n h re tum (g ia tri);

K h i k h a i b á o h à m tạ o t ro n g h à m M ainO p h ả i s ử d ụ n g to á n tử n e w .

H à m tạ o c ó h a i loại; H à m tạ o k h ô n g c ó đ ố i s ố và h à m tạ o c ó đ ố i số .

D ù n g h à m tạ o c ó đ ố i số , k h i k h a i b á o đ ố i tưỢ ng ía g á n d ữ liệu c h o đối tưcmg đó.

& Ví dụ 5.2.»

using System;

c la ss person

{private str in g name;

private int age;

private double Sâlary;

/ / ------------------------------ -------------------------------------------public personO

name = " **;

age = 0;

saiary 0;

}/ / -------------------------------------------------------------------------

pưblic Person(string name, in t age, double salary)

42

Page 44: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

this.name = name;

th is .a g e = age;

th is .s a la r ỵ = salarỵ;

)/ / -------------------------------------------- ------------------------------- - ...................................................

public void show()

íConsole .MriteLine (" name: "+naxne+"; age: ■'+age+'*; salary:

■’ +salary) ;

1

/ / ------------- ------------------------------------------------------------------public s t a t i c void MainO ,

{person p = new .person ("Mai" , 25,1000); p.show() ;

Console. BeadLine();

})

quở:

nam e; Mai; age = 25; saỉary = 1000

T ro n g ví d ụ n à y ở h à m M ainO đ ố i tư ợ n g p đ ư ợ c k h a i b á o k iểu lớ p

p e r s o n vcrt c á c d ữ liệu g á n lúc k h a i b á o n a m e : "M ai”, ag e ; 2 5 , sa lary : 1000 .

H iể n th ị d ữ liệu c h ỉ c ầ n lấy đ ố i tư ợ n g p fruy c ậ p h à m show O q u a

to á n tử c h ấ m : p .show O ;

K hi đ ịn h n g h ĩa h à m tạ o c ó đ ố i s ố , ta d ù n g to á n t ử "this" n ế u tê n cá c đ ố i s ố t rù n g tưcrtig ứ ng v c í tê n c á c b iế n p r iv a íe ở b ê n tro n g ló ^ . N ếu tê n

c á c đ ố i s ố n à y k h á c (ÍI, ta k h ô n g c ầ n d ù n g to á n tử " t h i s H à m t ạ o sa u đ â y c ó đ ố i số , k h ô n g d ù n g to á n tử th is h o à n to à n tư tm g đ ư ơ n g vctì h à m tạ o đ ã

43

Page 45: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

c ó ò t r ê n ví d ụ 5 .2 .

pưblic person(string namel, int agel, double sall) inam e = n a m e l; age * agel;

sa lary = s a l l ;

}

5.2. KlỂu PROPERTY - THUỘC TÍNH

Đ à y là m ộ t k iểu đ ặ c b iệ t c h ỉ c ó t ro n g c *f. TTiuộc t ín h (p ro p e rtie s ) là

th à n h v iê n c ủ a lớ p , N ó c ó tê n v à k iểu p r iv a te s ta tic . K h i s ử d ụ n g th u ộ c tín h t a c ó t h ể g á n g iá tr ị d ữ liệu q u a v iệc tru y c ậ p tê n đ ố i ĩư ợ n g v ả o tên

th u ộ c t ín h n h ở to á n tử c h ấ m .

Vi dụ 5.3.using System;

c la s s Propertyl

{private in t ID; //ma so p rivate str in g name;

public in t IDl

{get{ return ID;)

se tị ID ® value/}

pub lic s tr in g namel

{get{ return name/)

set{ namô * value;}

}public void show()

44

Page 46: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

}s t â t i c void Mâin (stringí ] args)

I

Propertyl pi » new Propertylí);

pl.ID l = 555;

p l . namel « Hoa” ;

Consoie.W riter ID: "+pl.IDD ;Console-WritẹLine r ; Name: ”+pl.namel); / /p l,sh o w ()/

Console. ReadLine();

Console.WriteLineriD * ”+iD+'*; ỵam e: ”+name);

H k # ' í quá:ID: 555; Name: Hoa

T ro n g ví d ụ trê n ta (Tinh n g h ĩa h a i th u ộ c tín h : I D l v à n a m e l . ơ đ â y

t a lấy tê n th u ộ c t ín h ID l v à n a m e l c h ỉ k h á c c á c b iế n c ủ a iớ p b ở i c o n s ố

1 , c á c b ạ n c ũ n g c ó th ể s ử d ụ n g tê n b ấ t kỳ k h ô n g c ó ả n h hưéfiig gì.

public in t IDl // lu ôn có từ khoá public,k iểu trùng với

/ / kiểu của ID, đỏ là kiểu in t

I

get{ return ID;} / / c h ỉ một lênh return ID

set{ I D = value;} / / c h ỉ một lênh ID “ value

I

T ro n g h à m M ainO, ta c ó p h é p g á n :

p l.ID l = 555; / /đ ố i tượng pl qua toán tử chấm

//đến thuộc tin h IDl điiợc gán bởi dấu =

M ặt k h á c ta c ó th ể s ử d ụ n g lệ n h in trực t iế p C o n so te .V V riteL in e n h ư

ờ t r ê n h o ặ c q u a h à m shovvO-

45

Page 47: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

5.3.1. Khai b ã o m à n g

M ả n g là m ộ t k iể u d ữ liệu g ồ m c á c p h ầ n tử c ó c ù n g m ộ t k iểu n h ư in t. d o u b le . s tr in g . c h a r , k iể u c ủ a m ộ t l c ^ đưỢ c định n g h ĩa .

+ M ả n g m ộ t c h iề u :

in t [ J a = new int[ 10] ;

double [ ) da = new daỉ 4] { 1. 5, 2 .4 , 3 .7 , 4.1) ; //Gán g iá t r ị

+ M ả n g h a i c h iề u ;

long [ ,] = new long[ 4,4] ;

K hi x ử lý vớ i m ả n g t a s ử d ụ n g v ò n g lặ p fo r.

5.3.2. M ả n g m ộ t c h iề u

Mảng một chiều thưởrig dCưig để tứih toán các vector và mảng các ký tự.

V í dụ 5.4. N h ậ p v à o 2 m ả n g m ộ t c h iể u {2 v ec to r) a[n], b ịn] vcfi k ích

th ư ớ c n n h ậ p từ b à n p h ím . T ín h tổ n g 2 m ả n g c = a + b . H iể n th ị a , b . c.

using System;

c l a s s A r r l d

( '

public void Inpu t(in t (] a, in t n)

{for (int i « 0; i < n; i++) aí i] = Int32.Parse(Console.ReadLine {)) ;

ì

n ---------------------------------------------------------------------------------

public voiđ Sum(int ( ] a, in t [ 1 b, in t [ ] c, in t n)

{fo r ( in t i = 0; i < n; i++)

• c( i) = a[ i] + fc( i] ;

)

5.3. MẢNG

46

Page 48: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

/ / ------------------------------------------------- --------- ---------------

public void Show(int ( ] a, in t n)

fo r ( in t i = 0; i < n; i++)Console. Write " +aí i] ) ;

}/ / ---------------------------------------------------------------------------

s t a t i c void Main {stringl ) args)

{Arrld ob * new ArrldO; / /k h a i bao doi tuong ob in t n;Console.Write ("Nhap n “ ;n « Int32. Parse {Consoie. ReadLine 0 );in t [ ) a ® new intí n] /ir.t í) b * new intí n] /in t [ ] c * new int[ n] ;Console. VíriteLine (**Nhâp câc phan tu mang a*” )/

ob.Input (a, n );Console.WriteLine (” Nhap cac phan tu mang b .” )/ ob.Input(b, n ); ob.Sưm(a/ b, c, n);Console-VíriteLine('*\nHien t h i câc mang a, b, c .” ); Console.WriteLine("\nMang a . ” );

ob.Shoví (a, n) ;

Console. WriteLine (** \ nMang b • *’ ) / ob*Show (b, n )/Consoie.WriteLine("\nMang c * a + b-” ) / o b .S h o w { c , n ) ;Console.ReadLine 0 ;

}

47

Page 49: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

H k ể í quả:

Nhap n = 3

Nhap cac phan tu m ang a.

1

23

Nhap cac phan ỉu m ang b.

4

5

6

Hien thi ca c m ang a. b. c.

Mang a

1 2 3

Mang b

4 5 6

Mang c = a + b.

5 7 9

T ro n g c h ư ơ n g tr ìn h t r ê n , c á c h à m th à n h v iên In p u t, S u m , S h o w c ó

đ ố i s ố là m ả n g , k ích th ư ớ c n . C h ú n g đ ề u c ó từ k h o á p u b lic v à k h ô n g c ó íừ k h o á sta tic .

5,3.3. M à n g đ ố i tư ợ n g

M ả n g đ ố i tư ợ n g c ũ n g g iố n g n h ư m ả n g m ộ t c h iể u th ô n g th ư ờ n g .

T ê n _ lớ p đ ố i_ tư ợ n g * new 'ĩ ê n _ i< ^ { ) ;

Các thao tá c với mảng đối tượng thự : hiện bcS vòng iập for. Điểu

c ầ n lưu ộ Ịà t ro n g v ò n g iặ p fo r t a p h ả i khcrt g á n 0 c h o đ ố i tượng trư ớ c k h i tru y c ậ p v à o h à m inputO tro n g ví d ụ s a u . N ế u k h ô n g c ó p h é p g á n p( i] = n©w p e r s o n () / ứ ii m ả n g đ ố i tư<?ftig s ẻ k h ô n g h o ạ t đ ộ n g ,

f o c ( l n t ± = 0 ; i < n ; i+ + ),

48

Page 50: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

p( í] = new personO;

p( ij . input 0 ;

)

V í d ụ 5.5. V iế t c h ư ơ n g tr in h hướng đ ố i tư<?^g đ ể n h ậ p d ữ liệu c h o m ộ t m ả n g đ ố i tư ợ n g g ồ m n n g ư ờ i (n n h ậ p từ b à n ph ím ).

using System;

c la s s person

(private s tr in g name;

private in t age/

private double salary;/ / --------------------------------------------- - --------------------------------

public personO

nanìe = ” ” ;

age - 0;

sa lary « 0;

)/ / --------------------- - --------------------------------------------------------

public voiđ inputo

1

Console.VíriterNhap ten: *’ );

naine * Console.ReadLineO;

Console.VítiterNhap tuoi: ");

age = Int32.Parse(Conscle-ReadLine0 );Console.Write("Nhap luong: **);

sa lary = Doubie, Parse (Console. ReadLine());

1

/ / --------------------------------------------

.NCA4 9

Page 51: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

p ublic void show()

íConsole.WriteLỉne("Ten: "+ nanie+" ; T uoi+age+" ; Luong:

"+salary);

)/ / - ---------------- --------------------------------------------------------------public s t a t i c void MainO

{in t n;Console.Write{"Nhap so nguoi n * ");

n - Int32 . Parse(Console.ReadLine() ) ;

person [ ] p = new persorí n] ;

fo r ( in t i = 0; i < n; i++)

pf i] = new person 0 ;//kỉ^oi gan doi tuong

i] .input ( ) ; //mang đoi tuong

}fo r ( in t if = 0; i < n; i++)

i] .shovỉO ;

Console. ReadLine(ỉ ;

}

ữ ,K ẽ 't quà:N hap so nguoi n = 2

N hap ten : Anh

N hap tuoi: 25

N hap luong; 555

N hap ten; Hung

N hap tuoi: 30

N hap luong: 999

7LẬprnMi..MCj50

Page 52: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Ten; Anh; Tuoi: 25; Luong; 555

Ten: Hung: Tuoi; 30; Luong: 999

5.3.4. M à n g h a i c h iể u

M ản g h a i c h iề u th ư ờ n g d ù n g đ ể t ín h to á n \JỚi m a t r ậ n . V ó í m ả n g h a i c h iề u ta s ử d ụ n g h a i v ò n g lặp fo r.

& V i dụ 5.6. T ín h tổ n g và t íc h h a i m a t r ậ n â . b n h ậ p từ b à n phím.

using System;

c lâ ss Matranl

{public void Inputíin t [ ,] a, in t m, in t n)

i

fo r ( in t i * 0; i < m/ i++)

for(in c j * 0; j < n; j++)

a í i , j j * Int32 . Parse (Console .ReadLine ( ) ) ;

)/ / ---------------------------------------------------------------------------------------------------------------- -------

pubiic void Add(int [ ,] ã, in t Ị , )h , in t [ ,ì c, in t in t n)

t

fo r ( in t i ® 0; i < m; i'»‘+)

fo r ( in t j ® 0/ j < n; j++)

c{ i , j ] * âỉ i , j ] + b[ i , j ) ;

1

/ / ---------------------------------------------------------------------------------

public void Mui(int[ , ] a , int[ , ]b , int( ,] ú, ínc m, in t n)

í

fo r ( in t i » Or i < m; i- +1

fo r ( in t j » 0; j < n; j++>

(^ j ] * 0 ;

51

Page 53: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

fo r ( in t k * 0; k < m/ k++)

cỉ i , j] + « a( i,k] * tí k/ j] ;}

ỉ/ / ----------- -------------------------- --------------------public void Show{int ( in t m, in t n)

ịfor {int i “ 0; i < m;

{fo r ( in t j ® 0; j < n; j++)

Console .Write r ” +al i / jl );

Conscle.VíriteLine{);

s t a t ic void Main(stringí ] args)

{Matranl mt » new MatranlO;

in t m, n;

Console.Write(”Nhap kich thuoc ma tran m, n:

m ® Int32.Parse(Console.ReadLine( ) ) /

n F Int32.Parse(Console.ReadLine());

in t [ / ] a « new intl m, n] /

in t [ ,] b « new int( m, n] ;

int [ ,] c * new int[ m, n] /in t t d “ new intl rO ;

Console*WriteLine Nhap mâ tran A.**);

mt.ĩnput(a, m, n);

Console,WriteLinerNhap ma tran B.**);

mt,Input(b, m, n);

mt,Add(a/ b, c , m, n);

52

Page 54: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

mt.MuKâ, b, d, ưi, n);

Console.W riteLineMa tran A.");

mt,Show(â, m, n);

Conscle.WriteLine (•’Ma tran B.'*);

ĩT\t.Show(b, m, n);

Console.WrìteLine Ma tran c * A + B ." );

mt.Show(c, m, n);

Console.WriteLine <”Ma tran D = A * B.");

mt.Show(d, m, n);

Conscle. EeadLine();

))

B K ế t quá:

Nhap kich thuoc m a tran m, n: 2

2 Nhap m a tran A.

1

23

4

N hap m a tran B.

5

6

7

8

Ma tran A.

1 2

3 4

53

Page 55: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Ma tran B.

5 6

7 8

Ma tran c = A + B.

6 8

10 12

Ma tran D = A ’ B.

19 22

43 50

T ro n g ví dụ 5 .7 s a u đ ây . ta k h a i B á o c á c m a ' t r ậ n c ó k iểu p r iv a te với

c h iể u 5 x 5 . C á c b iế n m , n c ũ n g c ó k iểu p r iv a te v à đưỢ c n h ậ p từ b à n p h ím ờ t ro n g h à m c o n s tru c to r . C á c h à m In p u t (int ị.Ịa. in t m . in t n ) và h à m

In p u t {) c ó tê n n h ư n h a u n h ư h g c ó đ ố i s ố k h á c n h a u . H a i h à m n ả y ta gọ i

là h à m trù n g tê n (h o ặ c c ò n g ọ i là c h ổ n g h à m - o v e r lo a d in g m e th o d ). C ũ n g tư ơ n g tự h a i h à m Shovv (int [,]a. in t m . in t n) v à h ã m S how ().

V i dụ 5.7.using System;

c la ss Matran2

{private in t m, n;

p r iv a te i n t ( ,] a “ new in t í 5, 5]

private in t [ , )b = new intí 5,5]

private in t [ ,) c = new intl 5, 5]private in t [ ,3d • new intỊ 5,5]

/ / ------- ------------------------------ .......... ................................public Matran2{)

{Console.Vỉrite ("Nhap kich, thuoc ma tran m, n; "); m = Int32.Parse(Console.ReadLine0 ) ;

Õ 4

Page 56: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

n =* Jnt32. Parse (Console.ReadLine ());

forU n t i - 0; i < m; i + + )

fo r ( in t j » 0; j < n; j++)

a[ i , 3) « 0;

}/ / „ . ------------------ : -------------------------------------------------------

public void Inputlint [ ,] â, in t m, in t n)

{fo r ( in t i ss 0; i < m; i++)

fo r ( in t j * 0; j < n; j++)

a( i , j ] « Int32. Parse (Console .ReadLine 0 );

[/ / -------------------------------------------------- - ---------------------------

public void Inputo

{Console.WriteLine (** Nhap ma tran A.” );

Input<a, m, n)ỉ

Console.VíriteLine (’*Nhap ma tran B.” );

Input(b, ưi/ n);

)/ / ------------------------------------------------------ --------------- - ..........

Public void Add(intí d, intí /) b, int[ ,ì c, in t m, in t nI

fo r ( in t i = 0; i < m; i++)

fo r ( in t j “ 0; j < n; j++)

cf i , j ) = at i , j] + y i , j] ;

i/ / -------------------------------------------------------------------------------

public void Mui (irit( ,1 a, int( ,) b, intí ,] d, in t m, in t n;

5 5

Page 57: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

f o r { in t i * 0 / i < m; i++)

f o r ( in t j * 0 ; j < n; j++ )

{

i r j ] * 0 ;f o r ( in t k * 0; k < m; k++)

d( i , j] + * â[ i ,k ] * t( k, j] /

/ / ----------------------------------------------------------

p u b lic vo id Show(int[ , ] a , ỉn t m, in t n)

f o r { in t i * 0; i < m; i++)

í

f o r ( in t j * 0; j < n; j++)

Console.Write(*' "+a[ i , j ] );

Console.WriteLine ();

}

)/ / — ---------- --------------------------------------------p u b lic vo id Show()

{Add(a# b, c, m, n );

Mul(a^ b, à , n );

Console. WriteLine rMa tran A /’ );♦

Show(dr m, n);Conscle.W riteLine("M a tra n B / * ) ;

Show(b, m, n );

Console.WriteLine (•'Ma tran c » A +

Show(c, m, n );

Console,WriteLine (”Ma tran D «■ A * B /’ );

56

Page 58: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Show(d, m, n);

}/ / ------------------------------------------

s t a t ic void Main(stringí ] args)

(Matran2 mt = new Matran2();

mt. Input(); mt. Show();

Console. ReadLine();

)}

quá:N hap kich thuoc m a tran m, n: 2

2Nhap m a tran A.

1

23

4

N hap m a tran B.

5

6

7

8

Ma tran A.

1 2

3 4

Ma tran B.

__ 57•.UỊPTFÌW 4...NCA

Page 59: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

5 6

7 8

Ma tran c = A + B.

6 8

10 12

Ma tran D = A ' B.

19 22

4 3 5 0

5 .3 .5 . T ử k h o á p a r a m s

S ử d ụ n g từ k h o á p a ra m s trU tí^ k h a i b á o đ ố i s ố m ả n g s ẻ c h o p h é p ta

k h ô n g c ầ n x á c đ ịn h s ố lư ợ n g đ ố i s ố m ả n g (kích th ư ớ c m ả n g cụ thể).

K h i 'x em k ế í q u ả c ủ a c h ư ơ tìg ừ in h đ ã c h ạ y , v iệc g á n g iá trị m ả n g với k iể u in t là b ấ t kỳ. C ò n khi k h a i b á o k iể u m ả n g là o b je c í th ì t r o n g m ộ t m ả n g , s ố lưcfrig c á c p h ầ n tử k h ô n g c ề n x á c đ ín h ta fớ c , c ò n c á c p h ầ n tử

t r o n g m ả n g đ ó c ũ n g c ó k iểu b ấ t {có t h ể !à in t. s tr in g . c h a r . d o u b le ,...) - Đ â y là m ộ t k iể u k h a i b á o k h á lý th ú c ủ a c # (tro n g C + + k h ô n g th ể có !).

Ví dụ 5.8.using System;

c la s s Paranisl

(p u b lic v o id M ethodl(param s i n t [ ] a )

ífo r ( in t i = 0; i < a.Length; i++)

Console.Wtite r

•Console. WriteLine (>;ỉ/ 7 -------------------------- -----------------------------public voiđ Methodồ(params ob^ect (] a

{

58 B. LẢPT7ÓNH...NC.e

Page 60: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

for(ỉnt i “ 0; i < a.Length; i++) Ccnsole.Writ€ ('• " + (object)a{ ỉ] );

Console .Writel/ine () /

/ / -------------------------------------------------------

s t a t ic void Main (string( ] args)

I

ParaiT*sl arr = new ParamslO; arr .Methodl(5 ,7 ,9 );

arr .Method2 (100^ ’'Hâ noi", 1..56);in t [ ] a = new intị 4] { 2, 4, 6, B] ỉ

arr.Methodlia ) ;

Console. ReadLine();

^ ^ K è t quả:5 7 9

1 0 0 H a noi M 1 .5 6

2 4 6 8

6 .3 .6 C h ỉ m ụ c In d e x e r

In d e x e r c h o p h é p c á c thực t h ể c ủ a lớ p được <fânh s ố ch ỉ m ụ c g iố n g

n h ư k iểu m ả n g m ộ t c h iề u . In d e x e r c ũ n g g iố n g p r o p e r ty n g o ạ i t rừ m ộ l

đ iể m là c á c â c c e s s o r (p h ẩ n tử tru y c ặ p ) c ó th a m số .

C ú p h á p c ủ a ln d € x e r:

c la ss Myclass

{public object this[ in t idxj

get

Page 61: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

// return du lieu)set

{II th ie t lap du l ie u

}

)I I . . .

1

Mỉdụ 5.9.using System;

c la ss Indexerl

{private in t X, y, z;

public in t this( in t idx]

{get

{switch (iđx)

{Cdse ũ; return x; case 1: return y;

case 2: return z;

default:throw new Inđej^utOfRangeException () ;

}}set

{

60

Page 62: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

switch(idx)

(case 0: X = value; break;

case 1: y = value; break;

case 2: z = value; break;

1

}}/ / -------- ------- --------------------------------------------------------------public override s tr in g ToStringO

return "pr+x+", ■’+y+", "+z+")";

}n -------------------------------------------------------------------------------

s t a t i c void Main{strinự ] args)

{Indexerl p = new InđexerlO ;

p( 0) = 5;

F( 1 ] = 8 ;Pl 2]= 9;Console.WriteLine("Toa do diem p(x, y, z ) . ") ; Console.WriteLinerP({ 0} , { 1} , { 2) )" , F ( 0] , pl 1] ,FÍ 2] ) ;

Indexerl p2 = new IndexerlO ;

fo r ( in t i “ 0; i < 3; i++)

p2[ i] = i * i ;Console. HriteLine(p2. T oString{));

Console.ReadLine{);

ữ .K ể t quả:

61

Page 63: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

B

Toa do diem p(x, y, z).

P ( 7 , 8 , 9)

P ( 0 . 1 , 4 )

S a u đ â y ià ví d ụ v é In d e x e r vcfi c h ứ c n à n g m ả n g chuỗ i.

V í d ụ 5. Ĩ 0 .using System;

c la s s Indexer2

{

public c ĩa ss ListTest

private s t r i n ^ ] s l ;.r ivate in t i ;

public ListTestíparams stringí ] st'r)

s l = new StriiT^ 2561 !

foreach(stríng s in str)

{

s l í Í++] = s;

/ ' --------------------------------------

public void Adđ(string str)

{i f { i >* sl.Length)

{)e l s e s l [ i++] = s t r ;

}/ / --------------------------------------

pubỉic s tr in g this[ in t idx]

í

62

Page 64: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

get

{i f ( id x < Ũ II iđx > sl.Length)

! )return sl[ idx] ;

)se t

(i f (idx >* i)

1 1

e ls e

sĩ[ idx] = value;

}

}public in t GetnumEntries0

{return i ;

/ / -------------------------------------------------------------------

public c la s s Tester

s t a t i c void M aỉn(strỉn^] args)

{ListTest lob = newListTest ("Hello","Worlđ" ) ; / / c h i so 0, chi so 1

lob.AddCHa"); / / c h i so 2

lob.Adđ<”noi” ) ; / / c h i so 3

lob.Add("Viet" ); / / c h i so 4lob.AddCnarn" ) ; / / c h i so 5 lob.Adđ("=='’ };

63

Page 65: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

str in g s3 = "Thu đo" ;

loh( 1) = s3; / /S e the ch i so 1 bang "thu do" cho ”worid"

fo r ( in t j = 0; j < lob.GetnumEntries(); j++>

iConsole.WriteLine (" lob( { 0) ] :1 1) , j , lob( j] ) ;

}Console. ReadLine0 ;

}))

^ ^ K ế t quả:

lob[0] = Hello

lob[1] = Thu do

lob[2] = Ha

lob[3) = noi

lob[4] = Viet

lob[5] = nam

Ví dụ 5 . Ĩ L Sử d ụ n g m ả n g thư v iệ n ArrayList (cản p h ả i khâi b áo

u s in g S y s te m .C o lle c tio n s ) .

using System;

using System .C cllections; //A rrayList

c lâ s s IndexerS

{private s tr in g name;

privâte object data;

public s tr in g nameĩ

get{ return name;}

set{ n a n ^ - V â lu é ; )

64

Page 66: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

fpublic object datal

{getị return data;}

set{ da ta = vaỉue;)

)Public Indexer3(string name, object dâtâ)

(this.name = nanie;

th is .d â ta = data;

/ / ------------------------------------------------------------------

c la ss DataRow

ArrayList row;

public DataRow()

{row * new ArraỵListO;

)ppblic void LoadO

{row.Add{new Indexer3('* lơ* f 555));

row.Ađd (new Indexer3 Fređ**)) ;

row.Add(new Indexer3 ("Salarỵ**, 777)) /

)public object this[ in t column]

{get{ r€tuín(rov< column] );}

set{ row( column] » value;}

9LẬPTfiÌNH...NCA65

Page 67: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

c la s s Mainlndexer

{s t â t i c voiđ Main(stringl ] args)

{DatâRow row ~ new Dataầow();

row.Load 0 ;

IndexerS vaio = (Indexer3) roví 0] ;

ĩnđexồrS v a l l = (Indexer3) row[ 1] ;

IndexerS Vâl2 * (IndexerS) row[ 2] ;

Cõnsole.W riteLineColumn 0:{ 0)’\ va io .data l)

Consoĩe.WriteLine{''Colioran Ĩĩ{ 0 } v a i l .d a ta l)

Console.Writ«*Line rcolumn 2:{ 0}’', val2-datâl).,/ / Thay doi du l ie u

v a io .d a ta l = 6666;

v a l l .d â t a l = "Alice**;

v a i2 .đ a ta l * 8888;

Cbnsổle.MriteLine r\nColumn 0: { ũ) ”, vaio.đatal) ; CorỉSOle. WriteLine (" Coluỉon 1:{ 0} , v a l l . d a ta l);

Consoĩe,WriteLine{”Coli^nn 2:{ 0} ” , v a l2 .d a ta l) ;

Console.ReadLine ị );

H K ế í quảĩ

column 0 - 555

column 1 = Fred

coỉumn 2 = 777

colum n 0 = 6666

669.LậiPTRÌNH...MCd

Page 68: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

column 1 = Fred

column 2 = 8888

Ỡ V Í d ụ 5.12.using System;

using System .collections; //ArraỵList

clâSS Emplo 'ee

private str ing name; t

privâte s tr in g ID;

public Employee()

name = " '* ;I D = ;

}pubiic Err.ploỵee (str ing nairiel, s tr in g IDl)

{name = nainel;

ID = I D l ;

1

public s tr in g narnel

get{ r e t u r n nam e;} s e t ( name = v a l u e ; )

lpublic str in g IDl

{get{ return ID;1

set{ ID = vaiue;)

67

Page 69: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

/ / ---------- ---------- ---------------------------c la ss Employl

{private ArrayList row;

private in t m_MaxEmps; public EmployKint n)

{m_MaxEmps = n;row = new ArrayList(n);

!//inđexer

Dublic Empỉoyee thist in t idx)

(get

(-i f (idx < 0 Ị I idx > roví.Count - 1)

return(null);return (Employee) row{ idx3 ;

set

{i f (idx < 0 Ị i idx > in_MaxErDps - 1)

return;row .ĩnsert(idx, v a lu e );

1/ / _ . -----------------------------------------------------------— *

public Enployee this( str ing IDl]

{get

68

Page 70: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

í

Emploỵee em^^return = null;

íoreach(Employee emp in row)

(ií(em p.ID l == IDl)

em re tu rn - ertp;

b reak ;

}

)return em^return;

)}/ / --------------------------------------- ------- -----

public in t Length

{get{ return roví.Count;)

}

/ / ------- - --------------------------------------------

c la s s Mainlndexer

{s t a t i c void Main(stringí} args)

{t r y

{Employl empl = new Employl(4);

ernpl( 0] = new Employee ("An" LU " ) ;

empl[ 1] = new Employee ("Hoa" 222" ) ;

empl{ 2] = new Employee (" Binh" 333" );

69

Page 71: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

empU 3) ■ new Emploỵee ("Mai" 444" ) ;

for{in t i = 0; i < empl.Length; i++)

{string nanie = ernpl{ i] .namei; str in g ID = enplí ij .IDl;

Console. WriteLine ("Naine:{ 0) , ID:{ 1) " , name, ID) ;

)/ / can tim emploỵee vo i ID = 333

Eiiipioyee e l l = ertpĩí " 333"] ;

i f ( e l l != null)

{str in g name = ell.nam el;

str ing ID = e l l . I D l ;

Console.WriteLine{"Da tim thay Ten :{ 0) , nalie, ID);

e lse

Console.VỉriteLineCKhong tim thay ID = 333")

catch(Exception e)

( •Console.WriteLine(e.Message);

1

Console. IteađLine();

}

1

iSkổ'í quà:Nam e An; ID; 111

Nam e Hoa; ID: 222

70

Page 72: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Name Binh; ID; 333

Name Mai; ID: 444

Da tim thay Ten: Binh, ID: 333

5.-1. KHÔNG G IA N TÊN (NAMESPACE)

K h ô n g g ia n tê n là m ộ t k iêu lớ p tổ n g q u á t . N ó c h o p h é p ta đ ịn h

n g h ĩd c á c k h ô n g g id n tê n k h á c n h a u n h ư n g lại c ó cốc lớ p g iố n g n h a u , c á c d ữ iiệu g iố n g n h a u v à c á c phưcffíg th ứ c g iố n g n h a u .

T u y n h iê n vì c á c đ ố i tư ợ n g k h á c n h d u n ê n tìử ig đ ố i tư ợ n g lại tru y c ậ p vcrt d ử liệu r iê n g c ủ a m ìn h -

Vi' d ụ 5.13. C h ư ơ n g tr ìn h s a u đ ã y sẽ đ ịn h n g h ĩa h a i k h ô n g g ia n tê n k h á c n h a u đ ó là; S tu d e n t và T e a c h e r . n h ư n g đ ể u c ó c h u n g m ộ t lớ p ìà

M a n eg e . T ro n g lớ p M a n a g e n à y c ó cá c b iế n th à n h v iên g iố n g n h a u , c á c h à m :h à n h v iên g iố n g n h a u , n h ư n g c ó cá c d ữ liệu c ụ th ể k h á c n h a u ,

u s in g S y s te m ; namespace Student 1

c l a s s M anage

orivate string name; private in t ID;

orivate doubie Sâlary; oublic Manage()

I n i t l " " , 0 , 0 )

ọublic Manage(string namel/ in t IDỈ, double sa l l)

Init(namel, IDl, s a l l ) /

71

Page 73: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

#public void I n it ( s tr in g namel, in t IDl, double sa l l)

narne = namel;

ID = IDl;

salary =■ s a l l ;

}public void Show()

Console.WriteLine("Stuđent n a m e sp a c e ) ;

Console .WriteLine (" Narne: "+name+"; ID: "+ID+"; Salarỵ "+ sa la r y ) ;

}

}}/ / ------------------------------------------------------ ---------- -------------

namespace Teacher

{c lass Manage

í

prívate str in g name;

private in t ID;

private doiible salary;

public ManageO

íI n i t r " , 0, 0),*

}public Manage(string namel, in t IDl, double sa l l)

{Initínamel, IDI, s a l l ) ;

}publi^ void In it (s tr ín g namel, in t IDl, double sa li)

72

Page 74: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

rame = namel;: o * I D l ;salâry * s a i l ;

Ipublic void Show()

. 1

Console.VvriteLine ("Teacher namespace,**);

Console • WriteLỉne {** Name: " +name+” ; ID: " +ID+" ; Salary + sa lary);

/ -------------------------------------------------------------------------------

c lass NSMain

1

s ta t ic void Main(stringí ] args))

Student.Kanage std = new student.Manage C'An" , 22, 1000);

std.Show 0 ;reacher.Kanage tch = new Teacher.ManageCMai” , 20, 800);

ich.Show() ;

"onsole.ReadLine{) ;

S iK ế í quả:

studen t nam espace.

Name: An; ID: 22; saiary: 1000

T eacher nam espace .

Name: Mai; ID: 20; salaty; 800

Mi4 P'n*<H...NCA73

Page 75: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

CbươNq 6. J\hU rhỪA kế TRONq c# (ÌNhERÌTANCE)

Là m ột ngôn ngữ lập ừình hướng đối tư<flig, c # có đặc (íểm vể thừâ kế. Thừa k ế là m ột trong các đặc điểm của hướng đối tượng. Nhờ sử dụng khái niệm ửiìte kế m à ta có ử iể tạo ra các lớp mctì từ icq? cơ sờ đã có. Khi sử dụng thừa kế, ta có thể tái sử dụng m ã chưcnig trình, tạo ra m ột giao diện chung m â các đối tượng thừa kế giao diện này có thể truy cập. Lớp mới thừa kế từ lớp cơ sở có thể thừa, k ế các thuộc tính (dữ liệu), thừa kế các phương thức của lc D cơ sở (base class).

Lóp thừa kế còn gọi là lớp dẫn xuất (dcrived class).

Có hai cách để viết chiAíng trình cố thíte kế.

6.1. SỬ DỰNG TỪ KHOÁ NEWCú pháp của các lớp thừa kế có sử dụng từ khoá new:

c la ss Basẹĩ / / l o p co so a 3 , c

privâte type đatal; private type data2; publỉc void MethodlO

{ ) 'public void Method2{)

{ }

I/ / --------------------------------------------------------------------------------

c la ss Derivedĩ: Basel / / lo p dan xuat 1

íprivate type data3; //du l ie u moi cua lop Deriveđl public new void Methodl(>

{ }public new void Method2()

{ }

74

Page 76: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

/ / — ------- ---------------- - ------------- - ---------------------------------c la s s Derived2: Basel / / lo p dan xuat 2

private type data4; //du l ie u moi cua lop Derived2 public new void MethodlO

1 )public new void Method2(){ )1

Ví dụ 6.1. H ã y v iế t c h u ơ n g tr ìn h c ó thCte k ế đ ể q u ả n lý c á c lớ p th u ộ c lớ p c ơ sờ E m p lo y e e (n h ản viên) là: lớp c á c n h à k h o a h ọ c (S c ien tist). 1<^ c á c n h à q u ả n lý (M anager) v à lớ p ngư ttì c ô n g n h â n (VVorkcr).

using System; c la s s Errployee<private in t ID; private s tr in g name; public EmployeeO iID » 0; name = " ;

)public void Inputí)

{Console. Write ('^Nhap ID; ");ID « Int32 .Parse (Console.ReadLirxe 0 );Console.Write (*'Nhap Ten: **) / name “ Console.ReadLine();

}public void Show()

Page 77: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Console.Write(" IC: ” +ID);Console.KriteLine ('•; Ten: ’'+name);)}/ / ---------------------------------------- -------------------- ----------

c la ss S c ỉen t is t : Employee {private in t pub;public S c ie n t is tO : baseOIpub ■ 0;

ìpublic new void Inputo {base.Input 0 ;Console.HriteCNhap so cong trinh khoa hoc: "); pub = Int32.Parse(Console.ReadLine());)

public new void Show{)

ibâse. Show();Console.WriteLine(" ; Cong trinh khoa hoc: *'+pub);

} ỉ/ / -----------------------------------------------------------------------

c la ss Manager: Employee

ỉprivate str in g contract; public ManagerO: baseO {contract ® "";

76

Page 78: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

pubiic new void Inputo {base. Input {);Console.Vírite (”Nhap noi dung hop đong: *'); contract * Console.ReadLine{);)public new void Show()

{bâse.Show();Console.WriteLine (*'; Hop dong; "i-contract);t}/ / --------------------------------------------------------------

c la s s Korker: Employee //Lop nay đe trong

{ }/ / --------------------------------------------------------------

public c la s s InherMâin ỉ

s t a t i c void Main (strincí ] args)

{S c ie n t is t s l « new S c ie n t is tO ;Console. WriteLine r Nha khoa h o c ; s l . Input 0 ; s l -Show();Console.WriteLine("Nha quan ly ." );Manager ml « new ManagerO/ ml. Input 0 ; ml. Show();Worker wl « new Worker();Console.WriteLine(”Nguoi cong nhan.” ); w l. Input 0 ; w l. Show();

77

Page 79: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Console. ReađLi n e{);

})

B .K ế t guá;Nha khoa hoc.

N haplD : 111

Nhap ten; AAA

ID ;111:Ten;A A A

Nha quan iy.

Nhap ID: 222

Nhap ten; BBB

Cong trinh khoa hoc: 5

ID; 222; Ten: BBB; Cong trinh khoa hoc: 5

Nguoi cong nhan.

Nhap ID: 333

Nhap len; c c c ID: 333; Ten: c c c

- Trong w dụ frên, khi định nghĩa lóỊ) thìte k ế ta dùng dấu hai chấm: để tách giCtei hai lc^ dẫn xuất vầ l<í^ cơ sở.

c là ss Manager: Errployee

í )

• - E)ối hàm tạo (constructor) ở ló^ thCte k ế ta phải nhớ có hàm vctì ỉừ k h o á baseO n ằ m s a u d ấ u h â i ch ấm :

p u b lic M anagerO : b ase ()

1Còntract - ;

5- Các hàm ứíành viên, chẳng hạn. hàm InputO, hàm ^ p w O trong cả

3 lớp đểu có tên giống nhau. Các hàm này điA;X: gọi là hàm trùng tên hay

78

Page 80: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

n ạ p c h ồ n g h à m (o v e rlo ad in g íu n c tio n ) . V iệ c g ọ i h à m th à n h v iê n đ ã c ó ở lớ p c ơ s ở . ta p h ả i d ù n g từ k h o á b a s e tru y c ậ p q u a ĩo á n tử c h ấ m ,

b a s e . I n p u t {) ;

- K h i k h a i b á o đ ố i tư ợ n g t r o n g h ằ m M ainO, ta k h ô n g h ể q u a n tá m tcfi lớ p c ơ sở. Đ ố i tư ợ n g n à o th u ộ c lớ p d ẫ n x u ấ t n à o sẽ đ ư ợ c k h a i b á o k iểu c ủ a lớ p d ẫ n x u ấ t đ ó .

S c ie n t is t s l = new S c ien t isẼ 0 ;Manager ml = new Manager( ) ỉ Worker wl = new WorkerO;K h i í i n h n g h ĩa c á c h à m th à n h v iên t r o n g lớ p c ơ sở, p h ả i lu ô n n h ớ

đ ặ t từ k h o á n e w sa u từ k h o á p u b lic v à tn iớ c ư / W ioá vo id .

6 .2 . S Ử D Ụ N G T Ừ K H O Á V IR T U A L V À O V E R R ỈD E

- C á c b iế n th u ộ c lớ p c ơ s ở đưỢ c k h a i b á o th e o k iể u p r iv a te (h o ặc p ro te c te d ) . C á c b iế n th u ộ c icTD d ẫ n x u ấ t đ u ỵ c khdi b á o ứ ìe o k iểu p riv a te .

- C á c h à m th à n h \Ãẽn th u ộ c ỉớ p c ơ s d p h ả i c ó từ k h o á Virtual tr itò c từ k h o á vo id .

- C á c h à m th à n h v iên ứ iu ộ c lớ p d ẫ n x u ấ t p h ả i c ó từ k h o á o v e rrid e ín íớ c từ k h o á vo iđ .

Cú p h áp của n ó như sau:

c la s s Basel

í

private in t a, b;public Virtual void Methođl 0í }

)c la s s Derivedl: Basel

{private in t c;public override void Show{)

{ )

79

Page 81: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Ví dụ 6.2. V iết lại c h ư ơ n g t r ìn h 6.1 theo c á c h sử d ụ n g từ k h o á Virtual và override.

using System; c la s s Employee

{private in t ID; private str in g name; public EmployeeO

(ID = 0;name = "";

pubLic V irtual void Inputo

{Console.Write("Nhap ID: " ) /

'ID = Int32.Parse (Console.ReadLiíie 0 ); Console.Mrite ("Nhap Ten: "); name = Console. ReadLine{)!

}public V irtual void Show()

{Consoie.Write(” ID: "+ID); Console.MriteLine {" ; Ten: ” +naroe);

}í/ / ------------------------------------------------------

c la ss S c ie n t is t : Employee

private ỉn t pub;pubiic S c ie n t is tO : baseO

{pub * 0;

80

Page 82: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

publíc overríđe void Inputo

{base.Input( ) ỉConsole .Vírite ("Nhap so cc-ng trinh khoa hoc: "); pub = Int32.Parse(Console.ReadLlne());

)public override void Show() íbase-Show();Console.WriteLine("; Cong tr inh khoa hoc: •*+pub>;

})/ / — .............................. ............ ...................... .........................c la s s Manager; Eniploỵee

iprivate str in g contract;Public ManagerO : baseO {contract =}Public override void InputO{base. Input();Console.Write("Nhap noi dung hop dong: contract = Console.ReađLine0 ;

}pubiic overriđe void Show()

ịbase. Show <);Console.WriteLine("Hop dong: ” + contract);

I

81

Page 83: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

}c la ss Worker: Employee { ]/ Ị ........................................................................................................................... ............................................................. ...............

public c la s s InherMain

static void Main(strin^ ] args){S c ie n t is t s l = new S c ie n t is tO / s l . Input (); s l . ShowO;Manager mi = new ManagerO; mì . Input () ,; ml. Show{);Worker wl = new Worker{); wl. Input (); wl ,Show 0 /Console•ReadLine ();

))Kết quả của chuơng trình 6 .2 hoàn toàn giống với kết quả của

chương trình 6.1.

dụ 6.3. Viết chương trình có thùâ k ế để tạo các cửa sổ khác nhau khi ta đã định nghĩa của sổ Window chính. Có hai lớp Listbox và Button

thừã kế Ic^ cơ sờ W indow này. ở dầy ta sử dụng hai từ khoá v/irtual và ovenide để viết thừà kế. Trong hàm MainO ta sử dụng m ảng đốl tượng để gán giá trị và hiển thị.

using System; c lass Mindow

{protected in t top; protected in t l e f t ;

82

Page 84: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

public Window(int top, in t l e f t ){th is . to p = top; this.left = left;}public Virtual void DrawWindow()

{Console.WriteLine (’*Window: a t { 0} , { 1) " / top, l e f t ) /

/ / ------------------------------------------

c la s s Listbox: Window

{priva te s tr in g IboxContent;public List±x»ỉ(int top, int le f t , string cOTtent): base(tcp, left)

{IboxContent « content;

}public override void DrâwWindow()

{b ase . DrawWindow();Console.VftriteLinerGíii noi dung vao cua so Listbox: "+lixjxCc«i£aìt);

1 )c la s s Button: Window

ipublic Button(int top, in t ÌG ft) : base(top, le f t )

{ }putolic override void DrawWindow()

Console.MriteLine (" Drav/ing a button a t í 0} , { 1)", tc^, l e f t ) ;

■ )

83

Page 85: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

c la ss Examlnherit {s t a t i c void Main (stting( ] args)

{Winđow w = new Window(4# 5);ListBox Ibox * new Listbox(7, 8, ” Day la mot Listbox!**); Button b * new Buttondcr, 11); w.DrawWindow (); ỉbox.DrawWindow (); b . DrawWincìow ();Window [ ] winarr * new Windovi( 3) / //mang C â c doi tuongVíinarrỉ 0] = new Winđow(lỉ, 22);winarrf 1] * new ListEox(33, 44, ”Mot Listbox k^.ac!");winarr{ 2] « new Buttcn{44, 55);fo r ( in t i » 0; i < 3; i++) winarr( i] . DrawWindow ();Consỏle. ReadLine()/

) I

}

H i í ế í quả:Window: a t 4, 5

Winđow: a t 7. 8

Ghi noí dung vao cua so Listbox; Day la moí Lisỉbox!Dravving a button a t 11 ,1 2

Winđow: a t 11. 22

Window: a t 33, 44

Ghi noi dung vao cu a so Listbox: Mot Lỉstbox khac!

Dravving a button a ỉ 44, 55.

1

84

Page 86: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Chi/cfp«q 7. Tímb đ\ dẠinq (polyMORphĩsM)Polymorphism là từ ghép bởi "poly" nghĩa là nhiều (đa) còn "morph"

nghía là dạng (hinh). Như vậy polymorphism có nghĩa là sử dụng nhiều dạng của m ột kiểu (type) m à không cần quan tâm đến các chi tiếí cụ thể. Tính đa dạng (đa hinh) là m ột trong các đặc tính rất ưu việt của lập trinh hướng đối tưỢng,

Tính đa dạng được thể hiện trong c** bời một từ khác là "nạp chổng"

hay "trùng tên" (overloading). ở đây tôi sử dụng từ "trùng tên" hợp với nội dung hơn.

Có hai loại đa dạng (từ nay về sau ta chỉ gọi là "trùng tên"): hàm trùng tên (overioading íunction) và toán tử trùng tên {overlodđing operator),

Ta thấy cáu lệnh có hàm;Console.WriteLine{> ;Console.MriteLine("Ha noi" ) I Console.WríteLine("Age" +25);Console.WriteLine("Ky tu: " V A ');

Đ ây là m ột hàm thư viện được xây dựhg sẵai trong c ^ . H àm này có các kiểu đối số khác nhau: k iả i stríng, kiểu int, kiểu ký tự... nhtdng chỉ có m ột tên: Console.WriteLineO. Hàm này mặc nhiên được gọi là hàm trùng tẻn.

Trong chương 5 và chương 6, nhiều ví đụ ta đều thấy trong một chương trình có thể có hai hàm tạo trùng tên nhau nhưtìg m ột hàm tạo không có đối số còn m ột hàm tạo lại có đốl số.

c la s s Person

private in t ID; private s tr in g name; public PersonO {ID = 0;

85

Page 87: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Name » ” ";. - / t ; f i h )

/ / — --------- „ _ L . . ----------— — - —

piablic Person(int IDr string name)

This.ID - ID;This.name = name;

)ặ

)T ro n g th ừ ầ k ế , c á c h à m ờ l c ^ d ẫ n x u ấ t đ ề u c ó t h ể t rù n g tê n VÓS c á c

h à m ờ ỉớ p cơ sở. Các to á n tử trú n g tê n ta x é t s a u đ â y s è t h ể h iệ n sCte m ạ n h d ồ i d à o c ủ a lậ p tr ìn h h ư ớ n g đ ố i tưỢ ng.

7.1. HÀM TRỪNG TÊNH àm trùng tên đuợc Ạ nh nghĩa trong m ột lép nếu chúng có tên

g iố n g n h a u n h iứ ìg k h á c n h a u về;

- S ố iượng các đối số.

- Kiểu của các đối số (nếu ẹó số đối số giống nhau).

t 5 l / , ' d ụ 7 . Í .using System;c la s s Vector

{private in t I ] a “ new intí 10} ;

ji/ private in t I ] b ■ new intỉ 101;' private Int t ] c “ neW int{ 10] /

public in t n;/ / --------------------------------------------

public VectorO

{for(ir it i ■» 0; i < 10; Í++)

{^ i] » t( il « c( i ] » 0;

86

Page 88: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

}}

/ / --------------------------------------

pubiic void Input(in t [ ] a, ip t n)

ịfo r ( in t i “ 0; i < n; i++)

aí i] = Int32. Parse (Console.ReađLíne {));

}, ! ----------------------------------------------------------------------------------------------- —

public voiđ Inputo

{Console.Write(”Nhap n = "); n = Int32. Parse (Console.ReadLineO ); Console.VỉriteLine ("Nhap vector a ." );Input(a, n) /Console.WriteLine("Nhap vector b ." );^ p u t (b, n) ;

)/ / --------------------------------------

pubỉic void Add()

fo r ( in t i = 0; i < n; i++)c( i ] = a{ ỉ ] + bf i ] ;

)/ / ---------------------------------------

public voiđ Show(int [ ] a, in t n)

fo r { in t i = 0/ i < n; i++)Console. Vírite C' " i] ) ;

)/ / ---------------------------------------

piiblic void Show()

87

Page 89: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

{Conscle.writeLine (”\nVector a /* );Show(â, n );Console.W riteLiner\nVector b.**);Shôw (b, n );Add();Console.WriteLine{”\nVector c « â + b /*);Show(c, n);

)/ / -------------- --------------------------------------------------s t a t i c voiđ Main(string( ] args)

{Vector ob « new Vector(); ob.Input(); ob. Show();Console. ReadLine {);

> •

quá:Nhap n c 3 Nhap vector a.

1 2 3Nhap vector b.

4 5 6 Vector a.1 23 Vector b.

4 5 6Veclor c = a b.5 7 9Trong ví dụ trên ta ứiấy có hai hàm trũng tên InputO và hôi hàm

trùng tên ShowO nhưng có đối số khác nhau.

88

Page 90: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

Nếu trong một chương trình có hai hàm trùng tên, có số lượng đốisố như nhau và kiểu của từhg đối số giống hệt nhau thi hai hàm đó chỉ làmột và định nghĩa như vậỵ là sai cú pháp.

7.2. TOÁN TỬ TRÙNG TÊN

Trong tính toán số học các biến vừa khai báo VU& gán giá ừị:double a = 5, b = 6 ;dovible m = a + b ; / / Kết quả tn = 11

Thông thường ta định nghĩa hàm:public double Tinh(double a, double b) >

{return(a + b ) ;

}Để có kết quả ta viếỉ 1(M gọi hàm: double ra = Tinh (a, b)

Rõ ràng là phép cộng số học binh íhưcmg m = a + b dễ hiểu hơn nhiều so vcrt cách định nghĩa hàm và gọi hàm.

Toán tử trùng tên cho phép ía thực hiện phép cộng của các đối tượng với nhau.

Ví dụ. khi khai báo đối tượng có 3 toạ độ X , y, Z:

Toado Ml(xl, y l , z l ) ;Toado M2(x2, y2, z2) ỉ Toađo M3.

Nếu ta định nghĩa phép cộng: M3 = M I + M2; íhì việc cộng hai đối tượng MI và M2 hoàn toàn giống vóí phép cộng írong số học,

Cú pháp của toán tử trùng tên:public sttatic Toado operator+(Toado obl, Toado ob2)

íToado m;m . x = o b l . x + o b 2 . x ;

m.y = o b l.y + ob2 .y; m.z = o b l.z + ob2 .z;

1Ỉ.LẬPTFỈNH...NCA89

Page 91: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

return (m);

iChú ỷ: Trong định nghĩa trên ta thấy có từ khoá static, từ khoá

operator và bên trong hàm toán tử phải có lệnh: return(đối_tượng);

Sau từ khoá operator có thể đặt ký hiệu các phép toán trong số học như +, *. / , -I-+, — và cả các phép toán iogic.

V( dụ 7.2. Tmh tổng, hiệu. íich, thương toạ độ các uector a,b. usipg System; c la s s Vector

{private đouble t ) â == new đoubl^ 5] ; public vector(double [ ] a)

(fo r ( in t i = 0; i < 5; i++) th is .a í i] = at i] ;}//--------------------------------------------------------------------

publìc vector()

fo r ( in t ± = 0; i < 5; i++) a[ i] * 0 ;

//--------------------------------------------------------------------

p u b l ỉ c v o ỉ < i s h ơ w { )

{for(iẠ t i * ũ; i < 5; i++)Console ,Write {"í 0:0. oor', a[ ij );

r/ / --------- --------------------------------------------- --------public s t a t i c vector operator+(Vectỡr obl, Vector ob2)

i

90ixlẠpìi .^kb

Page 92: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

vector V « new VectorO; fo r ( in t i “ 0; i < 5; i++)7 . aỉ ij « o b l . a{ i] + ob2 . aí i] ; return v; •

n --------------------------------------------------------------------

Dublic s t a t i c vector operator-(Vector obl^ Vector 0b2)I

vector V * new vectorO / fo r ( in t i = 0; i < 5; i++)

V. a[ i] ^ o b l . a[ i] - ob2 . â[ i] ; return v;1

//--------------------------------------------------------------------

public s t a t i c vector operator*(vector obl, vector ob2 ) *

vector V = new vectorO ; fo r ( in t i = 0; i < 5; i++) v.a[ i] = obl.aí ì) * ob2 .a[ ij ; return v;

)Ị ị -------------------------------------------------------------------------------------------------------------------------------------

Public s t a t i c vector operator/(vector o b l , vector 0b2)

tvector V “ new vectorO ; fo r ( in t i = 0; i < 5; Ỉ++)V. a( i] = o b l . a[ i] / 0 b2 . a[ i] ; return v;

}n --------------------------------------------------------------------

s t a t ic voiđ Main(string[ ] args)

{

9 1

Page 93: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

double t ] a * { 1, 2, 3, 4, 5} ; đouble [) b » { 6 , 7, 8 , 9; 1 0 ) / vectot obl « new vector(a); vector ob2 * new vector (b) ỉ vector ob3, 0 b4 , obS, 0 b6 ; ob3 * obl + ob2;

0b4 = obl - ob2;ob5 obl * ob2 ;ob6 * obl / ob2 ;Console•WriteLine r \nVector d ); o b l. Show();Console,WriteLine("\nVector );ob2 . Show ();Console,WrỉteLiner\nVector c * a ^ b.**); 0 b3 . Show();

Console.WriteLinerXnVector đ * a - b . ” ); ob4•Show()/Console.WriteLine(**\nVector e * a * ob5. Show {');Console.WriteLine(”\nVeGtor f * a / b ."); ob6 •Show();Console. ReadLine <);

}y

B i< ế t quá:Vector a. 1 2 3 4 5 Vector b. 6 7 8 9 10Vector c = a + b.7.00 9.00 11.0Ó 13.00 15.00Vector d = a - b.

9 2

Page 94: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

-5 .00 -5.00 -5.00 -5.00 -5.00 Vector e = a * b.6.00 14.00 24.00 36.00 50.00

Vector f = a / b.0.17 0.29 0.38 0.44 0.50

Ví dụ 7.3. Tính tổng, hiệu và íích hai ma írận A, B có các phần tử được gán tníÃ:.

using System; c la s s Hat{private intí f] a * new intí 3,3] ; public Mat(int [ ,] a)

{fo r ( in t i - 0; i < 3; i++)fo r ( in t j * 0; j < 3; j++)th is .a í i , j ] “ âT i ó ] ;

)/ / ---------------------------------------------------- ---------------

Public Mato

ĩfo r ( in t i = 0; i < 3; i++)fo r ( in t j = 0; j < 3; j++)

a[ Ì , j] “ Ũ;}/ / ----------------------------------------------------------------public voiđ Show()

f o r ( in t i = 0; i < 3; i++)Ifo r ( in t j = 0; j < 3? j++)Console.Vỉrite (■'{ 01" , a t i , j ] } ;Cons'ole.WráteLine 0 ;

93

Page 95: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

)}/ / ........................... .............. .............. .............public s t a t ic Mat operator+(Mat obl, Mat 0b2)

Mat V = new Mat();fo r ( in t i = 0; i < 3; i++)for{in t j = 0; j < 3; j++)v .^ i , j ] = o b l . a ( i , j ] + o b 2 . a ( i , j ) ;retum v;

)//............ ............... .............. — ----------

public s t a t i c Mat operator-<Mat ob l, Mat ob2)

(Mat V = new Mat(); fo r ( in t i = 0; i < 3/ i++)fo r ( in t j = 0; j < 3; j++)

v .a ( i , j ] = o b l . a { i , j j - o b 2 . â ( i , j ] ; return v;

)/ / .............. ............................................. ..........public s t a t i c Mat operator*(Mat obl, Mat 0 b2 )

{Mat V = new Mat 0 ; fo r ( in t i “ 0; i < 3; i++)fo r ( in t j • 0; j < 3; j++)ív . a [ i , j ] = 0 ;

fo r ( in t k = 0; k < 3; k++)v.a[ i , j] + = obl.at * ob2 .a( k, j] ;

íreturn v;

9 4

Page 96: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

/ / ----------------------------------------------------------------s t a t i c void Main(stringí) args)

iin t [ ,] a * new int( 3, 3] {{ 1, 2, 3) , {4 , 5, 6) , í 1, 0, 0}) ;in t ( ,] b = new intỉ 3, 3] {{ 0, 0, 1) , { 6 , 5, 4} , { 3, 2, 1)} /Mat obl = new Mat(a);Mat ob2 = new Mat(b);Mat ob3, ob4, obS; ob3 * obl + 0 b2 ;

ob4 = obl - ob2 ; ob5 = obl * ob2;Console.WriteLine("\nMatran A. "); o b l . Show();Console.WriteLine("\nMatran B. "); ob2 . Show();Console.WriteLine(”\nMatran c = A + B. "); ob3.Show();Console.WriteLine("\nMatran D = A - B.

ob-y, Show () ;Console.MriteLine("\nMatran E = A * B. "); ob5. Show{);Console.ReadLine();

)}

S iK ế t quá:Matran A.1 2 3 4 5 6 1 0 0Matran B.0 0 1

95

Page 97: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

6 5 43 2 1Matran c = A + B. 1 2 4 10 10 104 2 1

Ma tran D = A - B1 2 1

-2 0 2 -2 -2 -1Matran E = A * B.21 1612 48 37 300 0 1

ựí dụ 7.4. Trong vỉ dụ 7.3 ta gán sẵn giá trị các phần tử của hai ma trận A, B, Trong ví dụ này ta viết chương ừình để nhập vào kích thước m, n của ma trận theo cách định nghĩa property (nếu tính đồng ửictì cả tổng, hiệu và ỉích hai ma trận ứìì thêm (fiều kiện m » n). Các phần tử của hai ma trận cũng được nhập từ bàn phím nhờ hàm InputQ.

using- System; c lỉtss Mat {p rivâte s t a t i c in t m, n; p rivate intí ,] a *= new int( 5, 5] ;n ------------------------------------------- ------ ------------------

p ubiic in t ml fget{ return m;} set{ m = value;}

n --------------------------------------------------------------------

public in t nl

9 6

Page 98: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

get{ return n;) setl n * value;}}public Mat(int Ị ,ì ẽ in t m, in t n)(for(int. i « ũ; i < ttì; i++)fo r ( in t j * 0 ; j < n/ j++)th is .â{ i , j) = < i , j] ;

/ / ---------------------------------------------------------pubỉic Mato {fo r ( in t i * 0; i < 5; i++)fo r ( in t j * 0; j < 5; j++)^ i.j) * 0/)/ / ---- -------- --------------------------------------------public voíd InputO {Console,WriteLine(**Nhap cac phan tu ma tran:for<int i * 0 ; i < m; i++)fo r ( in t j ” 0 ; j < n/ j++)a i í , j ] « Int32. Parse (Console .ReadLine 0 );

}/ / ------------------ ---------------------------------------public void Show(){fo r{ in t i * 0 ; i < m; i++){fo r ( in t j * 0 ; j < n; j++)Console ,Write (*M 0) " , â( i , j] );Console.WriteLine();

9 7

Page 99: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

/ / -------------------- ------------- ------------------public s t â t ic Mat operator+(Mat obl, Mat 0 b2 )

Mat V = new Mat 0 ;

fo r ( in t i * 0 ; i < m; i++)fc r ( in t j * 0 ; j < n; j++)v.âl i , j ] » obl.al i , j) + ob2 .al i , j] ; return v;}/ / .....................................................................public s t a t i c Mat operator-(Mat obl, Mât ob2)

{ '

Mat V ® new Mât();fo r ( in t i * ũ; i < m; i++)fo r ( in t j « 0 ; j < n; j++)v.aí i , ji * obl .aí i , jj - obl.âi i , j] ;return V /

}/ / --------------------------- ------------------------pubiic s t a t i c Mat operator*(Mat obl, Mat ob2) {Mat V » new Mat(); í o r í in t i « 0 ; i < m; i++)fo r ( in t j * 0 ; j < n;iv . a l i , j l - 0 ;

for<int k » 0 ; k < n/ k++)V . a í i , j ] + « o b l . â í k ) * o b 2 . a{ k , j ] ?

1

return v;

//

98

Page 100: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

s t a t ỉ c void Main(stringí ] args){int mr, nc;Console.Write c* Nhap kich thuoc m, n:'*); mr * Int32.farse(Console.ReađLine ()); nc = Ĩnt32. Parse (Console. ReadLỉne ()) ;Mât ob * new MatO/ cb.ml = mr; ob.nl = nc;Mat obl = new MatO;Mât ob2 » new Mat();M a t C b 3 , C b 4 , o b S ;

Conscle. WriteLine ('* Nhâp ma cran A.*'); o b l . Input 0 ;Console.WriteLine("Nhap ma tran B.*');0 b2 . Input 0 ;0 b3 = obl + ob2;0 b4 = ohl - ob2; obS * obl * ob2 ;Consoie. **riteLine ("\nMa tran A.” ); obl.Show ();Console .VíriteLine (**\nMa tran B.")#0 b2 . Show() ;Console.VíriteLine r\nMa tran c » A + B.” ); ob3. Show();Console.VíriteLine ("\nMa tran D » A -B .*'); 0 b4 . Show();Consol€,WriteLine(”\nMa tran E = A * B.” ); obS.Show ();Console-ReađLine ();}

99

Page 101: CD - thuvienso.bvu.edu.vnthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/1/Lap-trinh-C-tu-co-ban... · chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ

^?iK ếí quá:Nhap kích thuoc m, n: 2

2Nhap ma tran A.Nhap cac phan tu ma ỉran: 1

234Nhap ma tran B.Nhap cac phan tu ma tran

56

7

8Ma tran A.

1 23 4

Ma tran B.5 6

7 8Ma tran c = A + B.

6 8 ■

10 12

Ma tran D = A - B.

-4 -4

-4 -4Ma tran E = A • B.

19 22

43 50

100