! 49 •! ตัวอยางโปรแกรม while1.cpp แสดงการกําหนดเงอ่ื นไข เพื่อใหสามารถพิมพขอความซํา้ ๆ ได จาํ นวน 5 ครง้ั ดังนี้ /*Program : while1.cpp Process : display text 5 times */ #include <iostream.h> #include <conio.h> void main() { int i; clrscr(); i=1; //set initial of variable in while conditio while(i<=5) { cout<< \"I love C++ Langauge\\n\"; i++; // increase variable value } getch(); } •! ตัวอยางโปแกรม while2.cpp แสดงการทํางานของโปรแกรมโดยใช while แบบ หลาย statement โดยโปรแกรมจะใหพมิ พต ัวอกั ขระทีถ่ ูกตอ ง ซึ่งมีอยู 3 ตัว คือ 8, * และ a ตัวใด ตวั หนง่ึ ถาพิมพอักขระไมตรงตามที่กาํ หนดไว โปรแกรมจะใหพ มิ พใ หมท างคียบ อรด ดังนี้ /*Program : while2.cpp Process : enter correct character */ #include <iostream.h> #include <conio.h> void main() { char ch; int count; //begin statement clrscr(); count=0; cout<< \"Please enter character : \\n\"; while (ch!='8' && ch!='*' && ch!='a' ) {cin>>ch; //enter character from keyboard count++; //count of times that enter character } ศิริชัย นามบุรี การเลอื กทํา
! 50 cout<< \"Character \"<<ch<< \" is correct !!! \\a\\n\"; cout<<\"You enter \"<<count<<\" times\"; getch(); } •! ตัวอยางโปรแกรม while3.cpp แสดงการคาํ นวณผลรวมและหาคา เฉลย่ี ของจํานวน 1 - 10 ดวยการใชลูป while ทใ่ี หผ ลลพั ธเ หมอื นการใชล ปู for /*Program : while4.cpp Process : calculate summation and average 1-10*/ #include <iostream.h> #include <conio.h> #include <iomanip.h> void main() { float number,sum,average; //begin statment clrscr(); cout<< \"Program calculate summation and average 1-10\\n\"; sum=0; average=0; number=1; while (number<=10) //begin loop { cout<<number<<'\\n'; sum+=number; //same as … sum=sum+number number++; //increase variable +1 } //end loop average=sum/(number-1); cout<< \"\\nSummation number 1-10 = \"<<sum; cout<< \"\\nAverage number 1-10= \"<<setprecision(2)<<average; getch(); } ศิริชยั นามบุรี การเลอื กทํา
! 51 ♦ล! ูป do ลูป do จะเรม่ิ ดว ยการทาํ งาน รอบแรก 1 รอบกอ นเสมอ และมีการทดสอบเงื่อนไขที่ทายลูป ถา เงอ่ื นไขเปน จริง จะมีการทาํ ซํ้าในลูป แตถ า เงอ่ื นไขเปน เทจ็ จะเลิกทํางานในลูป มรี ปู แบบดงั น้ี 1. ลูป do ที่มี statement เดยี ว มรี ปู แบบดงั น้ี do statement; while(เงอ่ื นไขเปรยี บเทยี บ); 2. ลูป do ที่มีหลาย statement มรี ปู แบบดงั น้ี do{ statement; statement; statement; }while(เงอ่ื นไขเปรยี บเทยี บ); 3. ลูป do ซอนกัน มรี ปู แบบดงั น้ี do{ statement; statement; do{ statement; statement; }while(เงอ่ื นไขเปรยี บเทยี บลปู ใน); statement; }while(เงอ่ื นไขเปรยี บเทยี บลปู นอก); ศิริชยั นามบรุ ี การเลอื กทํา
! 52 •! ตัวอยางโปรแกรม dowhile1.cpp แสดงการพิมพขอความ I love C++ Langauge ซํา้ จาํ นวน 5 ครง้ั โดยใชล ปู do แบบหลาย statement /*Program : dowhile1.cpp Process : display text 5 times*/ #include <iostream.h> #include <conio.h> void main() { int i; clrscr(); i=1; //set initial of variable in do...while condition //begin loop do{ cout<< \"I love C++ Langauge\\n\"; i++; //increase value of i variable +1 }while(i<=5); //condition for loop getch(); } •! โปรแกรม dowhile2.cpp แสดงการคาํ นวณผลรวมและคาเฉลี่ย 1-10 โดยใชล ปู do…while ซึ่งใหผลลัพธเหมือนกับการใชลูป while /*Program : dowhile2.cpp Process : calculate summation and average 1-10 */ #include <iostream.h> #include <conio.h> void main() { float number,sum,average; //begin statment clrscr(); cout<< \"Program calculate summation and average 1-10\\n\"; sum=0; average=0; number=1; do{ cout<<number<<'\\n'; sum+=number; //calculate summation number++; ศิริชยั นามบรุ ี การเลอื กทํา
! 53 }while (number<=10); average=sum/(number-1); cout<< \"\\nSummation number 1-10 = \"<<sum; cout<< \"\\nAverage number 1-10= \"<<average; getch(); } ♦ก! ารออกจากลปู ดว ย break break เปน คยี เ วริ ด (keyword) เพื่อใหเลิกการทํางานหรอื ออกจากลปู ทนั ที ในขณะที่การ ทดสอบเงื่อนไขที่กาํ หนดไว ยังไมใหคาเปรียบเทียบที่มีผลใหตองออกจากลูป สามารถนํา break ไปใชได กับลูปทุกประเภท (โดยสว นใหญ break ใชรวมกับประโยคที่มีเงื่อนไขมากอน เชน if ตัวอยางการใช break กับลูป for เปน ดงั น้ี for (ตัวแปรและคาเริ่มตน; เงอ่ื นไขเปรยี บเทยี บ; เพิ่มหรือลดคาตัวแปร) { statement; statement; break; ออกจากลปู statement; } •! ตัวอยางโปรแกรม break.cpp แสดงการทาํ งานหาผลรวมของลูป for ของเลข 1-100 แตมี เงอ่ื นไขวา ถาคาของตัวแปร row มากกวา 23 ให break ออกจากลูปกอนที่จะครบ 100 รอบ /*Program : break.cpp Process : display using 'break' in for loop*/ #include <iostream.h> #include <conio.h> void main() { int x,row,sum; clrscr(); row=0;sum=0; for(x=1;x<=100;++x) //condition for 100 loop { cout<<\"x=\"<<x<<'\\n'; sum+=x; row++; ศิริชยั นามบุรี การเลอื กทํา
! 54 if(row>23) //condition of break break; } cout<<\"summation 1-\"<<x<<\" = \"<<sum; getch(); } ♦!การยอนกลับไปตนลูปดวย continue continue เปน คยี เ วริ ด (keyword) เพื่อกาํ หนดใหโ ปรแกรมยอ นกลบั ไปเรม่ิ ทาํ งานที่ตนลูปนั้น ใหม ในขณะที่ยังทาํ งานไมถึงทายลูป หรอื ยงั ไมค รบจาํ นวนรอบทก่ี าํ หนดไวใ นเงอ่ื นไข สามารถใช continue กับลูป for while do…while ไดทุกประเภท •! ตัวอยางโปรแกรม continue.cpp แสดงการใช continue ใหก ลบั ไปเรม่ิ ทํางานทต่ี น ลปู ใหม /*Program : continue.cpp Process : display keyword 'continue' in do...while loop */ #include<iostream.h> #include<conio.h> void main() { float x,y; char choice; do{ clrscr(); cout<< \"\\nProgram Divide Calculation x/y\"; cout<< \"\\n******************************\"; cout<< \"\\nEnter X : \"; cin>>x; cout<< \"\\nEnter Y : \"; cin>>y; if(y==0) { cout<< \"\\a\\n\\nCan't divide by zero !!!\"; cout<< \"\\npress any key to continue...\"; getch(); continue; //return to begin loop } cout<< \"\\n*** Result \"<<x<<\"/\"<<y<<\" = \"<<x/y; cout<< \"\\n\\nCalculate another <y or n> ? \"; cin>>choice; }while((choice!='n')&&(choice!='N')); clrscr(); } ศิริชัย นามบุรี การเลอื กทํา
! 55 ♦แ! บบฝกหัดทายบท 1. ใหเ ขยี นโปรแกรมเพอ่ื คาํ นวณหาคา n! ( n factorial) โดยกรอกคา n ทางคยี บ อรด ได 2. ใหเ ขยี นโปรแกรมเพอ่ื แสดงตวั อกั ขระ(character) จากรหสั ASCII ตง้ั แต 0 - 255 3. ใหเ ขยี นโปรแกรมแสดงจาํ นวนเลขค่ี(odd) ตง้ั แต 1-1000 คาํ นวณหาผลรวมและคาเฉลี่ยของจํานวนค่ี พรอ มกบั นบั วา มจี ํานวนคก่ี จ่ี าํ นวนทห่ี ารดว ย 3 และ 4 ลงตวั มจี ํานวนใดบาง และมีกี่จํานวน 4. ใหเ ขยี นโปรแกรมหาจาํ นวนท่ี 3 และ 6 หารลงตวั ระหวา ง 500 – 1000 พรอมกับนับวามีกี่ จาํ นวน รวมถงึ คาํ นวณหาผลรวมและคาเฉลี่ยของจํานวนดังกลาว 5. ใหเ ขยี นโปรแกรมเพอ่ื แสดงตารางการคณู โดยสามารถกําหนดจํานวนเรม่ิ ตน และจาํ นวนสุดทาย ไดทางคียบอรด เชน Begin : 2 End : 4 Result 2*1=2 3*1=3 4*1=2 2*2=4 3*2=6 4*2=8 2*3=6 3*3=9 4*3=12 ……… …….. ………. 2*12=24 3*12=36 4*12=48 6. ใหเ ขยี นโปรแกรมเพอ่ื แสดงจํานวนตวั เลข และหาผลรวมของจาํ นวนคูและคี่ ใหมีรูปแบบการแสดง ผลดังนี้ 1 3 5 7 9 11 13 15 17 19 2 4 6 8 10 12 14 16 18 20 SUMMATION OF ODD NUMBER = xxx SUMMATION OF EVEN NUMBER = xxx 7. จงเขยี นโปรแกรมแสดงการคาํ นวณเลขยกกาํ ลังสอง จํานวน 1 -10 ใหมีรูปแบบการแสดงผลดังนี้ 11 24 39 4 16 … …. 10 100 ศิริชยั นามบรุ ี การเลอื กทํา
! 56 8. ใหเ ขยี นโปรแกรมคํานวณการคณู ของ 1 -9 ใหมีรูปแบบการแสดงผล ดงั น้ี 123456789 11 2 24 3 369 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 48 49 8 8 16 24 32 40 45 56 64 9 9 18 27 36 45 54 63 72 81 9. ใหเ ขยี นโปรแกรมแสดงคา จาํ นวนเฉพาะ(prime) มีชวงขอมูลระหวาง 1- 300 พรอมกับนับวามี จํานวนเฉพาะ(prime) กี่จํานวน 10. สมมติให I , J , K เปน ตวั แปรประเภท integer ใหเขียนรูปแบบผลลัพธของโปรแกรมที่กาํ หนดให ดงั น้ี 10.1 I=0; J=0; for(;;) { K=2*I*J; if(K>10) break; cout<<I<<J<<K<<'\\n'; I++; J++; } cout<<K<<'\\n'; ศิริชยั นามบุรี การเลอื กทํา
! 57 10.2 I=0; J=0; for(;;) { K=2*I*J; if(K>10) break; cout<<I<<J<<K<<'\\n'; if(I+J>5) break; I++; J++; } cout<<K<<'\\n'; 10.3 I=5; for(;;) { cout<<I; I -=2; if(I<1) break; J=0; for(;;) { J++; cout<<J; if(J>=I) break; } cout<<\"###\\n\"; } cout<<\"***\\n\"; 11. Write a prgram to read a sequence of positive integers and to print the greatest of thest. Use a negative to signal the end of the input data. 12. Write a program that reads a sequence of positive real numbers and computes their average. A negative number to signal the end of the input data. ศิริชัย นามบรุ ี การเลอื กทํา
! บทที่ 5 ฟง กช นั (Function) ♦ค! วามหมายและประโยชนข องฟง กช นั ฟงกชัน (Function) หมายถึง ประโยคคาํ สั่ง(statements) ชุดหนึ่งซึ่งมีชื่อเรียกใชโดยเฉพาะ ฟงกชันหนึ่ง ๆ จะทาํ หนาที่เฉพาะอยางใดอยางหนึ่ง สว นอน่ื ๆ ของโปรแกรมสามารถเรยี กสเตตเมนต ชดุ นไ้ี ด โดยการเรยี กใช ชื่อฟงกชัน นน้ั ๆ ใหถูกตองตามรูปแบบที่ฟงกชันนั้น ๆ กําหนดไว ฟงกชันในภาษา C++ มี 2 ประเภท คือ 1. User Defined Function คือ ฟง กช นั ทผ่ี เู ขยี นโปรแกรมสรา งขน้ึ หรอื กาํ หนดขน้ึ เอง ตามรปู แบบการสรางฟงกชันของ C++ เพอ่ื นํามาใชใ นการเขยี นโปรแกรมของตนเอง (จะกลาวถึงรายละเอียด ตอ ไป) 2. Standard Function คือ ฟงกชันมาตรฐานที่บริษัทผูสราง Compiler ภาษา C++ ไดสราง รวบรวมไวในคลัง (Library) ผเู ขยี นโปรแกรมสามารถเรยี กใชไ ดท นั ที ไดแก ฟงกชันที่ประกอบอยูใน header file ตา ง ๆ ขณะเรียกใช ตอ ง #include ชื่อไฟลที่รวบรวมฟงกชันนั้นไวกอน เชน ฟงกชัน clrscr() ทาํ หนาที่ลางจอภาพใหวางและเลื่อน cursor ไปไวที่มุมซายบนของจอภาพ เปนฟงกชันอยูใน ไฟล conio.h เปน ตน ประโยชนฟ ง กช นั ในการเขยี นโปรแกรมใน C++ มีดังตอไปนี้ 1. ชวยใหไมตองเขียน statement เดมิ ๆ ซํา้ กันหลายครัง้ ในโปรแกรมเดียวกัน 2. ชว ยใหส ามารถคน หาสว นทผ่ี ลหรอื สว นทต่ี อ งปรบั ปรงุ ไดอ ยา งรวดเรว็ เนอ่ื งจากเราทราบวา แตละฟงกชันทาํ หนาที่อะไร และสรางฟงกชันไวที่สวนใดของโปรแกรม 3. ทาํ ใหโ ปรแกรมมขี นาดกระทดั รดั ทาํ ความเขา ใจไดง า ยและรวดเร็ว เพราะเขยี นแบง เปน ฟง กช นั ตามงานหรอื หนา ทท่ี ต่ี อ งการเขยี น 4. เนื่องจากฟงกชันมีการทาํ งานเปน อสิ ระ สามารถนําฟงกชันที่สรางไวและมีการทาํ งานเปน มาตรฐานแลว เก็บไวใน Header File เพ่ือใหเ ปนคลังคําสั่ง(Library) ของผูใช นาํ ไปใชไ ดใ นโปรแกรม อน่ื ๆ ไดอ กี ซง่ึ ชว ยใหเ ราเขยี นโปรแกรมใหมไ ดร วดเรว็ ขน้ึ โดยการนาํ ฟงกชันที่มีอยูแลวมาใชใหมได ศิริชยั นามบรุ ี ฟง กช นั (Functions)
! 59 ♦!สวนประกอบในการสรางฟงกชัน ฟง กช นั ทเ่ี ราสรา งขน้ึ เอง เรยี กวา User Defined Function ซึ่งใน C++ กาํ หนดใหเ มอ่ื มกี ารเรยี ก ใชชื่อฟงกชันใด ๆ จะตองมีการ สงคากลับมา (return value) ในชื่อฟงกชันนั้นเสมอ มรี ปู แบบโครง สรางของฟงกชันประกอบไปดวยสวนหัวของฟงกชันและสวนของ statement ดงั น้ี function_type function_name (parameter1,parameter2,…) //function header { int … //declaration variable in function float … //declaration variable in function statement; //statement in function statement; //statement in function return(value); //function must return only one or null value to function_name } ความหมายของสวนประกอบในฟงกชัน มีดังนี้ function_type คือ ประเภทคา หรอื ขอ มลู ทไ่ี ดจ ากการทํางานของฟงกชัน ซึ่งจะตองใหคาคืน กลับมาเก็บไวในชื่อของฟงกชัน (function_name) ถาเปนประเภท void จะเปน ฟง กชันประเภทท่ตี องมี การ return value function_name คือ ชื่อฟงกชันที่กําหนดขน้ึ ตามกฎเกณฑก ารตง้ั ชอ่ื ของ C++ และจะเปนชื่อที่ใช สาํ หรับการเรยี กใชฟง กช ันตอไป (parameter1,parameter2,…) หรอื พารามเิ ตอรป ระกอบไปดว ย ประเภทและชื่อของตัวแปร ใชร บั คา คงทเ่ี พอ่ื นํามาใชทาํ งานในฟงกชัน ในขณะที่ฟงกชันนั้นถูกเรียกใชทาํ งาน พารามเิ ตอรข อง ฟงกชันมีมากกวา 1 ตวั และหลายประเภทได return(value); โดยท่ี return เปน คยี เ วริ ด และ value คือคาคงที่ที่สงคืนไปใหแกชื่อฟงกชัน 1 คาหรอื ไมมีก็ได ( กรณีเปนฟงกชันที่ไมใหคาใด ๆ) ตัวอยางการกําหนดชื่อฟงกชัน เชน ศิริชยั นามบุรี ฟง กช นั (Functions)
! 60 int factorial(int number) parameter ของฟงกชันเปน integer ชื่อฟงกชัน factorial ประเภทฟงกชันใหคาเปน integer ความหมาย คือ ฟงกชันชื่อ factorial() คาที่ไดจากการทํางานของฟงกชันเปน int และ ขณะเรยี กใชต อ งมกี ารรบั คา พารามเิ ตอรม าเกบ็ ไวท ต่ี วั แปร number และเปน ประเภท int เพื่อในมาใช ภายในฟงกชัน void line() ความหมายคือ ฟงกชันชื่อ line() เปน ฟง กช นั ทไ่ี มม พี ารามเิ ตอร เมื่อฟงกชันทาํ งาน เสรจ็ แลว จะไมใหคาใด ๆ คืนกลับมา เพราะมปี ระเภทเปน void float power(int base, int exp) ความหมาย ฟงกชันชื่อ power() คาที่ไดจากฟงกชันเปน float และขณะเรียกใชตองมี การรบั คา พารามเิ ตอร 2 ตวั ตวั แรก base เปน int และตัวที่สอง exp เปน int มาใชในฟงกชันดวย ♦ก! ารสรา งและการเรยี กใชฟ ง กช นั ในโปรแกรม การสรา งและการเรยี กใชฟ ง กช นั ในโปรแกรม มีการกําหนดรูปแบบการสรางและเรียกใช ดงั น้ี ศิริชัย นามบรุ ี ฟง กช นั (Functions)
! 61 #include <header file> #include <header file> //declaration 2 prototype function in this program are line() and factorial() void line(); int factorial(int number); void main() //function main() { int … //declaration variable in function main() statement; //statement in function factorial(int value or variable); //call function factorial() in function main() statement; //statement in function line(); //call function line() in function main() statement; //statement in function } //end of main() and end of this program void line() //declaration variable in function { int … //declaration variable in function float … statement; //statement in function statement; //statement in function } //return int factorial(int number) { int … //declaration variable in function factorial() float … //declaration variable in function factorial() statement; //statement in function factorial() line(); //call function line() in function factorial() statement; //statement in function factorial() return(value);//return only one value to factorial() function } //return ศิริชยั นามบรุ ี ฟง กช นั (Functions)
! 62 จากโครงสรา งโปรแกรมทม่ี กี ารสรา งฟง กช นั สรุปไดดังนี้ 1. การประกาศชื่อฟงกชันที่ผูใชกาํ หนดไวท ต่ี อนตน โปรแกรมกอ นฟง กช นั main() เรยี กวา ฟงกชันตนแบบ (prototype) หรอื การกําหนดฟงกชัน (function declaration) แสดงวา ในโปรแกรมมีการ สรางและเรียกใชฟงกชันเหลานี้ ซึ่งสามารถเรียกใชชื่อฟงกชันนั้น ณ ตาํ แหนงใด ๆ ของโปรแกรมกไ็ ด ยกเวน หา ม เรยี กใชช อ่ื ฟง กช นั นน้ั ในตวั ฟง กช นั เอง การประกาศฟงกชันตนแบบ(prototype) ที่มี พารามเิ ตอร(parameters) ทาํ ได 2 ลักษณะ คือ - ในสว นของพารามเิ ตอรข องฟง กช นั เขยี นทง้ั ชนดิ ขอ มลู และตวั พารามเิ ตอร เชน int factorial(int number); - ในสว นของพารามเิ ตอรข องฟง กช นั เขยี นเฉพาะชนดิ ขอมูล เชน int factorial(int); 2. การเรียกใชฟงกชันมีรูปแบบการเรียกใชเสมือนเปน statement เชน line() factorial(x) โดย ที่ฟงกชันใดที่มีพารามิเตอรกาํ หนดไว ตองใสคา argument ใหถูกตองในขณะเรียกใชดวย และเรียก x ของฟงกชัน factorial() วา อากวิ เมนต (argument) 3. เมื่อมีการเรียกใชฟงกชัน ณ ตาํ แหนงใด โปรแกรมจะไปทาํ งานในฟง กชนั นั้นจนเสรจ็ แลว จะ กลับมาทํางานตอ ใน statement ถัดไปจากตาํ แหนงที่เรียกใชฟงกชัน 4. สามารถเรียกใชฟงกชันกี่ครั้งก็ไดในโปรแกรม ♦!ฟง กช นั ไมม พี ารามเิ ตอร ฟง กช นั ไมม พี ารามเิ ตอร หมายถึง ฟงกชันที่ไมมีการรับคาพารามิเตอรมาใชในขณะทาํ งาน และการเรียกใชก็ไมตองสง argument มาใหฟงกชัน อาจเปน ฟง กช นั ประเภทคนื คา (return value) หรอื ไมมีการคืนคาใด ๆ ใหแกชื่อฟงกชันเมื่อทาํ งานเสรจ็ กไ็ ด •! ตัวอยางโปรแกรม line_non.cpp แสดงการสรา งและเรยี กใชฟ ง กช นั แบบไมม พี ารามเิ ตอร และไมมีการคืนคาใด ๆ คือ ฟงกชันประเภท viod /*Program : line_non.cpp Process : creat non-parameter function line() */ #include <iostream.h> #include <conio.h> //declaration prototype function void line(); //begin main program void main() { int i; ศิริชัย นามบุรี ฟง กช นั (Functions)
! 63 clrscr(); cout<< \"Display 1 line from line() function\\n\"; line(); //call line() and non-argument getch(); cout<< \"Display 5 lines from line() function\\n\"; for (i=1;i<=5;++i) line(); //call line() and non-argument getch(); }//end main program void line() //non-parameter function { cout<< \"_________________________________\\n\"; } •! ตวั อยา งโปรแกรม func_non.cpp แสดงโปรแกรมที่มีการสรางฟงกชันประเภทที่ไมมี parameter ไมม กี าร return value คือ ฟงกชัน input() และฟงกชันที่ไมมี parameter แตม กี าร return value คือฟงกชัน summation() /*Program : func_non.cpp process : display return value and non-parameter function */ #include <iostream.h> #include <conio.h> //prototype function declaration int summation(); void input(); //global variable int x,y; void main() { clrscr(); input(); //called function input() cout<<\"Result of x+ y =\\a\"<<summation(); //called function summation() getch(); } void input() //non-return value function ฟง กช นั (Functions) { cout<<\"Enter 2 number for summation : \"<<endl<<endl; cout<<\"Number1 : \";cin>>x; ศิริชัย นามบุรี
! 64 cout<<\"Number2 : \";cin>>y; } int summation() //return value function { int result; result=x+y; return (result); //return result value to summation() called } ♦ฟ! ง กช นั มพี ารามเิ ตอร ฟง กช นั มพี ารามเิ ตอร หมายถึงฟงกชันที่มีการรับคาพารามิเตอรมาใชในขณะฟงกชันทาํ งาน ดงั นั้นการเรียกใชฟงกชันประเภทนี้ ตอ งสง argument มาใหฟงกชันดวย จึงจะสามารถทาํ งานได ดงั ตวั อยา ง •! ตัวอยางโปรแกรม line_par.cpp แสดงการสรา งและเรียกใชฟ งกช ันแบบมพี ารามิเตอรและ ไมมีการคืนคาใด ๆ (เปนฟงกชันประเภท void) ใหแกชื่อฟงกชัน ณ จุดเรียกใช คาที่ไดจาก การทาํ งานของฟงกชัน จะตองนําไปใชอ ยา งใดอยา งหนง่ึ ในโปรแกรม เชน แสดงคา นัน้ ทาง จอภาพ เก็บคาที่ไดไวในตัวแปร เปนตน /*Program : line_par.cpp Process : creat parameter function line()*/ #include <iostream.h> #include <conio.h> void line(int amount); //declaration prototype function //begin main program void main() { int i=45; //begin statement clrscr(); cout<< \"Display line from line() function\\n\"; line(30); //call line() and send constant argument is 30 getch(); line(50); //call line() and send constant argument is 50 getch(); line(i); //call line() and send variable argument is i getch(); } //end main program void line(int amount) //amount is int parameter of function { int x; ศิริชยั นามบุรี ฟง กช นั (Functions)
! 65 for(x=1; x<=amount;++x) cout<<\"_\"; cout<<'\\n'; } หมายเหตุ จากโปรแกรมตวั อยา ง การกาํ หนดคา อารก วิ เมนต (argument) ในการเรียกใชฟงกชัน ทาํ ได 2 ลักษณะ คือ 1. กาํ หนดเปน คา คงท่ี (constant) ใหเ ปน ประเภทเดยี วกนั กบั พารามเิ ตอรข องฟง กช นั เชน การ เรียกใชฟงกชัน line(30) line(50) ซึ่ง 30 และ 50 คือ คาคงที่ชนิด int 2. กําหนดเปน ตวั แปร(variable) โดยกําหนดใหเ ปน ตวั แปรประเภทเดยี วกนั กบั พารามเิ ตอรข อง ฟงกชัน เชน การเรียกใชฟงกชัน line(i) ซึ่ง i เปน ตวั แปรชนดิ int •! ตวั อยางโปรแกรม func_par.cpp แสดงการคาํ นวณการบวก ลบ คณู หาร เลข จาํ นวนจรงิ 2 จาํ นวน โดยการสรา งฟงกช นั ประเภทท่มี ี parameters และมีการ return value ใหแ กช อ่ื ฟง กช นั ณ ตาํ แหนง ทเ่ี รยี กใชฟ ง กช นั /*Program : func_par.cpp process : display return value and parameter function calculate addition,subtract,multiply and divide */ #include <iostream.h> #include <conio.h> #include <iomanip.h> //prototype function declaration void input(); float addition(float x, float y); float subtract(float x, float y); float multiply(float x, float y); float divide(float x, float y); //global variable float num1,num2; void main() { clrscr(); input(); cout<<\"Result of addition = \"<<addition(num1,num2)<<endl; cout<<\"Result of subtract = \"<<subtract(num1,num2)<<endl; cout<<\"Result of multiply = \"<<multiply(num1,num2)<<endl; cout<<\"Result of subtract = \"<<divide(num1,num2)<<endl<<endl; cout<<\"Calculate by sent argument to parameters of function...\"<<endl; ศิริชยั นามบรุ ี ฟง กช นั (Functions)
! 66 cout<<\"Result of 10.0+20.25= \"<<addition(120.0,20.25)<<endl; cout<<\"Result of 10.0-20.25= \"<<subtract(120.0,20.25)<<endl; cout<<\"Result of 10.0*20.25= \"<<multiply(120.0,20.25)<<endl; cout<<\"Result of 10.0/20.25= \"<<setprecision(3)<<divide(10.0,20.25)<<endl; getch(); } void input() //non-parameter and non-return value function { cout<<\"Enter 2 number for calculate : \"<<endl<<endl; cout<<\"Number1 : \";cin>>num1; cout<<\"Number2 : \";cin>>num2; } float addition(float x, float y) { float result; result=x+y; result=x-y; return (result); } float subtract(float x, float y) { float result; result=x-y; return (result); } float multiply(float x, float y) { float result; result=x*y; return (result); } float divide(float x, float y) { float result; result=x/y; return (result); } ศิริชัย นามบรุ ี ฟง กช นั (Functions)
! 67 ♦!ฟง กช นั แบบไมป ระกาศ prototype การสรางฟงกชันในโปรแกรมแบบไมประกาศเปน prototype คือ การสรา งรายะเอยี ดของ ฟงกชันตางๆ ไวกอนฟงกชัน main() การเรียกใชฟงกชันประเภทนี้จะตองเรียกใชตามลาํ ดับของการ สรา งฟง กช นั ในโปรแกรม ฟงกชันที่ถูกเรียกใชจะตองสรางอยูกอนฟงกชันที่เรียกใชเสมอ เหมาะสาํ หรบั การเขยี นโปรแกรมงา ย ๆ หรอื มขี นาดสน้ั ๆ ไมสลับซับซอนมากนัก •! ตัวอยางโปรแกรม non_prot.cpp แสดงการสรา งฟง กช นั แบบไมป ระกาศ prototype ไวกอน ดงั รายละเอยี ดโปรแกรมในหนา ตอ ไป /*Program : non_prot.cpp Process : creat non prototype function */ #include <iostream.h> #include <conio.h> // create non-prototype function before function main() void line1(int amount) //parameter function { int x; for(x=1; x<=amount;++x) cout<<\"_\"; cout<<'\\n'; } void line2() //non-parameter function { cout<< \"*********************************\\n\"; line1(65); } //begin main program void main() { clrscr(); cout<< \"Display line from line1() function\\n\"; line1(40); //call line1() and constant argument is 40 getch(); cout<< \"\\nDisplay line from line2() function\\n\"; line2(); //call line2() and constant argument is 50 getch(); } //end main program ศิริชัย นามบรุ ี ฟง กช นั (Functions)
! 68 ♦!อนิ ไลนฟ งกช นั (inline function) โปรแกรมที่เรียกใชฟงกชันจะมีการเรียกใชหนวยความจาํ นอยกวาโปรแกรมที่ไมเรียกใชฟงกชัน ทั้งนี้เพราะฟงกชันจะจองและใชพื้นที่หนวยความจาํ ขณะถูกเรียกใชเทานั้น เมื่อฟงกชันทาํ งานเสรจ็ จะคนื พ้นื ทหี่ นวยความจําใหก บั โปรแกรม สวนโปรแกรมที่ไมเรียกใชฟงกชันจะมีการใชหนวยความจําเตม็ ท่ี ตลอดเวลาตามความตอ งการของโปรแกรมในขณะทํางาน โปรแกรมที่เรียกใชฟงกชันมีสวนดีในแงประหยัดการใชหนวยความจํา แตการเรียกใชฟงกชัน ทาํ ใหโ ปรแกรมตอ งใชเ วลาเพม่ิ มีผลทาํ ใหการทาํ งานของโปรแกรมชากวาโปรแกรมทไ่ี มเ รียกใชฟง กช ัน แตเ ราสามารถกําหนดใหฟ งกช ันในโปรแกรมถูกเรยี กใชโดยจองพนื้ ทห่ี นวยความจําตลอดเวลา ไมเสีย เวลาในการเรยี กใช โดยกําหนดใหฟ ง กช นั เปน ประเภท อินไลนฟงกชัน (inline function) วธิ ีการสรา ง อินไลนฟงกชัน (inline function) มีวิธีการดังนี้ 1. สรางอินไลนฟงกชันอยูกอนฟงกชัน main() 2. เพม่ิ คยี เ วริ ด คาํ วา inline ที่สวนหัวของฟงกชัน หมายเหตุ ขอ จํากัดของอินไลนฟงกชัน คือ ฟงกชันตองมีขนาดสั้น ถาอินไลนฟงกชันมีขนาด ยาวเกินไป compiler ของ C++ จะ compile ใหเปนฟงกชันที่มีการเรียกใชแบบปกติ •! ตัวอยางโปรแกรม inline.cpp แสดงการสรา งและการเรยี กใช อินไลนฟงกชัน ชื่อ square() ซง่ึ ทําหนาที่คาํ นวณหาคาเลขยกกาํ ลังสอง ดังนี้ /*Program : inline.cpp Process : creat and call inline function*/ #include<iostream.h> #include<conio.h> inline float square(float number) //declaration inline function { return(number*number); } void main() //begin function main() { float x; clrscr(); cout<< \"Enter number to calculate square : \"; cin>>x; cout<< \"Result of square = \"<<square(x); //call square() function getch(); } ศิริชัย นามบรุ ี ฟง กช นั (Functions)
! 69 ♦!รปู แบบการสง อารก วิ เมนตใ หฟ ง กช นั (reference argument) ฟง กช นั ประเภททส่ี รา งแบบมพี ารามเิ ตอร(parameter) เมื่อถูกเรียกใชจะตองมีการสงอารกิว เมนต (argument) ไปใหแกฟงกชันนั้น ๆ โดยทช่ี นดิ ของตวั แปรหรอื คา คงทท่ี ข่ี องอารก วิ เมนตจ ะตอ ง เปน ชนดิ เดยี วกบั พารามเิ ตอรข องฟง กช นั และมจี าํ นวนเทา กบั พารามเิ ตอร และกรณที ม่ี พี ารามเิ ตอรม าก กวา 1 ตวั ลาํ ดบั การสง อารก วิ เมนตต อ งตรงกบั ลําดบั ของพารามเิ ตอรท ก่ี ําหนดไว ดงั ตวั อยา ง เชน void main() { int x = 5, y=2; float result; result = power(x, y); //เรียกใชฟงกชัน power() ตอ งสง argument x และ y ไปใหฟงกชัน } โดยท่ี x และ y เปน ตวั แปรประเภท int เหมอื นกับตวั parameters float power(int base, int exp) //ตวั แปร base , exp เปน parameters ของ function { //รอรบั คา จาก argument x และ y ตามลาํ ดบั statement1; statement2; return value; } ลักษณะของการสงอารกิวเมนตที่เปน ตัวแปร ใหแกฟงกชัน มี 2 ลักษณะ คือ 1. สงเฉพาะคาอารกิวเมนต (passed argument by value) หมายถึง เมอ่ื สง คา ของตวั แปรทเ่ี ปน อารก็ วิ เมนตไ ปใหแ กพ ารามเิ ตอรข องฟง กช นั แลว เมื่อฟงกชันทาํ งานเสรจ็ แลว คา ตวั แปรทเ่ี ปน อารก วิ เมนตย งั คงมคี า เดมิ การทาํ งานของฟงกชันไมมีผลทาํ ใหต วั แปรอารก วิ เมนตเ ปลย่ี นแปลงคา เรยี กอารก วิ เมนตป ระเภทนว้ี า value argument 2. สงและเปลี่ยนคาอารกิวเมนต( passed argument by reference) เมอ่ื สง คา ของตวั แปรทเ่ี ปน อารก็ วิ เมนตไ ปใหแ กพ ารามเิ ตอรข องฟง กช นั แลว เมื่อฟงกชันทาํ งานเสรจ็ แลว คา ตวั แปรทเ่ี ปน อารก วิ เมนตมีการเปลี่ยนแปลง การทาํ งานของฟงกชันทาํ ใหต วั แปรอารก วิ เมนตเ ปลย่ี นแปลงคา ไปจากเดมิ เรยี กอารก วิ เมนตช นดิ นว้ี า reference argument ศิริชัย นามบุรี ฟง กช นั (Functions)
! 70 รูปแบบการกาํ หนดและการเรียกใชฟงกชันที่มีการสงอารกิวเมนตแบบ value argument และ reference argument มดี งั น้ี #include <header file> //declaration prototype function float square(float number); float area(float& width, float& high); void main() { float x,y,z; statement; } float square(float number) // value argument function { statement; return value_of_function; } float area(float& width, float& high) // reference argument function { statement; return value_of_function; } หมายเหตุ การกาํ หนดฟง กช นั ใหเ ปน ประเภท reference argument ใชเ ครอ่ื งหมาย & ตอ ทา ย ชนดิ ขอ มลู ของพารามเิ ตอรใ นการกาํ หนดสวนหัวของฟงกชัน ในฟงกชันสามารถกาํ หนดทง้ั reference argument และ value argument รว มกันได ศิริชยั นามบุรี ฟง กช นั (Functions)
! 71 •! ตัวอยางโปรแกรม argument.cpp แสดงการเปรยี บเทยี บการเรยี กใชฟ ง กช นั แบบ value argument และ แบบ reference argument /*Program : argument.cpp Process : show creat and call value and reference function*/ #include <iostream.h> #include <conio.h> //declaration prototype function float sum(float arg1,float arg2); float multiply(float& arg3,float& arg4); void main() //begin main program { float arg1,arg2,arg3,arg4; clrscr(); cout<< \"Please enter 4 number for argument : \\n\"; cout<< \"Argument1 : \";cin>>arg1; cout<< \"Argument2 : \";cin>>arg2; cout<< \"Argument3 : \";cin>>arg3; cout<< \"Argument4 : \";cin>>arg4; //display call value argument function cout<< \"\\n\\nDisplay call function sum() and send value argument\"; cout<< \"\\nValue argument before send to function :\"; cout<< \"\\nArgument 1 = \"<<arg1<< \" Argument 2 =\"<<arg2; cout<< \"\\nResult of sum = \"<<sum(arg1,arg2); cout<< \"\\nValue argument after send to function :(not change)\"; cout<< \"\\nArgument 1 = \"<<arg1<< \" Argument 2 =\"<<arg2; // display call reference argument function cout<< \"\\n\\nDisplay call function multiply() and send reference argument\"; cout<< \"\\nValue argument before send to function :\"; cout<< \"\\nArgument 3 = \"<<arg3<< \" Argument 4 =\"<<arg4; cout<< \"\\nResult of multiply from function= \"<<multiply(arg3,arg4); cout<< \"\\nValue argument after send to function :(changed)\"; cout<< \"\\n\\aArgument 3 = \"<<arg3<< \" Argument 4 =\"<<arg4; getch(); } //end main program float sum(float para1, float para2) //value argument function { return para1+para2; } float multiply(float& para3, float& para4) //reference argument function ศิริชยั นามบรุ ี ฟง กช นั (Functions)
! 72 { para3++; //change para3 and return valut to arg3 para4++; //change para4 and return valut to arg4 return para3*para4; } ♦O! verloaded function โอเวอรโ หลดฟง กช นั (overloaded function) เปนฟงกชันที่สามารถทาํ งานไดหลาย ๆ ลักษณะ ขึ้นอยูกับอารกิวเมนตที่ผูใชกาํ หนดให ดงั นน้ั ชอ่ื ฟง กช นั ประเภทน้ี ขณะเรียกใชจึงสามารถกาํ หนดอาร กิวเมนตไดหลายลักษณะ วิธีการสราง overloaded function มีวิธีการสรางเหมือนกับฟงกชันปกติ แตมีการสรางชื่อ overloaded function ใหม ชี อ่ื เหมอื นกนั โดยกําหนดพารามิเตอรแตละฟงกชันใหแตกตางกัน ดังตัว อยา งในโปรแกรม •! โปรแกรม over_fun.cpp แสดงการสรา ง overloaded function ชื่อฟงกชัน line() /*Program : over_fun.cpp Process : creat and call overloaded function line()*/ #include <iostream.h> #include <conio.h> //declaration overloaded prototype function void line(); void line(int x); void line(char ch,int x); void line(char ch); void main() //begin main program { clrscr(); cout<< \"Display 1 line from line() function\\n\"; line(); //call line() cout<< \"Display 2 line from line() function\\n\"; line(30); //call line() cout<< \"Display 3 line from line() function\\n\"; line('*',60); //call line() cout<< \"Display 4 line from line() function\\n\"; line('+'); //call line() getch(); } //end main program void line() //overload function1 line() ศิริชยั นามบรุ ี ฟง กช นั (Functions)
! 73 { cout<< \"================================\\n\"; } void line(int x) //overload function2 line() { int y; for (y=1;y<=x;++y) cout<< \"_\"; cout<<'\\n'; } void line(char ch,int x) //overload function3 line() { int y; for (y=1;y<=x;++y) cout<< ch; cout<<'\\n'; } void line(char ch) //overload function4 line() { int y; for (y=1;y<=80;++y) cout<< ch; cout<<'\\n'; } ♦!Default argument การประกาศ prototype function สามารถกาํ หนดคา เรม่ิ ตน (default) ใหกับฟงกชันได ในขณะ เรียกใชฟงกชันทาํ ใหเราสามารถกาํ หนดอารกิวเมนตไดหลายลักษณะ ถึงแมเราไมกาํ หนด หรอื กาํ หนด อารกวิ เมนตเ พียงบางสว น ฟงกชันก็ยังสามารถทํางานได เรยี กอารก วิ เมนตแ บบนว้ี า default argument •! ตัวอยางโปรแกรม default.cpp แสดงการสรา งฟงกช ันแบบกําหนด default argument ไว สําหรับการเรียกใชพงั กชัน /*Program : argument.cpp ฟง กช นั (Functions) ศิริชยั นามบุรี
! 74 Process : creat and call default argument function line()*/ #include <iostream.h> #include <conio.h> //ประกาศ prototype function และกําหนด default argument void line(char ch= '_',int x=80); void main() //begin main program { clrscr(); cout<< \"Display line from line() function\\n\"; line(); //call line() function line('+'); //call line() function line('#',50); //call line() function line(65); //call line() will display character of ASCII CODE 65 getch(); }//end main program void line(char ch,int x) //function line() { for (int y=1;y<=x;++y) cout<< ch; cout<<'\\n'; } ♦ล! กั ษณะการใชต วั แปรในฟง กช นั การใชห รอื การประกาศตวั แปรในโปรแกรมของ C++ สามารถกาํ หนดใหตัวแปรมีลักษณะการ ใชงานได 3 ลักษณะ คือ 1. automatic variable เปน การประกาศตวั แปร อยูใน { } ของฟงกชันใดฟงกชันหนึ่ง ตวั แปรประเภทนจ้ี ะนําไปใชไดเฉพาะในฟงกชันนี้เทานั้น จงึ เรยี กอกี อยา งหนง่ึ วา Local variable การ ทาํ งานของตวั แปรประเภทน้ี จะจองพน้ื ทห่ี นว ยความจําเมื่อฟงกชันถูกเรียกใชเทานั้น และยกเลิกการใช หนว ยความจําเมื่อฟงกชันทาํ งานเสรจ็ ปกติ C++ จะไมกาํ หนดคา เรม่ิ ตน ใหแ กต วั แปร automatic variable ดงั นน้ั ผใู ชค วรกําหนดคา เรม่ิ ตน ใหก บั ตวั แปรดว ยเพอ่ื ปอ งกนั ความผดิ พลาด การกาํ หนดตวั แปร automatic variable จะใชคียเวิรด auto หรอื ไมก ไ็ ด เชน void main() ฟง กช นั (Functions) ศิริชยั นามบรุ ี
! 75 { int x=50; //declaration x and number are automatic variable in main() auto float number = 0; //used keywoad auto before type and name fo variable statement; … } void repeat() //function repeat() { int y; //declaration y is automatic variable for(y=1;y<=40;++y) //use y from automatic or local variable cout<<'#'; cout<<endl; } 2. external variable เปน การประกาศตวั แปร อยนู อก { } ของทุกฟงกชัน ตวั แปรประเภทน้ี จะนําไปใชไดในทุกฟงกชัน จงึ เรยี กอกี อยา งหนง่ึ วา Global variable การทาํ งานของตวั แปรประเภทน้ี จะจองพน้ื ทห่ี นว ยความจําตลอดเวลาทโ่ี ปรแกรมทาํ งาน และยกเลิกการใชหนวยความจาํ เมอ่ื โปรแกรม ทาํ งานเสรจ็ ปกติ C++ จะไมกาํ หนดคา เรม่ิ ตน ใหอ ตั โนมตั แิ ตอ าจจะไมถ กู ตอ ง ดงั นน้ั ผใู ชค วรกําหนดคา เรม่ิ ตน ใหก บั ตวั แปรดว ยเพอ่ื ปอ งกนั ความผดิ พลาด การกาํ หนดตวั แปร external variable จะกาํ หนดหรอื ประกาศไว กอนฟงกชัน main() int y=0; //declaration y and x are external variable float x=0; void main() //function main() { int x=50; //declaration x and number are automatic variable in main() statement; … } หมายเหตุ ชอ่ื ตวั แปรประเภท automatic และ external สามารถกาํ หนดชอ่ื ซา้ํ กันได เนอ่ื งจาก ใชหนวยความจําพื้นที่คนละสวนกัน 3. static variable เปน การประกาศตวั แปร อยูใน { } ของฟงกชันใดฟงกชันหนึ่ง ตวั แปร ประเภทนี้จะนาํ ไปใชไดเฉพาะในฟงกชันนี้เทานั้น การทาํ งานของตวั แปรประเภทน้ี จะจองพน้ื ทห่ี นว ย ความจําไวต ลอดเวลาทโ่ี ปรแกรมทาํ งาน และยกเลิกการใชหนวยความจาํ โปรแกรมจบการทาํ งาน เรยี ก อกี อยา งหนง่ึ วา static automatic variable จะใชคียเวิรด static นาํ หนาในการประกาศตัวแปร เชน float Avg(float value) ฟง กช นั (Functions) ศิริชยั นามบรุ ี
! 76 { static float total; //declaration static variable in function Avg() static int amount; total = total+value; //summation of total statement; } •! ตัวอยางโปรแกรม type_var.cpp แสดงการกําหนดและการใชตัวแปรประเภท automatic และ external variable ในโปรแกรม /*Program : type_var.cpp Process : show using automatic and external variable */ #include <iostream.h> #include <conio.h> void line(); //declaration prototype function void repeat(); int x; //declaration external or global variable void main() //begin main program { int x; //declaration automatic or global variable in main() auto int y; //declaration automatic or global variable in main() clrscr(); line(); repeat(); for(y=1;y<=5;++y) //use y is automatic or local variable line(); for(x=1;x<=5;++x) //use x is automatic or local variable repeat(); getch(); } //end main program void line() //function line() { for(x=1;x<=80;x++) //use x from global or external variable cout<<'='; cout<<endl; } void repeat() //function repeat() {int y; ศิริชยั นามบุรี ฟง กช นั (Functions)
! 77 for(y=1;y<=40;++y) //usy y from automatic or local variable cout<<'#'; cout<<endl; } ♦T! emplate Function เท็มเพลตฟงกชัน (Template Function) หมายถึง ฟงกชันที่มีคุณสมบัติในการใชอากิวเมนต (argument) ไดกับขอมูลหลาย ๆ ประเภท เท็มเพลตฟงกชันกาํ หนดใหพ ารามเิ ตอรข องฟง กช นั สามารถ รบั คา อารก ิวเมนตไ ดห ลายประเภท เชน ฟงกชัน sum() กําหนดใหเ ปน ประเภท template function สามารถรบั คา จากตวั แปรประเภท int, float และ double ได คํานวณมาหาผลรวมไดท ง้ั อารก วิ เมนต ประเภท int, float และ double ซง่ึ ในฟง กช นั แบบปกตพิ ารามเิ ตอรจ ะรบั อารก วิ เมนตไ ดเ ฉพาะขอ มลู ประเภทเดียวกันกับที่กาํ หนดไวเ ทา นน้ั การกาํ หนด template function กําหนดไวกอนหนาฟงกชัน main() มรี ปู แบบดงั น้ี template <class Type> Type Sum(Type first, Type second) //function sum() { statement; statement; return first+second; } สวนประกอบใน template function มดี งั น้ี 1. template เปน คยี เ วริ ด เพอ่ื กาํ หนดวา ฟงกชัน sum() เปน template function 2. <class Type> class เปน คยี เ วริ ด เพอ่ื กาํ หนดชนดิ ขอ มลู มชี อ่ื วา Type ซึ่งสามารถกาํ หนด ชอ่ื ไดต ามความตอ งการของผใู ช ตามกฎการตง้ั ชอ่ื ของ C++ 3. Type Sum(Type first, Type second) ชื่อฟงกชัน sum() มปี ระเภทเปน Type มพี ารา มเิ ตอร 2 ตวั มชี นดิ เปน Type เชน กนั •! ตัวอยางโปรแกรม template.cpp แสดงการใชฟงกชันประเภท template function ชื่อ sum() ทาํ หนาที่คาํ นวณหาผลรวมของเลข 2 จาํ นวน ฟงกชันชื่อ multiply() หาผลคูณเลข 2 จาํ นวน ซึ่งเปนตัวเลขประเภท integer, float และ double /*Program : template.cpp ฟง กช นั (Functions) Process : show create and call template function */ ศิริชยั นามบุรี
! 78 #include <iostream.h> #include <conio.h> //declaration templat function sum() template<class TYPE> TYPE sum(TYPE first, TYPE second) { return first+second; } //declare template function multiply() template<class New_type> New_type multiply(New_type number1,New_type number2) { return number1*number2; } void main() //begin main program { int x=50,y=30; float a=300.25, b=100.50; double c=3.21541005,d=10005.02541152; //begin statement clrscr(); cout<< \" Sum integer \"<< sum(x,y)<<endl; cout<< \" Sum float \"<< sum(a,b)<<endl; cout<< \" Sum double \"<< sum(c,d)<<endl; cout<< \"\\n Multiply integer \"<< multiply(x,y)<<endl; cout<< \" Multiply float \"<< multiply(a,b)<<endl; cout<< \" Multiply double \"<< multiply(c,d); getch(); } //end main program ศิริชยั นามบุรี ฟง กช นั (Functions)
! 79 ♦!แบบฝกหัดทายบท 1. ใหเขียนโปรแกรมสรางฟงกชันเสนกรอบสี่เหลี่ยม โดยกําหนดพารามเิ ตอรก าํ หนดตําแหนง มุมซาย ดานบนและมุมขวาดานลางของกรอบได เชน frame(5,2,50,10) แสดงวากรอบสี่เหลี่ยมจะเริ่มวาด ตง้ั แตต าํ แหนง มุมซายบนที่ คอลัมน 5 แถว 2 และมุมขวาลางที่ตําแหนง คอลัมน 50 แถวที่ 10 5,2 50,10 2. ใหเ ขยี นโปรแกรมเพอ่ื สรา งฟง กช นั คํานวณคา factorial(n) เพอ่ื คาํ นวณหาคา แฟกทอเรยี ลของ จาํ นวน n 3. ใหเ ขยี นโปรแกรมเพื่อสรา งฟงกชนั แบบพารามเิ ตอรแ ละมกี าร return value ในการคาํ นวณเลข ยกกําลังโดยการสง argument เปน เลขจํานวนฐานและเลขกาํ ลังไปใหแกฟงกชัน เชน power(2,4) คอื การคาํ นวณเลขจํานวน 2 ยกกําลัง 4 4. ใหเ ขยี นโปรแกรมเพอ่ื สรา งฟง กช นั ประเภทมพี ารามเิ ตอรแ ละมกี าร return value ในการคาํ นวณหา คา พน้ื ทข่ี องรปู เรขาคณติ ตอ ไปน้ี วงกลม, สามเหลี่ยม และ สี่เหลี่ยม 5. จงเขยี นโปรแกรมเพอ่ื คาํ นวณการตดั เกรด โดยการเขียนแยกเปนฟงกชัน มเี งอ่ื นไขการตดั เกรด ดงั น้ี คะแนน 0-49 เกรด F คะแนน 50-59 เกรด D คะแนน 60-69 เกรด C คะแนน 70-79 เกรด B คะแนน 80-100 เกรด A ในโปรแกรมใหส รา งฟง กช นั ตอ ไปน้ี void input() ทาํ หนาที่รับคะแนนระหวางภาคและปลายภาคเรียน int summation(int x, int y) ทาํ หนา ทใ่ี นการรวมคะแนน char calculate(int total) ทาํ หนา ทใ่ี นการตดั เกรด void display() ทาํ หนา ทใี่ นการแสดงผลขอมูลของโปรแกรมท้ังหมด 6. ใหเ ขยี นโปรแกรมสรา งฟง กชนั ประเภทมพี ารามเิ ตอรแ ละมกี าร return value เพอ่ื คาํ นวณหาผลรวม ของเลขอนกุ รม 2 ฟงกชัน โดยมีชื่อฟงกชัน sum_even() และ sum_odd มีการทาํ งาน ดงั ตวั อยา ง sum_odd(1,10) คอื หาผลรวมของ 1+3+5+7+9 sum_odd(9,20) คอื หาผลรวมของ 9+11+13+15+17+19 ศิริชยั นามบรุ ี ฟง กช นั (Functions)
! 80 sum_even(1,10) คอื หาผลรวมของ 2+4+6+8 sum_even(9,20) คอื หาผลรวมของ 10+12+14+16+18+20 7. Write the function digitsum(n) ,which computes and returns the sum of the decimal digits of the integer parameter n. 8. Write the function sort4, which has four parameters. If the integer variables a,b,c and d are available and have been assigned values, we want to write sort4(&a, &b,&c,&d); to sort four variables, so that, after that call, we have a<=b<=c<=d ศิริชัย นามบรุ ี ฟง กช นั (Functions)
! บทที่ 6 อารเรย (Array) ♦!ความหมายของขอ มลู ชนดิ อารเ รย( array) อารเ รย (array) เปน ขอ มลู ชนดิ มโี ครงสรา ง (structure) หมายถึงเปนขอมูลชุดหนึ่งมีจํานวนนวน สมาชกิ ขอ มูลแนน อนและตอ งเปนชนดิ เดียวกนั ท้งั ชุด แตละรายการของขอมูลในชุดนั้น ๆ เรยี กวา สมาชิก ของอารเ รย (element of array) สมาชิกแตละตัวมีตัวชี้ตาํ แหนง ทอ่ี ยู เรยี กวา อินเด็กซ (index) เพ่อื ใช สาํ หรับการอางอิงถึงขอมูลแตละสมาชิก โดยอนิ เด็กซเ ปนขอ มลู ชนิดทม่ี ีลาํ ดบั เชน integer ตวั อยา งขอ มลู ชนดิ อารเรย 1 มิติ เชน คะแนนสอบของนักศึกษา 10 คน เปนตัวเลขประเภท int กําหนดเปน โครงสรา งของอารเ รยด งั น้ี นกั ศกึ ษาคนท่ี (index) [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] คะแนนที่ได ! 20 ! 25 ! 15 ! 30 ! 28 ! 16 ! 23 ! 24 ! 30 ! 26 ! ขอ มลู ในอาเรย ความหมายของขอมูลในอารเรยโดยใช index เปนตัวชี้ขอมูลในแตละชอง เปนดังนี้ อารเรยชองที่ [0] มคี า คะแนนนกั ศกึ ษา คนที่ 1 เก็บอยู คือ 20 อารเรยชองที่ [1] มคี า คะแนนนกั ศกึ ษา คนที่ 2 เก็บอยู คือ 25 อารเรยชองที่ [2] มคี าคะแนนนกั ศกึ ษา คนที่ 3 เก็บอยู คือ 15 อารเรยชองที่ [3] มคี าคะแนนนกั ศกึ ษา คนที่ 4 เก็บอยู คือ 30 อารเรยชองที่ [4] มคี า คะแนนนกั ศกึ ษา คนที่ 4 เก็บอยู คือ 28 อารเรยชองที่ [5] มคี า คะแนนนกั ศกึ ษา คนที่ 4 เก็บอยู คือ 16 อารเรยชองที่ [6] มคี า คะแนนนกั ศกึ ษา คนที่ 4 เก็บอยู คือ 23 อารเรยชองที่ [7] มคี าคะแนนนกั ศกึ ษา คนที่ 4 เก็บอยู คือ 24 อารเรยชองที่ [8] มคี าคะแนนนกั ศกึ ษา คนที่ 4 เก็บอยู คือ 30 อารเรยชองที่ [9] มคี าคะแนนนกั ศกึ ษา คนที่ 10 เก็บอยู คือ 26 ถา คะแนนทเ่ี กบ็ เปน ขอ มลู ชนดิ int จะจองพน้ื ทห่ี นว ยความจําในการเกบ็ ขอมลู 2 byte * 10 ชอง เทา กบั 20 byte ศิริชัย นามบุรี อารเ รย( Array)
! 82 หมายเหตุ การจองพน้ื ทห่ี นว ยความจําของอารเ รยจ ะจองพน้ื ทใ่ี นหนว ยความจําตอ เนอ่ื งกนั ไป ตั้งแตสมาชิกเริ่มตนตัวที่ 0 จนถงึ ตวั สดุ ทา ย ♦!ขอ มลู อารเ รยช นดิ 1 มิติ ขอ มลู ชนดิ อารเ รย 1 มติ ิ หมายถึง อารเรยที่มีอินเด็กซในการอางอิงถึงแตละสมาชิกเพียง 1 ตวั 1. การกําหนดขอ มลู ชนดิ อารเ รย 1 มิติ ในโปรแกรม มรี ปู แบบดงั น้ี ! Array_Type Array_name[amount of element]; โดยท่ี Array_Type คือ ชนดิ ขอ มลู (data type) ในอารเ รยหรอื ประเภทอารเ รย เชน int, char, float Array_name คือ ชอ่ื ของตวั แปรอารเ รย [amount of element] คือ จํานวนสมาชกิ หรอื รายการของอารเ รย ตัวอยางขอมูลคะแนนนักศึกษา จํานวน 10 คน เชน นกั ศกึ ษาคนท่ี (index) [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] คะแนนที่ได ! 20 ! 25 ! 15 ! 30 ! 28 ! 16 ! 23 ! 24 ! 30 ! 26 กําหนดตวั แปรอารเ รยเ กบ็ คะแนนเปน ชนดิ int และจองจํานวนสมาชิกไว 10 รายการ ดงั น้ี int score[10]; 2. การอางถงึ สมาชกิ และขอมูลในอารเ รย การอางถึงแตละสมาชิกของอารเรยทาํ ไดโ ดยการเขยี น ชื่อของอารเรยและระบบอินเด็กซของสมาชิกไวใน [ ] โดยอนิ เดก็ ซเ รม่ิ ตง้ั 0 ถึง n-1 (n คอื จํานวน สมาชกิ ของอารเ รยทงั้ หมด) เชน score[0]มขี อ มลู 20 เก็บอยู score[1]มขี อ มลู 25 เก็บอยู score[5]มขี อ มลู 16 เก็บอยู score[9]มขี อ มลู 26 เก็บอยู 3. การกําหนดคาใหอ ารเรย การกาํ หนดคา ใหแ กอ ารเ รย 1 มติ ิ มีวิธีการดังนี้ 3.1 การกาํ หนดคา คงทใ่ี หก บั อารเ รย เชน score[0] = 20; score[1] = 25; score[2] = 15; score[9 ]= 26; ศิริชัย นามบรุ ี อารเ รย( Array)
! 83 สามารถกาํ หนดคา ของอารเ รย เปน constant โดยระบจุ าํ นวนสมาชิกหรือไมระบุก็ไดดังนี้ const int score[10] = { 20,25,30,26,24,18,17,25,24,22}; const int score[] = { 20,25,30,26,24,18,17,25,24,22}; 3.2 การกาํ หนดคา ใหอ ารเ รยจ ากตวั แปร เชน x = 20; y = 26; score[0] = x; score[9] = y; 4. การรบั ขอ มลู ทางคยี บ อรด เกบ็ ในอาเรยโ ดยใชค าํ สั่งลูป เพื่อความสะดวกและความยืดหยุนใน โปรแกรม เราสามารถรับคาคงที่เขาไปเก็บไวในอารเรยแตละสมาชิกโดยใชลูป for, while , do เชน for( no=0 ; no<=9; ++no) cin>>score[no]; //enter from keyboard to array and no is index 5. การแสดงผลขอ มลู อารเ รย สามารถแสดงผลขอ มลู ในอารเ รยแตล ะสมาชกิ ได โดยการอา งชอ่ื และอินเด็กซ โดยใชล ปู for , while ,do เพอ่ื แสดงผลขอ มลู ในอารเ รยท ง้ั หมดได เชน for(no=0;no<=9;++no) cout<<score[no]<<endl; //display data all element of array and no is index •! ตัวอยางโปรแกรม array1.cpp แสดงการรับคาคะแนนนักศกึ ษา 10 คน เกบ็ ไวใ นอารเ รย คํานวณหาผลรวมคะแนนทง้ั หมดและคาํ นวณหาคาเฉลี่ยของคะแนน พรอมแสดงผลขอ มลู จากอารเ รยท ง้ั หมด /*Program : array1.cpp Process : input and display data for array 1 dimension */ #include <iostream.h> #include <conio.h> void main() //begin program { int no,score[10]; float avg=0,sum=0; clrscr(); //input integer constant to array cout<< \"Please enter score of student 10 persons\\n\\n\"; for(no=0;no<=9;++no) { cout<< \"Std.#\"<<no+1<<\" : \"; cin>>score[no]; } ศิริชัย นามบุรี อารเ รย( Array)
! 84 cout<< \"O.K. you enter complete...press any key to display\\n\"; getch();clrscr(); //display value of each element of array cout<< \"Display your enter score :\\n\"; for(no=0;no<=9;++no) { cout<< \"Std.#\"<<no+1<<\" : \"<<score[no]; cout<<endl; sum+=score[no]; //calculate summation } avg=sum/10.0; //calculate average of score cout<<\"Summation of score = \"<<sum<<endl; cout<<\"Average of score = \"<<avg<<endl<<'\\a'; getch(); } //end program •! ตัวอยางโปรแกรม arr_func.cpp แสดงการรบั คา คะแนนนกั ศึกษา 10 คน เกบ็ ไวใ นอารเ รย คํานวณหาผลรวมคะแนนทง้ั หมดและคาํ นวณหาคาเฉลี่ยของคะแนน พรอมแสดงผลขอมูล จากอารเ รยท ง้ั หมด แตเ ขยี นแยกเปน ฟง กช นั ทําหนาที่แยกกัน /*Program : arr_func.cpp Process : define input and display data for array 1 dimension */ #include <iostream.h> #include <conio.h> //declaration prototype function void input(); void display(); //declaration external variable int score[10]; float avg=0,sum=0; void main() //begin main program { clrscr(); input(); //call function display(); //call function avg=sum/10.0; //calculate average of score cout<<\"Summation of score = \"<<sum<<endl; cout<<\"Average of score = \"<<avg<<endl<<'\\a'; getch(); } //end main program void input() //input() function for enter integer constant to array ศิริชยั นามบุรี อารเ รย( Array)
! 85 { int no; cout<< \"Please enter score of student 10 persons\\n\\n\"; for(no=0;no<=9;++no) { cout<< \"Std.#\"<<no+1<<\" : \"; cin>>score[no]; } cout<< \"O.K. you enter complete...press any key to display\\n\"; getch();clrscr(); } void display() //display() function for show value of each element of array { int no; cout<< \"Display your enter score :\\n\"; for(no=0;no<=9;++no) { cout<< \"Std.#\"<<no+1<<\" : \"<<score[no]; cout<<endl; sum+=score[no]; //calculate summation } } ♦อ! ารเ รย 2 มิติ อารเ รย 2 มติ ิ (two-dimension array) หมายถึง อารเ รยท ม่ี ตี วั อนิ เดก็ ซส าํ หรบั การอา งถงึ ขอ มลู จํานวน 2 ชุด คือ อนิ เดก็ ซช แ้ื นวแถว(row) และแนวคอลัมน (column) ลักษณะของขอ มลู ชนิดท่ีเปนอารเรย 2 มติ ิ เชน คะแนนสอบของนักศึกษาจาํ นวน 10 คน ทั้ง หมด 3 วิชา ดงั ตาราง คะแ!นนแวนชิ วาคอลัมน นกั ศกึ ษาคนท่ี คณติ ศาสตร ภาษาองั กฤษ วทิ ยาศาสตร ! แนวแถว 1 25 30 35 2 28 25 32 3 30 29 33 4 29 30 35 5 35 20 37 6 26 31 30 7 20 26 30 8 26 25 24 9 29 30 35 10 26 32 25 ศิริชยั นามบุรี อารเ รย( Array)
! 86 จากตาราง 2 มิติขางบน ถาตองการเก็บคะแนนสอบของนักศึกษาดังกลาว สามารถใชตัวแปร อารเ รยชนดิ 2 มติ เิ พอ่ื เกบ็ ขอ มลู ชดุ นไ้ี ด สังเกตจากตารางดังกลาว (เฉพาะที่เปนขอมูลตัวเลขคะแนน) ประกอบดว ย 10 แถว และ 3 คอลัมน ตวั อยา ง การอา นคะแนนจากตาราง แถวที่ 5 คอลัมนที่ 3 คือ 37 เปนคะแนนของนักศึกษาคนที่ 5 วิชาที่ 3 คือ วิชาวิทยาศาสตร 1. การกําหนดอารเ รย 2 มิติ การประกาศตวั แปรประเภทอารเ รย 2 มติ ิ มรี ปู แบบดงั น้ี ! Array_Type Array_name[row][column]; โดยท่ี Array_Type คือ ชนดิ ขอ มลู ในอารเ รยห รอื ประเภทอารเ รย 2 มติ ิ เชน char , int , float ,double Array_name คือ ชอ่ื ของตวั แปรอารเ รย 2 มติ ิ [row] คือ จาํ นวนสมาชกิ หรอื รายการของอารเ รยใ นแนวแถว [column] คือ จํานวนสมาชกิ หรอื รายการของอารเ รยใ นแนวคอลมั น การคํานวณจาํ นวนรายการหรอื สมาชิกของอารเ รย 2 มิติ คือ row*column 2. การอา งองิ ถงึ สมาชกิ อารเ รย 2 มิติ มวี ธิ กี ารอา งองิ โดยการเขยี นชอ่ื อารเ รย และอินเด็กซของ สมาชิกนั้น เชน score[3][2] หมายถึงสมาชิกอารเรยตําแหนงแถวที่ 3 คอลัมนที่ 2 score[0][3] หมายถึงสมาชิกอารเรยตําแหนงแถวที่ 0 คอลัมนที่ 3 3. การกําหนดคาใหอารเรย 2 มิติ มีวิธีการกาํ หนดคา เชน เดยี วกบั อารเ รย 1 มติ ิ คือกําหนดคาคงที่ ใหก บั อารเ รย เชน score[3][2] = 25; score[2][1] = 30; x = 35; score[3][3] = x; ถาตองการกาํ หนดคา อารเ รย 2 มิติเปนลักษณะ constant กําหนดไดเ ชน เดยี วกบั อารเ รย 1 มติ ิ ดงั น้ี const int score[5][3] = { {25,30,22}, {30,25,20}, {25,24,18}, {22,21,24}, {20,18,17} }; หรอื ไมต อ งระบบจํานวนแถวของอารเ รย ดงั น้ี ศิริชยั นามบรุ ี อารเ รย( Array)
! 87 const int score[][3] = { {25,30,22}, {30,25,20}, {25,24,18}, {22,21,24}, {20,18,17} }; โดยทม่ี ติ แิ รก คือ จาํ นวนแถวไมตองระบุก็ได C++ compiler จะทราบเองจากการตรวจ สอบเซตของคาคงที่ที่กาํ หนดในลักษณะ const เพื่อความสะดวกและความยืดหยุนในโปรแกรม การกาํ หนดคา ใหอ ารเ รยโ ดยการรบั คา จากการกรอกทางคยี บ อรด จะใชลูป for, while หรอื do จํานวน 2 ลูปซอนกันเพื่อรับขอมูลไปเก็บไวใน อารเ รย สามารถกาํ หนดลูปได 2 ลักษณะ - กรอกในแนวแถวกอน เชน จากขอมูลตัวอยาง จะกรอกคะแนนของนักศึกษาคนที่ 1 ใหครบทั้ง 3 วชิ ากอ น แลวจงึ เร่มิ กรอกคะแนนของนกั ศึกษาคนที่ 2 ใหครบทุกวิชา ทาํ เชน นเ้ี รอ่ื ย ๆ จนถึง คะแนนคนที่ 10 วิชาที่ 3 ดังตัวอยางการใชลูป for for(std_no=0;std_no<=9;++std_no) //ลปู นอก for(subj_no=0;subj_no<=2;++subj_no) //ลูปใน cin>>score[std_no][subj_no]; std_no คือ ตวั แปรเกบ็ คา ตวั ชต้ี าํ แหนงแถวหรือนักศึกษาคนที่ 0 - 9 subj_no คือ ตวั แปรเกบ็ คา ตวั ชต้ี าํ แหนง คอลมั นห รอื วชิ าท่ี 0-2 - กรอกในแนวคอลมั นก อ น เชน จากขอมูลตัวอยาง จะกรอกคะแนนนักศึกษาของวิชาที่ 1 ใหครบทั้ง 10 คนกอ น จากนน้ั จงึ เรม่ิ กรอกวชิ าท่ี 2 ใหครบกอน แลว จงึ เรม่ิ กรอกคะแนนวชิ าท่ี 3 จน กวาจะกรอกคะแนนวิชาที่ 3 ของนักศึกษาคนที่ 10 ซึ่งเปนคนสุดทาย ดังตัวอยางการใชลูป for for(subj_no=0;subj_no<=2;++subj_no) //ลปู นอก for(std_no=0;std_no<=9;++std_no) //ลูปใน cin>>score[std_no][subj_no]; //subj_no คือ ตวั แปรเกบ็ คา ของคอลมั นห รอื วชิ าท่ี 0-2 //std_no คือ ตวั แปรเกบ็ คา ของแถวหรอื นกั ศกึ ษาคนท่ี 0 - 9 ศิริชัย นามบรุ ี อารเ รย( Array)
! 88 4. การแสดงผลอารเ รย 2 มิติ การแสดงผลขอมูลแตละสมาชิกในอารเรย 2 มติ ิ มีวิธีการใชลูป 2 ลูปซอนกัน เหมือนกับการกาํ หนดคา เชน เดยี วกนั เพียงแตใช cout แทน cin เพอ่ื แสดงคา ตวั แปร จากตวั อยางคะแนนสอบนักศึกษา 10 คน 3 วิชา สามารถเขียนลูป for เพื่อแสดงผลได ดงั น้ี - กรณแี สดงคา แนวแถวกอ น for(std_no=0;std_no<=9;++std_no) //ลปู นอก for(subj_no=0;subj_no<=2;++subj_no) //ลูปใน cout>>score[std_no][subj_no]; - กรณีแสดงคาแนวคอลมั นกอน for(subj_no=0;subj_no<=2;++subj_no) //ลปู นอก for(std_no=0;std_no<=9;++std_no) //ลูปใน cin>>score[std_no][subj_no]; //subj_no คือ ตวั แปรเกบ็ คา ของคอลมั นห รอื วชิ าท่ี 0-2 //std_no คือ ตวั แปรเกบ็ คา ของแถวหรอื นกั ศกึ ษาคนท่ี 0 - 9 •! ตัวอยางโปรแกรม arr_2dim.cpp แสดงการรบั คา และแสดงคา อารเ รย 2 มิติ คะแนนสอบ ของนกั ศกึ ษา 10 คน เปนจาํ นวนเต็ม วิชาที่สอบ 3 วิชา โดยการกรอกขอ มลู เปน รายคน ได ดังนี้ /*Program : arr_2dim.cpp อารเ รย( Array) Process : define input and display data for array 2 dimension */ #include <iostream.h> #include <conio.h> //declaration prototype function void input(); void display(); //declaration external variable int score[10][3]; void main() //begin main program { clrscr(); input(); display(); cout<< \"\\n\\nO.K. press any key to exit\\n\\a\"; getch(); } //end main program ศิริชยั นามบุรี
! 89 void input() //input() function for enter integer constant to array { int std_no,subj_no,col,row; cout<< \"Please enter score of student 10 persons\\n\\n\"; gotoxy(5,3);cout<<\"Std # Math English Science\"; col=15;row =5; //varaible for function gotoxy() for(std_no=0;std_no<=9;++std_no) { gotoxy(7,row); //skip cursor to enter data position cout<<std_no+1; for(subj_no=0;subj_no<=2;++subj_no) { gotoxy(col,row); cin>>score[std_no][subj_no]; col+=15; //increase column position } row++; //increase row position col=15; //set column at old position in new row (next student) } cout<< \"O.K. you enter complete...press any key to display\\n\\a\"; getch();clrscr(); } void display() //display() function for display score { int std_no,subj_no,col,row; cout<< \"*** Display score of student 10 persons 3 subjects ***\\n\\n\"; gotoxy(5,3);cout<<\"Std # Math English Science\"; col=15;row =5; for(std_no=0;std_no<=9;++std_no) { gotoxy(7,row); cout<<std_no+1; for(subj_no=0;subj_no<=2;++subj_no) { gotoxy(col,row); cout<<score[std_no][subj_no]; col+=15; } row++; col=15; } } ศิริชยั นามบรุ ี อารเ รย( Array)
! 90 ♦!อารเ รย 3 มิติ อารเ รย 3 มติ ิ (3 dimension array) เปน อารเ รยท ม่ี อี นิ เดก็ ซอ า งองิ ถงึ ตําแหนง ขอ มลู จํานวน 3 ชุด คือ แถว, คอลัมน และแนวลึก ตัวอยางขอมูลที่สามารถนาํ มาเก็บในลักษณะของอารเรย 3 มติ ไิ ด เชน คะแนนสอบนักศึกษา จาํ นวน 5 คน(แถว) วิชาสอบทั้งหมด 3 วิชา(คอลัมน) แตละวิชาสอบ 2 ครง้ั (ลึก) มขี อ มลู ดงั ตารางตอ ไปน้ี ! แนวคอลมั น มีทั้งหมด 3 คอลัมน คะแนนวชิ า นกั ศกึ ษาคนท่ี คณติ ศาสตร ภาษาองั กฤษ วทิ ยาศาสตร ครั้งที่ 1 ครั้งที่ 2 ครั้งที่ 1 ครั้งที่ 2 ครั้งที่ 1 ครั้งที่ 2 ! แนวแถว 1 24 25 28 30 20 35 ! ทั้งหมด 2 ! 5 แถว 3 26 28 24 25 30 32 4 5 31 30 30 29 26 33 25 29 25 30 30 35 30 35 18 20 32 37 ! แตล ะคอลมั นม แี นวลกึ อกี 2 แนวลกึ จากขอมูลคะแนนทั้งหมดในตาราง เปรยี บเทยี บกบั โครงสรา งขอ มลู อารเ รยแ บบ 3 มติ ิ ไดด งั น้ี แนวแถว แทน จํานวนนักศึกษา 5 คน แนวคอลมั น แทน จาํ นวนวชิ า 3 วิชา แนวลึก แทน จาํ นวนครง้ั ทส่ี อบ 2 ครง้ั 1. การกําหนดขอ มลู อารเ รย 3 มิติ มีรูปแบบการกาํ หนด ดงั น้ี Array_Type Array_name[row][column][depth]; โดยท่ี Array_Type คือ ชนดิ ขอ มลู ในอารเ รยห รอื ประเภทของอารเ รย 3 มติ ิ Array_name คือ ชอ่ื ของตวั แปรอารเ รย 3 มติ ิ [row] คือ จาํ นวนสมาชกิ หรอื รายการของอารเ รยใ นแนวแถว [column] คือ จาํ นวนสมาชกิ หรอื รายการของอารเ รยใ นแนวคอลมั น [depth] คือ จํานวนสมาชกิ หรอื รายการในแนวลกึ จาํ นวนสมาชิกของอารเรย 3 มิติ เทา กบั row*column*depth เชน int score[5][3][2]; จะมจี ํานวนสมาชกิ ของอารเ รยท ง้ั หมด 5*3*2 = 30 สมาชิก ศิริชยั นามบุรี อารเ รย( Array)
! 91 2. การอา งถงึ สมาชกิ อารเ รย 3 มิติ ตอ งเขยี นชอ่ื อารเ รยแ ละตามดว ยอนิ เดก็ ซท ง้ั 3 ชุด เชน score[0][1][0]; หมายถึง คะแนนสอบของนักศึกษาคนที่ 1 วิชาที่ 2 สอบครั้งที่ 1 เนอ่ื ง จากอนิ เดก็ ซเ รม่ิ ท่ี 0 3. การกําหนดคาใหก ับอารเรย 3 มิติ มีวิธีการกาํ หนดเชน เดยี วกบั อารเ รย 2 มติ ิ เพยี งแตต อ งเพม่ิ ตาํ แหนง อนิ เดก็ ซช ดุ ท่ี 3 (แนวลึก) เชน score[0][1][1] = 25; score[4][2][0] = 30; การกําหนดเปน constant ตองกําหนดคา คงทใ่ี หก บั อารเ รยใ หค รบทกุ ชอ ง ดังนี้ const int score[5][3][2] = { { {25,24},{21,23},{24,23} }, { {24,20},{29,30},{28,29} }, { {27,32},{24,29},{29,30} }, { {24,29},{24,30},{25,28} }, { {24,35},{28,21},{28,23} } }; เราสามารถใชลูป for, while หรอื do กําหนดคา โดยการกรอกขอ มลู ทางคยี บ อรด ได โดยใชค าํ สั่งลูปซอนกัน 3 ลูป ตัวอยางการใชลูป for ดงั น้ี for(std_no=0;std_no<=4;++std_no) for(subj_no=0;subj_no<=2;++subj_no) for(time_no=0;time_no<=1;++time_no) cin>>score[std_no][subj_no][time_no]; //input from keyboard 4. การแสดงผลจากอารเ รย 3 มิติ สามารถใชลูป for, while หรอื do ตวั อยา งเชน การใชลูป for แสดงคา ในอารเ รย score[5][3][2] เปน ดงั น้ี for(std_no=0;std_no<=4;++std_no) for(subj_no=0;subj_no<=2;++subj_no) for(time_no=0;time_no<=1;++time_no) cout<<score[std_no][subj_no][time_no]; //display ศิริชยั นามบุรี อารเ รย( Array)
! 92 ♦!การสง คา อารเ รยใ หฟ ง กช นั ชอ่ื ของอารเ รยส ามารถใชเ ปน อารก วิ เมนตส ง ใหแ กฟ ง กช นั ได ทาํ ใหสามารถสงอารเรยทั้งชุดไป ใหแกฟงกชัน เพอ่ื นําคาของอารเรยไปใชในฟงกชันได แตวิธีการการสงอารเรยไปใหฟงกชันมีขอ แตกตางจากการสงตัวแปรธรรมดา คอื ในการสง อารเ รยไปใหแกฟงกช ันนั้นจะตองเขยี นเฉพาะชื่อของ อารเ รยไ มต อ งกาํ หนดตวั ชห้ี รอื index สวนในการกาํ หนดพารามเิ ตอรร อรบั คา ของอารเ รยนน้ั ใหกาํ หนด ตวั แปรชนดิ อารเ รยร อรบั ไว โดยไมต อ งระบจุ ํานวนสมาชิกในอารเรย ดงั ตวั อยา งตอ ไปน้ี •! ตัวอยางโปรแกรม Arr_Fun1.CPP แสดงการสง คา ของอารยท ง้ั หมดใหแ กฟ ง กช นั เพอ่ื นําขอ มลู ในอารเ รยท ง้ั หมดไปแสดงผล คํานวณผลรวม และคํานวณคาเฉลี่ย ! /*Program:Arr_Fun1.Cpp ! Process: display and calculate summation, average of all array ! */ ! #include <iostream.h> ! #include <ctype.h> ! #include <conio.h> ! ! //prototype function ! void ShowArray(int x[]); ! float AvgArray(int x[]); ! int SumArray(int x[]); ! //global variable ! int number[5]={10,20,30,40,50}; ! void main() //main function ! สง อารก วิ เมนตไ ปเฉพาะ ! { clrscr(); ชอ่ื ของอาารเ รย number ! ShowArray(number); ! สง อารก วิ เมนตไ ปเฉพาะ ! cout<<\"\\nSummation of All Array : \"<<SumArray(number); ชอ่ื ของอาารเ รย number ! cout<<\"\\nAverage of All Array : \"<<AvgArray(number); ! สง อารก วิ เมนตไ ปเฉพาะ ! getch(); ชอ่ื ของอาารเ รย number !} ศิริชยั นามบรุ ี อารเ รย( Array)
! 93 ! void ShowArray(int x[]) //function display all array element !{ พารามเิ ตอรร อรบั คา ไมตองระบุจาํ นวน ! int i; สมาชกิ ของอารเ รย ! for(i=0;i<=4;i++) ! cout<<\"#\"<<i+1<<\": \"<<x[i]<<endl; !} ! ! int SumArray(int x[]) //function calculate summation of all array !{ ! พารามเิ ตอรร อรบั คา ไมตองระบุ ! int i,sum=0; ! for(i=0;i<=4;i++) จาํ นวนสมาชกิ ของอารเ รย ! sum=sum+x[i]; ! return sum; !} ! ! float AvgArray(int x[])//function calculate average of all array !{ ! พารามเิ ตอรร อรบั คา ไมตองระบุ ! int i,sum=0; ! for(i=0;i<=4;i++) จํานวนสมาชกิ ของอารเ รย ! sum=sum+x[i]; ! return sum/5; !} ศิริชัย นามบรุ ี อารเ รย( Array)
! 94 ♦!แบบฝกหัดทายบท 1. ใหเ ขยี นโปรแกรมเพอ่ื รบั คา จํานวนเตม็ 10 จํานวนทางคยี บ อรด แสดงคาจาํ นวนเตม็ ทก่ี รอกทง้ั หมด พรอมกับหาคาขอมูลที่มากที่สุดและขอมูลนอยที่สุดของขอมูลชุดนี้ พรอมบอกตําแหนง ของอารเ รยท ่ี พบขอมูลที่มากที่สุดและที่นอยที่สุดดวย แสดงผลทางจอภาพ 2. จงสรา ง Matrix ขนาด 3x4 กรอกขอมูลลงในแตละชอง และคาํ นวณหาผลรวมในแนวแถว และแนว คอลมั นข อง Matrix น้ี ดังตัวอยางผลลัพธตอไปนี้ col1 col2 col3 col4 Total row1 20 30 10 10 70 row2 10 25 5 40 80 row3 20 40 30 30 120 Total 50 95 45 80 270 ! กรอกขอมูล ! ทางคียบอรด 3. จากขอ มลู ในตารางตอ ไปน้ี ใหเ ขยี นโปรแกรมเพอ่ื กรอกคะแนน นักศึกษา จํานวน 5 คน จํานวน 3 รายวิชา แตละวิชามีคะแนนสอบ 2 ครง้ั และใหหาคะแนนเฉลี่ยของการสอบแตละครั้ง ทั้ง 3 รายวิชา แลวแสดงรายงานทางจอภาพ ดงั น้ี ( เสน ตารางไมต อ งสรา ง ) นกั ศกึ ษาคนท่ี คณิตศาสตร คะแนนวิชา วิทยาศาสตร ครง้ั ท่ี 1 ครง้ั ท่ี 2 ภาษาอังกฤษ 1 ครง้ั ท่ี 1 ครง้ั ท่ี 2 ครง้ั ท่ี 1 ครง้ั ท่ี 2 24 25 2 3 26 28 28 30 4 31 30 24 25 20 35 5 25 29 30 29 30 32 รวม 30 35 25 30 26 33 เฉลี่ย 999 999 18 20 30 35 99.99 99.99 999 999 32 37 99.99 99.99 999 999 99.99 99.99 ศิริชัย นามบุรี อารเ รย( Array)
! 95 4. ใหเ ขยี นโปรแกรมรบั ขอ มลู ตวั เลขจํานวนเตม็ 10 จํานวน และสรางฟงกชันในการจัดเรียงขอมูล 10 จํานวนน้ี คือ Ascending() เรียงขอมูลจากนอยไปมาก ฟงกชัน Descending() เรียงขอมูลจากมาก ไปนอ ย 5. ใหเ ขยี นโปรแกรมรบั ขอ มลู ตวั อกั ขระ 5 ตวั และสรางฟงกชันในการจัดเรียงขอมูล 5 อกั ขระน้ี คือฟงกชัน Ascending() เรียงขอมูลจากนอยไปมาก ฟงกชัน Descending() เรียงขอมูลจากมากไป นอ ย ศิริชัย นามบรุ ี อารเ รย( Array)
! บทที่ 7 สตรงิ (string) ♦!ความหมายของ string สตริง (string) หมายถึง ชุด(array)ของตวั อกั ขระ(character) ทเ่ี รยี งตอ กนั สตรงิ จะเปนคาํ หรอื ขอความที่มีความหมาย ใน C++ ไมมีชนิดขอมูลประเภท string การกาํ หนด string คือการกาํ หนด เปน อารเ รยข องขอ มลู ชนดิ char หลาย ๆ ตวั นาํ มาเชอ่ื มตอ กนั เปน string เชน character 'C','o','m','p','u','t','e','r' เกบ็ ไวใ นอารเ รยร วมเปน ขอ มลู string ซึ่งจะไดขอความ \"Computer\" ขอ มลู string เปนไดทั้งคาคงท(ี่ constant) และตัวแปร (variable) ♦!การกําหนดคา คงทใ่ี ห string วิธีการกําหนดตวั แปรประเภท char ใหเ ปน อารเ รยเ พอ่ื ใหเ กบ็ คา คงท่ี string มรี ปู แบบดงั น้ี 1. ประกาศตวั แปรอารเ รยป ระเภท char ไมร ะบขุ นาดของอารเ รย และกําหนดคา มรี ปู แบบดงั น้ี char string_name[] = \"string or text\"; โดยท่ี char คือ ประเภทขอ มลู ของสตรงิ เปน character string_name[] คือ ชอ่ื ของตวั แปรสตรงิ โดยท่ี [ ] กําหนดใหเ ปน อารเ รยข องสตรงิ ไมร ะบขุ นาดของอารเ รย C++ Compiler จะตรวจสอบและ กําหนดขนาดจากคา คงทด่ี า นขวาของเครอ่ื งหมายเทา กบั \"string or text\" คือ ขอ ความหรอื สายอกั ขระทเ่ี ปน คา คงทข่ี องสตรงิ ตอ งเขยี นไวใ น เครอ่ื งหมาย \" \" เสมอ (ถาเปนคาคงที่ประเภท char คา คงทเ่ี ขยี นไวใ นเครอ่ื งหมาย ' ' ) เชน char name[] = \"Sirichai Namburi\"; char str[] = \"C++ is OOP language\"; เนอ่ื งจากสตรงิ เปน อารเ รยข อง char จึงสามารถกาํ หนดคาคงที่ไดอีกวิธีหนึ่ง คือ char name[] = {'S','i','r','i','c','h','a', 'i',' ','N','a','m','b','u','r', 'i','\\0'}; สาํ หรบั '\\0' หมายถึงเครื่องหมาย null ซึ่งใชเปนรหัสจบสตริงในภาษา C++ 2. ประกาศตวั แปรอารเ รยป ระเภท char โดยระบขุ นาดของอารเ รยแ ละกาํ หนดคา มีรูปแบบดัง น้ี char string_name[n] = \" string or text\"; !
! 97 โดยท่ี n คือ ขนาดของอารเ รย 1 มติ ิ เชน char name[31]; //ตวั แปร name สามารถเกบ็ อกั ขระได 30 ตวั ตวั ท่ี 31 ใชเก็บ '\\0' char location[50]; //ตวั แปร location สามารถเกบ็ อกั ขระได 49 ตวั ตวั ท่ี 50 ใชเก็บ '\\0' ♦!การรบั คา สตรงิ จากคยี บ อรด ใน C++ การรบั คา สตรงิ จากคยี บ อรด เพอ่ื เกบ็ ไวใ นตวั แปร เชน กรอกชื่อนักศึกษา ท่อี ยนู ัก ศึกษา สามารถใช operator คือ >> (extraction or get from) รบั ขอมูลทางคียบ อรดได และจะเพิ่ม '\\0' เปน การจบสตรงิ ใหโ ดยอตั โนมตั ิ •! ตัวอยางโปรแกรม str_exp1.cpp เปน การรบั ขอ มลู ทางคียบ อรด ดวย cin>> โดยขณะ กรอกหามเวนชองวาง และ setw() จากไฟล iomanip.h กําหนดความยาวของสตริงที่สา มารกรอกได /*Program : str_exp1.cpp Process : enter string from keyboard with non-space*/ #include <iostream.h> #include <conio.h> #include <iomanip.h> void main() { char name[31],address[51]; clrscr(); cout<< \"Please enter your information : \\n\"; cout<< \"Your Name (1-30 char) : \"; cin>>setw(31)>>name; cout<< \"Your address (1-50 char): \"; cin>>setw(51)>>address; //display clrscr(); cout<< \"Your information : \\n\"; cout<< \"Your Name : \"<<name<<endl; cout<< \"Your address : \"<<address<<endl; getch(); } ศิริชัย นามบรุ ี สตริง(string)
! 98 •! ตัวอยางโปรแกรม str_exp2.cpp แสดงการกรอกโดยใหส ามารถรบั ขอ มลู ทม่ี ชี อ งวา ง (space) เขาไปเก็บในตัวแปร string ได ใหใช member function คือ cin::get() ตอไปนี้ /*Program : str_exp2.cpp Process : enter string with space from keyboard by cin::get() */ #include <iostream.h> #include <conio.h> void main() { char name[31],address[51]; clrscr(); cout<< \"Please enter your information : \\n\"; cout<< \"Your Name (1-30 char) : \"; cin.get(name,31); //display clrscr(); cout<< \"Your information : \"<<endl; cout<< \"Your Name : \"<<name<<endl;getch(); } •! ตัวอยางโปรแกรม str_exp3.cpp กรณตี อ งการกรอกขอ มลู สตรงิ ขนาดยาว หลายบรรทดั สามารถใช cin.get(variable,length,'code') เชน cin.get(resume,1000,']') เพอ่ื กรอกขอ มลู ในลักษณะหลายบรรทัดเก็บไวในตวั แปร resume มีความยามขอความไมเกิน 1000 แต ละบรรทดั จบดว ยการกด enter และสน้ิ สดุ การกรอกดว ยรหสั ] ทก่ี ําหนดไว ตอไปนี้ /*Program : str_exp3.cpp Process : enter string from keyboard by cin::get() */ #include <iostream.h> #include <conio.h> void main() { char resume[1000]; clrscr(); cout<< \"Please enter your information : \\n\"; cout<< \"Your resume (1-200 char) key ] stop enter: \"<<endl; cin.get(resume,1000,']'); //stop enter with character ] //display clrscr(); cout<< \"Your resume information : \"<<endl<<resume; getch(); } ศิริชัย นามบรุ ี สตริง(string)
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197