77
Structure Programming กกกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกกกกก 12 กกกกกกกก (Function)

Structure Programming การเขียน โปรแกรม เชิงโครงสร้าง

Embed Size (px)

DESCRIPTION

Structure Programming การเขียน โปรแกรม เชิงโครงสร้าง. สัปดาห์ที่ 12 ฟังก์ชัน (Function). objectives. เพื่อให้นิสิตรู้จักและเข้าใจ การนิยามและการเขียนฟังก์ชัน ในภาษาซี สามารถเขียน ฟังก์ชันร่วมกับคำสั่งทำซ้ำ อาเรย์ ตัวแปรชี้ตำแหน่ง ตัวแปรชนิดโครงสร้าง ในภาษาซีได้อย่างมีประสิทธิภาพ - PowerPoint PPT Presentation

Citation preview

Structure Programmingการเขี�ยนโปรแกรมเชิ�งโครงสร�าง

ส�ปดาห์�ที่�� 12ฟั�งก�ชิ�น (Function)

objectives

เพื่��อให์�น�ส�ตร!�จั�กและเขี�าใจัการน�ยามและการเขี�ยนฟั�งก�ชิ�นในภาษาซี�

สามารถเขี�ยนฟั�งก�ชิ�นร)วมก�บค,าส��งที่,าซี,-า อาเรย� ต�วแปรชิ�-ต,าแห์น)ง ต�วแปรชิน�ดโครงสร�างในภาษาซี�ได�อย)างม�ประส�ที่ธิ�ภาพื่

สามารถน,าความร!�เร��องฟั�งก�ชิ�นไปประย0กต�เพื่��อแก�ไขีโจัที่ย�ป�ญห์าในชิ�ว�ตประจั,าว�นได�ได�อย)างถ!กต�องเห์มาะสม

Outline

Function1

pp2

Function Format Function Format3

Passing ParametersPassing Parameters4

Assignment5

User-Defined Function

What is function?

ฟั�งก�ชิ�น ค�อ ชิ0ดค,าส��งขีองการที่,างานที่��ถ!กเขี�ยนขี2-นให์�โปรแกรมเมอร�สามารถเร�ยกใชิ�งานได�โดยง)าย

** ฟั�งก�ชิ�น ค�อ ชิ0ดขีองการที่,างาน** ฟั�งก�ชิ�น ถ!กเร�ยกใชิ�งานได�

Why the function is essential?

ป�ญห์าที่��เก�ดขี2-นในการพื่�ฒนาโปรแกรมที่��ซี�บซี�อนโปรแกรมเมอร�ไม)สามารถที่ราบการที่,างานขีองระบบโดยละเอ�ยดได� เชิ)น ไม)ที่ราบกระบวนการส)งขี�อม!ลผ่)านเคร�อขี)าย แต)ต�องเขี�ยนโปรแกรมเพื่��อเชิ��อมต)อระบบเคร�อขี)ายโปรแกรมเมอร�ไม)สามารถที่ราบขี�-นตอนการที่,างานขีองคอมพื่�วเตอร�ที่�-งห์มดได� เชิ)น ที่,าอย)างไรต�วอ�กษรจั2งปรากฏในห์น�าจัอภาพื่ได�โปรแกรมบางโปรแกรมม�การที่,างานที่��ซี�บซี�อน และการที่,างานซี�บซี�อนน�-นถ!กเร�ยกใชิ�งานบ)อยคร�-ง เชิ)น การห์าผ่ลล�พื่ธิ�ที่างว�ที่ยาศาสตร� การว�เคราะห์�ขี�อม!ลขีนาดให์ญ)เป7นต�น

Solution

ว�ธิ�การแก�ไขีเพื่��อให์�โปรแกรมเมอร�สามารถที่,างานได�โดยไม)จั,าเป7นต�องที่ราบรายละเอ�ยดการที่,างานที่�-งห์มดขีองระบบ จัะให์�โปรแกรมเมอร�ที่��ที่ราบการที่,างานโดยละเอ�ยดขีองกระบวนการต)างๆ จัะเขี�ยนชิ0ดค,าส��งในร!ปแบบขีอง ฟั�งก�ชิ�น แล�วแจักจั)ายให์�โปรแกรมเมอร�อ��นๆ ได�ใชิ�งานโปรแกรมเมอร�สามารถเร�ยกใชิ�ฟั�งก�ชิ�นโดยที่ราบเพื่�ยงว�ธิ�การใชิ�งาน และผ่ลล�พื่ธิ�ที่��เก�ดขี2-นห์ล�งจัากเร�ยกใชิ�งานฟั�งก�ชิ�นเที่)าน�-น• เช่�น โปรแกรมเมอร ที่��ไม�ที่ราบว่�าที่�าอย่�างไรตั�ว่อ�กษรจึ�ง

