structure programming การเขียน โปรแกรม...

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

Upload: branden-hood

Post on 30-Dec-2015

72 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

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 ตามล,าด�บ