Cấu trúc lặp foreach cho phép chúng ta duyệt 1 mảng hoặc 1 tập hợp
Một số đặc trưng của foreach:
foreach không duyệt mảng hoặc tập hợp thông qua chỉ số phần tử như cấu trúc lặp for.
foreach duyệt tuần tự các phần tử trong mảng hoặc tập hợp.
foreach chỉ dùng để duyệt mảng hoặc tập hợp ngoài ra không thể làm gì khác.
Cú pháp
foreach (<kiểu dữ liệu> <tên biến tạm> in <tên mảng hoặc tập hợp>)
{
// Code xử lý }
Trong đó:
Các từ khoá foreach, in là từ khoá bắt buộc.
<kiểu dữ liệu> là kiểu dữ liệu của các phần tử trong mảng hoặc tập hợp. <tên biến tạm> là tên 1 biến tạm đại diện cho phần tử đang xét khi duyệt
<tên mảng hoặc tập hợp> là tên của mảng hoặc tập hợp cần duyệt. Nguyên tắc hoạt động
Foreach cũng có nguyên tắc hoạt động tương tự như các cấu trúc lặp khác cụ
thể như sau:
Ở vòng lặp đầu tiên sẽ gán giá trị của phần tử đầu tiên trong mảng vào biến tạm.
Thực hiện khối lệnh bên trong vòng lặp foreach.
Qua mỗi vòng lặp tiếp theo sẽ thực hiện kiểm tra xem đã duyệt hết mảng hoặc tập hợp chưa. Nếu chưa thì tiếp gán giá trị của phần tử hiện tại vào biến tạm và tiếp tục thực hiện khối lệnh bên trong.
Nếu đã duyệt qua hết các phần tử thì vòng lặp sẽ kết thúc. Qua nguyên tắc hoạt động trên ta có thể thấy:
Biến tạm trong vòng lặp foreach sẽ tương đương với phần tử i trong cách duyệt của vòng lặp for .
Qua mỗi bước lặp ta chỉ có thể thao tác với giá trị của phần tử đang xét mà không thể tương tác với các phần tử đứng trước nó hay đứng sau. Bằng cách duyệt của foreach ta không thể thay đổi giá trị của các phần tử
vì lúc này giá trị của nó đã được sao chép ra một 1 biến tạm và ta chỉ có thể thao tác với biến tạm.
Thậm chí việc thay đổi giá trị của biến tạm cũng không được phép. Nếu ta cố làm điều đó thì sẽ gặp lỗi sau:
Ví dụ: Khởi tạo 1 mảng 1 chiều gồm các số nguyên, sau đó dùng lệnh foreach để tính tổng các phần tử
Kết quả chương trình
Hình 4.9. Màn hình kết quả vòng lặp foreach tính tổng phần tử mảng
Ví dụ: Sử dụng vòng lặp foreach để in ra các mảng dữ liệu
Kết quả khi chạy đoạn chương trình trên:
Hình 4.10 Màn hình kết quả dùng vòng lặp foreach in ra giá trị mảng
Ta có thể thấy cách duyệt foreach ngắn gọn hơn nhiều so với cách duyệt bằng vòng lặp for thông thường.
So sánh for và foreach trong C#
foreach mang trong mình một số ưu điểm như:
Câu lệnh ngắn gọn, sẽ sử dụng.
Rất có ích khi duyệt danh sách, tập hợp mà không thể truy xuất thông qua chỉ số phần tử.
Duyệt các danh sách, tập hợp có số phần tử không xác định hoặc số phần tử thay đổi liên tục.
Mặc dù có nhiều ưu điểm nhưng không hẳn là foreach hơn hẵn for. Cùng điểm qua một vài tiêu chí giữa 2 vòng lặp.
Bảng 4.2. So sánh tiêu chí của 2 vòng lặp for và foreach
Tiêu chí for foreach
Khả năng truy xuất phần tử
Truy xuất ngẫu nhiên (có thể gọi bất kỳ phần tử nào trong mảng để sử dụng)
Truy xuất tuần tự (chỉ sử dụng được giá trị phần tử đang xét)
Thay đổi được giá trị của các phần tử
Có Không
Duyệt mảng, tập hợp khi không biết được số phần tử của mảng, tập hợp
Không Có
Hiệu suất (tốc độ xử lý) (*)
Đối với mảng, danh sách hoặc tập hợp có khả năng truy xuất ngẫu nhiên thì for sẽ chiếm ưu thế
Đối với mảng, danh sách hoặc tập hợp không có khả năng truy xuất ngẫu nhiên thì foreach chiếm ưu thế
Câu hỏi ôn tập và bài tập
2. Áp dụng câu lệnh switch …case để viết chương trình trên Console theo yêu cầu sau: khai báo biến kiểu int luachon.
Nếu luachon = 1: Tính hình tam giác Nếu luachon = 2: Tính hình chữ nhật Nếu luachon = 3: Tính hình vuông
2. Áp dụng lệnh for hoặc lệnh foreach để thực hiện công việc sau:
- Tính tổng các số từ 1 n với n là số nguyên được nhập vào từ bàn phím.
- Tính tổng các số chẵn và số lẽ từ 1 n với n là số nguyên được nhập vào từ bàn phím.
BÀI 5: SỬ DỤNG CẤU TRÚC LỰA VÒNG LẶP WHILE, DO… WHILE
Mã bài: 20.5 Giới thiệu:
Trong C# vòng lặp while trong C# thực hiện lặp đi lặp lại một lệnh mục tiêu đến khi nào điều kiện đã cho còn là đúng, vòng lặp do while được sử dụng để lặp đi lặp lại một đoạn code nào đó. Nếu số lần lặp không cố định và bạn phải thực hiện vòng lặp ít nhất một lần, thì nên sử dụng vòng lặp do while.
Mục tiêu:
- Hiểu và biết sử dụng cấu trúc lệnh while - Hiểu và biết sử dụng cấu trúc lệnh do…while.
- Vận dụng cấu trúc lệnh while để viết chương trình Console cơ bản, đồ án. - Vận dụng cấu trúc do…while để viết chương trình Console cơ bản, và đồ án.
- Rèn luyện tính cẩn thận, tự giác, sáng tạo, làm việc nhóm.
Nội dung chính:
3. Sử dụng cấu trúc vòng lặp While
while (<Điều kiện lặp>) {
// khối lệnh lặp lại
}
Điều kiện lặp là một biểu thức logic bắt buộc phải có với kết quả trả về bắt buộc là true hoặc false.
Từ khóa while biểu thị đây là một vòng lặp while. Các câu lệnh trong khối lệnh sẽ được lặp lại đến khi không còn thỏa mãn điều kiện lặp sẽ kết thúc vòng lặp while.
Tiến trình:
o Đầu tiên trình biên dịch sẽ đi vào dòng while (<Điều kiện lặp>). Kiểm tra điều kiện lặp có thỏa mãn hay không. Nếu kết quả là true thì sẽ đi vào bên trong thực hiện khối code. Khi gặp ký tự } sẽ quay lên kiểm tra điều kiện lặp và tiếp
tục thực hiện khối code. Quá trình chỉ kết thúc khi điều kiện lặp là false.
o Điều kiện lặp luôn bằng true thì vòng lặp while sẽ trở thành vòng lặp vô tận.
o Điều kiện lặp luôn bằng false thì vòng lặp sẽ không được thực thi.
Ví dụ 1: In ra dãy số từ 10 19
Kết quả chương trình:
Ví dụ 2:
Dùng vòng lặp while để thực hiện vẽ một hình chữ nhật có chiều dài là 50 dấu “*” và chiều rộng là 20 dấu “*” liên tiếp nhau
Kết quả chương trình
2. Sử dụng cấu trúc vòng lặp Do …whileCú pháp Cú pháp
do {
// khối lệnh lặp lai } while (<Điều kiện lặp>);
Điều kiện lặp là một biểu thức logic bắt buộc phải có với kết quả trả về bắt buộc là true hoặc false.
Từ khóa do while biểu thị đây là một vòng lặp do while. Các câu lệnh trong khối lệnh sẽ được lặp lại đến khi không còn thỏa mãn điều kiện lặp sẽ kết thúc vòng lặp do while.
Tiến trình:
Đầu tiên trình biên dịch sẽ đi vào dòng do và thực hiện khối lệnh bên trong. Sau đó khi gặp ký tự } sẽ kiểm tra điều kiện lặp có thỏa mãn hay không. Nếu kết quả là true thì sẽ quay lại ký tự { thực hiện khối code. Quá trình chỉ kết thúc khi điều kiện lặp là false.
Điều kiện lặp luôn bằng true thì vòng lặp while sẽ trở thành vòng lặp vô tận. Điều kiện lặp luôn bằng false thì vòng lặp sẽ không được thực thi.
Lưu ý: vòng lặp do while sẽ thực hiện câu lệnh trong khối code xong rồi mới kiểm tra điều kiện lặp. Cuối vòng lặp do while có dấu ; ở cuối.
Ví dụ 1:
Dùng vòng lặp do…while để in ra dãy số từ 10 19 Đoạn code thực hiện chương trình
Kết quả thực hiện chương trình:
Hình 5.2. Kết quả thực hiện vòng lặp do…while in ra dãy số từ 10 19
Ví dụ 2: In ra một ma trận số Đoạn code thực hiện chương trình
Kết quả thực hiện chương trình:
Hình 5.4. Kết quả thực hiện vòng lặp do…while in ra ma trận
Câu hỏi ôn tập và bài tập
Áp dụng lệnh while, do … while để thực hiện công việc sau:
- Tính tổng các số từ 1 n với n là số nguyên được nhập vào từ bàn phím.
- Tính tổng các số chẵn và số lẽ từ 1 n với n là số nguyên được nhập vào từ bàn phím.
BÀI 6: SỬ DỤNG CÂU LỆNH BREAK, CONTINUE, GOTO
Mã bài: 20.6 Giới thiệu:
Các câu lệnh làm ngắt, tiếp tục ở vị trí bất kỳ, nhảy đến một vị trí bất kỳ. Các câu lệnh này tuy làm gãy bố cục chương trình nhưng giúp cho chương trình thực hiện được các yêu cầu trong một vài trường hợp cụ thể.
Mục tiêu:
- Hiểu và biết sử dụng các câu lệnh continue, goto, break.
- Vận dụng các câu lệnh break, continue, goto để viết chương trình Console cơ bản, đồ án.
- Rèn luyện tính cẩn thận, tự giác, sáng tạo, làm việc nhóm.
Nội dung chính:
4. Sử dụng câu lệnh break
Lệnh break trong C# có hai cách sử dụng:
Khi lệnh break được sử dụng trong vòng lặp, vòng lặp ngay lập tức kết thúc và điều khiển chương trình bắt đầu lệnh tiếp theo sau vòng lặp.
Nó có thể được sử dụng trong lệnh switch (sẽ được nhắc đến trong chương tới). Nếu bạn đang sử dụng các vòng lặp lồng nhau (ví dụ, một vòng lặp bên trong vòng lặp khác), lệnh break sẽ dừng thực thi một lệnh nào đó trong một vòng lặp và bắt đầu thực thi lệnh tiếp theo của đoạn code sau khối code đó.
Cú pháp của lệnh break trong C# như sau: break;
Ví dụ:
Kết quả chương trình:
Hình 6.1. Kết quả lệnh break
2. Sử dụng câu lệnh continue
Lệnh continue trong C# làm việc hơi giống với lệnh break. Thay vì bắt buộc kết thúc, nó bắt buộc vòng lặp tiếp theo diễn ra, bỏ qua bất kỳ đoạn code nào ở giữa.
Với vòng lặp for, lệnh continue làm cho bước kiểm tra điều kiện và phần increment của vòng lặp thực thi. Với while và do…while, lệnh continue làm điều khiển chương trình chuyển tới các kiểm tra điều kiện.
Cú pháp của lệnh continue trong C# như sau: continue;
Ví dụ:
Kết quả chương trình:
Hình 6.2. Kết quả thực hiện lệnh continue
3. Sử dụng câu lệnh goto
Lệnh nhảy goto là một lệnh nhảy đơn giản, cho phép chương trình nhảy vô điều kiện tới một vị trí trong chương trình thông qua tên nhãn. Tuy nhiên việc sử dụng lệnh goto thường làm mất đi tính cấu trúc thuật toán, việc lạm dụng sẽ dẫn đến một chương trình nguồn mà giới lập trình gọi là “mì ăn liền” rối như mớ bòng bong vậy. Hầu hết các người lập trình có kinh nghiệm đều tránh dùng lệnh
goto. Sau đây là cách sử dụng lệnh nhảy goto:
Cú pháp:
goto <label>;
Trong đó label là một nhãn đích đến trong code. Nơi mà code sẽ tiếp tục được thực thi từ đó. Cấu trúc của một label: <Tên label>:
goto là từ khóa thông báo cho trình biên dịch biết sẽ đi đến nhãn ngay sau để tiếp tục thực thi code.
Ví dụ
Kết quả chương trình
Hình 6.3. Kết quả thực hiện lệnh goto
Kết quả chương trình
Hình 6.4. Kết quả thực hiện vòng lặp vô tận
Câu hỏi ôn tập và bài tập
1. Sử dụng câu lệnh break cho bài tập 5.1
2. Viết chương trình đặt một nhãn bất kỳ và thực hiện in ra câu lệnh “Chúc các bạn học tốt môn học”.
3. Từ bài tập 2 cho phép người dùng nhập vào tên học sinh và nhảy tới vị trí câu lệnh Chúc các bạn học tốt môn học”.
BÀI 7: HÀM
Mã bài: 20.7 Giới thiệu:
Hàm là chương trình con được sử dụng thường xuyên trong toàn bộ quá trình lập trình. Việc viết và sử dụng hàm một cách hiệu quả giúp cho quá trình thực hiện các công việc lập trình nhanh chóng, tái sử dụng, kế thừa tốt hơn.
Mục tiêu:
- Hiểu được khái niệm và công dụng của hàm trong xây dựng chương trình.
- Quy tắc xây dựng hàm, sử dụng hàm trong xây dựng chương trình. - Hiểu và sử dụng tham số, tham trị của hàm.
- Vận dụng hàm, thủ tục để xây dụng chương trình đồ án khoa học và hiệu quả.
- Rèn luyện tính cẩn thận, tự giác, sáng tạo, làm việc nhóm.
Nội dung chính:
5. Khái niệm
Khi mình muốn thực thi một đoạn code nào nó nhiều lần, thay vì phải copy đi copy lại đoạn code đó nhiều lần, dẫn đến chương trình chúng ta bị trùng lặp code rất nhiều, trong c# có function cho phép chúng ta thực thi đoạn code nào đó nhiều lần mà không cần phải copy lại code, mà chỉ cần gọi tên hàm.
2. Quy tắc xây dựng hàm
Cú pháp:
<Quyền truy cập> <Kiểu trả về> Tên hàm (<Tham số>) { // Thân hàm // Giá trị trả về; } Trong đó: Tên hàm:
o Tên có thể đặt tùy ý nhưng nên đặt tên theo quy tắc đặt tên để có sự đồng bộ ngầm định giữa các lập trình viên và dễ tìm, dễ nhớ (. o Hãy xem cách khởi tạo hàm giống khởi tạo một biến ở chỗ. Đều
cần kiểu dữ liệu và tên. Có thể có các từ khóa. Tên để tái sử dụng hàm ở nơi mong muốn.
Kiểu trả về: từ khóa void, hay mọi kiểu dữ liệu như int, long, bool, SinhVien… Thân hàm: Nó là khối lệnh sẽ được thực thi khi hàm được gọi.
Quyền truy cập: Nó được sử dụng để xác định khả năng truy cập hàm trong ứng dụng bao gồm các quyền sau: public, private, protected
Tham số: Nó là một danh sách các tham số mà chúng ta truyền vào khi gọi hàm
Lưu ý:
o Mọi hàm đều phải có cặp ngoặc nhọn { } biểu thị là một khối lệnh. Mọi dòng code xử lý của hàm đều được viết bên trong cặp ngoặc nhọn { } này.
o Không thể khai báo một hàm trong một hàm khác theo cách thông thường.
Một hàm cơ bản hay thấy với cấu trúc bắt buộc phải có trong lập trình C# console hàm Main
3. Nguyên tắc hoạt động của hàm
Hàm void là hàm có kiểu trả về là void. Chúng ta cùng xem qua khai báo hàm sau: void Demo() { // some code return; }
Vì hàm void (hàm có kiểu trả về là void) thì không cần viết return; nên chúng ta có thể bỏ return; đi.
Void Demo() {
}
Một lưu ý về sau: do đang viết code trên nền console C#. Bắt buộc phải có hàm Main. Nhưng hàm Main lại có từ khóa static. Nên để trong hàm Main có thể sử dụng các hàm mà ta viết ra thì các hàm đó cũng phải có từ khóa static.
Static void Main(string[] args) {
// Gọi lại hàm đêỉ sưỉ dụng
Console.OutputEncoding = Encoding.UTF8; Demo();
Console.ReadKey(); }
static void Demo() {
Console.WriteLine(“Chào mừng đêấn với môn Lập trình Windows Forms”);
}
Kết quả vẫn xuất ra dòng chữ “Chào mừng đến với môn Lập trình Windows Forms” như được viết bên trong hàm Main. Nhưng thật sự nó đã được gọi từ hàm Demo.
Khi sử dụng hàm ta sẽ gọi lại tên hàm kèm theo dấu () biểu thị đó là một hàm. Sau này nếu có parameter thì sẽ thêm giá trị vào bên trong dấu ().
Chúng ta có thể gọi lại nhiều lần và có thể thấy code chúng ta viết rất rõ ràng và rất dễ tái sử dụng.
static void Main(string[] args) {
// Gọi lại hàm nhiêều lấền
// dòng chữ Called from Demo! HowKteam.com cũng được in ra nhiêều lấền Console.OutputEncoding = Encoding.UTF8; Demo(); Demo(); Demo(); Demo(); Console.ReadKey(); }
static void Demo() {
Console.WriteLine(“Chào mừng đêấn với môn Lập trình Windows