จึะปรากฎหน าจึอ สามารถใช่ คำ�าส��ง printf ได้ เลย่ โด้ย่โปรแกรมเมอร จึะที่ราบเพี�ย่งแคำ� การเร�ย่ก printf จึะที่�าให ม�ตั�ว่อ�กษรปรากฎบนหน าจึอได้ เที่�าน�(น

The Advantage of Function

ขี�อด�ขีองฟั�งก�ชิ�นที่,าให์�โปรแกรมเมอร�สามารถพื่�ฒนาโปรแกรมได�โดยง)าย โดยโปรแกรมเมอร�ไม)จั,าเป7นต�องที่ราบว)าการที่,างานขีองฟั�งก�ชิ�นที่,างานอย)างไรที่ราบเพื่�ยงผ่ลล�พื่ธิ�ขีองการที่,างานเที่)าน�-น

โปรแกรมเมอร�สามารถเขี�ยนโปรแกรมให์�ม�การที่,างานที่��ซี�บซี�อนได� โดยไม)จั,าเป7นต�องเขี�ยนโปรแกรมส)วนที่��ซี�บซี�อนน�-นห์ลายๆ คร�-ง

โปรแกรมเมอร�สามารถออกแบบฟั�งก�ชิ�นได�ตามความต�องการขีองโปรแกรมเมอร�

Type of Function

FUNCTIONS IN C

FUNCTIONS IN C

C STANDARDLIBRARY

C STANDARDLIBRARY

PROGRAMMER DEFINED FUNCTION

PROGRAMMER DEFINED FUNCTION

กล0)มฟั�งก�ชิ�นมาตรฐาน (Standard Library Functions)• เป7นฟั�งก�ชิ�นที่��ม�อย!)ใน Library มาตรฐานขีองภาษาซี�

มาตรฐาน ANSI C ม� 15 ประเภที่• ใชิ� Preprocessor #include อ�างถ2ง Library ที่��เก:บ

ฟั�งก�ชิ�นมาตรฐาน• เชิ)น #include <stdio.h>

ฟั�งก�ชิ�นที่��ผ่!�ใชิ�ก,าห์นดเอง (User-defined Functions)• เป7นฟั�งก�ชิ�นที่�� programmer เขี�ยนขี2-นมาเอง เพื่��อที่,างาน

เฉพื่าะเร��อง• ถ�าอย!)ในไฟัล�อ��นต�องใชิ� preprocessor #include เชิ)น

เด�ยวก�น แต)อย!)ใน แที่น “ ” < >• เชิ)น #include “mylib.h”• ถ�าไม)ก,าห์นด Path จัะห์มายถ2งไฟัล� mylib.h อย!)ใน

directory เด�ยวก�นก�บโปรแกรมขีองเรา

Type of Function (cont.)

Standard Library Function

ฟั�งก�ชิ�นไลบราร�มาตรฐาน (Standard Library Function) เป7นฟั�งก�ชิ�นที่��ม�อย!)แล�วเก:บไว�ใน Library ในการใชิ�งานต�อง include ก)อน Include directive ค�อค,าส��งที่��เป7นการน,าเอา header file มารวมไว�ก�บไฟัล�ที่��เขี�ยนการ include directives จัะเป7นเห์ม�อนการประกาศให์�ก�บ compiler ที่ราบว)าจัะใชิ�ค,าส��ง ใน Library น�-นๆ เชิ)น การใชิ�ค,าส��ง sin() ซี2�งอย!)ใน math.h จัะต�องม�การประกาศ Library ก)อนเสมอ ด�งต�วอย)าง

#include <math.h>

ชิ��อไฟัล�ส)วนห์�ว

การที่,างานขีองฟั�งก�ชิ�น

assert.h

ประกาศมาโครและขี�อม!ลที่��ใชิ�ในการตรวจัสอบ และชิ)วยการแก�ไขีขี�อผ่�ดพื่ลาดขีองโปรแกรม

(debugging)

ctype.h ประกาศต�วแบบขีองฟั�งก�ชิ�น ที่��ใชิ�ในการตรวจัสอบชิน�ดขีองต�วอ�กษร

และแปลงต�วอ�กษรระห์ว)างต�วพื่�มพื่�เล:กก�บต�วพื่�มพื่�ให์ญ)errno.h ประกาศค)าคงที่��และต�วแปรภายนอกที่��ใชิ�ในการรายงานขี�อ

ผ่�ดพื่ลาดfloat.h ประกาศมาโครและค)าคงที่��ส,าห์ร�บการก,าห์นดขีนาดและ

การจั�ดการก�บเลขีที่ศน�ยมlimits.h ประกาศมาโครและค)าคงที่��ส,าห์ร�บการก,าห์นดขีนาดและ

การจั�ดการก�บเลขีจั,านวนเต:มlocale.h ประกาศต�วแบบขีองฟั�งก�ชิ�นและขี�อม!ลที่��ใชิ�ในการก,าห์นด

ค)าขี�อม!ลในที่�องถ��น เชิ)น ระบบว�น เวลา และ สก0ลเง�น เป7นต�น

math.h ประกาศต�วแบบขีองฟั�งก�ชิ�นที่��เก��ยวก�บการค,านวณที่างคณ�ตศาสตร�

time.h ประกาศต�วแบบขีองฟั�งก�ชิ�นและขี�อม!ลที่��เก��ยวก�บการจั�ดการว�นที่��และเวลา

