เรียนรู้การ loop
// fib.c
#include <stdio.h>
int main() {
int a = 0, b = 1;
int i = 0;
while (i <= 10) {
printf("fib(%d) = %d\n", i, a);
int tmp = a;
a = a + b;
b = tmp;
i += 1;
}
}
ได้ผลลัพท์เป็น
fib(0) = 0
fib(1) = 1
fib(2) = 1
fib(3) = 2
fib(4) = 3
fib(5) = 5
fib(6) = 8
fib(7) = 13
fib(8) = 21
fib(9) = 34
fib(10) = 55
while (i <= 10) {}
while
(while loop) เป็นการบอกว่า ในขณะที่ condition ยังเป็นจริงอยู่ ให้ทำงานข้่างในวงไปเรื่อยๆ (ทำซ้ำไปเรื่อง ถ้าเงื่อนไขยังจริงอยู่)
while (condition) {
...
}
ตัวอย่างในชีวิตจริงเช่น
while (ยังไม่อิ่ม) {
กินข้าวเพิ่ม
}
while (ยังไม่ถึงเส้นชัย) {
เดินต่อไป
}
เป็นรูปแบบการทำ loop แบบวนซ้ำ
i += 1
ความหมายเหมือน
i = i + 1 แต่เขียนสั้นกว่า
นอกจากนั้นยังมีย่อกว่านี้อีกคือ
++i,
--i และ
i++,
i--
i = 3; assert(++i == 4); assert(i == 4);
j = 3; assert(j++ == 3); assert(j == 4);
for loopถ้าสังเหตุการวนด้านบน เราจะเห็นรูปแบบว่า
int i = 0; ก่อน
(initial state)
i <= 10
(check valid)
i += 1;
(update)
รูปแบบ
init, checkvalid, update นี้จะเกิดขึ้นบ่อยๆมากเขาเลยสร้าง syntax ที่ชื่อว่า
for ขึ้นมาเพิ่มยุบรวม 3 ตัวนี้
// เขียนแบบใช้ while
init;
while (check_valid) {
...
update;
}
// เขียนแบบใช้ for
for (init; check_valid; update) {
...
}
เราแปลงโคดด้านบนเป็น
for และยุบ
+=
// fib.c
#include <stdio.h>
int main() {
int a = 0, b = 1;
int i = 0;
// --- fib begin ---
while (i <= 10) {
printf("fib(%d) = %d\n", i, a);
int tmp = a;
a = a + b;
b = tmp;
i += 1;
}
// --- fib end ---
}
เป็น
// fib_forloop.c
#include <stdio.h>
int main() {
int a = 0, b = 1;
int i = 0;
// --- fib begin ---
for (int i = 0; i <= 10; i += 1) {
printf("fib(%d) = %d\n", i, a);
int tmp = a;
a += b;
b = tmp;
}
// --- fib end ---
}
function คือก้อนชุดคำสั่งที่รับ input แล้วสร้าง output. (I -> O)
#include <stdio.h>
// สลับค่าที่ตำแหน่ง a และ b
void swap(int* a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main() {
int a = 0, b = 1;
int i = 0;
for (int i = 0; i <= 10; i += 1) {
printf("fib(%d) = %d\n", i, a);
b += a;
swap(&a, &b);
}
}
ตัวอย่างข้างบนได้เพิ่ม function
void swap(int* a, int *b)
int* (ยากเกินไปข้ามก่อนได้)
int* a คือ Pointer หมายถึงตำแหน่งของกระดาษทด ที่ตรงนั้นควรจะทดเลขจำนวนเต็มได้ 1 ค่า.
*a เพื่อแปลงจะตำแหน่ง เป็นค่าที่ทดไว้แทน
&a คือ ตำแหน่งบนกระดาษทดของตัวแปร
a
เรื่องที่เราพูดๆกันอยู่นี้เรียกว่า
Pointer เป็นเรื่องที่น่าสนใจดี แต่ข้อเสียตือ bug ได้ง่าย