1 / 30

886201 หลักการ โปรแกรม 1

886201 หลักการ โปรแกรม 1. Lecture 4 : โปรแกรมย่อย. โปรแกรม. โปรแกรมภาษา C++ ประกอบด้วย โปรแกรมหลัก - มีเพียงโปรแกรมเดียว และกำหนดให้มีชื่อเป็น main เท่านั้น เมื่อ โปรแกรมมีขนาดใหญ่ขึ้น มีความจำเป็นต้องแบ่งโปรแกรมออกเป็นส่วนย่อย

ira
Download Presentation

886201 หลักการ โปรแกรม 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 886201 หลักการโปรแกรม 1 Lecture 4: โปรแกรมย่อย

  2. โปรแกรม โปรแกรมภาษา C++ ประกอบด้วย โปรแกรมหลัก - มีเพียงโปรแกรมเดียว และกำหนดให้มีชื่อเป็น main เท่านั้น เมื่อโปรแกรมมีขนาดใหญ่ขึ้น มีความจำเป็นต้องแบ่งโปรแกรมออกเป็นส่วนย่อย เรียกว่าโปรแกรมย่อย เพื่อให้สามารถทำความเข้าใจได้ง่าย, พัฒนาได้ง่าย, และ สามารถนำโปรแกรมย่อยที่พัฒนาแล้วไปใช้ในโปรแกรมอื่นต่อไปได้ โปรแกรมย่อย (subprogram) - มีจำนวนไม่จำกัด แต่ละโปรแกรม มีหน้าที่ในการ ทำงานเพียงอย่างเดียว

  3. โปรแกรมย่อย โปรแกรมย่อย มีสองชนิดคือ ฟังก์ชันและกระบวนความ - ฟังก์ชัน(function) – เขียนขึ้นตามนิยามของฟังก์ชันทางคณิตศาสตร์ ต้องรับค่าจากผู้เรียกเพื่อนำไปดำเนินการ และต้องคืนผลลัพธ์ หรือ "ค่า" ให้แก่ผู้เรียก และสามารถคืนค่าได้เพียงค่าเดียว เช่น การเรียกใช้ฟังก์ชัน sine ผู้เรียกต้องส่งมุมในหน่วย Radian เช่น x ให้แก่ฟังก์ชัน และฟังก์ชันคืนค่า sin(x) ให้แก่ผู้เรียก - กระบวนความ(procedure) - ได้แก่โปรแกรมย่อยที่ใช้ทำงานใดงานหนึ่ง และไม่ใช่ฟังก์ชัน ภาษาบางภาษาเช่น Pascal (Delphi) มีการแยกฟังก์ชันแและกระบวนความออกจากกันโดยเด็ดขาด มีคำสั่งและมีวิธีเขียนแตกต่างกัน แต่ภาษา C และ C++ กำหนดให้ฟังก์ชันและกระบวนความมีรูปแบบเดียวกัน และเรียกรวมว่า "ฟังก์ชัน" ดังนั้นคำว่าฟังก์ชันในภาษา C จึงอาจหมายถึง ฟังก์ชัน หรือ กระบวนความก็ได้

  4. ฟังก์ชัน ฟังก์ชันในภาษา c++แบ่งออกได้เป็นสองชนิดคือ 1.  ไลบราลี่ฟังก์ชัน (Library Function) 2. ฟังก์ชันที่ผู้เขียนโปรแกรมกำหนดขึ้นเอง (UserDefined Function)

  5. Library Function • เป็นฟังก์ชันมาตรฐานจากคลัง • ก่อนจะนำฟังก์ชันใดมาใช้งานต้องประกาศรูปแบบการใช้งานของฟังก์ชันนั้นก่อน สำหรับฟังก์ชันมาตรฐานจากคลังทำได้โดยการโดยการ include ชื่อ header file ที่ต้องการ เช่น#include <iostream> • การรับข้อมูลเข้าและแสดงผลข้อมูล cin, cout, และ cerrกำหนดใน <iostream> • ฟังก์ชันเกี่ยวกับการคำนวณเช่น sin(), cos(), tan(), sqrt(), pow(), log() กำหนดใน <cmath> • ฟังก์ชันเกี่ยวกับการทำงานกับกลุ่มอักขระเช่นstrcat(), strcpy(), strcmp(), strlen() กำหนดใน <cstring>

  6. UserDefined Function • ฟังก์ชันจากคลังเป็นฟังก์ชันสำหรับใช้งานทั่วไป ไม่เฉพาะเจาะจงกับงานใดงานหนึ่ง เมื่อเขียนโปรแกรมประยุกต์และต้องการฟังก์ชันเฉพาะงาน ผู้ใช้เขียนขึ้นเองได้ • ข้อกำหนดของการเขียนฟังก์ชันขึ้นใช้เอง • การกำหนดรูปแบบการใช้งาน (function prototype) • การเรียกใช้งาน (function invocation)

  7. การกำหนดรูปแบบการใช้งาน (Function Prototype) ส่วนประกอบหลัก 3 ส่วนของ function header typefunction_name (param 1, …,param n) ชนิดของข้อมูลที่ส่งกลับ (function return type) ชื่อฟังก์ชัน(function name) พารามิเตอร์(parameter list)

  8. การกำหนดรูปแบบการใช้งาน (Function Prototype) ชนิดข้อมูลที่จะส่งคืน ชื่อฟังก์ชัน doublesin(doublex); ชนิดของตัวแปรรับค่า ชื่อตัวแปรรับค่า

  9. ชนิดของข้อมูลที่ส่งกลับ(function return type) ชนิดของข้อมูลที่ส่งกลับ (function return type) สามารถใช้ชนิดของข้อมูล(type) ในภาษา C++ ชนิดใดก็ได้เช่น char, int, long, float, double ตัวอย่าง: intfunc1(…) /* ค่าที่ส่งกลับเป็นข้อมูลชนิดint */ float func2(…) /* ค่าที่ส่งกลับเป็นข้อมูลชนิด float */ void func3 (…) /* ไม่มีการส่งค่ากลับ */

  10. ชื่อฟังก์ชัน(function name) และ พารามิเตอร์ (parameter list) ชื่อฟังก์ชัน(function name) ชื่อฟังก์ชันเป็นไปตามกฏการตั้งชื่อในภาษา C++ พารามิเตอร์(parameter list)คือ ค่าที่ถูกส่งไปยังฟังก์ชันเมื่อฟังก์ชันถูกเรียกใช้ ตัวอย่าง: float cube (float x) /* พารามิเตอร์ 1 ตัวคือ x */ void func1 (int x, float y, char z) /* พารามิเตอร์ 3 ตัวคือx, y, z */ void func2 (void) /* ไม่มีพารามิเตอร์ */

  11. การเรียกใช้งาน (Function Invocation) เมื่อผู้เรียกต้องการเรียกใช้งานฟังก์ชันใดต้องรู้รูปแบบการใช้งานของฟังก์ชันนั้น เช่นหากต้องการเรียกใช้งานฟังก์ชัน sin ซึ่งมีรูปแบบการใช้งานเป็น double sin ( double x ); ซึ่งจะทำให้รู้ว่า "ค่า" ที่จะส่งเป็น argument หรือ actual parameters นั้นต้องมีชนิดเป็น double (หรือเทียบเท่า double) และฟังก์ชันคืนค่าเป็น double จะได้ประกาศตัวแปรสำหรับรับค่าที่ฟังก์ชันส่งคืนได้อย่างถูกต้อง เช่นมีการประกาศตัวแปรเป็น double a = 5.87; double b; intc = 3; และมีการเรียกใช้ฟังก์ชัน sin ดังนี้ b = sin(a); // ถูกต้อง argument และตัวแปรรับค่าเป็น double b = sin(c); // ถูกต้องเพราะ intเป็นเซตย่อยของ double c = sin(5.87); // ไม่ถูกต้องเพราะค่าที่ส่งคืนเป็น double แต่ตัวแปรรับค่าเป็น int หมายเหตุ: อย่าลืมว่าค่าที่ส่งให้ฟังก์ชัน sin เป็นมุมในหน่วย radian

  12. ฟังก์ชันทำงานอย่างไร • โดยปกติการประมวลผลโปรแกรมจะเริ่มจาก ฟังก์ชันหลัก (main) • หาก ฟังก์ชันหลักมีการเรียกใช้ฟังก์ชันอื่น (ในที่นี้คือ ฟังก์ชันที่ผู้ใช้กำหนดขึ้น) ก็จะมีการย้ายการทำงานจาก ฟังก์ชันหลัก ไปยังฟังก์ชันที่ถูกเรียกใช้(called function) นั้น (เริ่มทำงานในส่วนของ function definition) • การทำงานในฟังก์ชันที่ถูกเรียกใช้จะสิ้นสุดเมื่อมีการเรียกใช้คำสั่ง return หรือ ทำงาน จน คำสั่ง สุดท้ายสิ้นสุดลง (นั่นก็คือพบเครื่องหมาย ‘}’ ท้ายสุดฟังก์ชัน) • หลังจากนั้น จะมีการย้ายการทำงาน จากฟังก์ชันที่ถูกเรียกใช้ (called function)กลับไปยัง ฟังก์ชันหลัก โดยจะเริ่มประมวลผลคำสั่งถัดไปจากการเรียกใช้ ฟังก์ชัน

  13. ฟังก์ชันทำงานอย่างไร main program func1 ( ) { } int main(void) { func1( ) func2 ( ) func3 ( ) } func2 ( ) { } func3 ( ) { }

  14. การส่งพารามิเตอร์ไปยังฟังก์ชันการส่งพารามิเตอร์ไปยังฟังก์ชัน • Pass by value ทำการ copy ค่าส่งไปยังฟังก์ชัน ไม่มีการเปลี่ยนแปลงค่าตัวแปรทางฝั่งของผู้เรียก • Pass by reference ส่งตัวแทนของตัวแปรไปยังฟังก์ชัน (reference)ฟังก์ชันรับ "ตัวแทนของตัวแปร" ไปดำเนินการเปลี่ยนแปลงตัวแปร ส่งผลต่อค่าของตัวแปรทางฝั่งของผู้เรียก

  15. ตัวอย่าง pass by value #include <iostream> using namespace std; // การประกาศรูปแบบการใช้งานของฟังก์ชัน double square ( double x ); // การประกาศฟังก์ชัน - การกำหนดรายละเอียดการทำงาน double square ( double x ) { return x * x; } intmain ( ) // โปรแกรมหลัก { double a; // การเรียกใช้งานฟังก์ชัน a = square(4); cout << "a = " << a << endl; return 0; }

  16. ตัวอย่าง pass by value #include <iostream> using namespace std; intlarger_of(int a, int b); // การประกาศรูปแบบการใช้งานของฟังก์ชัน // การประกาศฟังก์ชัน - การกำหนดรายละเอียดการทำงาน intlarger_of(int a, int b) { if ( a > b ) return a; return b; } intmain ( ) // โปรแกรมหลัก { int x, y; cin >> x >> y; cout << larger_of(x, y) << endl; // การเรียกใช้งานฟังก์ชัน return 0; }

  17. Variable Scope Which main?

  18. Local and global variable • Local variable (ตัวแปรเฉพาะที่) เป็นตัวแปรที่ถูกประกาศใช้เฉพาะที่ ในฟังก์ชันใดฟังก์ชันหนึ่ง การเปลี่ยนแปลงค่าของตัวแปรชนิดนี้ จะเกิดขึ้นภายในฟังก์ชันที่ประกาศใช้ตัวแปรเท่านั้น การเปลี่ยนแปลงภายนอกฟังก์ชันจะไม่มีผลต่อตัวแปรดังกล่าว • Global variable (ตัวแปรส่วนกลาง) เป็นตัวแปรที่อยู่นอกฟังก์ชัน ค่าของตัวแปรชนิดนี้สามารถถูกเปลี่ยนแปลงได้ตลอดเวลาโดยฟังก์ชันอื่น

  19. Local Variable double cube_volume(double side_len) { double volume= side_len * side_len * side_len; return volume; } int main() { double volume= cube_volume(2); cout << volume << endl; return 0; } ?

  20. Local Variable double withdraw(double balance, double amount) { { double amount = 10; ... } ... } ?

  21. Global Variable intbalance = 10000; // A global variable void withdraw(double amount) { if (balance >= amount) { balance = balance - amount; } } int main() { withdraw(1000); cout << balance<< endl; return 0; }

  22. ตัวอย่าง intx=1, y=2; void demo( ); intmain( ) { cout << “Before calling demo( ), x = ” << x <<“ and y =” << y << endl; demo( ); cout << “After calling demo( ), x = ” << x << “ and y = ” << y << endl; return 0; } void demo( ) { intx=88, y=99; /* declare and initialize two local variables */ cout << “Within the demo( ), x= ” << x << “ and y= ” << y<< endl; } Result: Before calling demo( ), x=1 and y=2 Within the demo( ), x=88 and y=99 After calling demo ( ), x=1 and y=2

  23. แบบฝึกหัด double f(double x) { return g(x) + sqrt(h(x)); } double g(double x) { return 4 * h(x); } double h(double x) { return x * x + k(x) - 1; } double k(double x) { return 2 * (x + 1); } a. double x1 = f(2); b. double x2 = g(h(2)); c. double x3 = k(g(2) + h(2)); d. double x4 = f(0) + f(1) + f(2); e. double x5 = f(-1) + g(-1) + h(-1) + k(-1);

  24. แบบฝึกหัด void prevnext(int a, int& prv, intnxt) { prv = a - 1; nxt = a + 1; } int main() { int a = 100; int b = 0; int c = 0; prevnext(a, b, c); cout << "Previous = ” << b << “Next = ” << c << endl; return 0; }

  25. แบบฝึกหัด 25  int main() 26  { 27  inti = 1; 28  int b = g(i); 29  cout << a + b + i << endl; 30  return 0; 31  } 1  int a = 0; 2  int b = 0; 3  int f(int c) 4  { 5  int n = 0; 6  7  a = c; 8 9  n = a + b; 10  11  return n; 12 } 13  14 int g(int c) 15 { 16  int n = 0; 17  int a = c; 18  19  a++; 20  n = a + b; 21  22  return n; 23 } 24 

More Related