งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

Lecture 7 ฟังก์ชัน To do: Hand back assignments

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Lecture 7 ฟังก์ชัน To do: Hand back assignments"— ใบสำเนางานนำเสนอ:

1 Lecture 7 ฟังก์ชัน To do: Hand back assignments
Give out handouts to anybody who missed them last class Quick comments on PS3 Quick comments on grades READING: S+S: Appendix C

2 บทนำ โปรแกรมที่สร้างขึ้นส่วนใหญ่ มักจะมีขนาดใหญ่ ดังนั้นในการจัดการโปรแกรมที่มีขนาดใหญ่ จะใช้วิธีการ แบ่งส่วนของโปรแกรมออกเป็นส่วนย่อยๆ ซึ่ง โปรแกรมย่อยเหล่านี้เรียกว่า ฟังก์ชัน(Function) ประโยชน์ของฟังก์ชัน 1. สามารถหาจุดผิดของโปรแกรมได้ง่าย 2. โปรแกรมมีขนาดเล็ก 3. สามารถนำไปใช้ ณ. ส่วนอื่นๆ ของโปรแกรมก็ได้ 4. ช่วยกันพัฒนาได้ โมดูล(Module)หรือฟังก์ชัน(Function) เป็นคำที่มีความหมายเหมือนกัน

3 OBJECTIVE 1. ฟังก์ชันมาตรฐาน(Standard Functions)
2. ฟังก์ชันที่ผู้ใช้กำหนด(User-defined Functions) - การ Test Driver - การส่งผ่านค่าให้ฟังก์ชัน 3. ฟังก์ชันโอเวอร์โหลด(Overloading Function)

4 ฟังก์ชันมี 2 ชนิด 1. ฟังก์ชันมาตรฐาน(Standard Functions) เป็นฟังก์ชันที่มีการนิยามไว้แล้วในComplier เราเพียงแต่ทำความเข้าใจการทำงานของฟังก์ชันและนำมาใช้ให้ถูกต้อง โดยจะต้องค้นหาว่า ฟังก์ชันนิยามอยู่ใน module หรือ header file ใด เมื่อทราบแล้วก็ทำการ include เข้ามาใช้ในการแปลร่วม 2. ฟังก์ชันที่ผู้ใช้สร้างขึ้น(User-define Functions) เป็นฟังก์ชันที่ผู้เขียนโปรแกรมนิยามขึ้นใหม่ โดยอาจจะเขียนรวมไว้ในไฟล์เดียวหรืออาจจะแยกไวในไฟล์อื่น ซึ่งถ้าจะนำมาใช้งานร่วมกันก็ต้องประกาศ include ไว้ตอนต้นโปรแกรมเช่นเดียวกับฟังก์ชันมาตรฐาน

5 7.1 ฟังก์ชันมาตรฐานในภาษาซี
ฟังก์ชันมาตรฐานในภาษาซี++ได้มีการจัดทำไว้แล้วและผู้ใช้สามารถที่จะเรียกมาใช้งานได้ เพียงแต่กำหนดตรงส่วนหัวว่าจะนำเอาฟังก์ชันมาตรฐานของ library ใดมาใช้ในโปรแกรม #include <iostream.h> #include <math.h> int main() { for (int i = 0; i < 6; i++) cout << i << "\t" << sqrt(i) << endl; return 0; } ฟังก์ชัน sqrt() เป็นฟังก์ชันหารากที่สอง ซึ่งเป็นฟังก์ชันมาตรฐานหนึ่งใน C และ C++ การเรียกฟังก์ชันนี้มาใช้งานจะต้องประกาศส่วนหัว #include <math.h>หรือ #include “math.h” ก่อนจึงจะใช้งานได้

6 ฟังก์ชันใน math.h บางตัว
abs Return absolute value of int acos Calculate arccosine asin Calculate arcsine atan, atan2 Calculate arctangent atof Convert character string to double-precision floating-point value cos Calculate cosine cosh Calculate hyperbolic cosine sin Calculate sine sinh Calculate hyperbolic sine exp Calculate exponential function fabs Find absolute value log Calculate natural logarithm log10 Calculate base-10 logarithm pow Calculate value raised to a power

7 ไฟล์ส่วนหัวบางตัวใน library มาตรฐานภาษา C
<math.h> ประกาศฟังก์ชันคณิตศาสตร์ <stdio.h> ประกาศฟังก์ชันสำหรับรับเข้าและส่งออกข้อมูลมาตรฐาน<stringh.h> ประกาศฟังก์ชันสำหรับการประมวลผลสายอักขระ <time.h> ประกาศฟังก์ชันเวลาและวันที่ <ctype.h> ประกาศฟังก์ชันสำหรับทดสอบตัวอักขระ <iostream.h> ประกาศฟังก์ชันสำหรับรับเข้าและส่งออกสายอักขระ

