ete183 บทที่ 7ete.tido.tech/ete-programming/student/tutorials/... · บทที่7 1....

Post on 03-Oct-2020

7 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ETE183การเขียนโปรแกรมคอมพิวเตอร์สำหรับ

วิศวกรรมไฟฟ้า

ผศ.ดร.วชิราพรรณ แกว้ประพนัธ์

อ.ชนกชนม ์สงัวรโยธิน

บทที่ 7 ฟังก์ชัน

บทที่ 7

1. กระบวนการทำงานของฟังก์ชัน

2. ประโยชน์ของการใช้ฟังก์ชัน

3. การใช้ฟังก์ชันสำเร็จรูป (Library)

4. การสร้าง Function

5. การใช้ ฟังก์ชัน

ฟังก์ชั'นที'มีอยูแ่ล้วในภาษาซีเวลาจะเรียกใช้งานก็ต้องทําการ includeไฟล์นามสกลุ .hเชน่ถ้าต้องการใช้ฟังก์ชั'น printfหรือ scanf จะต้อง includeไฟล์ชื'อ stdio.h มาก่อน เป็นต้น

ฟังก์ชนัที'เขียนขึ Kนเองใหมเ่หมือนกบัสร้างภาษาซีขึ Kนเองเพิ'มเตมิจากที'มีอยูแ่ล้ว ซึ'งจะทําให้ลดความซบัซ้อนของโปรแกรมลง

ฟังก์ชัน

Function2 ชนิด

ฟังก์ชั่นที่มีอยู่ในไลบรารีของภาษาซี

ฟังก์ชั่นที่เราสร้างขึ้นเอง

6

ฟังก์ชั่นที่มีอยู่ในไลบรารีของภาษาซี

คือ ฟังก์ชนัแรกในโปรแกรม เมื'อโปรแกรมเริ'มทํางาน โปรแกรมจะอา่นบรรทดัคําสั'งจากบรรทดัแรกจนถงึบรรทดัที'ประกาศฟังก์ชนัหลกั เพื'อหาคําสั'งในฟังก์ชั'นหลกั (main)แล้วโปรแกรมจะกระทําคําสั'งนั Kนเป็นลาํดบัแรก

เปรียบได้กบัห้องโถง ที'เมื'อทกุคนเดนิเข้าบ้าน จะต้องเข้ามาที'ห้องโถงก่อนทกุครั Kง เพราะประตเูข้าบ้านอยูที่'ห้องโถง ก่อนจะไปห้องอื'น

ฟังก์ชันหลัก

ฟังก์ชันแรกในโปรแกรมคือ main()

#include<stdio.h>void main(){int x,y,z;x = 100;y=23;z=x+y;printf(“%d”,z);

}

มีการเรียกใชฟั้งกช์นั printf จะเห็นวา่จะตอ้งมีการ include ไฟล ์

stdio.h เขา้มาก่อน

การส่งค่า

คือ การสง่คา่จากฟังก์ชนัหนึ'ง ไปยงัอีกฟังก์ชนัหนึ'งผา่น พารามิเตอร์

การส่งค่ากลับ

คือ การที'ฟังก์ชนักระทําคําสั'งจนเสร็จแล้วต้องการสง่คา่กลบัไปยงัฟังก์ชนัต้นทางที'เรียกใช้มนั (return)พารามเิตอร์

คือการรับคา่จากฟังก์ชนัหนึ'ง มายงัฟังก์ชนัตวัเอง

ศัพท์ที่ควรรู้

รูปแบบของฟังก์ชันสร้างเอง

1.ฟังก์ชันแบบไม่มีการส่งค่ากลับและไม่มีพารามิเตอร์

2. ฟังก์ชันแบบไม่มีการส่งค่ากลับและมีพารามิเตอร์

3. ฟังก์ชันแบบมีการส่งค่ากลับและไม่มีพารามิเตอร์

4. ฟังก์ชันแบบมีการส่งค่ากลับและมีพารามิเตอร์

รูปแบบของฟังก์ชันสร้างเอง

รับค่า ไม่รับค่า

ส่งค่ากลับ รับคา่

และ

สง่คา่กลบั

ไมรั่บคา่

และ

สง่คา่กลบั

ไม่ส่งค่ากลับ รับคา่

และ

ไมส่ง่คา่กลบั

ไมรั่บคา่

และ

ไมส่ง่คา่กลบั

การสร้างฟังก์ชัน

1. ประกาศฟังก์ชันที่ต้องการไว้ในส่วนแรกของโปรแกรม (ประกาศก่อน main)

2. เรียกใช้ฟังก์ชันที่ประกาศไว้ในฟังก์ชัน main หรือฟังก์ชันใดๆ