Standard Library Function (cont.)

Standard Library Function (cont.)ชิ��อไฟัล�ส)วนห์�ว

การที่,างานขีองฟั�งก�ชิ�น

setjump.h

ประกาศต�วแบบขีองฟั�งก�ชิ�นและขี�อม!ลที่��เก��ยวก�บการกระโดดไปที่,างานที่��ส)วนขีองโปรแกรมแที่นการเร�ยกใชิ�ฟั�งก�ชิ�นแบบปกต�

signal.h ประกาศต�วแบบขีองฟั�งก�ชิ�น มาโครและค)าคงที่�� ส,าห์ร�บการจั�ดการก�บส�ญญาณที่��ส)งมาให์�ก�บซี�พื่�ย!ระห์ว)างการที่,างาน

stdarg.h

ประกาศมาโครที่��ใชิ�จั�ดการก�บล,าด�บขีองอาร�ก�วเมนต�ที่��ส)งให์�ก�บฟั�งก�ชิ�น ในกรณ�ที่��ไม)ร!�จั,านวนขีองอาร�ก�วเมนต�ที่��แน)นอน

stddef.h

ประกาศค)าคงที่��และต�-งชิ��อชิน�ดขี�อม!ลแที่นชิน�ดขี�อม!ลแบบปกต� ส,าห์ร�บการที่,างานเฉพื่าะเร��อง

stdio.h ประกาศต�วแบบขีองฟั�งก�ชิ�นและขี�อม!ลที่��เก��ยวก�บการร�บและแสดงผ่ลแบบมาตรฐาน

stdlib.h ประกาศต�วแบบขีองฟั�งก�ชิ�นและขี�อม!ลที่��เก��ยวก�บการที่,างานในด�านอ��นๆ นอกเห์น�อจัากกล0)มฟั�งก�ชิ�นที่��กล)าวมา เชิ)น การแปลงระห์ว)างค)าต�วเลขีและขี�อความ และ การส0)มค)าต�วเลขี เป7นต�น

string.h ประกาศต�วแบบขีองฟั�งก�ชิ�นที่��ใชิ�ในการจั�ดการก�บสตร�ง

How to use Standard Library Function?

การเร�ยกใชิ� Standard Library Function ม�ขี�-นตอนด�งน�-• ที่ราบว)าโปรแกรมที่��เขี�ยนต�องการการที่,างานอะไร• การที่,างานด�งกล)าวค�อฟั�งก�ชิ�นชิ��ออะไร• ที่ราบ header file ที่��เป7นสารบ�ญขีองค,าส��ง• Include header file น�-นๆ • เร�ยกใชิ�ฟั�งก�ชิ�นในโปรแกรม

Example 1

#include<stdio.h>#include<conio.h>#include<math.h>

int main(){

double rad = -1.0;do {

printf ( "Sine of %f is %f\n", rad, sin(rad));

rad += 0.1;} while (rad <= 1.0);

return 0;}

Mathematics Function

sin(var);cos(var);tan(var);sqrt(var);pow(var1,var2);log(var);log10(var);exp(var);fabs(var);

#include<math.h>

Function Descriptionsin(x) sine ขีอง x, x ม�ห์น)วยเป7นเรเด�ยนcos(x) cosine ขีอง x, x ม�ห์น)วยเป7นเรเด�ยนtan(x) tangent ขีอง x, x ม�ห์น)วยเป7นเรเด�ยนsqrt(x) รากที่��สองขีอง x, x>=0pow(x,y) x ยกก,าล�ง ylog(x) logarithm ฐาน e ขีอง x, x>=0log10(x) logarithm ฐาน 10 ขีอง x, x>=0exp(x) e ยกก,าล�ง xabs(x) ค)าส�มบ!รณ�ขีอง x, x เป7นเลขีจั,านวนเต:มfabs(x) ค)าส�มบ!รณ�ขีอง x, x เป7นเลขีจั,านวนจัร�ง

Mathematics Function (cont.)

Example 2

#include<stdio.h>#include<math.h>int main(){

float a = 3.14;float b = -123.456;float c = 2.7;int d = -2000;printf ("%.3f \n", sin(a));printf ("%.3f \n", cos(a));printf ("%.3f \n", tan(a));printf ("%.3f \n", sqrt(a));printf ("%.3f \n", pow(a,c));printf ("%.3f \n", log(a));printf ("%.3f \n", log10(a));printf ("%.3f \n", exp(a));printf ("%.3f \n", fabs(b));printf ("%d \n", abs(d));return 0;

}

//ผ่ลล�พื่ธิ� 0.002-1.000-0.0021.77221.9641.1440.49723.104123.4562000

String Function

strcpy(str1, str2);strcat(dest1, src2);strcmp(dest1, src2);strcmpi(str1, str2);strlen(str);

#include<string.h>

tolower(ch);toupper(ch);

#include<ctype.h>

