Upload
branden-hood
View
71
Download
0
Embed Size (px)
DESCRIPTION
Structure Programming การเขียน โปรแกรม เชิงโครงสร้าง. สัปดาห์ที่ 12 ฟังก์ชัน (Function). objectives. เพื่อให้นิสิตรู้จักและเข้าใจ การนิยามและการเขียนฟังก์ชัน ในภาษาซี สามารถเขียน ฟังก์ชันร่วมกับคำสั่งทำซ้ำ อาเรย์ ตัวแปรชี้ตำแหน่ง ตัวแปรชนิดโครงสร้าง ในภาษาซีได้อย่างมีประสิทธิภาพ - PowerPoint PPT Presentation
Citation preview
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
สร�างฟั�งก�ชิ�นห์ร�อค,าให์ม)ขี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 *
Test yourself
จัากโปรแกรมต�วอย)างจังอธิ�บาย1 .ฟั�งก�ชิ�นชิ��ออะไร ?2 .ม�การร�บค)าห์ร�อไม) ถ�าม� ม�ก��พื่าราม�เตอร� ?3. ฟั�งก�ชิ�นร�บค)าเป7นต�วแปรชิน�ดใด ?4. ฟั�งก�ชิ�นม�การส)งค)ากล�บห์ร�อไม) ถ�าม� ส)งค)ากล�บเป7น
ต�วแปรชิน�ดใด ?5. ถ�าต�องการต�ดบรรที่�ด /*Function Prototype*/
ออกต�องปร�บเปล��ยนโปรแกรมอย)างไร ?6. โปรแกรมที่,างานอะไร ?
Variable & Scope of Function
ต�วแปร globalเป7นต�วแปรที่��ฟั�งก�ชิ�นใดก:สามารถเร�ยกใชิ�ได�โดยจัะประกาศสร�างต�วแปรต)อจัาก พื่ร�โปรแซีสเซีอร�ไดเร:คที่�ฟัต�วแปร localเป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);
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 และค,าส��งภายในให์�สมบร!ณ�
2. ให์�น�ส�ตอธิ�บายการที่,างานขีองโปรแกรมน�- พื่ร�อมก�บชิ�-ให์�เห์:นว)าจั0ดผ่�ดขีองโปรแกรมค�อจั0ดใด Hint: ม�ที่��ผ่�ด 1 จั0ด
Assignment #11 (cont.)
3. โปรแกรมต)อไปน�-แสดงผ่ลเลขีอะไรจัอภาพื่ ใชิ�เวลาค�ดไม)เก�น 10นาที่� เม��อค�ดเสร:จัแล�วให์�ลองพื่�มพื่� code ด�งกล)าวลงคอมพื่�วเตอร� และตรวจัสอบค,าตอบ
Assignment #11 (cont.)
Assignment #11 (cont.)
4. จังว�เคราะห์�โจัที่ย� ว�เคราะห์�การที่,างาน เขี�ยนขี�-นตอนการที่,างานอย)างละเอ�ยด เขี�ยนรห์�สเที่�ยม เขี�ยนแผ่นภาพื่การไห์ลขีองขี�อม!ล (Flowchart) พื่ร�อมที่�-งเขี�ยนโปรแกรมการเร�ยงล,าด�บต�วเลขี (Bubble sort) 10 จั,านวน จัากน�อยไปมาก ก,าห์นดให์�ม�การร�บค)าต�วเลขี 10 จั,านวนจัากแป@นพื่�มพื่� ให์�เขี�ยนฟั�งก�ชิ�นในการเร�ยงล,าด�บต�วเลขีชิ��อฟั�งก�ชิ�น “Sort_function” โดยฟั�งก�ชิ�นน�-จัะส)งผ่ลล�พื่ธิ�ขีองการเร�ยงล,าด�บต�วเลขีมาแสดงผ่ลในฟั�งก�ชิ�นห์ล�ก (main function) และม�ขี�อก,าห์นดให์�ฟั�งก�ชิ�นด�งกล)าวม�การส)งค)าในสองร!ปแบบค�อ pass by reference และ pass by value ตามล,าด�บ