3. กำหนดหรือสร้างรายละเอียดคำสั่งของฟังก์ชันนั้นๆ รวมถึงการส่งค่ากลับ return

การประกาศฟังก์ชัน

การประกาศฟังก์ชั'นนั Kน เป็นสิ'งที'จําเป็นต้องทําเสมอเมื'อจะสร้างฟังก์ชัน่ การประกาศฟังก์ชั'นนั Kนจะประกาศอยูต่รงสว่นบนสดุของโปรแกรม หรือก่อนสว่นการประกาศตวัแปรแบบ Global

ชนิดของข้อมูล

ที;จะส่งค่ากลับ

ชื;อฟังก์ชัน ( รายชื;อพารามเิตอร์ที;จะมี

การบอกชนิดข้อมูล )จบคาํสั;ง

void hello () ;

int num (int num) ;

char name (int num,chara) ;

การเรียกใช้ฟังก์ชัน

การเรียกใช้ฟังก์ชนั จะเป็นคําสั'งที'ใช้เรียกฟังก์ชนัที'เราประกาศขึ Kนมาและสามารถสง่คา่ใดๆไปยงัฟังก์ชนันั Kนได้ แตต้่องขึ Kนอยูก่บัโครงสร้างของฟังก์ชนันั Kนๆด้วย

ชื;อฟังก์ชันที;จะเรียกใช้ ( พารามเิตอร์ ที;จะใช้ส่งค่าไป ) จบคาํสั;งจะมีเมื;อเรียกใช้ตวัเดี;ยวๆ

hello () ;

num (5) ;

name (number,‘B’) ;

การเรียกใช้ฟังก์ชัน

เราสามารถเรียกใช้ฟังก์ชนัในสถานการณ์ใดๆก็ได้ โดยคา่ที'ฟังก์ชนักระทํา จะนําไปแทนท่ีในที'ๆฟังก์ชนันั Kนประกาศเอาไว้ เชน่

printf(“%c”,name(number,’B’));

printf(“Hello”);hello();

a=0;a =num(5)+10;

การสร้างคำสั่งในฟังก์ชัน

เราสามารถสร้างรายละเอียดของฟังก์ชนั โดยภายในจะเก็บคําสั'งเอาไว้ สามารถนําคา่จากพารามิเตอร์ที'รับคา่มา มาใช้ในการคํานวณได้ และยงัสามารถใช้คําสั'ง returnในการสง่คา่กลบัได้

ชนิดของข้อมูลที;

จะส่งค่ากลับ

ชื;อฟังก์ชัน ( รายชื;อพารามเิตอร์ที;จะมีการ

บอกชนิดข้อมูล ){

คําสั'ง

return…..;}

การสร้างคำสั่งในฟังก์ชัน

ยกตวัอยา่งเชน่

voidhello(){

printf(“Hello”);}

int num(int number){

int a;a=number+1;returna;

}

การสร้างคำสั่งในฟังก์ชัน

ยกตวัอยา่งเชน่

int name(int num,chara){

int x;if(a==‘A’)x=num-1;elseif(a==‘B’)x=num+1;elsex=0;returnx;

}

จากตวัอย่าง

เราสามารถเอาคําสั'งตา่งๆ ใน main() มาสร้างเป็นฟังก์ชั'นใหมไ่ด้ดงันี K#include<stdio.h>void test( ){

int x,y,z;x = 100;y = 23;z = x+y;printf(“%d”,z);

}

void main( ){

test( );}

เรียกใชฟั้งกช์นั test( ) เพียงตวัเดียวกจ็ะทาํงานเหมือนคาํสัJงทัKงหมดทีJเขียนไวใ้นฟังกช์นั

test () ขา้งบน

int x,y,z;x = 100;y = 23;z = x+y;printf(“%d”,z);

แยกคาํสัJงบางส่วนมาใส่ในฟังกช์นั ชืJอ test ( )

โปรแกรมเขยีนใหม่จะเป็นดงันี>#include<stdio.h>void test( ){

int x,y,z;x = 100;y = 23;z = x+y;printf(“%d”,z);

}main( ){

test( );}

ส่วนของฟังกช์นั ชืJอวา่ test ( )

เรียกชืJอฟังกช์นั test ( ) เพืJอทาํงานตรงจุดน้ีฟังกช์นัหลกั

โปรแกรมเขยีนใหม่จะเป็นดงันี>#include<stdio.h>void test( );main( ){

test( );}void test( ){

int x,y,z;x = 100;y = 23;z = x+y;printf(“%d”,z);

}

โครงสร้างฟังก์ชัน

