47
Function ฟังก์ชัน 1 เรียบเรียงโดย อ.เรวดี พิพัฒน์สูงเนิน สาขาวิชาวิทยาการคอมพิวเตอร์และเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยราชภัฏอุดรธานี

ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

Function

ฟงกชน

1 เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน

Page 2: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ฟงกชน (Function) คอ?

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน2

ฟงกชน คอ ชดค าสงทเขยนขนเพอแยกการท างานออกเปนสวนยอย ๆ (Module) โดยแตละฟงกชนจะมวตถประสงคการท างานเฉพาะสวน และสามารถเรยกใชงานฟงกชนจากสวนตาง ๆ ของโปรแกรมไดตามตองการ

ในภาษา C การท างานของค าสงตาง ๆ ตองเขยนไวภายในฟงกชน โดยเฉพาะฟงกชน main() ซงเปนฟงกชนหลกทภาษา C จะเรมตนท างานจากจดน และภายในฟงกชน main() อาจจะมการเรยกใชฟงกชนอน ๆ ไดอก

Page 3: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ประโยชนของฟงกชน

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน3

ฟงกชน เปนลกษณะการเขยนโปรแกรมแบบโครงสรางทมการแยกการท างานออกเปนสวนยอย ซงมขอดกวาการเขยนโปรแกรมไวรวมกนทเดยว ดงนงายตอการตรวจสอบและการบ ารงรกษาโปรแกรมหลกเลยงการเขยนชดค าสงทใชงานบอย ๆ ในโปรแกรมซ า ๆ กนหลายครง ซงมผลท าใหโปรแกรมมขนาดใหญเปนลกษณะทดของการเขยนโปรแกรมเชงโครงสรางทควรแยกการท างานตางๆ ออกเปนสวนยอย

Page 4: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ฟงกชนในภาษา C (Function in C Language)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน4

ฟงกชนในภาษา C แบงไดเปน 2 ประเภท คอ

ฟงกชนมาตรฐาน(Standard Function)

ฟงกชนทผเขยนโปรแกรมสรางขนเอง (User-Defined Function)

Page 5: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ฟงกชนมาตรฐาน (Standard Function)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน5

ฟงกชนมาตรฐานในภาษา C เปนฟงกชนทมมาใหพรอมกบตวแปลภาษา C ตามขอก าหนด ANSI C เพอใชงานดานตาง ๆ โดยเนนทงานพนฐาน ซงจะชวยใหการเขยนโปรแกรมสะดวกมากขน ตวอยางเชน ฟงกชนค านวณทางคณตศาสตร , ฟงกชนส าหรบจดการกบขอความ , ฟงกชนจดการเวลา เปนตนฟงกชนมาตรฐานจะเกบอยใน header file (นามสกล .h) ในการเรยกใชฟงกชนมาตรฐานจะตองประกาศค าสง #include <header file> ไวทสวนหวของโปรแกรม เพอใหตวแปลภาษา C รวาภายในโปรแกรมมการเรยกใชฟงกชนทอยใน header file ดงกลาว

Page 6: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยาง

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน6

ฟงกชน sqrt อยใน math.h

ฟงกชน printf , scanfอยใน stdio.h

Page 7: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ฟงกชนทสรางขนเอง (User-Defined Function)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน7

เปนฟงกชนทผเขยนโปรแกรมสรางขนเอง เพอใหท างานทอาจะนอกเหนอจากทฟงกชนมาตรฐานมให โดยอาจจะสรางฟงกชนทมชดค าสงทมการใชงานบอย ๆ ออกเปนฟงกชน เพอจะเขยนค าสงเพยงแคครงเดยว แตสามารถเรยกใชงานไดหลายครงการแบงการท างานของโปรแกรมออกเปนสวนเลกๆ ท าใหงายและสะดวกตอการตรวจสอบ และแกไขโปรแกรม โดยเฉพาะโปรแกรมทมขนาดใหญ หรอมผเขยนรวมกนหลายคน

Page 8: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยาง

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน8

Page 9: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ฟงกชนตนแบบ (Function prototype)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน9

