1 / 43

C Programming

C Programming. Lecture no. 6: Function. ความสัมพันธ์ (Relations). ตัวอย่างในชีวิตจริง ความสัมพันธ์ระหว่างงานกับรายได้ต่อเดือน ความสัมพันธ์ระหว่างการเป็นสมาชิกกับพรรคการเมือง ความสัมพันธ์ระหว่างแม่กับลูก ความสัมพันธ์ระหว่างจำนวนเต็มสองจำนวนที่หารด้วย 5 ลงตัว. ความสัมพันธ์ (Relations).

Download Presentation

C Programming

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. C Programming Lecture no. 6: Function

  2. ความสัมพันธ์ (Relations) ตัวอย่างในชีวิตจริง • ความสัมพันธ์ระหว่างงานกับรายได้ต่อเดือน • ความสัมพันธ์ระหว่างการเป็นสมาชิกกับพรรคการเมือง • ความสัมพันธ์ระหว่างแม่กับลูก • ความสัมพันธ์ระหว่างจำนวนเต็มสองจำนวนที่หารด้วย 5 ลงตัว 310222 C Programming

  3. ความสัมพันธ์ (Relations) • คู่อันดับ (a, b) พบว่า (a, b) ≠ (b, a) • นิยาม 1. ให้ (a, b) และ (c, d) เป็นคู่อันดับใดๆ แล้ว(a, b) = (c, d) ก็ต่อเมื่อ (a=c) และ (b=d) • นิยาม 2.ให้ A และ B เป็นเซตใดๆ ผลคูณคาร์ทีเซียนของเซต A และเซต B จะเขียนแทนด้วย AxB คือ เซตของคู่อันดับ (a,b) ที่ a Є A และ b Є B นั้นคือAxB = {(a, b) | a Є A และ b Є B} 310222 C Programming

  4. ความสัมพันธ์ (Relations) • นิยาม 3.ให้ r เป็นความสัมพันธ์จาก A ไป B และ s เป็นความสัมพันธ์จาก B ไป C ความสัมพันธ์ประกอบของ r และ s เป็นความสัมพันธ์จาก A ไป C เขียนแทนด้วย s ○ r กำหนดโดยs ○ r= {(x,z)| มี y Є B ที่ (x,y) Є r และ (y,z) Є S } 310222 C Programming

  5. ฟังก์ชัน(Function) 310222 C Programming

  6. ฟังก์ชันในมุมมองของนักคณิตศาสตร์ฟังก์ชันในมุมมองของนักคณิตศาสตร์ สำหรับเซต A และเซต B ใดๆ • เราสามารถกำหนดความสัมพันธ์ระหว่างเซต A และเซต B ได้หลายรูปแบบ • สามารถนับจำนวนความสัมพันธ์ได้ ถ้าเซต A และเซต B เป็นเซตจำกัด • n(A) = m และ n(B) = n แล้ว n(A x B) = mn 310222 C Programming

  7. ฟังก์ชันในมุมมองของนักคณิตศาสตร์ฟังก์ชันในมุมมองของนักคณิตศาสตร์ • ความสัมพันธ์ระหว่างระยะทางกับเวลา • เป็นความสัมพันธ์ระหว่างเซตของเวลากับเซตองระยะทาง จะสังเกตได้ว่าเมื่อเวลาเปลี่ยนระยะทางก็จะเปลี่ยนด้วย • ความสัมพันธ์ระหว่างนักเรียนที่ได้ระดับคะแนนวิชาคณิตศาสตร์เป็น 4,3,2,1,0 เป็นความสัมพันธ์ระหว่างเซตของนักเรียนที่เรียนวิชาคณิตศาสตร์ กับ เซตผลการเรียน คือ 4,3,2,1,0 จะสังเกตได้ว่านักเรียนที่เรียนคณิตศาสตร์แต่ละคนได้รับระดับคะแนนเพียงระดับเดียว • ความสัมพันธ์แบบนี้ เราเรียกว่า ฟังก์ชัน 310222 C Programming

  8. ฟังก์ชันในมุมมองของนักคณิตศาสตร์ฟังก์ชันในมุมมองของนักคณิตศาสตร์ • นิยาม 4.กำหนดให้ A และ B เป็นเซตใดๆให้ f เป็นความสัมพันธ์จาก A ไป B จะกล่าวได้ว่า f เป็นฟังก์ชันก็ต่อเมื่อ สำหรับแต่ละ x Є A และแต่ละ y, z Є Bถ้า (x, y) Є f และ (x, z) Є f แล้ว y=z 310222 C Programming

  9. ฟังก์ชันในมุมมองของนักคณิตศาสตร์ฟังก์ชันในมุมมองของนักคณิตศาสตร์ จากนิยามและข้อสังเกตของฟังก์ชันจะกล่าวได้ว่า • ฟังก์ชัน f คือ กฎที่ได้ผลลัพธ์เพียงอย่างเดียวที่สมนัยกับการใส่ข้อมูลเข้าไปในกฎนั้นๆ Input Output โปรแกรมคอมพิวเตอร์ x y 310222 C Programming

  10. ฟังก์ชันในมุมมองของนักคณิตศาสตร์ฟังก์ชันในมุมมองของนักคณิตศาสตร์ • นิยาม 5. ให้ A และ B เป็นเซตใดๆและ f เป็นฟังก์ชัน A ไป B ถ้า (x, y) Є f เรียก y ว่าตัวแปรตามที่ขึ้นกับตัวแปรอิสระ x นิยามโดย y เป็นค่าของฟังก์ชัน f ที่ x เขียนแทนด้วย y=f(x) 310222 C Programming

  11. ฟังก์ชันในมุมมองของนักคณิตศาสตร์ฟังก์ชันในมุมมองของนักคณิตศาสตร์ • นิยาม 6.ให้ f:A->B และ g:B->C ฟังก์ชันประกอบของ f และ g เขียนแทนด้วย g ○ f กำหนดโดย(g ○ f)(a) = g(f(a)) สำหรับ a Є Aนั้นคือ (g ○ f)= {(x,y)| y Є B, (x,y) Є f และ (y,z) Є g} A B C a f(a) g(f(a)) (g○f)(a) 310222 C Programming

  12. ฟังก์ชันในมุมมองของนักคณิตศาสตร์ฟังก์ชันในมุมมองของนักคณิตศาสตร์ f(x) g(f(x)) Input โปรแกรม คอมพิวเตอร์ Output โปรแกรม คอมพิวเตอร์ Output x z y (g○f)(x) Input Output โปรแกรมคอมพิวเตอร์ x z 310222 C Programming

  13. ฟังก์ชัน (Function in C) • การออกแบบโปรแกรมในภาษาซีจะอยู่บนพื้นฐานของการออกแบบโมดูล (Module Design) • โดยการแบ่งโปรแกรมออกเป็นงานย่อย ๆ (หรือโมดูล) แต่ละงานย่อยจะทำงานอย่างใดอย่างหนึ่งเท่านั้น และไม่ควรจะมีขนาดใหญ่จนเกินไป • งานย่อยเหล่านี้เมื่อนำไปเขียนโปรแกรมในภาษาซีจะเป็นการเขียนในลักษณะของฟังก์ชัน 310222 C Programming

  14. ตัวอย่างที่ 1 โปรแกรมเพื่อบวกเลขสองจำนวนที่รับจากผู้ใช้ และแสดงผลการคำนวณ สามารถแบ่งการทำงานเป็นงานย่อยได้ดังนี้ รับข้อมูล 2 จำนวนจากผู้ใช้ บวกเลข 2 จำนวนแล้วเก็บผลลัพธ์ แสดงผลลัพธ์ของการทำงาน 310222 C Programming

  15. ตัวอย่างที่ 1 (ต่อ) จะได้ว่าโปรแกรมประกอบด้วยฟังก์ชัน 4 ฟังก์ชันคือ ฟังก์ชันหลัก ฟังก์ชันการรับข้อมูล ฟังก์ชันในการบวกเลข ฟังก์ชันแสดงผลลัพธ์ 310222 C Programming

  16. Source file Source file function function function function function function ขั้นตอนการสร้างโปรแกรมด้วยภาษา C Library file compile link Object file link Execute file link compile Object file 310222 C Programming

  17. รูปแบบของฟังก์ชัน int , char , float , double ฯลฯ แบบที่ 1 ชนิดข้อมูลที่คืนค่า ชื่อฟังก์ชัน(การประกาศตัวแปร) { การประกาศตัวแปรภายในฟังก์ชัน; คำสั่ง; return (ค่าข้อมูลที่ต้องการส่งค่ากลับ); } 310222 C Programming

  18. รูปแบบของฟังก์ชัน (ต่อ) แบบที่ 2 void ชื่อฟังก์ชัน(การประกาศตัวแปร) { การประกาศตัวแปรภายในฟังก์ชัน; คำสั่ง; } 310222 C Programming

  19. ตัวอย่างที่ 2 แสดงการทำงานของโปรแกรมการบวกเลขจำนวนจริง 2 จำนวนที่รับจากผู้ใช้ #include <stdio.h> double InputDouble ( ) { double x; printf ( “\nInput real value : “ ); scanf ( “%.2f”, &x ); return ( x ); } 310222 C Programming

  20. ตัวอย่างที่ 2(ต่อ) double SumDouble ( double x, double y ) { return ( x + y ); } void PrintOut ( double x ) { printf ( “\n Result of sum is : %.2f”, x ); } 310222 C Programming

  21. ตัวอย่างที่ 2 (ต่อ) void main ( ) { double a1, a2, sumVal; a1 = InputDouble( ); a2 = InputDouble( ); sumVal = SumDouble ( a1, a2 ); PrintOut ( sumVal ); } 310222 C Programming

  22. การประกาศโพรโทไทป์ของฟังก์ชันการประกาศโพรโทไทป์ของฟังก์ชัน การประกาศโปรโตไทป์เป็นสิ่งจำเป็นในภาษาซีเนื่องจากภาษาซีเป็นภาษาในลักษณะที่ต้องมีการประกาศฟังก์ชันก่อนจะเรียกใช้ฟังก์ชันนั้น (Pre-defined Function) 310222 C Programming

  23. จากตัวอย่างที่ 1จะเห็นว่าฟังก์ชัน main ( ) จะอยู่ใต้ฟังก์ชันอื่น ๆ ที่มีการเรียกใช้ เป็นลักษณะที่ต้องประกาศฟังก์ชันที่ต้องการเรียกใช้ก่อนจากเรียกใช้ฟังก์ชันนั้น • แต่หากต้องการย้ายฟังก์ชัน main ( ) ขึ้นไปไว้ด้านบน จะต้องมีการประกาศโปรโตไทป์ของฟังก์ชันที่ต้องการเรียกใช้ก่อนเสมอ 310222 C Programming

  24. ตัวอย่างที่ 3 แสดงการทำงานของโปรแกรมการบวกเลขจำนวนจริง2 จำนวนที่รับจากผู้ใช้ ในลักษณะที่มีการประกาศโปรโตไทป์ #include <stdio.h> double InputDouble (double ); double SumDouble ( double , double ); void PrintOut ( double ); 310222 C Programming

  25. ตัวอย่างที่ 3 (ต่อ) void main ( void ) { double a1, a2, sumVal; a1 = InputDouble( ); a2 = InputDouble( ); sumVal = SumDouble ( a1, a2 ); PrintOut ( sumVal ); } 310222 C Programming

  26. จะเห็นว่าในโปรโตไทป์ไม่มีการประกาศชื่อตัวแปร มีแต่การเขียนประเภทของตัวแปรไว้ภายในเป็นการช่วยให้คอมไพเลอร์ สามารถตรวจสอบ • จำนวนของตัวแปร • ประเภทของตัวแปร • ประเภทของการคืนค่า • ภายในโปรแกรมว่ามีการเรียกใช้งานสิ่งต่างๆเกี่ยวกับฟังก์ชัน นั้นถูกต้องหรือไม่ นอกจากนี้เราอาจจะแยกส่วน โปรโตไทป์ไปเขียนไว้ในอินคลูชไฟล์ก็ได้เช่นเดียวกัน 310222 C Programming

  27. การเรียกใช้ฟังก์ชัน การเรียกใช้ฟังก์ชันที่มีการคืนค่า จะใช้รูปแบบดังต่อไปนี้ ค่าที่รับ = ฟังก์ชัน (อาร์กิวเมนต์) ค่าที่ถูกคืนมาจากการทำงานของฟังก์ชั่น 310222 C Programming

  28. a1 ต้องมีชนิดเป็น double เนื่องจากค่าที่จะส่ง คืนกลับมาจากฟังก์ชันมีชนิดเป็น double ตัวอย่างที่ 4 • a1 = InputDouble ( ); • ใช้คู่กับโปรโตไทป์ • double InputDouble ( ); 310222 C Programming

  29. a1 และ a2 ต้องมีชนิดเป็น double เพื่อให้ตรงกับชนิดตัวแปรของอาร์กิวเมนท์ ที่ประกาศในโปรโตไทป์ ตัวอย่างที่ 5 • sumVal = SumDouble (a1,a2 ); • ใช้คู่กับโปรโตไทป์ • double InputDouble ( ); 310222 C Programming

  30. ตัวอย่างที่ 6 • PrintOut( sumVal ); • ใช้คู่กับโปรโตไทป์ • void PrintOut ( double ); ประกาศให้รู้ว่าฟังก์ชั่นนี้ไม่มีการคืนค่า 310222 C Programming

  31. ขอบเขต ( Scope) • การทำงานของโปรแกรมภาษาซี • จะทำงานที่ฟังก์ชัน main ( ) ก่อนเสมอ • เมื่อฟังก์ชัน main ( ) เรียกใช้งานฟังก์ชันอื่น ก็จะมีการส่งคอนโทรล (Control) ที่ควบคุมการทำงานไปยังฟังก์ชันนั้น ๆ จนกว่าจะจบฟังก์ชัน หรือพบคำสั่ง return 310222 C Programming

  32. ขอบเขต ( Scope)(2) • เมื่อมีการเรียกใช้งานฟังก์ชันจะมีการจองพื้นที่หน่วยความจำสำหรับตัวแปรที่ต้องใช้ภายในฟังก์ชันนั้น • เมื่อสิ้นสุดการทำงานของฟังก์ชันก็จะมีการคืนพื้นที่หน่วยความจำส่วนนั้นกลับสู่ระบบ การใช้งานตัวแปรแต่ละตัวจะมีขอบเขตของการใช้งานขึ้นอยู่กับตำแหน่งที่ประกาศตัวแปรนั้น 310222 C Programming

  33. ตัวอย่างที่ 7 จากตัวอย่างที่1 และตัวอย่างที่ 2 สามารถ แสดงขอบเขตการทำงานได้ดังนี้ step1 main ( ) a1 a1 = InputDouble( ); a2 sumVal x InputDouble ( ) 310222 C Programming

  34. ตัวอย่างที่ 7 (ต่อ) main ( ) step2 a1 a2 sumVal a2 = InputDouble( ); x InputDouble ( ) 310222 C Programming

  35. ตัวอย่างที่ 7 (ต่อ) Step3 main ( ) a1 a2 sumVal=SumDouble(a1,a2) sumVal x sumDouble ( ) y 310222 C Programming

  36. ตัวอย่างที่ 7 (ต่อ) main ( ) step4 a1 a2 sumVal PrintSum(sumVal); x PrintSum ( ) 310222 C Programming

  37. จะเห็นว่าตัวแปร x ที่ประกาศในแต่ละขั้นตอนจะทำงานอยู่ภายในฟังก์ชันที่มีการประกาศค่าเท่านั้น และใช้พื้นที่ในการเก็บข้อมูลคนละส่วนกัน ขอบเขตการทำงานของตัวแปรแต่ละตัวจะกำหนดอยู่ภายในบล็อกของคำสั่งภายในเครื่องหมายปีกกา ({ } ) หรือการประกาศในช่วงของการประกาศฟังก์ชัน เรียกตัวแปรเหล่านี้ว่า ตัวแปรโลคอล (Local Variable) 310222 C Programming

  38. นอกจากนี้สามารถประกาศตัวแปรไว้ที่ภายนอกฟังก์ชันบริเวณส่วนเริ่มของโปรแกรมจะเรียกว่า ตัวแปรโกลบอล (Global Variable) ซึ่งเป็นตัวแปรที่สามารถเรียกใช้ที่ตำแหน่งใด ๆ ในโปรแกรมก็ได้ ยกเว้นในกรณีที่มีการประกาศตัวแปรที่มีชื่อเดียวกันกับตัวแปรโกลบอลภายในบล็อกหรือฟังก์ชัน 310222 C Programming

  39. ตัวอย่างที่ 8 แสดงการทำงานของโปรแกรมในลักษณะที่มีตัวแปรโกลบอล แสดงขอบเขตการใช้งานของตัวแปรภายในโปรแกรม #include <stdio.h> int x; void func1 ( ) { x = x + 10; printf ( “func1 -> x : %d\n”, x ); } 310222 C Programming

  40. ตัวอย่างที่ 8(ต่อ) void func2 ( int x ) { x = x + 10; printf ( “func2 -> x : %d\n”, x ); } void func3 ( ) { int x=0; x = x + 10; printf ( “func3 -> x : %d\n”, x ); } 310222 C Programming

  41. ตัวอย่างที่ 8(ต่อ) void main ( ) { x = 10; printf ( “main (start) -> x : %d\n”, x ); func1 ( ); printf ( “main (after func1) -> x : %d\n”, x ); func2 ( x ); printf ( “main (after func2) -> x : %d\n”, x); func3 ( ); printf ( “main (after func3) -> x : %d\n”, x); } 310222 C Programming

  42. ตัวอย่างที่ 8(ต่อ) ผลการทำงาน main (start) -> x : 10 func1 -> x : 20 main (after func1) -> x : 20 func2 -> x : 30 main (after func2) -> x : 20 func3 -> x : 10 main (after func3) -> x : 20 310222 C Programming

  43. The End

More Related