30
886201 หหหหหหหหหหหหหห 1 Lecture 4: หหหหหหหหหหห

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

  • Upload
    ira

  • View
    53

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

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

โปรแกรมโปรแกรมภาษา C++ ประกอบด้�วย

โปรแกรมหลั�ก - ม�เพี�ย่งโปรแกรมเดี�ย่ว แลัะก�าหนดีให�ม�ชื่��อเป�น main เท่ าน��น เม��อโปรแกรมม�ขนาดีใหญ่ ข"�น ม�ความจำ�าเป�นต้�องแบ่ งโปรแกรมออกเป�นส่ วนย่ อย่ เร�ย่กว าโปรแกรมย่ อย่ เพี��อให�ส่ามารถท่�าความเข�าใจำไดี�ง าย่, พี�ฒนาไดี�ง าย่, แลัะ ส่ามารถน�าโปรแกรมย่ อย่ท่��พี�ฒนาแลั�วไปใชื่�ในโปรแกรมอ��นต้ อไปไดี�

โปรแกรมย�อย (subprogram) - ม�จำ�านวนไม จำ�าก�ดี แต้ ลัะโปรแกรม ม�หน�าท่��ในการ ท่�างานเพี�ย่งอย่ างเดี�ย่ว

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

โปรแกรมย�อยโปรแกรมย่ อย่ ม�ส่องชื่น+ดีค�อ ฟั-งก.ชื่�นแลัะกระบ่วนความ

- ฟั�งก�ชั�น (function) – เข�ย่นข"�นต้ามน+ย่ามของฟั-งก.ชื่�นท่างคณิ+ต้ศาส่ต้ร. ต้�องร�บ่ค าจำากผู้2�เร�ย่กเพี��อน�าไปดี�าเน+นการ แลัะต้�องค�นผู้ลัลั�พีธ์. หร�อ "ค า" ให�แก ผู้2�เร�ย่ก แลัะส่ามารถค�นค าไดี�เพี�ย่งค าเดี�ย่ว เชื่ น การเร�ย่กใชื่�ฟั-งก.ชื่�น sine ผู้2�เร�ย่กต้�องส่ งม4มในหน วย่ Radian เชื่ น x ให�แก ฟั-งก.ชื่�น แลัะฟั-งก.ชื่�นค�นค า sin(x) ให�แก ผู้2�เร�ย่ก

- กระบวนความ (procedure) - ไดี�แก โปรแกรมย่ อย่ท่��ใชื่�ท่�างานใดีงานหน"�ง แลัะไม ใชื่ ฟั-งก.ชื่�น ภาษาบ่างภาษาเชื่ น Pascal (Delphi) ม�การแย่กฟั-งก.ชื่�นแแลัะกระบ่วนความออกจำากก�นโดีย่เดี7ดีขาดี ม�ค�าส่��งแลัะม�ว+ธ์�เข�ย่นแต้กต้ างก�น แต้ ภาษา C แลัะ C++ ก�าหนดีให�ฟั-งก.ชื่�นแลัะกระบ่วนความม�ร2ปแบ่บ่เดี�ย่วก�น แลัะเร�ย่กรวมว า "ฟั-งก.ชื่�น" ดี�งน��นค�าว าฟั-งก.ชื่�นในภาษา C จำ"งอาจำหมาย่ถ"ง ฟั-งก.ชื่�น หร�อ กระบ่วนความก7ไดี�

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

ฟั�งก�ชั�นฟั-งก.ชื่�นในภาษา c++ แบ่ งออกไดี�เป�นส่องชื่น+ดีค�อ 1.  ไลับ่ราลั��ฟั-งก.ชื่�น (Library Function) 2. ฟั-งก.ชื่�นท่��ผู้2�เข�ย่นโปรแกรมก�าหนดีข"�นเอง (User Defined Function)

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

Library Function• เป�นฟั-งก.ชื่�นมาต้รฐานจำากคลั�ง • ก อนจำะน�าฟั-งก.ชื่�นใดีมาใชื่�งานต้�องประกาศร2ปแบ่บ่การใชื่�งานของฟั-งก.ชื่�นน��นก อน ส่�าหร�บ่ฟั-งก.ชื่�นมาต้รฐานจำากคลั�งท่�าไดี�โดีย่การโดีย่การ include ชื่��อ header file ท่��ต้�องการ เชื่ น #include <iostream>

• การร�บ่ข�อม2ลัเข�าแลัะแส่ดีงผู้ลัข�อม2ลั cin, cout, แลัะ cerr ก�าหนดีใน <iostream>

• ฟั-งก.ชื่�นเก��ย่วก�บ่การค�านวณิ เชื่ น sin(), cos(), tan(), sqrt(), pow(), log() ก�าหนดีใน <cmath>

• ฟั-งก.ชื่�นเก��ย่วก�บ่การท่�างานก�บ่กลั4 มอ�กขระ เชื่ น strcat(), strcpy(), strcmp(), strlen() ก�าหนดีใน <cstring>

