Kĩ thuật lập trình - Các cấu trúc điều khiển (phần 2)

In tên tháng, năm • In các thứ theo các cột • In các ngày ứng với các cột thứ • Phải in ngày mồng 1 vào đúng cột của thứ tương ứng. Các ngày tiếp theo được in liên tiếp, khi gặp ngày thứ 7 thì phải in xuống dòng mới • Tính ngày cuối cùng của tháng lastDayOfMonth • Tính ngày tuyệt đối (absoluteDays) cho ngày 1 tháng cần in lịch • firstWeekdayOfMonth = absoluteDays % 7; • firstSaturday = 7 - firstWeekdayOfMonth;

pdf31 trang | Chia sẻ: huyhoang44 | Lượt xem: 892 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Các cấu trúc điều khiển (phần 2), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 v 1.0 - 10/2012 Các cấu trúc điều khiển (phần 2) 1 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 chúng ta đã học... 2 Tuần tự Rẽ nhánh Câu lệnh if, switch Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 chúng ta sẽ học... 3 Lặp Câu lệnh for, while, do Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 Iteration structures Lệnh lặp : for, while, do 4 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 25 for for (statement_1; condition; statement_2) ! statement_3 statement_1 condition true false statement_2 statement_3 • Có thể bỏ qua các thành phần trong vòng lặp for • statement_1 được dùng để khởi tạo và chỉ được thực hiện 1 lần • condition là biểu thức kiểm tra điều kiện lặp lại • statement_3 là một lệnh đơn hoặc lệnh kép mà ta muốn được thực hiện nhiều lần • statement_2 được dùng để cập nhật / thay đổi giá trị của condition Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 26 for for (statement_1; condition; statement_2) ! statement_3 statement_1 condition true false statement_2 statement_3 for (int i = 0; i < 10; i++) Console.WriteLine(i); In ra các số từ 0 đến 9, mỗi số trên một dòng Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 27 Ví dụ int i, j; for (i = 0; i < 10; i++) ! Console.WriteLine(i);! ! ! ! ! ! // in ra tu 0 - 9 for (i = 0; i < 10; i += 2) ! Console.WriteLine(i);! ! ! ! ! ! // in cac so 0, 2, 4, 6, 8 for (i = 0, j = 0; i < 10 && j < 5; i += 2, j++) // toán tử dấu phẩy ! Console.WriteLine(“{0}\t{1}”, i, j); for (int i = 0; i < 100; i++) // phạm vi của biến i là trong vòng lặp ! Console.WriteLine(i); Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 28 Chú ý • Lỗi. Biến i vượt quá phạm vi • Không có lỗi vì biến i được khai báo bên ngoài • Biến i thứ hai là một biến mới for (int i = 0; i < 10; i++) ! Console.WriteLine(i); if (i >= 0) ! Console.Write("i is big\n"); int i; for (i = 0; i < 10; i++) ! Console.WriteLine(i); if (i >= 0) ! Console.Write("i is big\n"); for (int i = 0; i < 10; i++) ! Console.WriteLine(i); for (int i = 0; i < 20; i++) ! Console.WriteLine(i); Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 29 Ví dụ - tính giai thừa Viết chương trình tính n! (n giai thừa) n!= 1 n = 01*2 *..*n n ≥ 1 ⎧ ⎨ ⎩ Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn using System; namespace Factorial { class Program { static void Main(string[] args) { int product = 1; int n; ! Console.Write("CALCULATE FACTORIAL OF A NUMBER\n\n"); ! Console.Write("Enter a number : "); n = int.Parse(Console.ReadLine()); ! for (int i = 2; i <= n; i++) // Tai thoi diem nay product = 1 * 2 * .. * (i-1) = (i-1)! product = product * i; ! Console.WriteLine("Factorial of {0} is {1}", n, product); Console.ReadKey(); } } } Các cấu trúc điều khiển 210 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn For lồng nhau Các cấu trúc điều khiển 2 float windChillIndex; Console.WriteLine("TABLE OF WIND-CHILL INDICES"); Console.Write("degrees F:"); for (int j = 5; j >= -6; j--) Console.Write("{0,5}",10*j); // tieu de cot Console.Write("\n\n"); for (int i = 0; i <= 10; i++) { Console.Write("{0} mph:", 5 * i); for (int j = 5; j >= -6; j--) { if (i <= 4) windChillIndex = j; else if (i <= 45) windChillIndex = (float)(91.4f - (10.45f + 6.69 * Math.Sqrt(i) - 0.447 * i) * (91.4f - j) / 22); else windChillIndex = 1.6f * j - 55; Console.Write("{0,5}", Math.Floor(windChillIndex + 0.5)); } Console.WriteLine(); } Console.ReadKey(); 11 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Kết quả Các cấu trúc điều khiển 2 TABLE OF WIND-CHILL INDICES degrees F: 50 40 30 20 10 0 -10 -20 -30 -40 -50 -60 0 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 5 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 10 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 15 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 20 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 25 mph: 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 30 mph: -3 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -16 35 mph: -7 -8 -9 -10 -11 -13 -14 -15 -16 -17 -18 -19 40 mph: -10 -11 -12 -13 -15 -16 -17 -18 -19 -20 -22 -23 45 mph: -13 -14 -15 -16 -17 -19 -20 -21 -22 -24 -25 -26 50 mph: -15 -16 -18 -19 -20 -21 -23 -24 -25 -26 -28 -29 12 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 Ví dụ 13 • Viết chương trình in ra bảng tính nhân dạng sau : MULTIPLICATION TABLE 1 2 3 4 ... 12 2 4 6 8 ... 24 3 6 9 12 ... 36 . . . . . . . . . . . . . . . 12 24 36 48 ... 144 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 214 while while (condition) ! statement; condition true false statement • Điều kiện được đặt ở đầu vòng lặp • statement có thể không được thực hiện lần nào • statement phải chứa câu lệnh làm thay đổi condition Trong khi điều kiện còn hiệu lực (true) thì tiếp tục làm việc này int n = 0; while (n < 10) ! Console.WriteLine(n++); In ra các số từ 0 đến 9, mỗi số trên một dòng int n = 0; while (n < 10) { ! Console.WriteLine(n); n = n + 1; } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 215 Ví dụ int n = 100; while (n > 0) ! Console.WriteLine(n--); getDate(m, d, y); while (!isLegalDate(m, d, y)) { ! Console.Write("Not a valid date, try again.\n\n"); ! getDate(m, d, y); } In ngược các số từ 100 đến 1, mỗi số trên một dòng Nhận vào ngày tháng năm, nếu ngày tháng nhập vào không hợp lệ thì yêu cầu nhập lại Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 216 do do { ! statement; } while (condition); • Điều kiện được đặt ở cuối vòng lặp • statement được thực hiện ít nhất một lần • statement phải chứa câu lệnh làm thay đổi condition condition true false statement Chạy cái gì đó trong khi điều kiện đang còn hiệu lực (true) int n = 0; do { Console.WriteLine(n++); }while (n < 10); In ra các số từ 0 đến 9, mỗi số trên một dòng Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 217 Ví dụ int numberOfDigits = 0; int rest = number; do { ! rest = rest / 10; ! numberOfDigits++; } while (rest != 0); Đếm số chữ số của một số Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 So sánh 18 Câu lệnh for while do Lưu đồ Số lần lặp Xác định Không xác định Không xác định Số lần lặp tối thiểu 0 0 1 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 • Lệnh break; • kết thúc vòng lặp chứa lệnh này (chương trình tiếp tục với các câu lệnh sau vòng lặp này) • Lệnh continue; • bỏ qua các lệnh còn lại trong vòng lặp • tiếp tục với bước lặp tiếp theo • Lệnh for : thực hiện bước cập nhật rồi kiểm tra • Lệnh while và do : thực hiện bước kiểm tra • Lệnh Environment.Exit(int); • Thoát khỏi chương trình 19 Ngắt vòng lặp Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 for (;;) { ! while (a[++i] < v); ! while (a[--j] > v); ! ! if (j <= i) ! ! break; ! ! swap(i, j); //đổi chỗ hai giá trị trong mảng tại i, j } for (int n=10; n>0; n--) { ! if (n==5) continue; ! Console.Write("{0}, ", n); } 20 Ví dụ - ngắt vòng lặp Sắp xếp lại mảng sao cho, giá trị ở phần đầu lớn hơn v, phần sau nhỏ hơn v In các con số từ 10 đến 1, ngoại trừ số 5 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 221 Ví dụ 1 - máy tính Viết chương trình cho phép thực hiện các phép tính cộng, trừ, nhân, chia cho hai số được nhập vào từ bàn phím. Chương trình sẽ lặp lại việc tính toán này cho đến khi người sử dụng bấm ký tự E hoặc e (Exit). Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn double! left; double! right; char! op; while (true) { Console.Write("A\tadd\n"); Console.Write("S\tsubtract\n"); ! Console.Write("M\tmultiply\n"); ! Console.Write("D\tdivide\n"); ! Console.Write("E\texit\n"); Console.Write("Operation?: "); op = char.Parse(Console.ReadLine()); ! if (op == 'E' || op == 'e') ! ! Environment.Exit(0); ! Console.Write("Enter the left hand operand: "); left = double.Parse(Console.ReadLine()); ! Console.Write("Enter the right hand operand: "); ! right = double.Parse(Console.ReadLine()); ! switch (op) ! { ! ! case 'A' : ! ! case 'a' : Console.WriteLine(left + right); ! ! ! break; ! ! case 'S' : ! ! case 's' : Console.WriteLine(left - right); ! ! ! break; ! ! case 'M' : ! ! case 'm' : Console.WriteLine(left * right); ! ! ! break; ! ! case 'D' : ! ! case 'd' : Console.WriteLine(left / right); ! ! ! break; ! } Console.WriteLine(); } Các cấu trúc điều khiển 222 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 223 Ví dụ 2 - in lịch Viết chương trình in lịch theo tháng, năm và kiểu lịch in theo dạng sau : October, 1948 Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 Hướng dẫn • In tên tháng, năm • In các thứ theo các cột • In các ngày ứng với các cột thứ • Phải in ngày mồng 1 vào đúng cột của thứ tương ứng. Các ngày tiếp theo được in liên tiếp, khi gặp ngày thứ 7 thì phải in xuống dòng mới • Tính ngày cuối cùng của tháng lastDayOfMonth • Tính ngày tuyệt đối (absoluteDays) cho ngày 1 tháng cần in lịch • firstWeekdayOfMonth = absoluteDays % 7; • firstSaturday = 7 - firstWeekdayOfMonth; 24 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 Debugging Gỡ lỗi 25 Xem thêm tại Chương 3, sách Lập trình Visual C# thế nào ? Tập 1 (Dương Quang Thiện) Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 Các loại lỗi (bug) 26 • Lỗi cú pháp - syntax error • Lỗi lúc biên dịch - Compile-time error • Lỗi dễ thấy nhất, xảy ra khi viết câu lệnh không đúng qui tắc của ngôn ngữ • Trình biên dịch sẽ thông báo cho chúng ta thông qua những thông điệp sai lầm / các cảnh báo (Error List) • Lỗi ngữ nghĩa - semantic error • Lỗi lúc chạy chương trình - runtime error • Ý nghĩa câu lệnh không đúng như mong muốn • Chương trình bị gãy đổ (crash) cùng với thông báo lỗi hoặc không • Lỗi logic - logic error • Các lỗi ngữ nghĩa mà không làm crash chương trình • Kết quả chương trình không đúng Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 Test • Định nghĩa trước các trường hợp có thể xảy ra lỗi • Kiểm tra (chạy) chương trình với các trường hợp đó để xem chương trình có bị lỗi dự kiến hay không • Nếu không - chương trình được viết tốt cho trường hợp đó • Nếu có - tìm nguyên nhân gây ra lỗi và sửa chữa chương trình • Tìm nguyên nhân gây ra lỗi • Các lệnh điều khiển gỡ lỗi • Công cụ debugger 27 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 228 Các lệnh điều khiển gỡ lỗi if (expression) { ! Console.Write("true"); ! ... } else { ! Console.Write("false"); ! ... } for (int i = 0; i < exp; i++) { ! Console.Write("loop {0}", i); ! ... } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 229 Tìm hiểu các bước lặp double a = 0.0; for (int i = 0; i < f(a); i++) { ! int x = ...; ! int y = ...; ! a = f(x + i * y); } a i x y x+i*y 0.0 0 5 14 36.78 36.8 1 19 8 95.03 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Các cấu trúc điều khiển 2 Chốt ngừng - breakpoint • Là một dấu hiệu báo cho debugger biết tạm ngưng thi hành chương trình ở điểm nào đó • Chương trình lúc này ở chế độ ngắt (break mode) • Chương trình tạm ngưng thi hành và có thể tiếp tục chạy nếu bạn muốn • Các hoạt động của các biến, hàm, đối tượng bị “đóng băng” • Bạn có thể quan sát tình trạng, giá trị các biến, biểu thức và hàm • Có thể thay đổi giá trị các biến • Có thể cho thực thi tiếp từng dòng lệnh trong đoạn mã • Sử dụng thanh công cụ Debug • Mỗi breakpoint còn hỗ trợ các Hit Count và Condition 30 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Cảm ơn sự chú ý Câu hỏi ? Các cấu trúc điều khiển 231 Monday, September 9, 13

Các file đính kèm theo tài liệu này:

  • pdf05_cac_cau_truc_dieu_khien_2_1849.pdf