Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 57 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
57
Dung lượng
1,18 MB
Nội dung
ĐẠI HỌC NGOẠI NGỮ - TIN HỌC TP.HCM KHOA CÔNG NGHỆ THƠNG TIN KỸ THUẬT LẬP TRÌNH BÀI TẬP THỰC HÀNH THÁNG 3, 2019 NỘI DUNG C# CODING STANDARDS Các kiểu liệu Các câu lệnh Kỹ thuật debug 11 Buổi Dữ liệu dạng bảng 15 Buổi Kỹ thuật giá trị lính canh đặt biến cờ 25 Buổi Kỹ thuật mảng đánh dấu mảng đếm 27 Buổi Kỹ thuật xếp tìm kiếm 31 Buổi Kỹ thuật xử lý chuỗi 35 Buổi Kỹ thuật đệ quy 41 Buổi Kỹ thuật Đóng gói 45 Buổi Kỹ thuật Thừa kế đa hình 51 Buổi Kỹ thuật Operator overloading 55 C# CODING STANDARDS Coding standards có mục đích: tạo định dạng qn q trình viết code, giúp người đọc chương trình tập trung vào nội dung khơng thời gian dị tìm tên biến, tên hàm, kiểu liệu, … từ đọc hiểu code nhanh tái sử dụng, nâng cấp, bảo trì code nhanh chống Trong phần điểm qua: • Coding style • Naming conventions Layout Conventions (Bố cục) • Viết lệnh dịng • Viết khai báo dịng • Nếu dịng tiếp tục khơng thụt lề tự động, thụt lề tab stop (bốn dấu cách) • Dùng dấu ngoặc để tạo mệnh đề biểu thức rõ ràng if ((val1 > val2) && (val1 > val3)) { } Comment • Đặt comment dịng riêng (khơng phải cuối dịng code) • Bắt đầu comment text ký tự viết hoa • Kết thúc comment dấu chấm • Insert khoảng trắng // với text // The following declaration creates a query It does not run // the query Thuật ngữ • Camel Case (camelCase): Ký tự tên viết thường từ sau viết hoa ký tự Ví dụ: studentName • Pascal Case (PascalCase): Ký tự từ viết hoa Ví dụ: GetPost Biên soạn: Tơn Quang Toại Trang Class • Dùng PascalCase cho tên lớp • Dùng danh từ hay cụm danh từ cho tên lớp public class Customer { } public class Image { } Methods • Dùng PascalCase cho tên phương thức • Dùng động từ cho tên phương thức public int TransferAccount(string accountNumber) { } Tham số hàm biến cục • Dùng camelCase cho tên tham số hàm biến cục public int TransferAccount(string accountNumber) { } Biên soạn: Tơn Quang Toại Trang Property • Dùng PascalCase cho tên property • Khơng dùng Get/Set làm prefix tên property private int salary = 1000; public string Salary { get { return salary; } } set { salary = value; } Interface • Dùng ký tự “I” làm prefix tên interface • Sau “I” đặt tên theo định dạng PascalCase public interface IUser { bool ValidateUser(); } Namespace • Dùng PascalCase cho tên namespace Biên soạn: Tôn Quang Toại Trang Các kiểu liệu Các kiểu liệu thường hay sử dụng lập trình • Scalar • Danh sách (mảng chiều) • Bảng (matrix hay mảng hai chiều) Scalar Dữ liệu int Miền giá trị −2 tỷ đến tỷ char −1.79 × 10−308 → 1.79 × 10308 string Chuỗi double Ký tự (0 → 65535) double score; int num; string name; Danh sách Dãy 𝑛𝑛 phần tử 𝑎𝑎 = (𝑎𝑎0 , 𝑎𝑎1 , … , 𝑎𝑎𝑛𝑛−1 ) chứa • Số nguyên, số thực: dãy số • Chuỗi (string): danh sách họ tên sinh viên, danh sách sản phẩm, … double[] scores; int num; num = … scores = new int[num]; string[] names; int num; num = … names = new string[num]; Biên soạn: Tơn Quang Toại Trang Bảng • Dữ liệu dạng bảng (hay gọi ma trận) chứa bảng số nguyên, số thực, … • Ký hiệu: 𝑎𝑎[𝑚𝑚 𝑥𝑥 𝑛𝑛] int[,] a; int m, n; m = … n = … a = new int[m, n]; … Biên soạn: Tôn Quang Toại Trang Các câu lệnh Các lệnh ngôn ngữ lập trình C# • Nhập xuất liệu, Xuất số lẻ • if • for • while • foreach • do…while Nhập/Xuất liệu • Nhập dịng giá trị int inputInt = Convert.ToInt32(Console.ReadLine()); double inputDouble = Convert.ToInt32(Console.ReadLine()); • Nhập dòng nhiều giá trị string[] tokens = Console.ReadLine().Split(); int a = Convert.ToInt32(tokens[0]); int b = Convert.ToInt32(tokens[1]); • Xuất liệu Console.Write(inputInt); Console.Write(inputInt + “ ” + inputDouble); Console.Write("Num {0} {1}", inputInt, inputDouble); Console.Write($"Text {inputInt} {inputDouble}"); Console.WriteLine(); • Xuất số lẻ Console.Write("Text {0:0.00}", num2); Biên soạn: Tôn Quang Toại Trang Câu lệnh rẽ nhánh if if (điều kiện) { } if (điều kiện) { } else { } • Phép toán logic o So sánh: >, =, 0, 𝑛𝑛 ≥ 0) Viết hàm đệ quy tính 𝑎𝑎𝑛𝑛 theo cơng thức đệ quy sau 𝑎𝑎𝑛𝑛 = � 1, 𝑎𝑎 × 𝑛𝑛 𝑛𝑛 𝑎𝑎 × 𝑎𝑎 , 𝑛𝑛−1 𝑛𝑛−1 𝑎𝑎 × 𝑎𝑎 , 𝑛𝑛ế𝑢𝑢 𝑛𝑛 = 𝑛𝑛ế𝑢𝑢 𝑛𝑛 𝑐𝑐ℎẵ𝑛𝑛 𝑛𝑛ế𝑢𝑢 𝑛𝑛 𝑙𝑙ẻ Input • Dịng chứa hai số ngun 𝑎𝑎 𝑛𝑛 Output • Giá trị 𝑎𝑎𝑛𝑛 tính Biên soạn: Tơn Quang Toại Trang 41 Ví dụ Input Output 64 Bài Tháp Ha Noi Có cột đặt tên 𝐴𝐴, 𝐵𝐵, 𝐶𝐶 Cột 𝐴𝐴 chứa 𝑛𝑛 đĩa đĩa nhỏ đặt đĩa lớn (xem hình phía dưới) 𝑨𝑨 𝑩𝑩 Ba cột cột A chứa 𝑛𝑛 = đĩa 𝑪𝑪 Hãy thực bước để chuyển 𝑛𝑛 đĩa từ cột 𝐴𝐴 sang cột 𝐶𝐶 với ràng buộc sau: • Mỗi lần di chuyển đĩa (đĩa nằm cột) từ cột sang cột khác (có thể từ • cột 𝐴𝐴 sang 𝐵𝐵 hay sang 𝐶𝐶; từ cột 𝐵𝐵 sang 𝐴𝐴 hay sang 𝐶𝐶; từ cột 𝐶𝐶 sang 𝐴𝐴 hay sang 𝐵𝐵) Sau bước chuyển, cột, đĩa lớn nằm dưới, đĩa nhỏ nằm Input • Dịng chứa số ngun 𝑛𝑛 Output • Gồm nhiều dịng, mơ tả bước di chuyển đĩa, theo định dạng: Chuyển đĩa từ cột X sang cột Y Trong 𝑋𝑋, 𝑌𝑌 ∈ {𝐴𝐴, 𝐵𝐵, 𝐶𝐶} Ví dụ Input Biên soạn: Tôn Quang Toại Output Chuyển đĩa từ cột A sang cột B Chuyển đĩa từ cột A sang cột C Chuyển đĩa từ cột B sang cột C Trang 42 Ví dụ Input Chuyển Chuyển Chuyển Chuyển Chuyển Chuyển Chuyển 1 1 1 đĩa đĩa đĩa đĩa đĩa đĩa đĩa Output từ cột A từ cột A từ cột C từ cột A từ cột B từ cột B từ cột A sang sang sang sang sang sang sang cột cột cột cột cột cột cột C B B C A C C Hướng dẫn: Sử dụng phương pháp chia để trị • • • Chuyển (𝑛𝑛 − 1) đĩa từ cột 𝐴𝐴 sang cột 𝐵𝐵, lấy cột 𝐶𝐶 làm cột trung gian Chuyển đĩa từ cột 𝐴𝐴 sang cột 𝐶𝐶 Chuyển (𝑛𝑛 − 1) đĩa từ cột 𝐵𝐵 sang cột 𝐶𝐶, lấy cột 𝐴𝐴 làm cột trung gian Bài Đọc số Cho số nguyên dương 𝑛𝑛 (0 ≤ 𝑛𝑛 ≤ × 109 ) Hãy chuyển số 𝑛𝑛 thành câu tiếng Việt Ví dụ: 123: trăm hai mươi ba 104: trăm lẻ bốn 1234: ngàn hai trăm ba mươi bốn Input • Dịng chứa số ngun 𝑛𝑛 Output • Dịng chứa chuỗi kết Ví dụ 123 Input Output trăm hai mươi ba Hướng dẫn: sử dụng kỹ thuật đệ quy phương pháp chia để trị Biên soạn: Tôn Quang Toại Trang 43 Buổi Kỹ thuật Đóng gói Sau hồn thành thực hành sinh viên có thể: Sử dụng kỹ thuật hướng đối tượng theo ngun tắc đóng gói: • Tạo lớp • Tạo đối tượng • Tạo danh sách đối tượng Bài Phân số Xây dựng lớp PhanSo để biểu diễn phân số với thuộc tính TuSo MauSo nguyên (chỉ truy cập bên lớp) Định nghĩa phương thức sau: • Khởi tạo phân số (phân số rút gọn sau khởi tạo) • Nhập giá trị phân số từ bàn phím • In giá trị phân số hình • Tính giá trị thập phân phân số • Cộng phân số • Trừ phân số • Nhân phân số • Chia phân số Viết chương trình nhập vào phân số In hình: • Giá trị phân số sau rút gọn • Giá trị thập phân phân số • Kết cộng, trừ, nhân, chia phân số Hướng dẫn: • Bước 1: Tạo Console App (.NET Framework) Visual Studio • Bước 2: Tạo Class cách click chuột phải vào tên Project Add Class Biên soạn: Huỳnh Thành Lộc Trang 45 • Bước 3: Đặt tên cho Class PhanSo Add Biên soạn: Huỳnh Thành Lộc Trang 46 • Bước 4: Định nghĩa lớp PhanSo theo cấu trúc sau: class PhanSo { private int tuSo; private int mauSo; //Ham tinh Uoc so chung lon nhat cua so nguyen a, b private int GCD(int a, int b) { } public PhanSo(int ts, int ms) { } public void Nhap() { } public void In() { } public double GiaTriThapPhan() { } public PhanSo Cong(PhanSo p) { } public PhanSo Tru(PhanSo p) { } public PhanSo Nhan(PhanSo p) { } } • public PhanSo Chia(PhanSo p) { } Bước 5: Quay trở lại hàm Main(…) Khai báo biến kiểu PhanSo thực thao tác tính tốn đối tượng kiểu PhanSo vừa tạo Biên soạn: Huỳnh Thành Lộc Trang 47 Bài Point2D Xây dựng lớp Point2D biểu diễn điểm không gian chiều với tọa độ nguyên Lớp Point2D cung cấp thao tác thông dụng điểm sau: • Các constructor khởi tạo: - Point2D(): khởi tạo điểm gốc tọa độ (0,0) - Point2D(int x, int y): khởi tạo điểm có hồnh độ x, tung độ y - Point2D(Point2D p): khởi tạo điểm vị trí điểm p • Nhập tọa độ cho điểm từ bàn phím: void Input() • Trả chuỗi biểu diễn tọa độ điểm dạng “(x, y)”: string ToString() • Di chuyển điểm đến tọa độ mới: void Move(int x, int y) • Kiểm tra xem điểm có phải gốc tọa độ (0,0) hay không: bool isOrigin() • Hàm tính khoảng cách từ điểm tới điểm p: double Distance(Point2D p) • Hàm tĩnh tính khoảng cách điểm p1 p2: static double Distance(Point2D p1, Point2D p2) Bài Triangle Xây dựng lớp Triangle biểu diễn thông tin tam giác không gian chiều với đỉnh kiểu Point2D Lớp Triangle cung cấp thao tác thông dụng điểm sau: • Constructor khởi tạo: - Triangle(Point2D p1, Point2D p2, Point2D p3) • Tính chu vi tam giác: void Perimeter(int x, int y) • Tính diện tích tam giác: double Area() Bài Rectangle Xây dựng lớp Rectangle để biểu diễn hình chữ nhật với thuộc tính mơ tả chiều dài chiều rộng Định nghĩa phương thức sau: • Các constructor khởi tạo có tham số khơng có tham số • Nhập thơng tin hình chữ nhật • Xuất thơng tin hình chữ nhật: “Rectangle[length=?, width=?]” • Tính chu vi hình chữ nhật • Tính diện tích hình chữ nhật • Tính đường chéo hình chữ nhật Biên soạn: Huỳnh Thành Lộc Trang 48 Bài Date Xây dựng lớp Date theo thiết kế sau: Bài Book Xây dựng lớp Author Book theo thiết kế sau: Biên soạn: Huỳnh Thành Lộc Trang 49 Buổi Kỹ thuật Thừa kế Đa hình Sau hồn thành thực hành sinh viên có thể: Sử dụng kỹ thuật hướng đối tượng theo nguyên tắc thừa kế: • Tạo lớp cha • Tạo lớp • Overriding methods Bài Xây dựng lớp Person lớp Student, Staff kế thừa từ lớp Person thiết kế sau: Biên soạn: Huỳnh Thành Lộc Trang 51 Hướng dẫn: • Bước 1: Tạo lớp sở Person class Person { public virtual void toString() { } } • Bước 2: Tạo lớp Student kế thừa từ lớp Person - Tạo lớp đặt tên Student - Khai báo lớp Student kế thừa từ lớp Person class Student : Person { } - Khai báo thuộc tính riêng lớp Student - Xây dựng phương thức cho lớp Student - Overriding phương thức toString() class Student : Person { public override void toString() { } } • Bước 3: Tạo lớp Staff kế thừa từ lớp Person tương tự lớp Student Biên soạn: Huỳnh Thành Lộc Trang 52 Bài Xây dựng chương trình theo sơ đồ lớp đây: Biên soạn: Huỳnh Thành Lộc Trang 53 Buổi Kỹ thuật Operator overloading Sau hoàn thành thực hành sinh viên có thể: Sử dụng kỹ thuật operator overloading Bài Số phức Xây dựng lớp Complex biểu diễn khái niệm số phức với hai thành phần liệu phần thực phần ảo • Định nghĩa phương thức xuất, nhập, cộng, trừ, nhân, chia hai số phức • Overriding operator +, -, *, / lớp số phức Viết chương trình cho phép nhập vào hai số phức, in kết phép toán cộng, trừ, nhân, chia hai số phức kể Bài Phân số Overloading operator +, -, *, /, ==, !=, >,