Page 6: 886201   หลักการ โปรแกรม  1
Page 7: 886201   หลักการ โปรแกรม  1
Page 8: 886201   หลักการ โปรแกรม  1

FunctionName

MathName Value Example

abs(x) absolute value |x| abs(-1) returns 1

sqrt(x) square root x0.5 sqrt(2.0) returns 1.414…

exp(x) exponential ex exp(1.0) returns 2.718…

log(x) natural logarithm ln x log(2.718…) returns 1.0

log10(x) common logarithm log x log10(100.0) returns 2.0

sin(x) sine sin x sin(3.14…) returns 0.0

cos(x) cosine cos x cos(3.14…) returns -1.0

tan(x) tangent tan x tan(3.14…) returns 0.0

ceil(x) ceiling ┌ x ┐

ceil(2.5) returns 3.0

floor(x) floor└

x ┘

floor(2.5) returns 2.0

Page 9: 886201   หลักการ โปรแกรม  1
Page 10: 886201   หลักการ โปรแกรม  1
Page 11: 886201   หลักการ โปรแกรม  1

User Defined Function

• ฟั-งก.ชื่�นจำากคลั�งเป�นฟั-งก.ชื่�นส่�าหร�บ่ใชื่�งานท่��วไป ไม เฉพีาะเจำาะจำงก�บ่งานใดีงานหน"�ง เม��อเข�ย่นโปรแกรมประย่4กต้.แลัะต้�องการฟั-งก.ชื่�นเฉพีาะงาน ผู้2�ใชื่�เข�ย่นข"�นเองไดี�

• ข�อก�าหนดีของการเข�ย่นฟั-งก.ชื่�นข"�นใชื่�เอง• การก�าหนดีร2ปแบ่บ่การใชื่�งาน (function prototype)

• การเร�ย่กใชื่�งาน (function invocation)

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

การก�าหนด้ร�ปแบบการใชั�งาน (Function Prototype)

ส่ วนประกอบ่หลั�ก 3 ส่ วนของ function header

type function_name (param 1, …,param n)

ชื่น+ดีของข�อม2ลัท่��ส่ งกลั�บ่ (function return type)

ชื่��อฟั-งก.ชื่�น(function name)

พีาราม+เต้อร. (parameter list)

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

การก�าหนด้ร�ปแบบการใชั�งาน (Function Prototype)

double sin(double x);

ชัน ด้ข้�อม�ลัที่#$จะส่�งค'น

ชั'$อฟั�งก�ชั�น

ชัน ด้ข้องตั�วแปรร�บค�า

ชั'$อตั�วแปรร�บค�า

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

ชัน ด้ข้องข้�อม�ลัที่#$ส่�งกลั�บ ( function return type)ชื่น+ดีของข�อม2ลัท่��ส่ งกลั�บ่ (function return type) ส่ามารถใชื่�ชื่น+ดีของข�อม2ลั(type) ในภาษา C++ ชื่น+ดีใดีก7ไดี�เชื่ น char, int, long, float, double

ต้�วอย่ าง:int func1(…) /* ค าท่��ส่ งกลั�บ่เป�นข�อม2ลัชื่น+ดี int */float func2(…) /* ค าท่��ส่ งกลั�บ่เป�นข�อม2ลัชื่น+ดี float */void func3 (…) /* ไม ม�การส่ งค ากลั�บ่ */

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

ชั'$อฟั�งก�ชั�น(function name) แลัะ พาราม เตัอร� (parameter list)

ชื่��อฟั-งก.ชื่�น(function name) ชื่��อฟั-งก.ชื่�นเป�นไปต้ามกฏการต้��งชื่��อในภาษา C++

พีาราม+เต้อร. (parameter list) ค�อ ค าท่��ถ2กส่ งไปย่�งฟั-งก.ชื่�นเม��อฟั-งก.ชื่�นถ2กเร�ย่กใชื่�ต้�วอย่ าง: float cube (float x) /* พีาราม+เต้อร. 1 ต้�วค�อ x */ void func1 (int x, float y, char z) /* พีาราม+เต้อร. 3 ต้�วค�อ x, y, z */ void func2 (void) /* ไม ม�พีาราม+เต้อร. */

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

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

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

ฟั�งก�ชั�นที่�างานอย�างไร• โดีย่ปกต้+การประมวลัผู้ลัโปรแกรมจำะเร+�มจำาก ฟั-งก.ชื่�น หลั�ก (main)

