ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
ได้พิมพ์โดยHennie Monica Thomas ได้เปลี่ยน 5 ปีที่แล้ว
1
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
สัปดาห์ที่ 11 ฟังก์ชัน
2
objectives เพื่อให้นิสิตรู้จักและเข้าใจการนิยามและการเขียนฟังก์ชันในภาษาซี สามารถเขียนฟังก์ชันร่วมกับคำสั่งทำซ้ำ อาเรย์ ตัวแปรชี้ตำแหน่ง ตัวแปรชนิดโครงสร้างในภาษาซีได้อย่างมีประสิทธิภาพ สามารถนำความรู้เรื่องฟังก์ชันไปประยุกต์เพื่อแก้ไขโจทย์ปัญหาในชีวิตประจำวันได้ได้อย่างถูกต้องเหมาะสม
3
User-Defined Function
Outline 1 Function 2 p User-Defined Function 3 Function Format 4 Variable & Scope of Function 5 Passing Parameters
4
function What? ฟังก์ชัน คือ ชุดคำสั่งของการทำงานที่ถูกเขียนขึ้นให้โปรแกรมเมอร์สามารถเรียกใช้งานได้โดยง่าย Why? โปรแกรมบางโปรแกรมมีการทำงานที่ซับซ้อน และการทำงานซับซ้อนนั้นถูกเรียกใช้งานบ่อยครั้ง เช่น การหาผลลัพธ์ทางวิทยาศาสตร์ การวิเคราะห์ข้อมูลขนาดใหญ่เป็นต้น
5
Solution วิธีการแก้ไข
เพื่อให้โปรแกรมเมอร์สามารถทำงานได้โดยไม่จำเป็นต้องทราบรายละเอียดการทำงานทั้งหมดของระบบ จะให้โปรแกรมเมอร์ที่ทราบการทำงานโดยละเอียดของกระบวนการต่างๆ จะเขียนชุดคำสั่งในรูปแบบของ ฟังก์ชัน แล้วแจกจ่ายให้โปรแกรมเมอร์อื่นๆ ได้ใช้งาน โปรแกรมเมอร์สามารถเรียกใช้ฟังก์ชันโดยทราบเพียงวิธีการใช้งาน และผลลัพธ์ที่เกิดขึ้นหลังจากเรียกใช้งานฟังก์ชันเท่านั้น เช่น โปรแกรมเมอร์ที่ไม่ทราบว่าทำอย่างไรตัวอักษรจึงจะปรากฎหน้าจอ สามารถใช้คำสั่ง printf ได้เลย โดยโปรแกรมเมอร์จะทราบเพียงแค่ การเรียก printf จะทำให้มีตัวอักษรปรากฎบนหน้าจอได้เท่านั้น
6
The Advantage of Function
ข้อดีของฟังก์ชัน ทำให้โปรแกรมเมอร์สามารถพัฒนาโปรแกรมได้โดยง่าย โดยโปรแกรมเมอร์ไม่จำเป็นต้องทราบว่าการทำงานของฟังก์ชันทำงานอย่างไรทราบเพียงผลลัพธ์ของการทำงานเท่านั้น โปรแกรมเมอร์สามารถเขียนโปรแกรมให้มีการทำงานที่ซับซ้อนได้ โดยไม่จำเป็นต้องเขียนโปรแกรมส่วนที่ซับซ้อนนั้นหลายๆ ครั้ง โปรแกรมเมอร์สามารถออกแบบฟังก์ชันได้ตามความต้องการของโปรแกรมเมอร์
7
PROGRAMMER DEFINED FUNCTION
Type of Function FUNCTIONS IN C C STANDARD LIBRARY PROGRAMMER DEFINED FUNCTION
8
Type of Function (cont.)
กลุ่มฟังก์ชันมาตรฐาน (Standard Library Functions) เป็นฟังก์ชันที่มีอยู่ใน Library มาตรฐานของภาษาซี มาตรฐาน ANSI C มี 15 ประเภท ใช้ Preprocessor #include อ้างถึง Library ที่เก็บฟังก์ชันมาตรฐาน เช่น #include <stdio.h> ฟังก์ชันที่ผู้ใช้กำหนดเอง (User-defined Functions) เป็นฟังก์ชันที่ programmer เขียนขึ้นมาเอง เพื่อทำงานเฉพาะเรื่อง ถ้าอยู่ในไฟล์อื่นต้องใช้ preprocessor #include เช่นเดียวกัน แต่อยู่ใน “ ” แทน < > เช่น #include “mylib.h” ถ้าไม่กำหนด Path จะหมายถึงไฟล์ mylib.h อยู่ใน directory เดียวกันกับโปรแกรม ของเรา
9
Standard Library Function
ฟังก์ชันไลบรารีมาตรฐาน (Standard Library Function) เป็นฟังก์ชันที่มีอยู่แล้วเก็บไว้ใน Library ในการใช้งานต้อง include directives ก่อน directive คือสารบัญของกลุ่มฟังก์ชัน เช่น stdio.h , conio.h , string.h , math.h เป็นต้น การ include directives จะเป็นเหมือนการประกาศให้กับ compiler ทราบว่าจะใช้คำสั่ง ในกลุ่มของ directive นั้นๆ เช่น การใช้คำสั่ง sin() ซึ่งอยู่ใน math.h จะต้องมีบรรทัด include<math.h> เสมอ ดังตัวอย่าง
10
Standard Library Function (cont.)
ชื่อไฟล์ส่วนหัว การทำงานของฟังก์ชัน assert.h ประกาศมาโครและข้อมูลที่ใช้ในการตรวจสอบ และช่วยการแก้ไขข้อผิดพลาดของโปรแกรม (debugging) ctype.h ประกาศตัวแบบของฟังก์ชัน ที่ใช้ในการตรวจสอบชนิดของตัวอักษร และแปลงตัวอักษรระหว่างตัวพิมพ์เล็กกับตัวพิมพ์ใหญ่ errno.h ประกาศค่าคงที่และตัวแปรภายนอกที่ใช้ในการรายงานข้อผิดพลาด float.h ประกาศมาโครและค่าคงที่สำหรับการกำหนดขนาดและการจัดการกับเลขทศนิยม limits.h ประกาศมาโครและค่าคงที่สำหรับการกำหนดขนาดและการจัดการกับเลขจำนวนเต็ม locale.h ประกาศตัวแบบของฟังก์ชันและข้อมูลที่ใช้ในการกำหนดค่าข้อมูลในท้องถิ่น เช่น ระบบวัน เวลา และ สกุลเงิน เป็นต้น math.h ประกาศตัวแบบของฟังก์ชันที่เกี่ยวกับการคำนวณทางคณิตศาสตร์ time.h ประกาศตัวแบบของฟังก์ชันและข้อมูลที่เกี่ยวกับการจัดการวันที่และเวลา
11
Standard Library Function (cont.)
ชื่อไฟล์ส่วนหัว การทำงานของฟังก์ชัน setjump.h ประกาศตัวแบบของฟังก์ชันและข้อมูลที่เกี่ยวกับการกระโดดไปทำงาน ที่ส่วนของโปรแกรมแทนการเรียกใช้ฟังก์ชันแบบปกติ signal.h ประกาศตัวแบบของฟังก์ชัน มาโครและค่าคงที่ สำหรับการจัดการกับสัญญาณที่ส่งมาให้กับซีพียูระหว่างการทำงาน stdarg.h ประกาศมาโครที่ใช้จัดการกับลำดับของอาร์กิวเมนต์ที่ส่งให้กับฟังก์ชัน ในกรณีที่ไม่รู้จำนวนของอาร์กิวเมนต์ที่แน่นอน stddef.h ประกาศค่าคงที่และตั้งชื่อชนิดข้อมูลแทนชนิดข้อมูลแบบปกติ สำหรับการทำงานเฉพาะเรื่อง stdio.h ประกาศตัวแบบของฟังก์ชันและข้อมูลที่เกี่ยวกับการรับและแสดงผลแบบมาตรฐาน stdlib.h ประกาศตัวแบบของฟังก์ชันและข้อมูลที่เกี่ยวกับการทำงานในด้านอื่นๆ นอกเหนือจากกลุ่มฟังก์ชันที่กล่าวมา เช่น การแปลงระหว่างค่าตัวเลขและข้อความ และ การสุ่มค่าตัวเลข เป็นต้น string.h ประกาศตัวแบบของฟังก์ชันที่ใช้ในการจัดการกับสตริง
12
How to use Standard Library Function?
ทราบว่าโปรแกรมที่เขียนต้องการการทำงานอะไร การทำงานดังกล่าวคือฟังก์ชันชื่ออะไร ทราบ directive ที่เป็นสารบัญของคำสั่ง Include directive นั้นๆ เรียกใช้ ฟังก์ชันในโปรแกรม
13
Example 1 #include<stdio.h> #include<math.h>
int main(void) { double rad = -1.0; do { printf ( "Sine of %f is %f\n", rad, sin(rad)); rad += 0.1; } while (rad <= 1.0); }
14
#include<math.h>
Mathematics Function #include<math.h> sin(var); cos(var); tan(var); sqrt(var); pow(var1,var2); log(var); log10(var); exp(var); fabs(var);
15
Mathematics Function (cont.)
Function Description sin(x) sine ของ x, x มีหน่วยเป็นเรเดียน cos(x) cosine ของ x, x มีหน่วยเป็นเรเดียน tan(x) tangent ของ x, x มีหน่วยเป็นเรเดียน sqrt(x) รากที่สองของ x, x>=0 pow(x,y) x ยกกำลัง y log(x) logarithm ฐาน e ของ x, x>=0 log10(x) logarithm ฐาน 10 ของ x, x>=0 exp(x) e ยกกำลัง x abs(x) ค่าสัมบูรณ์ของ x, x เป็นเลขจำนวนเต็ม fabs(x) ค่าสัมบูรณ์ของ x, x เป็นเลขจำนวนจริง
16
Example 2 #include<stdio.h> #include<math.h> int main(){ float a = 3.14; float b = ; 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.002 1.772 21.964 1.144 0.497 23.104 2000
17
#include<string.h> #include<ctype.h>
String Function #include<string.h> strcpy(str1, str2); strcat(dest1, src2); strcmp(dest1, src2); strcmpi(str1, str2); strlen(str); #include<ctype.h> tolower(ch); toupper(ch);
18
String Function (cont.)
Function Description ฟังก์ชันสำหรับอักขระ string.h strcpy(str1, str2) คัดลอกข้อความจาก str2 ไปเก็บที่ str1 strcat(str1, str2) ต่อข้อความใน str1 ด้วย str2 strcmp(str1, str2) เปรียบเทียบตัวอักษรในข้อความ ถ้า str1 = str2 จะได้ 0 strlen(str) หาความยาวข้อความ ฟังก์ชันสำหรับอักขระ ctype.h tolower(ch) เปลี่ยนอักขระเป็นตัวพิมพ์เล็ก toupper(ch) เปลี่ยนอักขระเป็นตัวพิมพ์ใหญ่
19
Example 3 //ผลลัพธ์ Abc AbcDef -1 6 aBcDef #include <stdio.h>
#include <string.h> #include <ctype.h> int main(void) { char string[10]; char *str = "Abc"; //strcpy strcpy(string, str); printf("%s\n", string); //strcat strcat(string, "Def"); //strcmp and strcmpi printf("%d\n",strcmp(str, "abc")); printf("%d\n",strcmpi(str, //strlen printf("%d\n",strlen (string)); //tolower and toupper string[0] = tolower(string[0]); string[1] = toupper(string[1]); printf("%s\n", string); return 0; } //ผลลัพธ์ Abc AbcDef -1 6 aBcDef
20
Monitor Management Function
Function Description ฟังก์ชันสำหรับจัดการหน้าจอ – conio.h clrscr() ลบหน้าจอ clreol() ลบข้อความตั้งแต่ตำแน่ง cursor จนจบบรรทัด gotoxy(x,y) ย้าย cursor ไปตำแหน่งที่ต้องการ (x : column 1-80 | y : row 1-25) delline() ลบบรรทัดที่ cursor อยู่แล้วเลื่อนบรรทัดล่างขึ้น insline() แทรกบรรทัดว่างเข้ามาก่อนบรรทัดที่ cursor อยู่ getch() หยุดคอยให้กดคีย์ใดก็ได้ 1 ครั้ง
21
Size of Variable Function
sizeof(x) หาขนาดพื้นที่ในหน่วยความจำที่เก็บตัวแปร มีหน่วยเป็น 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 bytes size of grade = 4 bytes size of song = 15 bytes size of double = 8 bytes
22
User-Defined Function
Outline 1 Function 2 p User-Defined Function 3 Function Format 4 Variable & Scope of Function 5 Passing Parameters
23
User-Defined Function
เนื่องจาก Standard Library Function ทั้งหมด เป็นฟังก์ชันมาตรฐานที่มีเฉพาะการทำงานพื้นฐานต่างๆ เท่านั้น หากต้องการฟังก์ชันที่มีการทำงานเฉพาะกิจ โปรแกรมเมอร์ต้องเขียนฟังก์ชันขึ้นมาเอง
24
User-Defined Function (cont.)
ต้องมีการประกาศ function prototype ที่ต้นโปรแกรมเสมอ จึงจะเรียกใช้งาน function นั้นๆ ได้ (เป็นการบอก Compiler ว่าคำสั่งดังกล่าวคือฟังก์ชัน ไม่ใช่ syntax error) ต้องมีการเขียนฟังก์ชันตามโครงสร้างที่ได้ประกาศไว้ใน function prototype เท่านั้น
25
User-Defined Function (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) return(var); พรีโปรเซสเซอร์ไดเร็คทีฟ ฟังก์ชันโพรโทรไทพ์ ส่วนหัวโปรแกรม ตัวแปรชนิดโกบอล ตัวแปรชนิดโลคอล ฟังก์ชันหลัก คำสั่ง ส่วนตัวโปรแกรม ฟังก์ชันย่อย
26
User-Defined Function (cont.)
ฟังก์ชัน : กลุ่มคำสั่งทำงานที่มีการรับค่าแล้วทำตามคำสั่งในฟังก์ชั่น และมีการส่งค่ากลับ (return) Process (ทำงาน) ส่งค่ากลับ รับค่ามา Function Return_Type Function_name(Type variable)
27
User-Defined Function (cont.)
การเขียนฟังก์ชันโดยที่ไม่ต้องมีการประกาศก่อน สามารถประกาศตัวแปรไว้ใช้งานเฉพาะในฟังก์ชันได้ ฟังก์ชันประกอบไปด้วย คำสั่ง (Statement) : การทำงานอย่างหนึ่ง เรียงกันไป Return : การคืนค่าที่เป็นผลลัพธ์การทำงานของฟังก์ชัน Function Main ฟังก์ชันที่ทุกโปรแกรมที่เรียกทำงานได้ต้องมี โปรแกรมจะเริ่มทำงานจากฟังก์ชัน main ก่อน ฟังก์ชัน main จะมีการเรียกการทำงานของฟังก์ชั่นอื่นๆ
28
ระหว่างปีกกาจะประกอบไปด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้โปรแกรมทำงาน
Main Function ส่วนนี้ทุกโปรแกรมจะต้องมี โดยโปรแกรมหลักจะเริ่มต้นด้วย main() และตามด้วยเครื่องหมายปีกกาเปิด ‘{’ และปีกกาปิด ‘}’ ระหว่างปีกกาจะประกอบไปด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้โปรแกรมทำงาน แต่ละคำสั่งจะต้องจบด้วยเซมิโคลอน ‘;’ (Semicolon) #include <stdio.h> void main(void) { ... Statement ; }
29
Main Function (cont.) ตัวอย่าง ผลการทำงาน Height in inches is 72
#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
30
User-Defined Function (cont.)
สร้างฟังก์ชันหรือคำใหม่ขึ้นมาใช้งานตามที่เราต้องการ ระหว่างปีกกาจะประกอบด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้ฟังก์ชันทำงาน สามารถเรียกใช้ภายใน โปรแกรมได้ทุกที่ #include <stdio.h> int function() void main(void) { ... Statement ; } return (int value);
31
Example 4 ตัวอย่าง ผลการทำงาน Height in inches is 72
#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
32
Example 5 #include <stdio.h> void adder(int , int ); int summ;
int main() { adder(20, 30); // จุดที่เรียกใช้ฟังก์ชันโพรโตไทป์ printf(“summary = %d”,summ) return 0; } void adder(int a, int b) summ = a+b;
33
How to process function?
34
User-Defined Function
Outline 1 Function 2 p User-Defined Function 3 Function Format 4 Variable & Scope of Function 5 Passing Parameters
35
Function Declaration เป็นการประกาศการใช้งานฟังก์ชั่นที่อยู่หลัง main()
type คือ ชนิดของฟังก์ชัน ว่าฟังชันที่ทำการสร้างจะส่งข้อมูลชนิดใดกลับ function_name คือ ชื่อฟังก์ชันที่จะสร้างขึ้น type-n คือ ชนิดของข้อมูลที่จะส่งให้ฟังก์ชัน type function_name(type-1,type-2,...,type-n);
36
Function Declaration(cont.)
การเขียนโปรแกรมโดยมีฟังก์ชันที่สร้างขึ้นเองมี 2 รูปแบบ สร้างฟังก์ชัน ก่อน ฟังก์ชันหลัก ฟังก์ชันหลักสามารถเรียกใช้งานฟังก์ชันที่สร้างขึ้นได้ สร้างฟังก์ชัน หลัง ฟังชันหลัก ต้องประกาศ Function Prototype ก่อนเพื่อให้ฟังก์ชันหลักรู้ว่ามีฟังก์ชันที่สร้างขึ้น
37
Function Declaration(cont.)
#include<file.h> type variable; type function_name(type variable) { statement-1; ... statement-n; return(var); } int main() return 0;
38
Function Declaration(cont.)
#include<file.h> type function_name(type); type variable; int main() { statement-1; ... statement-n; return 0; } type function_name(type variable) return(var);
39
Function Format #1 แบบที่ 1: ฟังก์ชันแบบไม่มีการส่งค่ากลับและไม่มีพารามิเตอร์ เป็นฟังก์ชันที่ไม่มีการส่งค่ากลับไปให้กับฟังก์ชันที่เรียกมา และไม่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย void main() { my_print(); } void my_print() printf(“Hello world”);
40
Function Format #2 แบบที่ 2 ฟังก์ชันแบบไม่มีการส่งค่ากลับแต่มีพารามิเตอร์ เป็นฟังก์ชันที่จะไม่มีการส่งค่ากลับไปให้ฟังก์ชันที่เรียกขึ้นมา แต่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย void main() { my_print(‘a’, 5); } void my_print(char ch, int x) while (x > 0) printf(“%c”, ch); x--; void main() { my_print(2); } void my_print(int x) printf(“%d”, x);
41
Function Format #3 แบบที่ 3 ฟังก์ชันแบบมีการส่งค่ากลับและไม่มีพารามิเตอร์ เป็นฟังก์ชันที่จะมีการส่งค่ากลับไปให้ฟังก์ชันที่เรียกมา แต่ไม่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย void main() { printf(“%d”,my_func()); } int my_func() int a; scanf(“%d”,&a); return (a*5);
42
Function Format #4 แบบที่ 4 ฟังก์ชันแบบมีการส่งค่ากลับและมีพารามิเตอร์
แบบที่ 4 ฟังก์ชันแบบมีการส่งค่ากลับและมีพารามิเตอร์ เป็นฟังก์ชันที่จะมีการส่งค่ากลับไปให้กับฟังก์ชันที่เรียกมา แต่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย 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;
43
Example 4 START show_star(n) ********* * EE-UP * ********* num=9 i=1
show_star(num) T i<=n kmitl F * i++ show_star(num) end END
44
Example 4 (cont.)
45
Example 5
46
Test yourself จากโปรแกรมตัวอย่างจงอธิบาย ฟังก์ชันชื่ออะไร ?
มีการรับค่าหรือไม่ ถ้ามี มีกี่พารามิเตอร์ ? ฟังก์ชันรับค่าเป็นตัวแปรชนิดใด ? ฟังก์ชันมีการส่งค่ากลับหรือไม่ ถ้ามี ส่งค่ากลับเป็นตัวแปรชนิดใด ? ถ้าต้องการตัดบรรทัด /*Function Prototype*/ ออกต้องปรับเปลี่ยนโปรแกรมอย่างไร ? โปรแกรมทำงานอะไร ?
47
User-Defined Function
Outline 1 Function 2 p User-Defined Function 3 Function Format 4 Variable & Scope of Function 5 Passing Parameters
48
Variable & Scope of Function
ตัวแปร global เป็นตัวแปรที่ฟังก์ชันใดก็สามารถเรียกใช้ได้โดยจะประกาศสร้างตัวแปรต่อจาก พรีโปรแซสเซอร์ไดเร็คทีฟ ตัวแปร local เป็นตัวแปรที่สามารถเรียกใช้ได้ภายในเฉพาะฟังก์ชันที่ประกาศสร้างตัวแปรนั้นโดยจะประกาศสร้างตัวแปรภายในแต่ละฟังก์ชัน ตัวแปร static เป็นตัวแปรแบบ local โดยค่าของตัวแปรจะมีค่าต่อเนื่องจากค่าครั้งหลังสุดในฟังก์ชันนั้น
49
Global Variable Example 6
50
Local Vs Global Example 7
51
Static Variable Example 7 ผลลัพธ์ a = 15, sa = 15 a = 15, sa = 20 a = 15, sa = 25 a = 15, sa = 30 a = 15, sa = 35 a = 15, sa = 40 a = 15, sa = 45 a = 15, sa = 50 a = 15, sa = 55 a = 15, sa = 60
52
User-Defined Function
Outline 1 Function 2 p User-Defined Function 3 Function Format 4 Variable & Scope of Function 5 Passing Parameters
53
Passing Parameters (Arguments Passing)
การส่งค่าตัวแปรให้กับฟังก์ชันมีสองแบบคือ การส่งค่าที่เก็บอยู่ในตัวแปรให้กับฟังก์ชัน (pass by value) การส่งค่า Address ของตัวแปรให้กับฟังก์ชัน (pass by reference)
54
Passing by Value ในการส่งผ่านค่าแบบ pass by value ค่าที่ส่งเข้าไปในฟังก์ชัน อาจเป็นค่าคงที่โดยตรง หรืออาจส่งเป็นค่าจากตัวแปรก็ได้ เช่น result = add( a, b ); หรือ result = add( 5, 10); โปรแกรมจะนำค่าคงที่ หรือค่าที่คัดลอกมาจากตัวแปร ณ จุดที่เรียกใช้ ส่งผ่านให้กับพารามิเตอร์ซึ่งเป็นตัวแปรภายในฟังก์ชันที่ถูกเรียกใช้เท่านั้น หากค่าที่ส่งเข้าไปทำงานภายในฟังก์ชันมีการเปลี่ยนแปลงไปจากเดิมจะไม่มีผลกระทบกับค่าของตัวแปรที่ส่งผ่านค่ามาให้จากภายนอกฟังก์ชัน
55
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; }
56
Example 8 (cont.) int main() { int x = 5, y = 10;
printf(“main: x = %d, y = %d\n”, x, y); swap(x, y); return 0; } main: x = 5, y = 10 swap: a = 5, b = 10 swap: a = 10, b = 5
57
Pass by Reference การส่งผ่านค่าแบบ pass by reference เป็นการส่งผ่านค่าตำแหน่ง (address) ของตัวแปร แทนการส่งค่าของข้อมูลที่เก็บอยู่ในตัวแปร การส่งค่าแบบนี้จะทำให้ตำแหน่งของข้อมูลที่ทำงานภายในฟังก์ชัน เป็นตำแหน่งเดียวกับข้อมูลที่ฟังก์ชันส่งผ่านเข้ามาให้ เมื่อมีการเปลี่ยนแปลงค่าของข้อมูลที่ส่งผ่านเข้าไปทำงานในฟังก์ชัน ค่าของตัวแปรที่อยู่นอกฟังก์ชันก็จะเปลี่ยนตามไปด้วย
58
Pass by Reference (cont.)
ภาษาซีใช้วิธีการส่งผ่านค่าตำแหน่งของตัวแปร โดยใช้ชนิดข้อมูลแบบพอยน์เตอร์ (pointer) เข้ามาช่วย การประกาศชนิดข้อมูลแบบตัวชี้ ใช้ตัวดำเนินการ * (Dereferencing operator) การกำหนดตำแหน่งข้อมูลให้ตัวชี้ใช้ตัวดำเนินการ & (Referencing operator)
59
Dereferencing Operator (cont.)
การอ้างถึงค่าของข้อมูลที่อยู่ในตำแหน่งที่ระบุ ให้ใช้ตัวดำเนินการ *(Deferencing operator) เช่นเดียวกับตอนประกาศตัวแปรแบบตัวชี้ int no = 1, *iPtr = NULL; iPtr = &no; /* iPtr points to value of no */ printf(“no = %d\n”, no); *iPtr = 2; /* value of no is also changed to 2 */ no = 1 no = 2
60
Dereferencing Operator
วิธีการประกาศชนิดข้อมูลแบบพอยน์เตอร์ เราจะใช้ตัวดำเนินการ * (derefercing operator) ตามหลังชื่อชนิดข้อมูล แต่ก่อนหน้าชื่อตัวแปร data type function_name(data type *var); int main(void){ data type new_var = function_name(&variable); } void function_name(data type *var); int main(void){ function_name(&variable); }
61
Pass by Reference (cont.)
นำฟังก์ชัน swap จากตัวอย่างข้างต้นมาปรับใหม่ โดยใช้การส่งผ่านค่าแบบ pass by reference เพื่อให้ข้อมูลของตัวแปรที่ส่งผ่านเข้าไปมีการเปลี่ยนแปลงตามค่าที่ถูกเปลี่ยนภายในฟังก์ชันด้วย
62
Example 9 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:
63
Example 9 (cont.) 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: }
64
Result main: x = 5, y = 10 swap: a = 5, b = 10 swap: a = 10, b = 5 main: x = 10, y = 5 จากผลการทำงานของโปรแกรม แสดงให้เห็นผลของการส่งผ่านค่าแบบ pass by reference ซึ่งทำให้ค่าของตัวแปรที่ส่งผ่านให้กับฟังก์ชันที่เรียกใช้ มีผลตามการเปลี่ยนแปลงของค่านั้นภายในฟังก์ชันด้วย
65
Pass by Reference Analysis
เราเคยใช้การส่งผ่านค่าแบบ pass by reference มาก่อนในฟังก์ชัน scanf สังเกตได้ว่าส่วนอาร์กิวเมนต์ของฟังก์ชัน scanf มีลักษณะเหมือนกัน โดยใช้ตัวดำเนินการ & กำหนดตำแหน่งของตัวแปร ที่จะรับค่าเข้ามาจากคีย์บอร์ด เช่น scanf(“%d”, &no); scanf(“%c”, &choice);
66
Example 10
67
Example 10 (cont.)
68
Result
69
Example 11
70
Example 12
71
Example 13
72
Summary Passing Parameters
การเลือกใช้วิธีการส่งผ่านค่าให้กับฟังก์ชัน ขึ้นอยู่กับวัตถุประสงค์การใช้ ปกติการส่งค่าให้กับฟังก์ชัน จะใช้วิธีแบบ pass by value เพราะการทำงานภายในฟังก์ชันไม่ควรจะมีผลกระทบต่อค่าของตัวแปรภายนอก ฟังก์ชันมีช่องทางในการส่งค่ากลับมาให้ตัวแปรภายนอกอยู่แล้ว โดยใช้ return แต่ค่าที่ส่งกลับจากประโยค return มีได้เพียงค่าเดียว หากต้องการผลลัพธ์กลับจากฟังก์ชันมากกว่า 1 ค่า ต้องใช้การส่งผ่านแบบ pass by reference
73
แบบฝึกหัด แบบฝึกหัด
74
Flowchart โปรแกรมแสดงผลตัวเลขโดยการเขียนโปรแกรมแบบมีเงื่อนไขและวนรอบ
2.1 แสดงเลข 0 2.2 แสดงเลข 1 ... 2.10 แสดงเลข 9 โปรแกรม แสดงผลรูปสามเหลี่ยม โดยมีความกว้างฐาน 51* และความสูง 26* โดยบังคับว่าการเขียนโปรแกรมต้องเป็นแบบมีเงื่อนไขและวนรอบ(if else,loop) ************ * * *** ***** ******* ********* *********** ICT, University of Phayao
75
โปรแกรม แสดงผลรูปสามเหลี่ยม โดยมีความกว้างฐาน 51. และความสูง 26
โปรแกรม แสดงผลรูปสามเหลี่ยม โดยมีความกว้างฐาน 51* และความสูง 26* โดยบังคับว่าการเขียนโปรแกรมต้องเป็นแบบมีเงื่อนไขและวนรอบ(if else,loop) ooooxoooo : i = 1 (2*i-1) oooxxxooo : i = 2 (2*i-1) ooxxxxxoo : i = 3 (2*i-1) oxxxxxxxo : i = 4 (2*i-1) xxxxxxxxx : i = 5 (2*i-1) * *** ***** ******** ********** ************ j = 1 – 9 x เริ่มต้นที่ 1+(9 – (2*i-1)) / 2 จำนวน x มี 2*i-1 ตัว ICT, University of Phayao
76
ตัวอย่างการสร้างตัวเลขจากฟังก์ชัน
เราสามารถพิมพ์ข้อความ ขนาดกว้าง 10 x 10 เช่น โดยการวนรอบ หรือ i = 1 – 10 รอบที่ j = 1 i = i = 1 – 10 รอบที่ j = 2 j = i = 1 – 10 รอบที่ j = 3 i = 1 – 10 รอบที่ j = … i = 1 – 10 รอบที่ j = 10 ICT, University of Phayao
77
ตัวอย่างการสร้างตัวเลขจากฟังก์ชัน
* ********** * * * ********** * * * ********** * ********** * ********** * ********** * * * * * * ********** * * * ********** * * * * * * ********** * * * * * * * ICT, University of Phayao
78
ตัวอย่างการสร้างตัวเลขจากฟังก์ชัน
* ********** * * * ********** * * * ********** * ********** * ********** * ********** * * * * * * ********** * * * ********** * * * * * * ********** * * * * * * * ICT, University of Phayao
79
********** * * ********** * * * ส่วนที่ 1 ********** * * ส่วนที่ 2 G1
* * * * ส่วนที่ 2 ********** G1 G2 * * * G3 G4 * * * * ส่วนที่ 3 * * * * ส่วนที่ 4 * * * * ส่วนที่ 5 ********** ICT, University of Phayao
80
ตัวอย่างการสร้างตัวเลขจากฟังก์ชัน
* ********** * * * ********** * * * ********** * ********** * ********** * * * * * * ********** * * * ********** * * * * * * ********** * * * * * * * ********** * ********** G1 G2 * * * G3 G4 ICT, University of Phayao
81
ตัวเลข G1 G2 G3 G4 1 2 3 4 5 6 7 8 9 ********** * * * * G1 G2 G3 G4
1 2 3 4 5 6 7 8 9 G1 ********** G2 * * G3 * G4 * ICT, University of Phayao
82
********** * * * * G1 G2 G3 G4 ตัวเลข ส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 3
ส่วนที่ 4 ส่วนที่ 5 G1 G2G2G2 G2 1 G4 G4G4G4 2 G3G3G3 3 4 5 6 7 8 9 G1 ********** G2 * * G3 * G4 * ICT, University of Phayao
83
ตัวอย่างการสร้างตัวเลขจากฟังก์ชัน
function G1 function G2 function G3 function G4 function main( ) ICT, University of Phayao
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.