8 <assert.h> -- for enforcing assertions when functions execute <ctype.h> -- for classifying characters <errno.h> -- for testing error codes reported by library functions <float.h> -- for testing floating-point type properties <limits.h> -- for testing integer type properties <locale.h> -- for adapting to different cultural conventions <math.h> -- for computing common mathematical functions <setjmp.h> -- for executing nonlocal goto statements <signal.h> -- for controlling various exceptional conditions <stdarg.h> -- for accessing a varying number of arguments <stddef.h> -- for defining several useful types and macros <stdio.h> -- for performing input and output <stdlib.h> -- for performing a variety of operations <string.h> -- for manipulating several kinds of strings <time.h> -- for converting between various time and date formats <wchar.h> -- for manipulating wide streams and several kinds of strings <wctype.h> -- for classifying wide characters

9 7.2 ฟังก์ชันที่ผู้ใช้กำหนดเอง
ฟังก์ชันมาตรฐานในภาษาซี++ได้มีการจัดทำไว้แล้วก็จริง แต่บางครั้งยังไม่เพียงพอ กับการใช้งานของนักพัฒนาโปรแกรม ดังนั้น ภาษาC++ ยอมให้มีการ สร้างฟังก์ชันขึ้นใช้งานเอง รูปแบบการกำหนด ชนิดข้อมูลส่งค่ากลับ ชื่อฟังก์ชั่น(ชนิดข้อมูลส่งค่าเข้า ตัวแปร) { ส่วนการกำหนดตัวแปรแบบ Local; statement; statement; …; return ตัวแปรที่ส่งกลับ; }

10 ตัวอย่าง #include <iostream.h> #include <math.h>
int cube(int x); //declare function int main(void) { int ans; ans=cube(5); cout<<"Result is "<<ans<<endl; return 0; } int cube(int x) int result; //local variable result = x*x*x; return result;

11 - การทดสอบโปรแกรมขับ(Test Driver)
การเขียนโปรแกรมในส่วนทดสอบไม่ต้องเขียนให้สวยงานนัก แต่จะเน้นถึงการทำงานของฟังก์ชันที่เราสร้างขึ้นว่าถูกต้องหรือไม่

12 ตัวอย่างการ Test Driver
#include <iostream.h> #include <math.h> int cube(int x); //declare function int main(void) { int ans; cin >>ans; //recive value to ans ans=cube(5); //test Driver function cube() by 5 cout<<ans; return 0; } int cube(int x) int result; //local variable result = x*x*x; return result;

13 - การส่งผ่านค่าพารามิเตอร์ให้ฟังก์ชัน
การผ่านค่าพารามิเตอร์ให้ฟังก์ชันมี 2วิธี 1.วิธีผ่านโดยการอ้างค่า (pass by value) 2.วิธีผ่านโดยอ้างอิง(pass by reference) วิธีผ่านโดยการอ้างค่า จะเป็นการส่งผ่านค่าของพารามิเตอร์ให้ฟังก์ชัน วิธีผ่านโดยการอ้างอิง จะเป็นการส่งผ่านค่าของตำแหน่ง(address) ของพารามิเตอร์ให้ฟังก์ชัน การส่งผ่านวิธีนี้จะต้องใช้เครื่องหมายให้ถูกต้อง เนื่องจากภาษา C สามารถส่งค่ากลับได้ 1 ค่า แต่การผ่านด้วยวิธีนี้สามารถที่จะส่งค่ากลับได้มากว่า 1 ค่า

14 ตัวอย่างวิธีผ่านโดยการอ้างอิง(แบบ1) ใช้ได้ C และ C++
#include <iostream.h> void divide(int *data1); //declare function void main(void){ //main function int a1; a1 = 20; divide(&a1); cout<<a1<<endl; } void divide(int *data1){ //function *data1 = *data1/4;

15 รูปตัวอย่างการพิจารณา
a1 data1 ค่าของ a1 20 0x001120 *ของdata ชี้ไปที่ค่าของ a1 Address ของ a1 0x001120 *data1 #include <iostream.h> void divide(int *data1); //declare function void main(void){ //main function int a1; a1 = 20; divide(&a1); cout<<a1<<endl; } void divide(int *data1){ //function *data1 = *data1/4;

16 ตัวอย่างวิธีผ่านโดยการอ้างอิง(แบบ2) ใช้ได้ เฉพาะC++
#include <iostream.h> void divide(int &data1); //declare function void main(void){ //main function int a1; a1 = 20; divide(a1); cout<<a1<<endl; } void divide(int &data1){ //function data1 = data1/4;

17 - ฟังก์ชันที่ไม่มีการส่งผ่านค่า
ในกรณีที่ไม่มีการรับหรือส่งค่าเข้าไปเราจะใช้คำนิยาม void วางไว้ตรงตำแหน่งที่ไม่มีการรับหรือส่งค่า 1.รูปแบบการกำหนดชนิดไม่มีการส่งค่ากลับ void ชื่อฟังก์ชั่น(ชนิดข้อมูลส่งค่าเข้า ตัวแปร) { } 2.รูปแบบการกำหนดชนิดไม่มีการส่งค่าเข้า ชนิดข้อมูลส่งค่าออก ชื่อฟังก์ชั่น(void) { }

18 3.รูปแบบการกำหนดชนิดไม่มีการส่งค่าเข้าและส่งค่ากลับ
void ชื่อฟังก์ชั่น(void) { } ฟังก์ชันทั้ง 3 แบบที่ไม่มีการส่งผ่านค่านี้ ในการประมวลผลร่วมกับฟังก์ชันหลักนั้น มักจะใช้ตัวแปรแบบ Gobal ในการรับค่าเข้าไปทำงานในฟังก์ชัน และส่งค่ากลับออกมาโดยใช้ตัวแปรแบบ Gobal

19 ตัวอย่างฟังก์ชันมีการส่งค่าเข้าแต่ไม่มีการส่งค่ากลับ
#include <iostream.h> void max(float dat1,float dat2); //declare function void main(void){ //main function float a1,b1; cout<<“Type a1=“; cin>>a1; cout<<“Type b1=“; cin>>b1; max(a1,b1); } void max(float dat1,float dat2){ //function if(dat1>dat2) cout<<dat1<<“ Max than”<<dat2<<endl; else cout<<dat1<<“ a1 Less Than or Equal”<<dat1<<endl;

20 ตัวอย่างฟังก์ชันมีการส่งค่ากลับแต่ไม่มีการส่งค่าเข้า
#include <iostream.h> char Sex(void); //declare function void main(void){ //main function char dat1; dat1=Sex(); //call function cout<<"Your sex is :"<<dat1<<endl; switch(dat1){ case 'f': case 'F': cout<<"Your Female \n"; break; case 'm': case 'M': cout<<"Your Male\n"; break; } char Sex(void){ //sub function char sex; cout<<"What your sex (f/m)? "; cin>>sex; return sex;

21 ตัวอย่างฟังก์ชันไม่มีการส่งค่าเข้าและไม่ส่งค่ากลับ
#include <iostream.h> void Name(void); //declare function char name[20]; //gobal variable 20 character void main(void){ //main function Name(); cout<< “Your name is :“ << name << endl; } void Name(void){ //sub function cout<< “What your name ? “; cin >> name; โปรแกรมอ่านค่าชื่อ โดยใช้ตัวแปรแบบ gobal

22 7.3 ฟังก์ชันโอเวอร์โหลดดิ้ง
ภาษา C++ ยอมให้มีการใช้ชื่อฟังก์ชันที่เหมือนกันได้ถ้าฟังก์ชันเหล่านั้นมีชนิดของตัวพารามิเตอร์ที่ต่างกัน หรืออย่างน้อยจะมีตำแหน่งหนึ่งในรายการที่ทำให้ฟังก์ชันต่างกัน

23 ตัวอย่างฟังก์ชันโอเวอร์โหลดดิ้ง
#include <iostream.h> int max(int, int); double max(double, double); int main() { cout << max(99,77) << " " << max(3.4,7.2) << endl; return 0; } int max(int x, int y) return (x + y); double max(double x, double y) return (x - y);

24 Inclass Lab1 จงเขียนฟังก์ชันและทดสอบฟังก์ชัน min() ต่อไปนี้ โดยให้ฟังก์ชัน min(int,int) เพื่อหาและคืนค่าที่เล็ดที่สุดของจำนวนเต็มที่กำหนดให้ 2 จำนวน int min(int x , int y) ก่อนทำการส่งให้ Test Driver ดูว่าถูกต้องหรือไม่

25 Inclass Lab2 จงเขียนฟังก์ชันและทดสอบฟังก์ชัน GetRadius() ต่อไปนี้ โดยให้ฟังก์ชัน GetRadius(void) รับค่าและคืนค่ารัศมีออกจากฟังก์ชันและนำมาคำนวณหาพื้นที่วงกลมร่วมกับฟังก์ชัน main() int GetRadius(void) ก่อนทำการส่งให้ Test Driver ดูว่าถูกต้องหรือไม่

26 Inclass Lab3 จงเขียนฟังก์ชันและทดสอบฟังก์ชัน ComputeCircle() ต่อไปนี้ โดยให้ฟังก์ชัน ComputeCircle() เพื่อหาเส้นรอบวงและพื้นที่วงกลม โดยมีการรับค่ารัศมี และคืนค่าเส้นรอบวง และ พื้นที่วงกลม ออกจากฟังก์ชัน void ComputeCircle(float r , float *Area , float *Circle) ก่อนทำการส่งให้ Test Driver ดูว่าถูกต้องหรือไม่


ดาวน์โหลด ppt Lecture 7 ฟังก์ชัน To do: Hand back assignments

งานนำเสนอที่คล้ายกัน


Ads by Google