Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 72 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
72
Dung lượng
1,9 MB
Nội dung
Trường Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh Bộ Môn Cơ Điện Tử 2012 Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 2 TÓM TẮT CHƯƠNG I : C++/CLI CĂN BẢN. 1) Tạo và biên dịch một chương tr ình C++/CLI : a) Dùng phần mềm Visual Studio : Mở chương tr ình VS 2008. Trong màn hình khởi động, chọn File - > New -> Project Trong cửa sổ New Project : Chọn kiểu project là CLR, trong cửa sổ Templates chọn CLR Console Application. Nhập tên của project vào ô Name và chọn thư mục chứa project trong ô Location. Nhấp OK. Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 3 Xuất hiện cửa sổ Project, chúng ta có thể bắt đầu viết chương tr ình trong vùng so ạn thảo. Sau khi hoàn tất chương tr ình, nh ấn vào biểu tượng Debug để chạy chương tr ình (ho ặc nhấn F5). Khi Debug, nếu chương tr ình co l ỗi về mặt cú pháp, VS sẽ thông báo các lỗi này trong cửa sổ Error, nhấp kép chuột vào dòng thông báo lỗi để biết vị trí lỗi. Nếu không thấy cửa sổ Error, trên thanh công cụ chọn View -> Other Windows -> Error List. (Hoặc nhấn Ctrl+F5). b) Dùng Notepad : Mở Notepad và bắt đầu viết chương tr ình trong c ửa sổ soạn thảo của Notepad. Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 4 Sau khi hoàn tất, lưu lại với đuôi .cpp. (Ví dụ muốn lưu lại với tên là Vidu thì trong ô File name nhập Vidu.cpp, trong ô Save as type chọn All Files. Để biên dịch chương tr ình, m ở VS Command Prompt. Trong màn hình Command Prompt, chuyển đến thư mục đang chứa tập tin muốn biên dịch bằng lệnh cd. Ví dụ nếu tập tin Vidu.cpp được lưu trong thư mục CLI trong ổ E thì nhập cd E:\CLI. Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 5 Sau khi chuyển đến thư mục, tiến hành biên dịch bằng lệnh : cl name /clr:safe . Trong đó, name là tên tập tin muốn biên dịch bao gồm cả đuôi mở rộng (Ví dụ : Vidu.cpp). Sau khi biên dịch thành công, hai tập tin Vidu.exe và Vidu.obj sẽ được tạo ra. Ta có thể chạy chương tr ình b ằng cách nhấp kép vào Vidu.exe trong thư mục chứa tập tin lập trình hoặc chạy trực tiếp trên Command Prompt bằng cách nhập vào tên của tập tin tại dấu nhắc (không bao gồm đuôi mở rộng). Lưu ý : Nếu chương tr ình có l ỗi về mặt cú pháp, quá trình biên dịch sẽ thất bại. 2) Class CONSOLE : Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 6 Class quản lí việc tương tác với màn hình Console. Các phương thức (hàm) cơ bản của lớp: Write(a) : Hàm một đối số. Xuất ra màn hình Console giá trị của a (a có thể là biến hoặc hằng số). VD : Console::Write (10); -> 10 Console::Write(“Hello”); -> Hello WriteLine(a) : Hàm một đối số. Tương tự như Write() nhưng sau khi xuất giá trị ra màn hình sẽ xuống dòng. VD : Console::WriteLine(10); -> 10 Console::WriteLine(“Hello”); -> Hello Read() : Hàm không có đối số. Kiểu dữ liệu trả về là interger. Nhận một kí tự được nhập từ bàn phím. VD : int a = Console::Read (); 5 : a = 5 A : a = 65 (số thập phân tương ứng mã ASCII của kí tự A ) AB : a = 65 (khi nhập vào một chuỗi kí tự thì chỉ nhận kí tự đầu tiên). ReadLine() : Hàm không có đối số. Kiểu dữ liệu trả về là String. Nhận một chuỗi kí tự được nhập từ bàn phím. VD : String^ b = Console::ReadLine (); Hello : b = “Hello”. ReadKey() : Hàm không có đối số. Kiểu dữ liệu trả về là ConsoleKeyInfo. Nhận phím được nhấn từ bàn phím (trừ các phím đặc biệt Ctrl, Shift, Alt). VD : ConsoleKeyInfo b = Console::ReadKey (); Console::Write(b.Key); (Nhấn phím) Esc -> Escape Kiểm tra xem có phải phím x đ ã đư ợc nhấn : b.Key == ConsoleKey::x ; VD : if (b.Key ==ConsoleKey::Escape) Console::Write(L “Phím ESC”); else Console::Write(L “Không phải phím ESC”); Clear() : Hàm không có đối số.Xóa toàn bộ màn hình Console. VD : Console::Clear (); Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 7 3) Biến và Con trỏ : a) Biến: Các biến chúng ta đ ã bi ết và sử dụng trước đây đều là biến có kích thước và kiểu dữ liệu xác định. Người ta gọi các biến kiểu này là biến tĩnh. Khi chúng ta khai báo biến, phần mềm lập trình sẽ tự động tìm một vùng nhớ còn trống trong bộ nhớ để lưu trữ giá trị của biến, kích thước của vùng nhớ tùy thuộc vào kiểu dữ liệu của biến. Bất cứ một biến nào cũng có một địa chỉ trong bộ nhớ của máy tính (địa chỉ này được lưu trữ trong các thanh ghi (register) đặc biệt của CPU). Khi khai báo biến t ĩnh, m ột lượng ô nhớ cho các biến này sẽ được cấp phát mà không cần biết trong quá trình thực thi chương trình có sử dụng hết lượng ô nhớ này hay không. Mặt khác, các biến t ĩnh d ạng này sẽ tồn tại trong suốt thời gian thực thi chương tr ình dù có nh ững biến mà chương tr ình ch ỉ sử dụng 1 lần rồi bỏ. Các kiểu biến t ĩnh : các biến kiểu giá trị như interger, float, decimal, boolean và character. Một số hạn chế có thể gặp phải khi sử dụng các biến t ĩnh: Cấp phát ô nhớ dư, gây ra l ãng phí ô nh ớ. Cấp phát ô nhớ thiếu, chương tr ình th ực thi bị lỗi. Để tránh những hạn chế trên, ngôn ngữ C++ cung cấp cho ta một loại biến đặc biệt gọi là biến động với các đặc điểm sau: Chỉ phát sinh trong quá trình thực hiện chương tr ình ch ứ không phát sinh lúc bắt đầu chương tr ình. Khi chạy chương tr ình, kích th ư ớc của biến, vùng nhớ và địa chỉ vùng nhớ được cấp phát cho biến có thể thay đổi. Sau khi sử dụng xong có thể giải phóng để tiết kiệm chỗ trong bộ nhớ. Các kiểu biến động : String, Object, array, interface, delegate … Tuy nhiên các biến động không có địa chỉ nhất định nên ta không thể truy cập đến chúng được. Vì thế, ngôn ngữ C lại cung cấp cho ta một loại biến đặc biệt nữa để khắc phục tình trạng này, đó là biến con trỏ (pointer) với các đặc điểm: Biến con trỏ không chứa dữ liệu mà chỉ chứa địa chỉ của dữ liệu hay chứa địa chỉ của ô nhớ chứa dữ liệu. Kích thước của biến con trỏ không phụ thuộc vào kiểu dữ liệu, luôn có kích thước cố định là 2 byte. Tất cả các biến động đều phải khai báo thông qua con trỏ. b) Pointer : (*) Muốn truy xuất giá trị của một biến, thì có thể gọi tên biến trong chương tr ình ho ặc truy xuất trực tiếp đến vùng nhớ thông qua địa chỉ của biến. Để truy xuất trực tiếp đến vùng nhớ của biến, ta dùng biến con trỏ (pointer). Nói đơn giản, con trỏ là một biến chứa địa chỉ của biến khác. Kích thước của biến con trỏ không phụ thuộc vào kiểu dữ liệu, luôn có kích thước cố định là 2 byte. Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 8 Cú pháp khai báo : type* name; Trong đó type là kiểu dữ liệu của biến mà con trỏ chứa địa chỉ và name là tên của biến con trỏ. VD : int* a; //Khai báo biến con trỏ a để chứa địa chỉ của một biến có kiểu int. Khi mới khai báo, biến con trỏ sẽ có giá trị ngẫu nhiên. Ngh ĩa là nó đang ch ỉ tới một vị trí bất kì nào đó trong b ộ nhớ. Để gán địa chỉ của một biến cho con trỏ, ta dùng toán tử địa chỉ & VD : int k = 10; int* a = &k; //Con trỏ a đang chứa địa chỉ của biến k. Để truy cập nội dung của ô nhớ mà con trỏ đang chỉ tới, ta sử dụng toán tử gián tiếp *. VD : int y =*a; //Biến y sẽ được gán giá trị của ô nhớ mà con trỏ a đang chỉ tới. Ta có thể cộng (+), trừ (-) 1 con trỏ với 1 số nguyên N nào đó; kết quả trả về là 1 con trỏ. Con trỏ này chỉ đến vùng nhớ cách vùng nhớ của con trỏ hiện tại N phần tử (vùng nhớ) . Kích thước của vùng nhớ phụ thuộc vào kiểu dữ liệu của biến mà con trỏ chỉ tới (mỗi ô nhớ có kích thước 1 byte). VD : int k = 10; int* a = &k; int* b = a + 3; // Nếu a đang chỉ tới ô nhớ 1000 thì b sẽ chỉ tới ô nhớ có địa Ta không thể công hai biến con trỏ với nhau nhưng có thể trừ hai biến con trỏ (kết quả là một số nguyên cho biết khoảng cách giữa hai ô nhớ mà hai con trỏ đang trỏ tới). VD : int k1=10, k2=20; int *a =&k1, *b =&k2; int y = a – b; // Nếu a đang chỉ tới ô nhớ 1000 và b chỉ tới ô nhớ 1012 thì y = 12. Do con trỏ c ũng là m ột biến nên c ũng đư ợc lưu trữ trong bộ nhớ, nên ta có thể dùng một con trỏ khác để chỉ tới địa chỉ này. VD: int*a = &k1; int**b = &a; c) Handle : (^) chỉ 1012 (kiểu int có kích thước 32-bit (4 byte), do đó mỗi vùng nhớ của biến kiểu int là 4 ô nhớ; địa chỉ của con trỏ b cách con trỏ a 4 phần tử tương ứng với 12 ô nhớ ). Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 9 Handle c ũng có chức năng t ương tự như pointer. Chỉ khác là nó không ph ản ánh đ ược địa ch ỉ thật của đối tượng nằm ở đâu trên bộ nhớ mà nó phản ánh được 1 giá trị 32 bit do CLR quản lý. Do đó handle c òn có th ể được xem là một con trỏ ảo cho phép tương tác với bộ nhớ thông qua CLR. Do không ph ản ánh địa chỉ thật của đối tượng trên b ộ nhớ nên ta không th ể thực hiện các phép toán công trừ với số nguyên như pointer. Cơ ch ế quản lý bộ nhớ của một số ngôn ngữ : 4) String (Kiểu chuỗi kí tự) : String là kiểu dữ liệu cho phép lưu trữ giá trị dưới dạng một dãy các kí tự. Để dễ hình dung, ta có xem String như là một vectơ gồm nhiều phần tử liên tiếp nhau, mỗi phần tử là một kí tự. Cú pháp khai báo : String^ name; //name là tên biến. Để gán giá trị cho biến kiểu String, ta đặt chuỗi kí tự trong cặp dấu “”. VD : String^ a = “Xinchao”; Do kích thước của kiểu String là không xác định (vì không biết chính xác chiều dài của chuỗi kí tự). Nên String thuộc kiểu dữ liệu tham chiếu (reference type) và khi khai báo cần có ^ (handle). Ta có thể truy xuất đến bất kì một phần tử nào trong chuỗi nếu biết vị trí của phần tử đó. VD : String^ a = “Xinchao”; Char b = a [3]; // b = ‘c’ (a[3] có ngh ĩa là ph ần tử thứ 4, phần tử đầu tiên là a[0]). Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 10 Trong C++/CLI, có riêng một Class quản lí kiểu chuỗi là Class String. Các biến (variable) và phương thức (method) cơ bản của Class String : Length : biến có kiểu interger. Trả về chiều dài của chuỗi (số lượng các kí tự của chuỗi). VD : String^ a = “Xinchao” ; int x = a->Length; // x sẽ có giá trị = 7. Concat() : Hàm nhiều đối số. Kiểu dữ liệu trả về là String. Thực hiện chức năng nối các chuỗi lại với nhau. VD : String ^ a = “Welcome”, ^b = “ To ”, ^c = “Viet Nam”; String ^ d = String::Concat(a,b,c); // d = “Welcome to Viet Nam” Substring(int n) : Hàm một đối số. Kiểu dữ liệu trả về là String. Tạo một chuỗi mới từ chuỗi ban đầu bằng cách loại đi n phần tử đầu tiên . VD : String^ a = “Hello”; String^ b = a->Substring(2); // b = “llo” ToUpper() : Hàm không đối số. Kiểu dữ liệu trả về là String. Thực hiện chức năng chuyển tất cả các kí tự của chuỗi thành chữ HOA VD : String ^ a = “Welcome”; String ^ b = a->ToUpper(); // b= “WELCOME” ToLower() : Hàm không đối số. Kiểu dữ liệu trả về là String. Thực hiện chức năng chuyển tất cả các kí tự của chuỗi thành chữ thường. VD : String ^ a = “Welcome”; String ^ b = a->ToLower(); // b= “welcome” Remove(int n, int m) : Hàm hai đối số. Kiểu dữ liệu trả về là String. Tạo một chuỗi mới từ chuỗi ban đầu bằng cách loại đi m các phần tử từ vị trí n . Replace(String^ n, String^ m) : Hàm hai đối số. Kiểu dữ liệu trả về là String. Tạo một chuỗi mới từ chuỗi ban đầu bằng cách thay thế chuỗi n bằng chuỗi m. VD : String^ a = “Hello Hell”; String^ b = a->Replace(“ell”, “i”); // b = “Hio Hi” VD : String^ a = “Hello Viet Nam”; String^ b = a->Remove(2,5); // b = “Heiet Nam” String^ b= a->SubString(Start, Length) //Start={0, 1, 2, }, Length: Sӕ Ký tӵ Cҫn lҩy Vd: A->SubString(0,2)="He"; [...]... kết thúc chương trình Đặc trưng của lập trình tuyến tính : Đơn giản : lập trình theo lối tuần tự, không phức tạp Đơn luồng : chỉ có một luông công việc được thực hiện tuần tự Nhược điểm : Không thể thực hiện được các chương trình phức tạp Chương trình dài b) Lập trình cấu trúc : Trong lập trình cấu trúc, chương trình chính đư ợc chia nhỏ thành các chương trình con, mỗi chương trình con thực... t ph n nguyên làm tròn theo quy t c Trang 26 Lập trình ứng dụng trong kỹ thuật Chương 2 TÓM TẮT CHƯƠNG II : C++/ CLI HƯỚNG ĐỐI TƯỢNG PHẦN A : GIỚI THIỆU TỔNG QUAN 1) Tổng quan về các phương pháp lập trình : a) Lập trình tuyến tính : Đây là phương pháp lập trình ra đ ời đầu tiên Đặc trưng cơ bản của lập trình tuyến tính là tu duy theo lối tuần tự : chương trình đư ợc thực hiện từ đầu đến cuối, lệnh này... chương trình con, mỗi chương trình con thực hiện một công việc xác định (chương trình con chính là các hàm) Chương trình s ẽ gọi đến chương trình con b ằng một giải thuật hay một cú pháp nhất định trong chương trình Một chương trình con có th ể được gọi nhiều lần trong chương trình chính Đặc trưng của lập trình cấu trúc Chương trình bao gồm hai thành phần chính : cấu trúc dữ liệu và giải thuật Cấu trúc... ngữ lập trình Giải thuật là qui trình để thực hiện bài toán đó Giải thuật luôn luôn phụ thuộc vào cấu trúc dữ liệu Nhược điểm : Không hỗ trợ việc sử dụng lại mã nguồn do giải thuật luôn phụ thuộc vào cấu trúc dữ liệu Khi thay đổi cấu trúc dữ liệu thì đ ồng thời phải thay đổi luôn cả giải thuật c) Lập trình hư ớng đối tượng : Lập trình hướng đối tượng ra đời nhằm khắc phục các hạn chế của lập trình. .. môi trường Bộ môn Cơ điện tử Trang 27 Lập trình ứng dụng trong kỹ thuật Chương 2 VD : Chuỗi kí tự trong C++/ CLI là một dạng đối tượng Khi chúng ta khai báo String^ a = “Hello” tức là đã tạo ra một đối tượng Đối tượng này có tên là a, ta có thể tiến hành các tham chiếu thông qua tên của đối tượng : a->Length ; a->Substring() … 2) Lập trình hướng đối tượng: Lập trình hư ớng đối tượng (gọi tắt là OOP,... từ chữ Anh ngữ object-oriented programming), hay còn gọi là lập trình định hướng đối tượng, là kĩ thuật lập trình hỗ trợ công nghệ đối tượng Một cách giản lược, đây là khái niệm và là một nỗ lực nhằm giảm nhẹ các thao tác viết mã cho ngư ời lập trình, cho phép họ tạo ra các ứng dụng mà các yếu tố bên ngoài có thể tương tác với các chương trình đó gi ống như là tương tác với các đối tượng vật lý Những... điện tử Trang 20 Lập trình ứng dụng trong kỹ thuật Chương I for each (type name in collection) //name là tên biến, collection là tập hợp { Statements; // Thực hiện lại đoạn lệnh } VD : array ^ M = {‘A’ , ‘B’ , ‘C’, ‘D’}; for each(Char x in M) { Console::Write(“{0}/t”, x); } Kết quả in ra màn hình : A B C D 8) Hàm (Function) : Hàm được xem như là trung tâm của các chương trình C++/ CLI Về cơ bản,... tượng Mỗi phương thức hay mỗi dữ liệu nội tại cùng với các tính chất được định nghĩa (bởi người lập trình) được xem là một đặc tính riêng của đối tượng Nếu không có gì lầm lẫn thì tập hợp các đặc tính này gọi chung là đặc tính của đối tượng Tính đóng gói (Encapsulation) : Bộ môn Cơ điện tử Trang 28 Lập trình ứng dụng trong kỹ thuật Chương 2 Các đối tượng có những thuộc tính tương tự nhau được gom thành... tượng sau kh i đã dùng xong, trong đó có thể bao gồm cả việc xóa các con trỏ nội tại và trả về các phần bộ nhớ mà đối tượng đã dùng Bộ môn Cơ điện tử Trang 30 Lập trình ứng dụng trong kỹ thuật Chương 2 PHẦN B : CLASS TRONG C++/ CLI Lớp trong C++/ CLI cũng được đặc trưng bởi các thuộc tính và phương thức Để bảo vệ tránh việc bị truy xuất tự do từ bên ngoài, các thuộc tính và phương thức trong lớp có sử... 17 Lập trình ứng dụng trong kỹ thuật Chương I } VD : int x = 4,y; switch (x%3) { case 0: Console::WriteLine(“x chia het cho 3”); break; case 1: Console::WriteLine(“x la so chan”); break; default : Console::WriteLine(“x la so le”); } Kết quả xuất ra màn hình của đoạn mã trên : x la so chan Lưu ý : Lệnh break có tác dụng thoát khỏi điều kiện Nếu không có lệnh break sau mỗi đoạn lệnh case, chương trình . Minh Bộ Môn Cơ Điện Tử 2012 Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 2 TÓM TẮT CHƯƠNG I : C++/ CLI CĂN BẢN. 1) Tạo và biên dịch một chương tr ình C++/ CLI : a) Dùng phần mềm. tin lập trình hoặc chạy trực tiếp trên Command Prompt bằng cách nhập vào tên của tập tin tại dấu nhắc (không bao gồm đuôi mở rộng). Lưu ý : Nếu chương tr ình có l ỗi về mặt cú pháp, quá trình. (a[3] có ngh ĩa là ph ần tử thứ 4, phần tử đầu tiên là a[0]). Lập trình ứng dụng trong kỹ thuật Chương I Bộ môn Cơ điện tử Trang 10 Trong C++/ CLI, có riêng một Class quản lí kiểu chuỗi là Class String.