Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore หลักการเขียนโปรแกรม ปวส.

หลักการเขียนโปรแกรม ปวส.

Published by tamcomed50, 2020-12-27 06:22:21

Description: หลักการเขียนโปรแกรม ปวส.

Search

Read the Text Version

! 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)


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook