Tải bản đầy đủ (.doc) (7 trang)

Bài 5 lap trinh ios cấu trúc điều khiển

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (58.95 KB, 7 trang )

Bài 5: C ấ
u trúc đề
i u khi ể
n
Cấ
u trúc điêu khi ể
n là gì?
Cấ
u trúc đề
i u khi ể
n là m ộ
t đ
o ạn mã (kh ố
i mã) có ch ứ
c nă
ng đề
i u khi ể
n vi ệ
c th ự
c thi
mã trong kh ố
i lệ
nh đ
ó sao cho phù h ợp v ới đề
i u ki ệ
n đượ
c đặ
t ra, ho ặ
c tu ầ
n t ự theo
mộ


t tr ật t ự nh ấ
t đị
n h. ( Đ
ó là đị
n h ngh ĩa t ự hi ể
u củ
a mình, nói dân gian cho d ễ hi ể
u)
Kh ố
i lệ
nh là gì?
Kh ố
i lệ
nh là m ộ
t tậ
p h ợp nhi ề
u lệ
nh v ớ
i nhau.
Mỗ
i lệ
nh đượ
c ng ă
n cách v ới nhau b ằ
ng d ấ
u ch ấ
m ph ẩ
y (; )
Ng ă
n cách này ch ỉ đơ

n gi ả
n là ch ỉ cho ngôn ng ữ bi ế
t rằ
ng, đ
ã kế
t thúc 1 câu l ệ
nh và
có th ể chuy ể
n qua câu l ệ
nh m ới.
1. Câu l ệ
nh r ẽnhánh - if else.
Câu l ệ
nh if có 2 ph ầ
n, ph ầ
n đề
i u ki ệ
n và ph ầ
n câu l ệ
nh th ự
c thi.
Cấ
u trúc câu l ệ
nh đơ
n , ch ỉ có if:
Code:
if (<#condition#>) {
<#statements#>
}


Ở câu lệnh đơn này, statements chỉ th ực hiện khi đi ều kiện là condition đúng.
Ví dụ: Nếu tôi là học sinh giỏi thì mẹ tôi cho tôi đi du lịch.
Nếu viết một cách "lập trình hoá" thì sẽ như sau:
Code:
if (<#Tôi là học sinh giỏi#>) {
<#Mẹ tôi cho tôi đi du lịch#>
}

Ở đây thật đơn giản để thiểu, bạn được học sinh giỏi thì m ới được đi du lịch đúng
không? Và ngược lại thì không được đi du lịch.
Phần điều kiện có thể là kết quả của một toán tử, một hàm, ...
Ví dụ: Nếu điểm thi của tôi lớn hơn hoặc bằng 8 tôi là học sinh giỏi.
Code:
if (<#Điểm thi >= 8#>) {
<#Tôi là học sinh giỏi#>
}

Ở đây, bạn sẽ thấy rằng, Đi ểm thi có thể là một toán t ử, b ằng cách: đi ểm thi được
trung bình cộng của nhiều con điểm khác v ới nhau. Phép so sánh ở đây, chúng ta


dùng toán tử quan hệ để so sánh, bạn nhé (đã biết ở bài 4).
Ngoài ra, ngôn ngữ Objective-C còn cung cấp cho lập trình viên rẽ nhánh nếu điều
kiện sai.
Code:
if (<#condition#>) {
<#statements-if-true#>
} else {
<#statements-if-false#>
}


Đến đây chắc bạn cũng hiểu, câu lệnh if-true chỉ thực thi khi điều kiện đúng. Câu
lệnh if-false chỉ thực hiện khi điều kiện sai.
Ví dụ đối với trường hợp đi du lịch:
Code:
if (<#Tôi là học sinh giỏi#>) {
<#Mẹ tôi cho tôi đi du lịch#>
} else {
<#Mẹ tôi mua cho tôi một cây guitar mới#>
}

Ở đây bạn chỉ có thể, 1 là được đi du lịch, 2 là được mua guitar. Không bao gi ờ x ảy
ra 2 việc cùng lúc.
Hoặc đối với trường hợp điểm thi:
Code:
if (<#Điểm thi >= 8#>) {
<#Tôi là học sinh giỏi#>
} else {
<#Tôi có thể là học sinh khá, hoặc học sinh trùng bình, hoặc học sinh
yếu#>
}

Đến đây sẽ phát sinh thêm về việc làm sao biết rõ học sinh đó yếu hay trung bình
hay khá.
Thật dễ, bạn chỉ cần lồng các câu lệnh if trong câu lệnh if nh ư sau:
Code:
if (<#Điểm thi >= 8#>) { // Lúc này điểm thi lớn hơn hoặc bằng 8


<#Tôi là học sinh giỏi#>

} else { // Lúc này điểm thi đã nhỏ hơn 8
if (<#Điểm thi >= 6#>) { // Lúc này điểm thi lớn hơn bằng 6 nhưng lại nhỏ
hơn 8
<#Tôi là học sinh trung bình#>
} else { // Lúc này điểm thi nhỏ hơn 6
<#Tôi là học sinh trung bình hoặc học sinh yếu#>
}
}

2. Rẽ nhánh switch case:
Cú pháp:
Code:
switch (<#expression#>) {
case <#constant#>:
<#statements#>
break;
default:
break;
}

Tại sao lại sinh ra câu lệnh này. Như bạn thấy rằng ở ví dụ điểm thi, ta xét học sinh
trung bình, học sinh yếu, khi đó sẽ mất nhiều th ời gian để viết mã. Do đó, hàm này
được sinh ra để giảm bớt thời gian lập trình. Giúp cho lập trình viên rõ ràng h ơn
trong việc nhìn đoạn mã, sẽ không rối, không có nhiều khối lệnh nh ư câu lệnh if.
Cũng là ví dụ học sinh gỏi cho đến học sinh yếu, mình viết lại bằng câu lệnh switch
như sau:
Code:
int DiemThi = 8;
switch (DiemThi) {
case 8: case 9: case 10:

NSLog(@"Học sinh Giỏi");
break;


case 6: case 7:
NSLog(@"Học sinh Khá");
break;
case 4: case 5:
NSLog(@"Học sinh Trung bình");
break;
case 0: case 1: case 2: case 3:
NSLog(@"Học sinh Trung bình");
break;
}

Đơn giản là, cứ đến đúng giá trị nào thích hợp, đoạn mã sẽ dừng lại ở đó và thực thi
câu lệnh bên trong điều kiện đúng.
Lưu ý: kết thúc 1 điều kiện hoặc nhóm điều kiện phải có "break". Nếu không
có break, đoạn mã sẽ chạy tuột luột từ trên xuống dưới luôn đó bạn. Điều này
bạn có thể thử ngay lập tức.
3. Vòng lặp for:
Mình lấy ví dụ thế này: khi bạn muốn đi từ tầng 1, lên đến tầng 3, bạn phải b ước
từng bước theo từng bậc cầu thang. Đó là cách đơn giản nhất, đúng không bạn. Vậy
thì ta phải suy nghĩ và đưa ra giải thuật tốt nhất để b ước. Và giải thuật đó là tạo ra 1
vòng lặp, vòng lặp sẽ bắt ta bước từ bậc thang đầu tiên đến bậc thang cuối cùng.
Đó là vòng lặp for.
Cấu trúc:
Code:
for (<#initialization#>; <#condition#>; <#increment#>) {
<#statements#>

}

initialization: khởi tạo một biến, biến này sẽ định vị trí mà vòng lặp v ừa đi qua.
condition: điều kiện của biến vị trí vừa tạo. Nghĩa là gi ới hạn số lần chạy.
increment: sự tăng hoặc giảm của biến vị trí.
statements: lệnh thực thi ở mỗi lần dừng lại của biến vị trí.
Mình lấy ví dụ, các bạn sẽ hiểu ngay, như sau: Cộng tổng các số t ừ 1 đến 5
Làm bằng tay: a = 1 + 2 + 3 + 4 + 5 = 15
Còn nếu bằng máy, trừ trường hợp bạn viết rõ ràng như vậy, và dùng toán t ử cộng
để cộng thì sẽ được.
Còn nếu sử dụng vòng lặp để làm điều này, sẽ cực kỳ đơn giản.
Code:


int Tong = 0; // Khởi tạo biến Tong (Tổng) để chứa giá trị được cộng vào
và gán cho nó giá trị ban đầu bằng 0
for (int i = 1; i < 6; i++) {
// Khởi chạy vòng for từ i = 1 đến i = 5 (i < 6)
Tong = Tong + i;
// Khi chạy đến i = 1, Tong = 0 + 1 = 1
// Khi chạy đến i = 2, Tong = 1 + 2 = 3
// Khi chạy đến i = 3, Tong = 3 + 3 = 6
// Khi chạy đến i = 4, Tong = 6 + 4 = 10
// Khi chạy đến i = 5, Tong = 10 + 5 = 15
}
// Khi chạy đến i = 5 vòng lặp tự động thoát, vì mình ràng buộc nó
chạy đến vị trí khi i < 6.
// Lưu ý: ràng buộc i < 6, nghĩa là i sẽ chạy đến vị trí gần nhất với
6, chứ không dùng ở 4 hoặc 3.
NSLog(@"Tong: %i", Tong);


Sau này, khi làm quen thêm v ới các bài nâng cao, bạn sẽ hiểu thêm và vẫn dụng rõ
hơn về hàm này.
4. Vòng lặp while:
Đây cũng là một loại vòng lặp, lặp đi lặp lại để thực hiện câu lệnh khi điều kiện vãn
còn thoả mãn.
Cũng bài toán tính tổng từ 1 đến 5, nh ư trên, mình có thể giải bằng vòng lặp while
như sau:
Code:
int Tong = 0;
int i = 0;
// Khi bắt đầu chạy lần thứ nhất, Tong = 0 và i = 0
while (i < 5) {
i = i + 1; // Hoặc i++;
Tong = Tong + i;
// Khi chạy lần thứ 1 -> i = 1, Tong = 0 + 1 = 1; i < 5


// Khi chạy lần thứ 2 -> i = 2, Tong = 1 + 2 = 3; i < 5
// Khi chạy lần thứ 3 -> i = 3, Tong = 3 + 3 = 6; i < 5
// Khi chạy lần thứ 4 -> i = 4, Tong = 6 + 4 = 10; i < 5
// Khi chạy lần thứ 5 -> i = 5, Tong = 10 + 5 = 15; i = 5
}
// Khi chạy lần thứ 6 -> i = 6, i > 5, nên vòng lặp tự dùng lại.
NSLog(@"Tong: %i", Tong);

Có nghĩa là khi mà điều kiện còn thoả mãn thì vòng lặp còn chạy.
Lưu ý: Vòng lặp sẽ kiển tra điều kiện trước khi thực hiện câu lệnh bên trong
vòng lặp.
5. Vòng lặp do-while:

Cũng tương tự như vòng lặp while.
Nhưng khác 1 chỗ là vòng lặp này sẽ chạy 1 lần tr ước khi kiển tra điều kiện.
Bạn lưu ý ở điểm này để sử dụng sao cho đúng vòng lặp vào thuật toán của
mình, tránh việc xảy ra vòng lặp vô hạn dẫn đến treo máy. Nói thì chủ quan
chứ trong lúc giải thuật sẽ bị rất nhiều đấy bạn.
Cũng với bài toán tính tổng từ 1 đến 5, mình sẽ giải bằng vòng lặp do-while nh ư
sau:
Code:
int Tong = 0;
int i = 0;
do {
i++;
Tong = Tong + i;
} while (i < 5);
NSLog(@"Tong: %i", Tong);

6. Bài tập:
1. Tính tổng các số từ 1 đến 100.
2. Tính tổng các số chẵn từ 1 đến 250.
3. Tính tổng các số lẻ chia hết cho 3 từ 0 đến 1500.
4. Bài toán dân gian cho bạn:
Vừa gà, vừa chó


Bó lại cho tròn
Ba mươi sáu con
Một trăm chân chẵn.
Hỏi có bao nhiêu con gà, bao nhiêu con chó.
5. An và Bình là hai anh em. Tuổi của An gấp 3 lần tuổi của Bình. Tổng số tuổi của
An và Bình là 12.

Hỏi An bao nhiêu tuổi?
Hỏi Bình bao nhiêu tuổi?
Code:
Bài giải mình sẽ đăng tải sau, nếu bạn chưa có bài giải xác đáng.

Chúc các bạn có những bài giải sáng tạo, đăng lên đây cho bạn bè cùng thảo luận,
bạn nhé.
Và ghi nhớ những lưu ý mà mình có nói trong t ừng cấu trúc điều khiển.



×