• หาก ฟั-งก.ชื่�น หลั�กม�การเร�ย่กใชื่�ฟั-งก.ชื่�นอ��น (ในท่��น��ค�อ ฟั-งก.ชื่�น ท่��ผู้2�ใชื่�ก�าหนดีข"�น) ก7จำะม�การย่�าย่การท่�างานจำาก ฟั-งก.ชื่�น หลั�ก ไปย่�งฟั-งก.ชื่�นท่��ถ2กเร�ย่กใชื่�(called function) น��น (เร+�มท่�างานในส่ วนของ function definition)

• การท่�างานในฟั-งก.ชื่�นท่��ถ2กเร�ย่กใชื่�จำะส่+�นส่4ดีเม��อม�การเร�ย่กใชื่�ค�าส่��ง return หร�อ ท่�างาน จำน ค�าส่��ง ส่4ดีท่�าย่ส่+�นส่4ดีลัง (น��นก7ค�อพีบ่เคร��องหมาย่ ‘}’ ท่�าย่ส่4ดีฟั-งก.ชื่�น)

• หลั�งจำากน��น จำะม�การย่�าย่การท่�างาน จำากฟั-งก.ชื่�นท่��ถ2กเร�ย่กใชื่� (called function)กลั�บ่ไปย่�ง ฟั-งก.ชื่�น หลั�ก โดีย่จำะเร+�มประมวลัผู้ลัค�าส่��งถ�ดีไปจำากการเร�ย่กใชื่� ฟั-งก.ชื่�น

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

ฟั�งก�ชั�นที่�างานอย�างไรmain program

int main(void){ func1 ( ) func2 ( ) func3 ( )}

func1 ( ){}

func2 ( ){}

func3 ( ){}

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

การส่�งพาราม เตัอร�ไปย�งฟั�งก�ชั�น• Pass by value

ท่�าการ copy ค าส่ งไปย่�งฟั-งก.ชื่�น ไม ม�การเปลั��ย่นแปลังค าต้�วแปรท่างฝั่-� งของผู้2�เร�ย่ก

• Pass by referenceส่ งต้�วแท่นของต้�วแปรไปย่�งฟั-งก.ชื่�น (reference) ฟั-งก.ชื่�นร�บ่ "ต้�วแท่นของต้�วแปร" ไปดี�าเน+นการเปลั��ย่นแปลังต้�วแปร ส่ งผู้ลัต้ อค าของต้�วแปรท่างฝั่-� งของผู้2�เร�ย่ก

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

ตั�วอย�าง pass by value#include <iostream>using namespace std; // การประกาศร�ปแบบการใชั�งานข้องฟั�งก�ชั�นdouble square ( double x );

// การประกาศฟั�งก�ชั�น - การก�าหนด้รายลัะเอ#ยด้การที่�างาน double square ( double x ){

return x * x;}

int main ( ) // โปรแกรมหลั�ก{ double a;  // การเร#ยกใชั�งานฟั�งก�ชั�น a = square(4); cout << "a = " << a << endl;  return 0;} 

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

ตั�วอย�าง pass by value#include <iostream>using namespace std; int larger_of(int a, int b); // การประกาศร�ปแบบการใชั�งานข้องฟั�งก�ชั�น// การประกาศฟั�งก�ชั�น - การก�าหนด้รายลัะเอ#ยด้การที่�างาน int larger_of(int a, int b){ if ( a > b ) return a; return b;}

int main ( ) // โปรแกรมหลั�ก{ int x, y;  cin >> x >> y; cout << larger_of(x, y) << endl; // การเร#ยกใชั�งานฟั�งก�ชั�น  return 0;} 

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

Variable Scope

Which main?

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

Local and global variable

• Local variable (ต้�วแปรเฉพีาะท่��) เป�นต้�วแปรท่��ถ2กประกาศใชื่�เฉพีาะท่�� ในฟั-งก.ชื่�นใดีฟั-งก.ชื่�นหน"�ง การเปลั��ย่นแปลังค าของต้�วแปรชื่น+ดีน�� จำะเก+ดีข"�นภาย่ในฟั-งก.ชื่�นท่��ประกาศใชื่�ต้�วแปรเท่ าน��น การเปลั��ย่นแปลังภาย่นอกฟั-งก.ชื่�นจำะไม ม�ผู้ลัต้ อต้�วแปรดี�งกลั าว

• Global variable (ต้�วแปรส่ วนกลัาง) เป�นต้�วแปรท่��อย่2 นอกฟั-งก.ชื่�น ค าของต้�วแปรชื่น+ดีน��ส่ามารถถ2กเปลั��ย่นแปลังไดี�ต้ลัอดีเวลัาโดีย่ฟั-งก.ชื่�นอ��น

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

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;

}

?

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

Local Variable

double withdraw(double balance, double amount){ { double amount = 10;

... } ...} ?

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

Global Variableint balance = 10000; // A global variable

void withdraw(double amount){ if (balance >= amount) { balance = balance - amount; }}

int main(){ withdraw(1000); cout << balance << endl; return 0;}

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

ตั�วอย�างint x=1, y=2;

void demo( );

int main( )

{

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( )

{

int x=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

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

แบบฝึ1กห�ด้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);

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

แบบฝึ1กห�ด้void prevnext(int a, int& prv, int nxt)

{

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;

}

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

แบบฝึ1กห�ด้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

25 int main()26 {27 int i = 1;28 int b = g(i);29 cout << a + b + i << endl;30 return 0;31 }