Function Descriptionฟั�งก�ชิ�นส,าห์ร�บอ�กขีระ – string.hstrcpy(str1, str2) ค�ดลอกขี�อความจัาก str2 ไปเก:บที่�� str1strcat(str1, str2) ต)อขี�อความใน str1 ด�วย str2strcmp(str1, str2) เปร�ยบเที่�ยบต�วอ�กษรในขี�อความ

ถ�า str1 = str2 จัะได� 0strlen(str) ห์าความยาวขี�อความฟั�งก�ชิ�นส,าห์ร�บอ�กขีระ – ctype.htolower(ch) เปล��ยนอ�กขีระเป7นต�วพื่�มพื่�เล:กtoupper(ch) เปล��ยนอ�กขีระเป7นต�วพื่�มพื่�ให์ญ)

String Function (cont.)

#include <stdio.h>#include <string.h>#include <ctype.h>

int main(void){

char string[10];char *str = "Abc";

//strcpystrcpy(string, str);printf("%s\n", string);

//strcatstrcat(string, "Def");printf("%s\n", string);

//strcmp and strcmpiprintf("%d\n",strcmp(str,

"abc"));printf("%d\n",strcmpi(str,

"abc"));

//ผลล�พีธ์  AbcAbcDef-106aBcDef

//strlenprintf("%d\n",strlen

(string));

//tolower and toupperstring[0] =

tolower(string[0]);string[1] =

toupper(string[1]);printf("%s\n", string);return 0;

}

Example 3

Size of Variable Function

sizeof(x) ห์าขีนาดพื่�-นที่��ในห์น)วยความจั,าที่��เก:บต�วแปร ม�ห์น)วยเป7น byte, x ค�อต�วแปรที่��ต�องการห์าขีนาด ไม)ต�องม� include ใดๆ เพื่��ม

#include <stdio.h>#include <conio.h>

void main() { int age = 14; float grade = 4.00; char song[] = "More than word"; printf("size of age = %d bytes\n", sizeof(age)); printf("size of grade = %d bytes\n", sizeof(grade)); printf("size of song = %d bytes\n", sizeof(song)); printf("size of double = %d bytes\n", sizeof(double));}

size of age = 2 bytessize of grade = 4 bytessize of song = 15 bytessize of double = 8 bytes

Outline

Function1

pp2

Function Format Function Format3

Passing ParametersPassing Parameters4

Assignment5

User-Defined Function

User-Defined Function

เน��องจัาก Standard Library Function ที่�-งห์มด เป7นฟั�งก�ชิ�นมาตรฐานที่��ม�เฉพื่าะการที่,างานพื่�-นฐานต)างๆ เที่)าน�-น

ห์ากต�องการฟั�งก�ชิ�นที่��ม�การที่,างานเฉพื่าะก�จั โปรแกรมเมอร�ต�องเขี�ยนฟั�งก�ชิ�นขี2-นมาเอง

ขี�อก,าห์นดพื่�-นฐานขีอง User-defined Function

1 .ต�องม�การประกาศ function prototype ที่��ต�นโปรแกรมเสมอ จั2งจัะเร�ยกใชิ�งาน function น�-นๆ ได� (เป7นการบอก Compiler ว)าค,าส��งด�งกล)าวค�อฟั�งก�ชิ�น ไม)ใชิ) syntax error)

2. ต�องม�การเขี�ยนฟั�งก�ชิ�นตามโครงสร�างที่��ได�ประกาศไว�ใน function prototype เที่)าน�-น

User-Defined Function (cont.)

#include<file.h>type function_name(type);type variableint main(){ type variable; statement-1; ... statement-n; return 0;}type function_name(type variable){ statement-1; ... statement-n; return(var);}

พีร�โปรเซสเซอร ได้เร,คำที่�ฟตั�ว่แปรช่น.ด้โกบอล

ฟ/งก ช่�นหล�ก

ฟ/งก ช่�นย่�อย่

ส�ว่นตั�ว่โปรแกรม

ส�ว่นห�ว่โปรแกรม

ตั�ว่แปรช่น.ด้โลคำอลคำ�าส��ง

ฟ/งก ช่�นโพีรโที่รไที่พี

User-Defined Function (cont.)

ฟั�งก�ชิ�น : กล0)มค,าส��งที่,างานที่��ม�การร�บค)าแล�วที่,าตามค,าส��งในฟั�งก�ชิ��น และม�การส)งค)ากล�บ (return)

Functionร�บคำ�ามา ส�งคำ�ากล�บProcess (ที่�างาน)

Return_Type Function_name(Type variable)

User-Defined Function (cont.)

Functionการเขี�ยนฟั�งก�ชิ�นโดยที่��ไม)ต�องม�การ

ประกาศก)อนสามารถประกาศต�วแปรไว�ใชิ�งานเฉพื่าะใน

ฟั�งก�ชิ�นได�ฟั�งก�ชิ�นประกอบไปด�วย• ค,าส��ง (Statement) : การที่,างาน

อย)างห์น2�ง เร�ยงก�นไป•Return : การค�นค)าที่��เป7นผ่ลล�พื่ธิ�

การที่,างานขีองฟั�งก�ชิ�นFunction Main