รับค่า ไม่รับค่า

ส่งค่ากลับ ใช้ int/float/charนําหน้าชื'อ

ฟังก์ชนั

ใช้ returnมีพารามิเตอร์

ใช้ int/float/charนําหน้าชื'อ

ฟังก์ชนั

ใช้ returnไมมี่พารามิเตอร์

ไม่ส่งค่ากลับ ใช้ voidนําหน้า

ชื'อฟังก์ชนั

ไมใ่ช้ returnมีพารามิเตอร์

ใช้ void นําหน้า

ชื'อฟังก์ชนั

ไมใ่ช้ returnไมมี่พารามิเตอร์

ตัวอย่าง ลองทำโจทย์จากสารพัดตัวอย่าง

Example

ตวัอย่าง การใช้ Function#include<stdio.h>voidshowmenu(){

printf(“====MENU====\n\n”);printf(“a)SayHello\n”);printf(“b)SayGoodBye\n”);printf(“Selectaorb:\n”);

}

voidmain(){printf(“Begin\n”);showmenu();printf(“END\n”);

}

Begin==== MENU ====

a) Say Hellob) Say Good ByeSelect a or b :END

2

1

34

5

6789

10

ตวัอย่างทีA 1 โปรแกรมแสดงฟังก์ชัน

ย่อยเรียกใช้ฟังก์ชัน void main ( )

#include <stdio.h>

void main ( )

{

char ch ;

void sub ( ) ;

printf (“Enter any character , E for

End\n”) ;

ch = getchar ( ) ; scanf(“%c”,&ch);

putchar (ch ) ;

if (ch != ‘E’)

sub( ) ;

}

void sub ( )

{

main( ) ;

}

ฟังก์ชันเรียกตวัเอง (Recursive Functions)

จากตวัอย่างทีA 1 จะเห็นว่าฟังก์ชันสามารถเรียกใช้ซึAงกนัและ

กนัได้ ฟังก์ชันในภาษาซีสามารถเรียกใช้ตวัเองได้ ดงัตวัอย่าง1

ถ้าเขยีนใหม่เป็นตวัอย่าง 2 กจ็ะเป็นฟังก์ชันเรียกตวัเอง

ตวัอย่าง 2 โปรแกรมแสดงฟังก์ชัน main ( ) เรียกตวัเอง

#include <stdio.h>

void main ( )

{

char ch ;

printf (“Enter any character , E for End\n”) ;

putchar(ch) ;

if (ch != ‘E’)

main ( ) ;

}

Factorialofn=n(n-1)(n-2)……1.

#include<stdio.h>

#include<conio.h>

int factorial(int);

int factorial (int i)

{

int f;

if(i==1)

return 1;

else

f = i* factorial (i-1);

return f;

}

main()

{

int x;

clrscr();

printf("Enter any number to calculate factorial :");

scanf("%d",&x);

printf("\nFactorial : %d", factorial (x));

getch();

}

#include <stdio.h>long fibonacci( long n );main()

{long result;long number;printf( "Enter an integer: " );scanf( "%ld", &number );result = fibonacci( number );printf( "Fibonacci( %ld ) = %ld\n", number, result );return 0;

}

long fibonacci( long n ){

if ( n == 0 || n == 1 ) {return n;

}else {return fibonacci( n - 1 ) + fibonacci( n - 2 );

}

}

Enter an integer: 3Fibonacci( 3 ) = 2

Fibonacci.

คำเตือน

ตัวแปรใดๆก็ตามที่ประกาศไว้ข้างนอก Function จะสามารถใช้ตัวแปรนั้นได้กับทุก Function

ตัวแปรใดๆก็ตามที่ประกาศไว้ข้างใน Function จะสามารถใช้ได้ภายใน Function นั้นเท่านั้น

การส่งค่าตัวแปรไปยังอีก function เราเรียกว่า “ตัวแปรพารามิเตอร์”

คำเตือน

Void คือ การตั้งค่าให้ function นั้นๆไม่ส่งค่ากลับไปยัง function ต้นทางที่เรียกใช้ใน Function นั้นจะไม่มีการใช้คำสั่ง return

Research

ค้นหาLibrary Function

สำหรับการคำนวณ (math.h)คืออะไร ใช้อย่างไร

หาค่า Squawroot อย่างไรFunction เลขยกกำลังคำสั่ง clrscr; ใน conio.hปล.ใช้ตอบคำถามใน Quiz

Quiz Quiz บททีA 7 – 8.1ก่อนเข้าเรียนคาบหน้า

Homework

Learning Reportส่งภายใน

วนัอาทติย์ทีA 10 กนัยายน 2560เวลา 23.59 น.

top related