โดยปกตหากประกาศฟงกชนใด ๆ ไวเหนอฟงกชน main() กไมจ าเปนตองประกาศฟงกชนตนแบบ เพราะคอมไพเลอรจะรจกฟงกชนทสรางขนเองนนกอน แตถายายต าแหนงการประกาศฟงกชนทสรางขนเอง ไปไวหลงฟงกชน main() และถามการเรยกใชงานฟงกขนนน ๆ ภายในฟงกชน main() คอมไพเลอรจะไมรจกฟงกชนนนเพราะประกาศไวทหลง ดงนนจงควรประกาศฟงกชนตนแบบกอน เพอเปนการบอกใหคอมไพเลอรรวาจะมการใชฟงกชนนน และเปนการจองพนทในหนวยความจ าส าหรบฟงกชนนน ๆ

Page 10: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

รปแบบการประกาศฟงกชนตนแบบ

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน10

type : ชนดขอมลของฟงกชนทสงกลบคนมา เชน int , char เปนตน หากไมมการสงคากลบใชค าสงวนคอ void หากไมระบจะมคา default เปน int function-name : คอชอของฟงกชน ตงตามกฎการตงชอ type arg-1,type arg-2, … : รายการพารามเตอร พรอมระบชนดขอมลของแตละตว ถามมากกวา 1 รายการใหคนดวยเครองหมาย , ระบภายในวงเลบ ( ) หลงชอฟงกชน และจบดวยเครองหมาย ;

type function-name(type arg-1,type arg-2, …);

Page 11: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

รปแบบการประกาศฟงกชนในภาษา C

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน11

type function-name (type arg-1 , type arg-2, …)

{

local variable declaration ;

statement-1 ;

statement-2;

statement-n;

return(value);

}

type : ชนดของฟงกชน พจารณาจากผลลพธทไดถาไมมการสงคากลบ ใหก าหนดเปน void

Function-name : ชอฟงกชน

type arg-1 , type arg-2 : ก าหนดชนดของอารกวเมนตทจะสงเขามาใหกบฟงกชน ถาไมตองการอารกวเมนตใด ๆ ใหก าหนดเปน void หรอวงเลบวาง ๆ

Local variable declaration : ประกาศตวแปรไวใชภายในฟงกชน

Return(value) : คาทสงกลบไปยงสวนทเรยกฟงกชน ตองมชนดเดยวกบ type ของฟงกชน

Page 12: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

การเรยกใชงานฟงกชน

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน12

รปแบบ

สามารถเรยกใชงานโดยระบชอฟงกชน ตามดวยรายการพารามเตอร ซงสวนนเรยกวา actual parameter หรอ อารกวเมนต (argument) ภายในวงเลบ () ถามอารกวเมนตมากกวา 1 รายการใหคนดวยเครองหมาย , ถาไมมอารกวเมนตเลยอาจใชค าสงวน void หรอเวนวางกได

function-name(arg1 , arg2,…);

Page 13: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ค าสง return

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน13

return จะเปนขอความสงทใหหยดกระท าการ (execute) ของฟงกชน และสงการควบคมกลบไปยงฟงกชนทเรยกได รปแบบ

expression : คอ นพจนทจะสงคากลบคน จะตองมชนดเดยวกบฟงกชน ถาไมมการสงคากลบคนอาจจะเขยน return ; ถาไมระบ จะมคา default เปน int return จะสงคากลบไดเพยง 1 คาเทานน

return (expression);

Page 14: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

แผนภาพการเรยกใชงานฟงกชน

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน14

main(){

one();…two();

}

