Summer Camp 2024 - Day 4
The lecture notes from the C++ class on day 4 of the LOC summer camp.
Written by RuffLogix on April 20, 2024

Function
Function
เป็นส่วนของโค้ดที่ถูกประกาศไว้ล่วงหน้าสำหรับใช้งานในอนาคต ซึ่งทำให้โค้ดนั้นอ่านง่ายขึ้น และช่วยให้การทำงานบางอย่างนั้นซับซ้อนน้อยลงด้วย ซึ่งการประกาศ Function นั้นประกอบไปด้วย 4 ส่วนหลัก ๆ
- ประเภทของ Function
- ชื่อของ Function
- Parameters ที่รับ
- การทำงานภายใน Function
Function ที่ไม่คืนค่า
void sayHello() { cout << "Hello World\n";}
Function ที่คืนค่าเป็น integer
int add(int a, int b) { return a + b;}
ซึ่งเราสามารถเรียกใช้ Function ได้ผ่านการเรียกชื่อ Function และใส่ Arguments ลงไป (ถ้ามี) เช่น sayHello()
หรือ add(3, 5)
เป็นต้น
Parameter & Argument
Parameter
คือ ตัวแปรที่ถูกประกาศไว้ใน FunctionArgument
คือ ค่าที่ถูกส่งให้ Parameter ที่อยู่ใน Function
// a และ b เป็น parameterint add(int a, int b) { return a + b;}
add(3, 5) // 3 และ 5 เป็น argument
Prototype
เป็นการประกาศ Function โดยที่ยังไม่บอกถึงการทำงานภายใน เพื่อให้โปรแกรมรู้จักกับ Function ก่อน
int add(int a, int b);
int add(int a, int b) { return a + b;}
Example
โจทย์: จงเขียนโปรแกรมสร้างรูปสี่เหลี่ยมที่มีขนาด โดยใช้ Function
ข้อมูลนำเข้า
- จำนวนเต็ม แทน ขนาดของรูปสี่เหลี่ยม
ข้อมูลส่งออก
- รูปสี่เหลี่ยมขนาด ที่ประกอบไปด้วยตัวอักษร
'#'
#include <iostream>
using namespace std;
void printRect(int n) { for (int i=1; i<=n; i++) { for (int j=1; j<=n; j++) { cout << '#'; } cout << '\n'; }}
int main() { ios_base::sync_with_stdio(0), cin.tie(0);
int n; cin >> n;
printRect(n);
return 0;}
Pass by Value & Pass by Reference
ในการส่งค่าให้แก่ Function สามารถแบ่งได้เป็น 2 ประเภท ได้แก่
Pass by Value
คือ การคัดลอกค่าของข้อมูลและส่งให้แก่ Function (ข้อมูลเหมือนเดิมแต่อยู่ในตำแหน่งใหม่)Pass by Reference
คือ การส่งที่อยู่ของข้อมูลให้แก่ Function (ข้อมูลและตำแหน่งเดิม)
Pass by Value
void add(int a, int b, int result) { result = a + b;}
Pass by Reference
void add(int a, int b, int &result) { result = a + b;}
Recursive Function
Recursive Function
คือ Function ที่แก้ปัญหาโดยการแบ่งปัญหาเป็นส่วนย่อย ๆ แล้วส่งให้ Function ตัวเองไปเรื่อย ๆ จนปัญหามีขนาดเล็กมากพอ ซึ่งเราสามารถแบ่งการทำงานได้เป็น 2 ประเภท
base case
คือ กรณีที่ปัญหาเล็กพอ โดยไม่ต้องทำการเรียกตัวเองแล้วrecursive case
คือ กรณีที่เกิดการแบ่งปัญหาเพื่อเรียกตัวเอง
Example
โจทย์
: จงเขียนโปรแกรมหา Fibonacci ลำดับที่ เมื่อให้ สำหรับ และ สำหรับ
ข้อมูลนำเข้า
- จำนวนเต็ม แทน ลำดับของ Fibonacci ที่เราต้องการทราบ
ข้อมูลส่งออก
- ค่าของ Fibonacci ลำดับที่
#include <iostream>
using namespace std;
int fib(int n) { if (n==1 || n==0) return n;
return fib(n-1) + fib(n-2);}
int main() { int n; cin >> n;
cout << fib(n) << '\n';
return 0;}