ฟั�งก�ชิ�นที่��ที่0กโปรแกรมที่��เร�ยกที่,างานได�ต�องม�

โปรแกรมจัะเร��มที่,างานจัากฟั�งก�ชิ�น main ก)อน

ฟั�งก�ชิ�น main จัะม�การเร�ยกการที่,างานขีองฟั�งก�ชิ��นอ��นๆ

User-Defined Function (cont.)

ส)วนน�-ที่0กโปรแกรมจัะต�องม� โดยโปรแกรมห์ล�กจัะเร��มต�นด�วย main() และตามด�วยเคร��องห์มายป=กกาเป>ด ‘{’ และป=กกาป>ด ‘}’ระห์ว)างป=กกาจัะประกอบไปด�วยค,าส��ง(Statement) ต)างๆ ที่��จัะให์�โปรแกรมที่,างานแต)ละค,าส��งจัะต�องจับด�วยเซีม�โคลอน ‘;’ (Semicolon)

#include <stdio.h>void main(void){

...Statement ;

}

Main Function

Main Function (cont.)

ต�วอย)าง#include <stdio.h>int feet,inches;void main(){ feet = 6; inches = feet * 12; printf("Height in inches is %d",inches);}

Height in inches is 72

ผ่ลการที่,างาน

ต�ว Main Function จัะม�สามารถร�บค)าจัากภายนอกเขี�ามาในโปรแกรมได� โดยร!ปแบบการเขี�ยนจัะเป7นด�งน�-

argc ค�อ จั,านวนขีองขี�อความที่��ส)งเขี�ามาในโปรแกรมargv ค�อ กล0)มขีองขี�อความที่��ส)งเขี�ามาในโปรแกรม (array of char pointer)การ return ขีอง main function เป7นการส)งค)ากล�บไปห์าระบบปฏ�บ�ต�การ

#include <stdio.h>int main(int argc, char *argv[]){

...Statement ;return 0;

}

Main Function

Main Function (Example)

สร�างฟั�งก�ชิ�นห์ร�อค,าให์ม)ขี2-นมาใชิ�งานตามที่��เราต�องการระห์ว)างป=กกาจัะประกอบด�วยค,าส��ง(Statement) ต)างๆ ที่��จัะให์�ฟั�งก�ชิ�นที่,างานสามารถเร�ยกใชิ�ภายใน

โปรแกรมได�ที่0กที่��

#include <stdio.h>int function()void main(void){

...Statement ;

}int function(){

Statement ;...return (int value);

}

User-Defined Function (cont.)

ต�วอย)าง#include <stdio.h>int Feet2Inch(int);int feet,inches;void main(){ feet = 6; inches = Feet2Inch(feet); printf("Height in inches is %d",inches);}int Feet2Inch(int f){ return f*12;}

Height in inches is 72

ผ่ลการที่,างาน

Example 4

#include <stdio.h>void adder(int , int );int summ;

int main() {

adder(20, 30); // จึ0ด้ที่��เร�ย่กใช่ ฟ/งก ช่�นโพีรโตัไที่ป1printf(“summary = %d”,summ)return 0;

}

void adder(int a, int b) {

summ = a+b;}

Example 5

How to process function?

int main(){

f1()

f2()

return 0;}

f1(){ return;}

f2(){ f1()

return;}

f1(){ return;}

Outline

Function1

pp2

Function Format Function Format3

Passing ParametersPassing Parameters4

Assignment5

User-Defined Function

Function Declaration

เป7นการประกาศการใชิ�งานฟั�งก�ชิ��นที่��อย!)ห์ล�ง main()

type ค�อ ชิน�ดขีองฟั�งก�ชิ�น ว)าฟั�งชิ�นที่��ที่,าการสร�างจัะส)งขี�อม!ลชิน�ดใดกล�บ

function_name ค�อ ชิ��อฟั�งก�ชิ�นที่��จัะสร�างขี2-นtype-n ค�อ ชิน�ดขีองขี�อม!ลที่��จัะส)งให์�ฟั�งก�ชิ�น

type function_name(type-1,type-2,...,type-n);

การเขี�ยนโปรแกรมโดยม�ฟั�งก�ชิ�นที่��สร�างขี2-นเองม� 2 ร!ปแบบ

• สร�างฟั�งก�ชิ�น ก)อน ฟั�งก�ชิ�นห์ล�ก• ฟ/งก ช่�นหล�กสามารถเร�ย่กใช่ งานฟ/งก ช่�นที่��สร างขึ้�(นได้

• สร�างฟั�งก�ชิ�น ห์ล�ง ฟั�งชิ�นห์ล�ก• ตั องประกาศ Function Prototype ก�อนเพี4�อให

ฟ/งก ช่�นหล�กร5 ว่�าม�ฟ/งก ช่�นที่��สร างขึ้�(น

Function Declaration(cont.)

#include<file.h>type variable;

type function_name(type variable){ statement-1; ... statement-n; return(var);}

int main(){ type variable; statement-1; ... statement-n; return 0;}

Function Declaration(cont.)

#include<file.h>type function_name(type);type variable;

int main(){ type variable; statement-1; ... statement-n; return 0;}

type function_name(type variable){ statement-1; ... statement-n; return(var);}

Function Declaration(cont.)

แบบที่�� 1: ฟั�งก�ชิ�นแบบไม)ม�การส)งค)ากล�บและไม)ม�พื่าราม�เตอร�

เป6นฟ/งก ช่�นที่��ไม�ม�การส�งคำ�ากล�บไปให ก�บฟ/งก ช่�นที่��เร�ย่กมา  และไม�ม�การส�งคำ�าจึากฟ/งก ช่�นที่��เร�ย่กมาให ด้ ว่ย่ 

void main(){

my_print();}

void my_print(){ printf(“Hello world”);}

Function Format #1

แบบที่�� 2 ฟั�งก�ชิ�นแบบไม)ม�การส)งค)ากล�บแต)ม�พื่าราม�เตอร� • เป7นฟั�งก�ชิ�นที่��จัะไม)ม�การส)งค)ากล�บไปให์�ฟั�งก�ชิ�นที่��เร�ยกขี2-นมา   แต)ม�การส)งค)าจัากฟั�งก�ชิ�นที่��เร�ยกมาให์�ด�วย 

void main(){

my_print(2);}

void my_print(int x) { printf(“%d”, x);}

void main(){

my_print(‘a’, 5);}void my_print(char ch, int x)

{ while (x > 0)

{printf(“%c”, ch);x--;

}}

Function Format #2

แบบที่�� 3 ฟั�งก�ชิ�นแบบม�การส)งค)ากล�บและไม)ม�พื่าราม�เตอร�  •เป7นฟั�งก�ชิ�นที่��จัะม�การส)งค)ากล�บไปให์�ฟั�งก�ชิ�นที่��เร�ยกมา   แต)ไม)ม�การส)งค)าจัากฟั�งก�ชิ�นที่��เร�ยกมาให์�ด�วย 

void main(){ printf(“%d”,my_func());}int my_func() { int a; scanf(“%d”,&a); return (a*5);}

Function Format #3

แบบที่�� 4 ฟั�งก�ชิ�นแบบม�การส)งค)ากล�บและม�พื่าราม�เตอร�  •เป7นฟั�งก�ชิ�นที่��จัะม�การส)งค)ากล�บไปให์�ก�บฟั�งก�ชิ�นที่��เร�ยกมา  แต)ม�การส)งค)าจัากฟั�งก�ชิ�นที่��เร�ยกมาให์�ด�วย

void main(){

char ch;ch = my_print(5);printf(“%c\n”, ch);

}

char my_print(int x){ char lch;

printf(“Enter your character: ”);scanf(“%c”, &lch);while (x > 0){

printf(“%c”, lch);x--;

}printf(“\n”);return lch;

}

Function Format #4

Example 4

START

END

num=9

show_star(num)

kmitl

show_star(num)

show_star(n)

i=1

*

i<=nT

F

end

i++

*********

********** EE-UP *

Example 4 (cont.)

Example 5

Test yourself

จัากโปรแกรมต�วอย)างจังอธิ�บาย1 .ฟั�งก�ชิ�นชิ��ออะไร ?2 .ม�การร�บค)าห์ร�อไม) ถ�าม� ม�ก��พื่าราม�เตอร� ?3. ฟั�งก�ชิ�นร�บค)าเป7นต�วแปรชิน�ดใด ?4. ฟั�งก�ชิ�นม�การส)งค)ากล�บห์ร�อไม) ถ�าม� ส)งค)ากล�บเป7น

ต�วแปรชิน�ดใด ?5. ถ�าต�องการต�ดบรรที่�ด /*Function Prototype*/

ออกต�องปร�บเปล��ยนโปรแกรมอย)างไร ?6. โปรแกรมที่,างานอะไร ?

Variable & Scope of Function

ต�วแปร globalเป7นต�วแปรที่��ฟั�งก�ชิ�นใดก:สามารถเร�ยกใชิ�ได�โดยจัะประกาศสร�างต�วแปรต)อจัาก พื่ร�โปรแซีสเซีอร�ไดเร:คที่�ฟัต�วแปร localเป7นต�วแปรที่��สามารถเร�ยกใชิ�ได�ภายในเฉพื่าะฟั�งก�ชิ�นที่��ประกาศสร�างต�วแปรน�-นโดยจัะประกาศสร�างต�วแปรภายในแต)ละฟั�งก�ชิ�น

Example 6

Example 7

Outline

Function1

pp2

Function Format Function Format3

Passing ParametersPassing Parameters4

Assignment5

User-Defined Function

Passing Parameters (Arguments Passing)

การส)งค)าต�วแปรให์�ก�บฟั�งก�ชิ�นม�สองแบบค�อ1 . การส)งค)าที่��เก:บอย!)ในต�วแปรให์�ก�บฟั�งก�ชิ�น (pass by

value)2 . การส)งค)าต,าแห์น)งขีองต�วแปรให์�ก�บฟั�งก�ชิ�น (pass

by pointer)

Passing by Value