Function two(){

// function body}

เรยกใชฟงกชน one

Function one(){

// function body}

เรยกใชฟงกชน two

เมอแตละฟงกชนท างานเสรจ กจะสงการควบคมกลบมาท

ฟงกชนหลก

Page 15: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยางฟงกชน(ทไมมการรบ/สงคา)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน15

Page 16: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยางฟงกชน

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน16

ประกาศฟงกชนตนแบบ

เรยกใชฟงกชน find_bmi

สวนหวและสวนการท างานของฟงกชน find_bmi

Page 17: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน17

ผลลพธ

Page 18: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

กฏเกณฑในการสง Actual parameter ไปยง Formal parameter

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน18

จ านวน actual parameter และ formal parameter ตองเทากน การสงคาระหวางพารามเตอรทงสอง จะกระท าแบบหนงตอหนง

ชนดของขอมลระหวาง actual parameter กบ formal parameter ในแตละคตองเหมอนกน ชอของ actual parameter กบ formal parameter ในแตละคจะเหมอนหรอตางกนกได

Page 19: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

การสงผานคาระหวางฟงกชนทเรยกใชและฟงกชนทถกเรยก

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน19

การสงคาระหวาง actual parameter กบ formal parameter ในภาษา C จะแบงออกเปน 2 แบบ คอ

การผานโดยระบคา (pass by value) การผานโดยการอางอง (pass by reference)

Page 20: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

การผานโดยระบคา (pass by value)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน20

จะเปนการส าเนาขอมลจาก actual parameter ไปยง formal parameter โดยคาของ formal parameter ทมการเปลยนแปลงภายในฟงกชนทถกเรยกใช จะไมมผลกระทบตอขอมลของ actual parameter ในบางครงเราจะเรยกวาเปนการสงขอมลแบบทางเดยว

Formal parameter

Actual parameter

Page 21: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

กฎเกณฑในการสงพารามเตอรโดยวธการผานโดยระบคา

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน21

actual parameter กบ formal parameter ในแตละค จะตองมชนดขอมลเหมอนกน formal parameter แตละตว หามเปนตวช (pointer) actual parameter อาจจะเปนคาคงตว, ตวแปร หรอ นพจน แตละครงทการควบคมโปรแกรมถกสงไปใหฟงกชนทถกเรยกใช จะมการส าเนาคาของแตละ actual parameter ไปยง formal parameter ทสอดคลองกน การเปลยนแปลงคาใด ๆ ทถกส าเนามาในฟงกชนทถกเรยกใช จะไมมผลกระทบตอ actual parameter ทสอดคลองกน ดงนน การผานคาแบบนจะใชเฉพาะสงคาไปยงฟงกชนทถกเรยกเทานน

Page 22: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยางการสงผานคากลบมายงฟงกชนทเรยกใช

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน22

ผลลพธ

Page 23: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยางการสงผานคากลบมายงฟงกชนทเรยกใช

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน23

main(){

…x = callme ();

}

int callme (void){

return (5);}

เรยกใชฟงกชน callme()

สงคา 5 กลบคน

Page 24: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

การสงผานโดยการอางอง (pass by reference)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน24

จะเปนการสงคาทอยของ actual parameter ไปยง formal parameter นนคอ ทง actual parameter กบ formal parameter จะมทอยของขอมลอยทต าแหนงเดยวกน ดงนนถาขอมลของ formal parameter มการเปลยนแปลงคาภายในฟงกชนทถกเรยกใชกจะมผลกระทบตอขอมลของ actual parameter ในบางครงเราจะเรยกวา เปนการสงขอมลแบบสองทาง ดงนน ถาเราตองการสงขอมลกลบมากกวา 1 คา เราจะใชวธการผานโดยการอางอง

Page 25: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

กฎเกณฑในการสงพารามเตอรโดยวธการผานโดยการอางอง

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน25

actual parameter กบ formal parameter ในแตละคจะตองมชนดขอมลเหมอนกน actual parameter จะตองเปนทอยของตวแปร โดยจะมเครองหมาย ampersand (&) เตมหนา formal parameter แตละตว ตองมเครองหมาย * เตมหนา ในสวนของฟงกชนตนแบบ formal parameter แตละตวจะตองมเครองหมาย * เตมหนา การเขาถงขอมลในต าแหนงหนวยความจ าของ actual parameter เราจะตองใชชอทสอดคลองกบ formal parameter เตมหนาดวยเครองหมาย * โดยเราจะเรยกเครองหมาย * นวา ตวด าเนนการเขาถงโดยออม (indirection operator)

Page 26: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยางการสงผานคาโดยการอางอง

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน26

ผลลพธ

Page 27: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยางการสงผานคาโดยการอางอง

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน27

main(){

int x; x

callme (&x) ;

&x

void callme (int *p)

p&x

ต าแหนงทอยของตวแปร x เกบไว

ทน

{ *p = 5;

}

5

printf(“value is %d”,x);

Page 28: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ขอบเขตของตวแปร (Scope of variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน28

ในภาษา C กอนจะใชงานตวแปรในโปรแกรมตองประกาศตวแปรนน ๆ กอน เพอก าหนดบรเวณทแนนอนในโปรแกรม ซงบรเวณดงกลาวเรยกวา ขอบเขตของตวแปร ขอบเขตของตวแปรใด ๆ จะเรมตนทจดประกาศ และจดสนสดของตวแปร ขนอยวาประกาศตวแปรนนบรเวณใดในโปรแกรมและประกาศอยางไร ขอบเขตของตวแปรสวนกลาง จะมจดเรมตนทตวแปรถกประกาศ และสนสดเมอจบโปรแกรม ดงนนเราจะเรยกตวแปรสวนกลางนวา ขอบเขตของแฟม (file scope)

Page 29: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ขอบเขตของตวแปร (Scope of variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน29

ขอบเขตของตวแปรเฉพาะท จะมจดเรมตนทตวแปรถกประกาศ และมจดสนสดท block ของฟงกชนทตวแปรนประกาศอย ดงนนเราจะเรยกตวแปรเฉพาะทนวา ขอบเขตของ block (block scope) หรอ ขอบเขตเฉพาะท (local scope) formal parameter กเปนตวแปรเฉพาะทเชนกน เพยงแตวาเปนตวแปรทถกประกาศไวในรายการของฟงกชนทถกเรยกใช ดงนนจดเรมตนของตวแปรเฉพาะทจะเรมตนทรายการน และมจดสนสดท block ของฟงกชน ดงนนเราจะเรยกตวแปรเฉพาะทของ formal parameter นวา ขอบเขต parameter (parameter scope)

Page 30: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรสวนกลาง (Global variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน30

ตวแปรสวนกลาง เปนตวแปรททก ๆ ฟงกชนในโปรแกรมสามารถเรยกใชได โดยตวแปรน จะมชวงชวต (lifetime) อยตลอดไป จนกระทงยตโปรแกรมจงจะถกท าลาย ตวแปรนจะตองถกประกาศภายนอกฟงกชน และกอนฟงกชน main ()

Page 31: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรสวนกลาง (Global variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน31

Variable

main()OK

OK

OK

ตวแปร หรอ คาคงทใด ๆ ทประกาศกอนและนอก main() ทกฟงกชนสามารถน าไปใชได

Page 32: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรเฉพาะท (Local variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน32

ตวแปรเฉพาะท จะเปนตวแปรทถกใชเฉพาะภายในฟงกชนของตวมนเอง และไมเปนทรจกของฟงกชนอน ๆ เมอฟงกชนนถกเรยกใช ตวแปรเฉพาะททกตวทอยภายในฟงกชนน จะถกก าหนดเนอทใหกบตวแปรแตละตว โดยใชหนวยความจ าทเรยกวา สแตก (stack) ชวงชวตของตวแปรเหลานจะสนสดและถกท าลายเมอสนสดฟงกชนน ตวแปรนจะตองถกประกาศอยภายในแตละฟงกชน และ formal parameter กจะถอวาเปนตวแปรเฉพาะทดวย

Page 33: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรเฉพาะท (Local variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน33

variable

?

?

ตวแปร หรอ คาคงทใด ๆ ทประกาศในฟงกชนน จะไมเปนทรจกของฟงกชนอน

Page 34: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

หนวยเกบแบบของตวแปร (Storage class)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน34

o ตวแปรแตละตวในภาษา C จะมประเภทหนวยเกบทแตกตางกน เพอทจะใชก าหนด ความมองเหนได (visibility), ชวงชวต (lifetime) และต าแหนง (location)

oภาษา C มประเภทหนวยเกบของตวแปร 4 แบบตวแปรอตโนมต (automatic variable) ตวแปรสถต (static variable) ตวแปรภายนอก (external variable) ตวแปรรจสเตอร (register variable)

Page 35: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรอตโนมต (automatic variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน35

ในภาษา C ตวแปรใด ๆ ทถกประกาศอยภายในฟงกชน รวมทงรายการของ formal parameter จะเปนตวแปรเฉพาะท (local variable) และจะถกก าหนดใหเปนตวแปรอตโนมต โดยจะมการระบโดยใชค าสงวน auto ถาไมระบกจะม default เปน auto จะมขอบเขตและชวงชวตอยภายใน block ของฟงกชนทตวแปรนถกประกาศเทานน

Page 36: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรอตโนมต (automatic variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน36

ตวแปร value จะเปนตวแปรอตโนมต เนองจากมการระบค าสงวน auto บางครงเราไมจ าเปนตองเขยน auto กได เนองจากในภาษา C จะม default เปน auto

Page 37: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรสถต (static variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน37

ในภาษา C ตวแปรสถตกเปนตวแปรเฉพาะทเหมอนกน แตไมเหมอนตวแปรเฉพาะท โดยทวไปคอ ตวแปรสถตจะมชวงชวตอยจนกวาโปรแกรมจะยต ถงแมวาฟงกชนทถกเรยกใชจะสนสดไปแลวกตาม แตตวแปรสถตนยงไมถกท าลาย และยงจ าคาปจจบนอย และมขอบเขตอยภายในฟงกชนทตวแปรสถตนอย โดยปกตแลวเมอสนสดฟงกชนทตวแปรเฉพาะทนอย ตวแปรเฉพาะททกตวกจะถกท าลายหมด

Page 38: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรสถต (static variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน38

ผลลพธ

Page 39: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยาง การใชตวแปร automatic กบตวแปร static ในฟงกชน trystat

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน39

Page 40: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยาง การใชตวแปร automatic กบตวแปร static ในฟงกชน trystat

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน40

o ตวอยางโปรแกรมน ในฟงกชน trystat มการประกาศตวแปรสถตคอ stay และตวแปรอตโนมต คอ fade o ความแตกตางของทง 2 ตวแปร คอ เมอสนสดการเรยกใชฟงกชน trystat คาของตวแปร fade จะถกท าลายไป แตคาของตวแปร stay ยงคงอย เนองจากไดก าหนดใหเปนตวแปรสถตo แตตวแปรทงสองกยงคงมขอบเขตภายในฟงกชนนเหมอนกน

ผลลพธ

Page 41: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรภายนอก (external variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน41

ตวแปรทถกประกาศไวภายนอกฟงกชน ในภาษา C จะก าหนดใหเปนตวแปรภายนอก และภายในแตละฟงกชนกสามารถประกาศใหเปนตวแปรภายนอกไดเชนกน โดยระบค าสงวนวา extern ขอบเขตและชวงชวตของตวแปรภายนอกน จะเรมตนทจดประกาศตวแปรไปสนสดทโปรแกรมยต

Page 42: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรภายนอก (external variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน42

นยามการประกาศอางองการประกาศ

Page 43: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรภายนอก (external variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน43

ผลลพธ

• ตวอยางโปรแกรมน จะมตวแปรประกาศ Units ซ ากนอย 3 ท คอ อยกอนฟงกชน main(), อยภายในฟงกชน main() แตระบเปนตวแปรภายนอก และอยภายในฟงกชน critic() และระบเปนตวแปรภายนอก • ถาภายในฟงกชน main () และ critic () ไมไดระบเปนตวแปรภายนอก เราจะถอวาเปนตวแปรเฉพาะท • แตการทเราระบเปนตวแปรภายนอกจดประสงคเพอจะบอกใหคอมไพเลอรรวา เราตองการอางถงตวแปร Units ทถกประกาศอยภายนอกฟงกชน หรอบางครงอาจจะนอกโปรแกรมกได • ดงนน ตวแปร Units ทประกาศอยกอนฟงกชน main() เราจะเรยกวา เปนนยามการประกาศ (defining declaration) และตวแปรภายนอกทงสอง จะเรยกวาเปนการอางอง การประกาศ (referencing declaration)

Page 44: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวแปรรจสเตอร (register variable)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน44

โดยปกตตวแปรใด ๆ จะถกเกบไวในหนวยความจ าหลก แตถาเราตองการใหตวแปรไปอยหนวยความจ าประเภทรจสเตอร เพอตองการเขาถงตวแปรเหลานนไดรวดเรวยงขน เราจะตองระบค าสงวน register ไวหนาตวแปร

Page 45: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ฟงกชนเรยกซ า(Recursive function)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน45

ฟงกชนเรยกซ า เปนฟงกชนทมการเรยกใชฟงกชนตวมนเอง ซงแบงออกเปน 2 แบบ คอ

1. แบบโดยตรง (Direct)2. แบบโดยออม (Indirect)

Page 46: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ฟงกชนเรยกซ า(Recursive function)

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน46

main(){

myself();}

myself(){

myself();}

แบบโดยตรง

แบบโดยออม

main(){

first();}

first(){

second();}

second(){

first();}

Page 47: ฟังก์ชัน - sci.udru.ac.thsci.udru.ac.th/websci/download/com/rewadee/com_program/function.pdf · ฟังก์ชันมาตรฐานจะเก็บอยู่ใน

ตวอยาง Recursive function

เรยบเรยงโดย อ.เรวด พพฒนสงเนน สาขาวชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน47