Các cấu trúc điều khiển - Cài đặt thuật toán (Lập trình)

pdf 29 trang vanle 2540
Bạn đang xem 20 trang mẫu của tài liệu "Các cấu trúc điều khiển - Cài đặt thuật toán (Lập trình)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfcac_cau_truc_dieu_khien_cai_dat_thuat_toan_lap_trinh.pdf

Nội dung text: Các cấu trúc điều khiển - Cài đặt thuật toán (Lập trình)

  1. Các cấu trúc điều khiển (phần 1) v 1.0 - 10/2012 Lê Viết Mẫn - lvman@hce.edu.vn 1 Các cấu trúc Ðiều khiển 1
  2. chúng ta đã học 1. Lập trình là gì ? 2. C# và .NET 3. Thiết kế thuật toán 4. Những thành phần cơ bản của C# Lê Viết Mẫn - lvman@hce.edu.vn 2 Các cấu trúc Ðiều khiển 1
  3. Giải bài toán trên máy tính 1. Xác định bài toán 2. Thiết kế thuật toán 3. Phân tích thuật toán 4. Cài đặt thuật toán (Lập trình) 5. Kiểm tra / Bắt lỗi 6. [ Sửa lỗi ] Lê Viết Mẫn - lvman@hce.edu.vn 3 Các cấu trúc Ðiều khiển 1
  4. Nội dung 1. Biểu thức 2. Câu lệnh điều kiện if 3. Câu lệnh lựa chọn switch 4. Kiểu dữ liệu Enum Lê Viết Mẫn - lvman@hce.edu.vn 4 Các cấu trúc Ðiều khiển 1
  5. Biểu thức Lê Viết Mẫn - lvman@hce.edu.vn 5 Các cấu trúc Ðiều khiển 1
  6. Biểu thức • Các câu lệnh trả ra một giá trị myVariable = 57; // trả ra giá trị là 57 a = b = c = d = e = 20; • Biểu thức số • Các toán hạng là có kiểu số hoặc ký tự • Riêng với toán tử ++ và thì toán hạng phải là kiểu số hoặc kiểu liệt kê • Kiểu của giá trị trả về là kiểu số lớn nhất trong các kiểu của các toán hạng, nhưng ít nhất phải là int int + long => long short + int => int short + short => int Lê Viết Mẫn - lvman@hce.edu.vn 6 Các cấu trúc Ðiều khiển 1
  7. Biểu thức điều kiện (1/2) Các toán tử quan hệ và logic E1 E2 E1 && E2 == so sánh bằng counter == 0 FALSE FALSE FALSE != so sánh khác counter != 0 FALSE TRUE FALSE > lớn hơn counter > 0 TRUE FALSE FALSE = lớn hơn hoặc bằng counter >= 0 E1 E2 E1 || E2 counter = 10) TRUE FALSE TRUE ! phép NOT !done TRUE TRUE TRUE E !E FALSE TRUE Kết quả trả về có kiểu bool TRUE FALSE Lê Viết Mẫn - lvman@hce.edu.vn 7 Các cấu trúc Ðiều khiển 1
  8. Biểu thức điều kiện (2/2) • Sự kết hợp của toán tử quan hệ và toán tử logic (minimumWage <= wages <= maximumWage) (minimumWage <= wages) && (wages <= maximumWage) • Các toán tử quan hệ == và != không làm việc tốt với kiểu số thực • Dấu = là phép gán, dấu == là toán tử quan hệ • Dấu && là phép AND logic, dấu & là toán tử AND trên bit • Dấu || là phép OR logic, dấu | là toán tử OR trên bit • Với các biểu thức phức tạp, nên sử dụng các phép kết hợp, giao hoán, phân phối, De Morgan để biến đổi thành đơn giản hơn Lê Viết Mẫn - lvman@hce.edu.vn 8 Các cấu trúc Ðiều khiển 1
  9. Conditional structure Lệnh điều kiện : if và ? Lê Viết Mẫn - lvman@hce.edu.vn 9 Các cấu trúc Ðiều khiển 1
  10. if - dạng 1 if (expression) true expression statement; statement false if (age >= 18) Console.Write("You are eligible to vote.\n"); if (income >= 1400 || interest > 750) { mustFile++; deductions = 1; adjustedIncome += 100; } Lê Viết Mẫn - lvman@hce.edu.vn 10 Các cấu trúc Ðiều khiển 1
  11. if - dạng 2 entry true false if (expression) expression statement_1; else statement_2; statement_1 statement_2 if (wages <= maximumWage) exit tax = 0.124 * wages; else tax = 0.124 * maximumWage; Lê Viết Mẫn - lvman@hce.edu.vn 11 Các cấu trúc Ðiều khiển 1
  12. if - câu đ.k. lồng nhau entry if (expression_1) true false if (expression_2) exp_1 statement_1; else true false true false statement_2; exp_2 exp_3 else if (expression_3) stat_1 stat_2 stat_3 stat_4 statement_3; else statement_4; exit Lê Viết Mẫn - lvman@hce.edu.vn 12 Các cấu trúc Ðiều khiển 1
  13. Dangling else mỗi else được ghép đôi với một if gấn nhất trước nó true true if (expression_1) exp_1 exp_2 stat_1 if (expression_2) false false statement_1; else stat_2 statement_2; if (expression_1) true true { exp_1 exp_2 stat_1 if (expression_2) statement_1; false false } else statement_2; stat_2 Lê Viết Mẫn - lvman@hce.edu.vn 13 Các cấu trúc Ðiều khiển 1
  14. if - dạng 4 true expression_1 statement_1 if (expression_1) false statement_1; true else if (expression_2) expression_2 statement_2 statement_2; else if (expression_3) false statement_3; . true expression_3 statement_3 . . false else if (expression_m) statement_m; true else expression_m statement_m statement_n; false statement_n Lê Viết Mẫn - lvman@hce.edu.vn 14 Các cấu trúc Ðiều khiển 1
  15. Lượng giá toán tử logic • E1 và E2 là các biểu thức logic • if (E1 && E2) • nếu E1 là false thì cả biểu thức là false và E2 sẽ không được tính • if (E1 || E2) • nếu E1 là true thì cả biểu thức là true và E2 sẽ không được tính if (n != 0 && 100 / n > min) if (n != 0) if (100 / n > min) Lê Viết Mẫn - lvman@hce.edu.vn 15 Các cấu trúc Ðiều khiển 1
  16. Toán tử điều kiện (exp_1) ? (exp_2) : (exp_3) true false • Nếu exp_1 là true, giá trị trả về sẽ là kết exp_1 quả của exp_2 • Nếu exp_1 là false, giá trị trả về sẽ là kết return exp_2 return exp_3 quả của exp_3 • Dấu mở / đóng ngoặc là không cần thiết về mặt cú pháp • Được sử dụng vì toán tử ? có độ ưu tiên cao hơn max = (x > y) ? x : y; min = (x < y) ? x : y; index = (index+1 == size) ? 0 : ++index; Lê Viết Mẫn - lvman@hce.edu.vn 16 Các cấu trúc Ðiều khiển 1
  17. Ví dụ 1 - chỉ số độ lạnh của gió Tính chỉ số độ lạnh của gió (wind-chill index) thông qua nhiệt độ (temperature) của không khí theo đơn vị 0F và tốc độ gió (wind speed) theo đơn vị mph (dặm/giờ). Sử dụng công thức sau : ⎧ temperature wind ≤ 4mph, ⎪ ⎪ 91.4 − (10.45 + 6.69 wind ⎪ windChillIndex = ⎨ 91.4 − temperature 4mph 45mph. ⎩⎪ Lê Viết Mẫn - lvman@hce.edu.vn 17 Các cấu trúc Ðiều khiển 1
  18. // calculate wind-chill index // based on the temperature and wind speed using System; class Program { static void Main(string[] args) { float temperature, // nhiet do khong khi (do F) windSpeed, // toc do gio (mph) windChillIndex; // chi so do lanh cua gio tinh theo do F Console.Write("WIND-CHILL INDEX COMPUTATION\n\n"); Console.Write("The temperature (deg F) is: "); temperature = float.Parse(Console.ReadLine()); Console.Write("The wind speed (mph) is: "); windSpeed = float.Parse(Console.ReadLine()); // tinh muc do lanh cua gio theo cong thuc // voi cac muc gio khac nhau if (windSpeed <= 4) // gio yeu hoac khong co gio windChillIndex = temperature; else if (windSpeed <= 45) // gio trung binh windChillIndex = (float)(91.4 - (10.45f + 6.69 * Math.Sqrt(windSpeed) - 0.447 * windSpeed) * (91.4f - temperature) / 22.0); else // gio manh windChillIndex = (float)(1.6 * temperature - 55.0); Console.Write("The wind-chill index is {0:f2}\n", windChillIndex); Console.ReadKey(); } } Lê Viết Mẫn - lvman@hce.edu.vn 18 Các cấu trúc Ðiều khiển 1
  19. Ví dụ 2 - tính số ngày Tính số ngày từ đầu năm (dayNumber) theo giá trị đưa vào của month (1 12), ngày trong tháng day và năm year. Lê Viết Mẫn - lvman@hce.edu.vn 19 Các cấu trúc Ðiều khiển 1
  20. // Calculate number of days since the beginning of the year // based on the date given (day, month, year) using System; class Program { static void Main(string[] args) { int day, month, year; Console.Write("NUMBER OF DAYS SINCE THE BEGINNING OF THE YEAR\n\n"); // Bo qua tinh hop le cua du lieu nhap vao Console.Write("Enter day : "); day = int.Parse(Console.ReadLine()); Console.Write("Enter month : "); month = int.Parse(Console.ReadLine()); Console.Write("Enter year : "); year = int.Parse(Console.ReadLine()); // Tinh dayNumber gia su cac thang co 31 ngay int dayNumber = (month - 1) * 31 + day; // Chinh cac thang tru thang Hai, gia su nam khong nhuan if (month > 2) { dayNumber -= (4 * month + 23) / 10; // chinh cho nam nhuan if ((((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0)) dayNumber = dayNumber + 1; } Console.Write("The number of days is {0}", dayNumber); Console.ReadKey(); } } Lê Viết Mẫn - lvman@hce.edu.vn 20 Các cấu trúc Ðiều khiển 1
  21. Selective structure Lệnh lựa chọn : switch Lê Viết Mẫn - lvman@hce.edu.vn 21 Các cấu trúc Ðiều khiển 1
  22. yes switch exp==const_1 statements lựa chọn dựa trên giá trị nguyên, chuỗi, ký tự hoặc bool của một biến no hay một biểu thức break yes exp==const_2 statements switch (expression) no { yes break case const_1: statement_1; exp==const_3 break; no case const_2: statement_2; case const_3: exp==const_4 statements yes case const_4: statement_3; break; no break case const_5: break; yes default statements default: statement_m; ? break; no } break Lê Viết Mẫn - lvman@hce.edu.vn 22 Các cấu trúc Ðiều khiển 1
  23. Ví dụ switch (age) { case 1: case 2: case 3: Console.Write("Get a babysiter !\n"); break; case 4: case 5: case 6: case 7: case 8: case 9: Console.Write("Movies rated G would be okay.\n"); break; case 10: case 11: case 12: case 13: case 14: case 15: Console.Write("Movies rated G or PG would okay.\n"); break; case 16: case 17: Console.Write("Movies rated R might be okay.\n"); break; default: Console.Write("Movies rated R would be okay.\n"); break; } Lê Viết Mẫn - lvman@hce.edu.vn 23 Các cấu trúc Ðiều khiển 1
  24. Kiểu liệt kê - Enum • Kiểu liệt kê là một tập những hằng số nguyên được đặt tên • Một biến được khai báo kiểu liệt kê có thể nhận một giá trị bất kỳ trong tập các giá trị của kiểu đó • enum identifier[:base-type] {enumeration_list}; • base-type là kiểu dữ liệu của mỗi thành phần (mặc định int) • enumeration_list sử dụng dấu phẩy để phân cách các định danh • định danh đầu tiên được gán giá trị 0, sau đó tăng lên một cho những định danh sau • có thể xác định giá trị cho các định danh này enum Weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} enum Month {January = 1, February = 2, March = 3, April = 4, May = 5, June = 6, July = 7, August = 8, September = 9, October = 10, November = 11, December = 12} enum Temperatures:byte {WickedCold = 0, FreezingPoint = 32, LightJacketWeather = 60, SwimmingWeather = 72, BoilingPoint = 100} Weekday d; d = Weekday.Tuesday; Month m; if (Month.February < m) Lê Viết Mẫn - lvman@hce.edu.vn 24 Các cấu trúc Ðiều khiển 1
  25. Kiểu liệt kê - Enum • Khai báo enum là thành phần của lớp class Program { enum Weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; static void Main(string[] args) { • Nhập liệu kiểu Enum • Nhập vào số tương ứng giá trị của một thành phần trong kiểu enum Weekday day; Console.Write("Nhap vao thu dang so :"); // Nhập vào số 1 day = (Weekday)Convert.ToInt32(Console.ReadLine()); // kết quả là Monday • Nhập vào chuỗi ký tự của một thành phần trong kiểu enum Console.Write("Nhap vao thu dang chuoi :"); // Nhập vào chuỗi “Sunday” day = (Weekday)Enum.Parse(typeof(Weekday), Console.ReadLine()); Lê Viết Mẫn - lvman@hce.edu.vn 25 Các cấu trúc Ðiều khiển 1
  26. Ví dụ enum Month {January, February, March, April, May, June, July, August, September, October, November, December}; Month m = Month.February; switch (m) { case Month.February: if ((((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0)) numberOfDays = 29; else numberOfDays = 28; break; case Month.April: case Month.June: case Month.September: case Month.November: numberOfDays = 30; break; default: numberOfDays = 31; break; } Lê Viết Mẫn - lvman@hce.edu.vn 26 Các cấu trúc Ðiều khiển 1
  27. Ví dụ - kích cỡ áo tắm Viết chương trình tính kích cỡ áo tắm phụ nữ dựa trên chiều cao (hieght) và cân nặng (weight) sử dụng công thức sau : 1 1 x = floor( height − weight − 2.4) 10 50 1 1 y = floor( height − weight − 20.5) 4 20 y = 0 y = 1 y = 2 y = 3 x = 1 A B C D x = 0 E F Lê Viết Mẫn - lvman@hce.edu.vn 27 Các cấu trúc Ðiều khiển 1
  28. // Xac dinh kich co ao tam cua phu nu // dua vao chieu cao va can nang using System; class Program { enum Size {none, A, B, C, D, E, F}; case 3: static void Main(string[] args) switch (x) { { int height, // chieu cao case 0: s = Size.F; break; weight; // can nang case 1: s = Size.D; break; } Console.Write("PANTY HOSE SIZE\n\n"); break; Console.Write("Enter your height in inches: "); } height = int.Parse(Console.ReadLine()); Console.Write("Enter your weight in pounds: "); Console.Write("Your size is "); weight = int.Parse(Console.ReadLine()); switch (s) { int x = (int)Math.Floor(height / 10.0 case Size.A: Console.Write("A"); break; - weight / 50.0 - 2.4); case Size.B: Console.Write("B"); break; int y = (int)Math.Floor(height / 4.0 case Size.C: Console.Write("C"); break; - weight / 20.0 - 20.5); case Size.D: Console.Write("D"); break; case Size.E: Console.Write("E"); break; Size s = Size.none; case Size.F: Console.Write("F"); break; switch (y) case Size.none: Console.Write("not available"); { break; case 0: if (x == 1) s = Size.A; break; } case 1: if (x == 1) s = Size.B; break; Console.WriteLine(); case 2: Console.ReadKey(); switch (x) } { } case 0: s = Size.E; break; case 1: s = Size.C; break; } break; Lê Viết Mẫn - lvman@hce.edu.vn 28 Các cấu trúc Ðiều khiển 1
  29. Cảm ơn sự chú ý Câu hỏi ? Lê Viết Mẫn - lvman@hce.edu.vn 29 Các cấu trúc Ðiều khiển 1