ในการส)งผ่)านค)าแบบ pass by value ค)าที่��ส)งเขี�าไปในฟั�งก�ชิ�น อาจัเป7นค)าคงที่��โดยตรง ห์ร�ออาจัส)งเป7นค)าจัากต�วแปรก:ได� เชิ)น result = add( a, b ); ห์ร�อresult = add( 5, 10);

โปรแกรมจัะน,าค)าคงที่�� ห์ร�อค)าที่��ค�ดลอกมาจัากต�วแปร ณ จั0ดที่��เร�ยกใชิ� ส)งผ่)านให์�ก�บพื่าราม�เตอร�ซี2�งเป7นต�วแปรภายในฟั�งก�ชิ�นที่��ถ!กเร�ยกใชิ�เที่)าน�-น

ห์ากค)าที่��ส)งเขี�าไปที่,างานภายในฟั�งก�ชิ�นม�การเปล��ยนแปลงไปจัากเด�มจัะไม)ม�ผ่ลกระที่บก�บค)าขีองต�วแปรที่��ส)งผ่)านค)ามาให์�จัากภายนอกฟั�งก�ชิ�น

Example 8

ในการเร�ยกใชิ�ฟั�งก�ชิ�น swap เราอาจัม�การเปล��ยนแปลงค)าอาร�ก�วเมนต� a และ b ภายในฟั�งก�ชิ�น

void swap(int a, int b) {

int temp;

printf(“swap: a = %d, b = %d\n”, a, b);

temp = a;

a = b;

b = temp;

printf(“swap: a = %d, b = %d\n”, a, b);

}

int main()

{

int x = 5, y = 10;

printf(“main: x = %d, y = %d\n”, x, y);

swap(x, y);

printf(“main: x = %d, y = %d\n”, x, y);

return 0;

}

Example 8 (cont.)

main: x = 5, y = 10

swap: a = 5, b = 10

swap: a = 10, b = 5

main: x = 5, y = 10

Pass by Pointer

การส)งผ่)านค)าแบบ pass by Pointer เป7นการส)งผ่)านค)าต,าแห์น)ง (address) ขีองต�วแปร แที่นการส)งค)าขีองขี�อม!ลที่��เก:บอย!)ในต�วแปร

การส)งค)าแบบน�-จัะที่,าให์�ต,าแห์น)งขีองขี�อม!ลที่��ที่,างานภายในฟั�งก�ชิ�น เป7นต,าแห์น)งเด�ยวก�บขี�อม!ลที่��ฟั�งก�ชิ�นส)งผ่)านเขี�ามาให์�

เม��อม�การเปล��ยนแปลงค)าขีองขี�อม!ลที่��ส)งผ่)านเขี�าไปที่,างานในฟั�งก�ชิ�น ค)าขีองต�วแปรที่��อย!)นอกฟั�งก�ชิ�นก:จัะเปล��ยนตามไปด�วย

ภาษาซี�ใชิ�ว�ธิ�การส)งผ่)านค)าต,าแห์น)งขีองต�วแปร โดยใชิ�ชิน�ดขี�อม!ลแบบพื่อยน�เตอร� (pointer) เขี�ามาชิ)วย • การประกาศชิน�ดขี�อม!ลแบบต�วชิ�- ใชิ�ต�วด,าเน�นการ *

(Dereferencing operator)

Pass by Pointer(cont.)

น,าฟั�งก�ชิ�น swap จัากต�วอย)างขี�างต�นมาปร�บให์ม) โดยใชิ�การส)งผ่)านค)าแบบ pass by pointer

เพื่��อให์�ขี�อม!ลขีองต�วแปรที่��ส)งผ่)านเขี�าไปม�การเปล��ยนแปลงตามค)าที่��ถ!กเปล��ยนภายในฟั�งก�ชิ�นด�วย

Pass by Pointer(cont.)

1: /* Program: case2.c 2: swap values using pass by reference

3: */ 4: #include <stdio.h>

5: 6: /* function prototypes */ 7: void swap(int *a, int *b); 8: 9: int main()10: {11: int x = 5, y = 10;12:13: printf(“main: x = %d, y = %d\n”, x, y);14: swap(&x, &y);15: printf(“main: x = %d, y = %d\n”, x, y);16:17: return 0;18: }19:

Example 9

20: /* swap values of a and b */21: void swap(int *a, int *b)22: {23: int temp;24:25: printf(“swap: a = %d, b = %d\n”, *a, *b);26: 27: temp = *a;28: *a = *b;29: *b = temp;30:31: printf(“swap: a = %d, b = %d\n”, *a, *b);32: }

Example 9 (cont.)

Result

จัากผ่ลการที่,างานขีองโปรแกรม แสดงให์�เห์:นผ่ลขีองการส)งผ่)านค)าแบบ pass by pointer ซี2�งที่,าให์�ค)าขีองต�วแปรที่��ส)งผ่)านให์�ก�บฟั�งก�ชิ�นที่��เร�ยกใชิ� ม�ผ่ลตามการเปล��ยนแปลงขีองค)าน�-นภายในฟั�งก�ชิ�นด�วย

main: x = 5, y = 10

swap: a = 5, b = 10

swap: a = 10, b = 5

main: x = 10, y = 5

Pass by Reference Analysis

เราเคยใชิ�การส)งผ่)านค)าแบบ pass by pointer มาก)อนในฟั�งก�ชิ�น scanf ส�งเกตได�ว)าส)วนอาร�ก�วเมนต�ขีองฟั�งก�ชิ�น scanf ม�ล�กษณะเห์ม�อนก�น โดยใชิ�ต�วด,าเน�นการ & ก,าห์นดต,าแห์น)งขีองต�วแปร ที่��จัะร�บค)าเขี�ามาจัากค�ย�บอร�ด เชิ)น

scanf(“%d”, &no);

scanf(“%c”, &choice);

Example 10

Example 10 (cont.)

Result

Example 11

Example 12

Example 13

Summary Passing Parameters

การเล�อกใชิ�ว�ธิ�การส)งผ่)านค)าให์�ก�บฟั�งก�ชิ�น ขี2-นอย!)ก�บว�ตถ0ประสงค�การใชิ� • ปกต�การส)งค)าให์�ก�บฟั�งก�ชิ�น จัะใชิ�ว�ธิ�แบบ pass by

value เพื่ราะการที่,างานภายในฟั�งก�ชิ�นไม)ควรจัะม�ผ่ลกระที่บต)อค)าขีองต�วแปรภายนอก

• ฟั�งก�ชิ�นม�ชิ)องที่างในการส)งค)ากล�บมาให์�ต�วแปรภายนอกอย!)แล�ว โดยใชิ� return

• แต)ค)าที่��ส)งกล�บจัากประโยค return ม�ได�เพื่�ยงค)าเด�ยว ห์ากต�องการผ่ลล�พื่ธิ�กล�บจัากฟั�งก�ชิ�นมากกว)า 1 ค)า ต�องใชิ�การส)งผ่)านแบบ pass by pointer

Outline

Function1

pp2

Function Format Function Format3

Passing ParametersPassing Parameters4

Assignment5

User-Defined Function

Assignment #11

1. โปรแกรมเก:บขี�อม!ลส�นค�า 1 ชิน�ด ภายในโปรแกรมประกอบด�วย ฟั�งก�ชิ�นต)างๆด�งน�-

ฟั�งก�ชิ�นใส)ขี�อม!ลส�นค�า getdata()ฟั�งก�ชิ�นเพื่��มจั,านวนส�นค�า 10 ชิ�-น add10()ฟั�งก�ชิ�นลดจั,านวนส�นค�า 10 ชิ�-นsub10()และฟั�งก�ชิ�นแสดงจั,านวนรายละเอ�ยดภายในส�นค�า

โปรแกรมน�-ย�งไม)สมบร!ณ�ด� ให์�น�กศ2กษาเขี�ยนค,าประกาศฟั�งก�ชิ�น getdata() และ add10 และค,าส��งภายในให์�สมบร!ณ�

Assignment #11 (cont.)

2. ให์�น�ส�ตอธิ�บายการที่,างานขีองโปรแกรมน�- พื่ร�อมก�บชิ�-ให์�เห์:นว)าจั0ดผ่�ดขีองโปรแกรมค�อจั0ดใด Hint: ม�ที่��ผ่�ด 1 จั0ด

Assignment #11 (cont.)

3. โปรแกรมต)อไปน�-แสดงผ่ลเลขีอะไรจัอภาพื่ ใชิ�เวลาค�ดไม)เก�น 10นาที่� เม��อค�ดเสร:จัแล�วให์�ลองพื่�มพื่� code ด�งกล)าวลงคอมพื่�วเตอร� และตรวจัสอบค,าตอบ

Assignment #11 (cont.)

Assignment #11 (cont.)

Assignment #11 (cont.)

4. จังว�เคราะห์�โจัที่ย� ว�เคราะห์�การที่,างาน เขี�ยนขี�-นตอนการที่,างานอย)างละเอ�ยด เขี�ยนรห์�สเที่�ยม เขี�ยนแผ่นภาพื่การไห์ลขีองขี�อม!ล (Flowchart) พื่ร�อมที่�-งเขี�ยนโปรแกรมการเร�ยงล,าด�บต�วเลขี (Bubble sort) 10 จั,านวน จัากน�อยไปมาก ก,าห์นดให์�ม�การร�บค)าต�วเลขี 10 จั,านวนจัากแป@นพื่�มพื่� ให์�เขี�ยนฟั�งก�ชิ�นในการเร�ยงล,าด�บต�วเลขีชิ��อฟั�งก�ชิ�น “Sort_function” โดยฟั�งก�ชิ�นน�-จัะส)งผ่ลล�พื่ธิ�ขีองการเร�ยงล,าด�บต�วเลขีมาแสดงผ่ลในฟั�งก�ชิ�นห์ล�ก (main function) และม�ขี�อก,าห์นดให์�ฟั�งก�ชิ�นด�งกล)าวม�การส)งค)าในสองร!ปแบบค�อ pass by reference และ pass by value ตามล,าด�บ