Post on 21-Sep-2014
transcript
1 !"#$%& # 2 ($%)# !"#*% ) # !( %) )%) !"## *(!"# %) ,-(()" (./-0 # !) )*)1 (*)"() #03# **) /)* 4()" - !(5 !"# 4 (/$ $# 6 ( 3)# )7"4( "4)()6) #"4)"4)/($9($/(6**3% )% $"7 *("*) # " , ) (*#*)**(!"# ) 1 (" 0 (0 #)" 0( /",9 " /.-- (0 #)" 0( # 6)- 03*%$%& )03: 7 #6!"#*3% !(.))*) % $ ;"=#"4(!"# !( )!("4)/#*)* / "4/#*)**(!"#) "(0 #)/ :(03"( # "4/#*)*!"/ / " - 6)() #6!"# )"()() %)% , !"# # ,(#0( # .)03$()! * ! % **.- - .() #6. ?3)" (#-( .@)-(( ((0 ((0" ,!!( .- ) # (( .-" /.-$% %)"##6 " !(/ ) .* !(5 ()() )0 ( :A " .-(()$%$5% # /(0 ( .C- / 6"" )# *
0 ( .// $ (
" :- . *
28/04/2010 1 of 229
60 /!) (Master Teacher in Programming) 1 # 2 ( !"#$%& # ($%)# !"#*% )) # ?3)%) ) % !"## )*(!"## # -(()" (./-0 # !) )*)1 (*)"() )% .))"*) $ ;"=#"4(!"# !( )!("4)/#*)* / "4/ "(0 #)/ ( :(03"() "4/#*)*!"/%) / ,." )*) % $
1. * , )(*6* * )# )(*)"4)1 66 (!("9(# 9)C)
2. * ,$!) )*# *%: 6#"4)1 6
3. * ,*(!"# 6#"466 !(!"#*( )/# ((!(6
4. * ,6",($# ((/ *"##*)*#"4(!"#%) / %) , ( ,*#*)*)*) $% " (
!
" #$% − Problem-based learning − Problem Solving Steps
− #).* − * − 6-) ,)1
9
%&' − !) )!"# − " 0#" − 6 )* # # )* − # 6 − ) − / Editor/Compiler − 6)#)$ (if, switch) − 6)#?%6 (for, while, do while) − Function and Procedure − Parameter passing − Structures
− !"## # )())( − !"#*$6-
$%")*-())(
9
(" ")*!
− 1D Array, 2D Array, Stack, Queue, Tree, Graph
24
#$% − ()!(#*)* "(0 #)/ # !" " 0
18
+$$ 4 3-12 C9 2553
28/04/2010 2 of 229
+$$ $- .$- #$% " -
$!#$% (60 !)
% %&' $ 3 08.30 - 09.00
09.00 - 09.30 09.30 - 12.00
13.00 - 16.30
) ( :" "?,"4!"# $,3)"4# ." /*(!"# ,3))0( !(6,(" 7)%
− predicates as conditions for selections and iterations − subprograms: procedures and functions − pointers − array and pointers − structures as aggregation of data − self-referential structures and pointers
%#)* Post-Test 6 3 / $ − !!( 0 (*)03()) − #"49 − -0 9
" #$% (!())"4*/)/) − Problem-based learning − Problem Solving Steps
4 09.00-12.00
13.00-16.30
" #$% () − Problem-based learning − Problem Solving Steps %&' − !) )!"# − " 0#" − 6 )* # # )* − # 6 − ) − / Editor/Compiler − 6)#)$ (if, switch) − 6)#?%6 (for, while, do while) − Function and Procedure − Parameter passing (with Pointer) − Structures
5 09.00-12.00
13.00-16.00
%&' ()
6 09.00-12.00
13.00-16.00
1D Array 9+$$ %&' %!
− #)" 9* ( if-else-if, switch) − * − 6-) ,)1 − !"## # )())( − ()*
28/04/2010 3 of 229
% %&' $ 7 09.00-12.00
13.00-16.00
2D Array (Sorting and Searching algorithms) 9+$$ %&' '
− #)" 9* ( if-else-if, switch) − * − 6-) ,)1 − !"## # )())(
8 09.00-12.00
13.00-16.00
$% # ( Structures and Self-Referential Structures Dynamic Memory Allocation and Linked-list
9 09.00-12.00
13.00-16.00
$% # ( Stack, Queue, Tree and Graph
10 09.00-10.00 10-00-12.00
13.00-16.00
" ((" " * "%- "T." (( " "%-") "T." (( " "%-") ()
11 09.00-12.00
13.00-16.00
"T." (( " "%-") () ( Post-test
12 09.00-12.00
13.00-15.00
15.00-16.00
).$ ( 1 ("=) ).$ ( 2 (Cs) )"V%( % $ "
*"
− *.)*()(( 80 3) :t* # (
− -u #")%
( 1 ("=) ( 2 (Cs)
" 25 40 35
$X 0-49
50-79 80-100
28/04/2010 4 of 229
28/04/2010 5 of 229
บทท 2 องคประกอบของระบบคอมพวเตอร
เครองคอมพวเตอรเปนเครองมอทอานวยความสะดวกในการทางานใหกบมนษยหลาย ๆ ดาน การทางานของระบบคอมพวเตอรนนจะตองมองคประกอบทสาคญ 4 สวน คอ ตวเครองหรอฮารดแวร (Hardware) โปรแกรมสาหรบทางานหรอซอฟตแวร(Software) มนษย และขอมลตาง ๆ ทจะใหคอมพวเตอรประมวลผล
2.1 ความหมายของคอมพวเตอร คอมพวเตอรเปนอปกรณทางไฟฟาชนดหนงทสามารถจาขอมลตาง ๆ ได สามารถคดคานวณตวเลข สามารถตอบสนองตอการกระทาของผใชได และมความสามารถในการเชอมตอกบอปกรณตอพวงบางชนดเขากบเครองคอมพวเตอร เพอสงใหอปกรณเหลานนทางานตามคาสงได เมอกลาวถงฮารดแวรคอมพวเตอร (Computer Hardware) โดยทวไปจะหมายถงตวเครองคอมพวเตอรรวมทงอปกรณตาง ๆ ทตออยกบเครองคอมพวเตอร คอมพวเตอร (ตามพจนานกรมฉบบราชบณฑตยสถาน พ.ศ. 2525) หมายถงเครองอเลกทรอนกสแบบอตโนมต ทาหนาทเสมอนสมองกล ใชสาหรบแกปญหาตาง ๆ ทงทงายและซบซอน โดยวธทางคณตศาสตร ขนตอนการทางานของคอมพวเตอรนนประกอบดวย 3 ขนตอนใหญ ๆ คอ การรบขอมล(Input Data) การประมวลผล(Data Processing) และการแสดงผลลพธออกทางเอาตพต (Output Result) ดงรปท 2.1 การรบขอมลนนคอมพวเตอรจะรบขอมลเขามาทางอปกรณทตออย เชน คยบอรต เมาส สวนการแสดงผลลพธจะแสดงออกทางจอภาพหรอเครองพมพเปนหลก สาหรบวธการประมวลผลนนคอมพวเตอรจะอานโปรแกรมจากหนวยความจาทเกบโปรแกรมไวขนมาไวในหนวยความจาหลกเพอประมวลผลตาง ๆ ตอไป
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 6 of 229
2.2 สวนประกอบของคอมพวเตอร คอมพวเตอรมผลตออกมาหลายรนแตละรนจะมความสามารถตางกน บางรนเหมาะสาหรบทางานในบาน บางรนเหมาะสาหรบการใชงานทางดานกราฟกระดบสง แตถาหากมองถงสวนประกอบภายนอกจะประกอบดวยองคประกอบหลก 5 สวน คอ หนวยประมวลผลกลาง (Central Processing Unit) หรอซพย (CPU) หนวยรบเขา (Input Unit) หนวยสงออก(Output Unit) หนวยความจาหลก (Main Memory) และหนวยความจารอง (Secondary Memory)
แสดงผล (Output)
หนวยความจา (Memory)
ประมวลผล (Processing)
รบขอมล (Input)
เคส (Case) จอภาพ หรอมอนเตอร (Monitor)
คยบอรด (Keyboard)
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 7 of 229
หนวยประมวลผลกลาง หากกลาวถงหนวยประมวลผลกลางของคอมพวเตอร หรอ ซพย (Central Processing: CPU) บางคนเขาใจผดคดวาเปนตวเครองหรอ เคส(Case) ของคอมพวเตอร แตตามความจรงแลว ซพย เปนอปกรณทางอเลกทรอนกสตวหนงทเปนหวใจการทางานของคอมพวเตอร ภายในตวมนประกอบดวยสวนสาคญสองสวนคอ หนวยควบคม(Control Unit) ทาหนาทควบคมการทางานตาง ๆ และหนวยคานวณทางคณตศาสตรและตรรกะ ซงจะทาหนาทในการคานวณขอมลตาง ๆ เชน การบวก ลบ คณ หาร และการเปรยบเทยบทางตรรกศาสตร การทางานของซพยจะตองเขยนคาสงเพอสงงานใหซพยทางานตามทตองการ ตวซพยนถอวาเปนศนยรวมการทางานทงหมดของระบบคอมพวเตอร หรอเปรยบเหมอนเปนสมองของคอมพวเตอรนนเอง ในอดสหนวยตวซพยนจะมขนาดใหญ แตในปจจบนเมอนาสารกงตวนามาใชกทาใหซพยถกพฒนาใหมขนาดเลกลง โดยรวมวงจรตาง ๆ ไวภายในตวมนเพยงตวเดยวเรยกวา ไมโครโปรเซสเซอร (Microprocessor) ดงนนอาจกลาวไดวาคอมพวเตอรในปจจบนมไมโครโปรเซสเซอรเปนหนวยประมวลผลกลาง ในปจจบนไดมการผลตไมโครโปรเซสเซอรออกมาหลายรน โดยอนเทล (Intel) เปนบรษทใหญทผลตไมโครโปรเซสเซอรออกมามากมาย นอกจากนยงมไมโครโปรเซสเซอรของบรษทอน ๆ อกทผลตซพยใหเขากนไดกบซพยของอนเทล ทเรยกวา Intel-Compatible Processor โดยสามารถใชชดคาสงและโปรแกรมเหมอนกบของอนเทลได เชนไมโครโปรเซสเซอรของเอเอมด (AMD) ของไซรก(Cyrix) เปนตน
ตวอยางไมโครโปรเซสเซอรสาหรบคอมพวเตอร และคอมพวเตอรแบบพกพา
ตวอยางไมโครโปรเซสเซอรสาหรบเครอง workstation
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 8 of 229
หนวยรบเขา แมวาคอมพวเตอรจะเปนอปกรณอเลกทรอนกสทประมวลผลได แตกสามารถตดตอกบมนษยไดทาง พอรต (port) ซงแบงออกเปนพอรตอนพตและพอรตเอาตพต หากตองการรบขอมลเขามาประมวลผลจะตองมอปกรณรบขอมล (Input Devices) มาตอกบพอรตอนพตของคอมพวเตอร โดยอปกรณรบขอมลนทาหนาทรบขอมลและคาสงเขาสคอมพวเตอร โดยจะนาลกษณะของขอมลทถกปอนเขามาเปลยนไปเปนสญญาณทคอมพวเตอรเขาใจ การใชอปกรณตาง ๆ นนโปรแกรมทใชงานอยจะตองสนบสนนกบอปกรณประเภทนนดวย ตวอยางของอปกรณอนพตไดแก แปนพมพหรอคยบอรต(Keyboard) เมาส(Mouse) เครองสแกน(Scanner) กลองดจตอล(Digital Camera) เครองอานบารโคด เปนตน คยบอรด (Keyboard) คยบอรดเปนอปกรณปอนขอมลหรอคาสงทนยมใชมากทสด และเปนอปกรณอนพตแบบดงเดมททางานรวมกบคอมพวเตอรมานาน โดยเฉพาะการพมพขอมล สรางเอกสารตาง ๆ รวมถงกลมคยพเศษทสามารถทางานรวมกบโปรแกรมได คยบอรดนนบวาเปนอปกรณรบขอมลเขาทคอมพวเตอรจะขาดไมได คยบอรดของคอมพวเตอรโดยทวไปแลวจะมคยตงแต 101 ถง 105 คย ประกอบดวยกลมคยอกขระ (Alphanumeric key)ซงเปนคยตวอกษรมาตรฐานทใชงานทวไป คยตวเลข(Numeric key) ใชสาหรบปอนตวเลขใหสะดวกขน คยฟงกชน(Function key) เชน F1 ถง F12 ใชสาหรบงานเฉพาะอยางทโปรแกรมกาหนดขน คยเคลอนยายเคอรเซอรใชยายเคอรเซอรไปยงตาแหนงตาง ๆ บนจอภาพ และคยพเศษ เชน Esc, PrintScreen เปนตน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 9 of 229
นอกจากนยงมคยบอรดทออกแบบมาเปนพเศษใหเหมาะกบการใชงานลกษณะตาง ๆ เชน Window key เปนคยบอรดทมคยเสรมเพอใหใชระบบปฎบตการ Window ไดรวดเรวขน ซงจะมคยลดสาหรบเขาสการทางานฟงกชนตาง ๆ ของวนโดว เชนควบคมเมน เขาสเมน Start เปนตน นอกจากนยงใชควบคมอน ๆ เชนปรบความดงเสยง เปดเวบ เปนตน คยบอรดแบบพเศษอกแบบหนงไดแก คยบอรดสาหรบเลนเกม (gaming keyboard) ซงออกแบบมาใหเลนเกมบนคอมพวเตอรไดสนกสนานมากขน
1. คยตวอกขระ ไดแก A – Z, a – z, Shift, Ctr, Alt เปนตน 2. คยตวเลข ไดแก 0 – 9 และ +, -, *, / 3. คยฟงกชน ไดแก F1 – F12 4. คยยายเคอรเซอร ไดแก ขน, ลง, ซาย, ขวา 5. คยพเศษ ไดแก Esc, PrintScreen, Scrool Lock, Pause
ปมควบคมการเลนเกม
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 10 of 229
คยบอรดในปจจบนจะเชอมตอกบคอมพวเตอรไดหลายวธ มขวตอหลายแบบ เชน แบบพอรตอนกรม(Serial Port) ซงเปนพอรตมาตรฐานทใชกบคอมพวเตอรในยคแรก ๆ พอรต PS/2 มาตรฐานทใชกนอยในปจจบน และแบบพอรต USB รวมถงคยบอรตแบบไรสาย (Wireless keyboard)
เมาส (Mouse) เมาสเปนอปกรณทสามารถใชชตาแหนงตาง ๆ บนจอภาพได ในสมยกอนการปอนคาสงและขอมลใหกบคอมพวเตอรจะใชเพยงคยบอรดเทานน แตพอมการพฒนาการเชอมตอกบผใชแบบกราฟกหรอ GUI และมโปรแกรมดานกราฟกเชนโปรแกรมวาดภาพเกดขน เมาสจงเปนสงจาเปนสาหรบคอมพวเตอรนบแตเวลานนเปนตนมา โดยเมาสจะเปนอปกรณรบขอมลทใชชตาแหนงบนจอภาพ ใชเลอกขอมลบนจอภาพ เมอมการใชเมาสจะมตวชขนมาบนหนาจอคอมพวเตอรเรยกวา ตวชเมาส (mouse pointer)
การใชงานเมาสหรอการกดปมเมาสเรยกวาการ คลก(Click) การคลกปมดานซายมอหนงครงจะแสดงถงการเลอก แตถาหากเปนการคลกสองครงตด ๆ กนหมายถงการสงใหประมวลผล ถาหากมการกดปมเมาสทางซายคางไวแลวมการเลอนเมาสเรยกวา แดรกกง(Dragging) การทางานแบบนทาใหสามารถเลอนตาแหนงของวตถบนจอภาพได แตถาหากเปนการคลกปมทางขวามกจะเปนการใหแสดงเมนพเศษของโปรแกรมทกาลงใชงานอย ปจจบนเมาสเปนอปกรณหลกสาหรบใชรบขอมลเขามาในเครองคอมพวเตอร เมาสทใชกนอยนนมปมใชงานแบบ 2 ปม หรอแบบ 3 ปม และมพอรตเชอมตอใหเลอกหลาย ๆ ประเภท เชน พอรตแบบ PS/2, พอรต USB และพอรตแบบไรสาย
หนวยสงออก หลงจากทคอมพวเตอรประมวลผลแลวตองการแสดงสารสนเทศหรอขอมลตาง ๆ ออกมาจะตองแสดงออกทางหนวยสงออก (Output Unit) ของระบบคอมพวเตอร โดยจะนารหสทคอมพวเตอรประมวลผลไดมาแสดงในรปแบบทเอาไปใชงานได ซงเปนรปแบบทมนษยเขาใจ การแสดงผลของคอมพวเตอรทาไดหลายรปแบบ ไดแก
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 11 of 229
• แสดงผลเปนขอความ (Text) จะใหเอาตพตเปนตวอกษร ในรปแบบของรายงาน ขาวสารตาง ๆ
• แสดงผลเปนภาพ (Graphics) โดยใหขอมลเปนภาพ กราฟ ผงงานตาง ๆ เปนตน • แสดงผลเปนเสยง (Audio) อาจเปนเสยงเพลง เสยงประกอบเกม เปนตน • แสดงผลเปนวดโอ (Video) โ ดยแสดงเปนไฟลวดโอออกมาทางหนาจอ
ไมวาการแสดงผลจะออกมาในรปแบบใดจะตองมอปกรณแสดงผล (Output Devices) ตออยทางพอรตเอาตพตของคอมพวเตอร อปกรณแสดงผลทไดรบความนยมมากทสดไดแก จอภาพ และเครองพมพ นอกจากนยงมเอาตพตแบบอน ๆ อกเชน ลาโพง แฟลก โมเดม เปนตน จอภาพ จอภาพหรอมอนเตอร(Monitor)เปนอปกรณเอาตพตทนยมใชกนมากทสด ผลลพธทไดจากจอภาพจะเรยกวา ซอฟตกอปป (soft copy) เนองจากเปนการแสดงผลเพยงชวคราว ไมสามารถเกบไวใชงานได ในอดสจอภาพจะแสดงไดเพยงสเดยวทเรยกวาจอแบบโมโนโครม (Monochrome) แตจอภาพในปจจบนสามารถแสดงเปนสได ซงเกดจากการผสมสระหวางสแดง สเขยน และสนาเงน จอภาพทพบจะมอยสองประเภทใหญ ๆ คอจอ CRT (Cathode Ray Tube) ซงเปนจอภาพแบบหนา ภาพทไดเกดจากการสรางภาพของปนอเลกตรอน อกประเภทหนงคอจอภาพแบบบาง (flat panel display) โดยจอทนยมใชกนมากทสดคอจอแอลซด (LCD) ซงในปจจบนไดมราคาถกลงมากแลว และในปจจบนยงมการพฒนาใหสามารถแสดงภาพสองจอพรอมกนไดอกดวย ซงจะทาใหการทางานทซบซอนทาไดสะดวกขน
จอภาพแบบ LCD จอภาพแบบ LCD สองจอ
ในการเลอกจอภาพควรจะคานงถงสงตอไปนคอ ความละเอยดของภาพ(resolution), ขนาด(size), ดอตพช(dot pitch)
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 12 of 229
• ความละเอยดของภาพ หมายถงจานวนจดหรอพกเซลบนจอภาพ ถาหากมความละเอยดสงจะทาใหภาพคมชดมากขน ตวอยางเชนจอภาพทมความละเอยด 1600 x 1200 เปนจอภาพทมจดภาพในแนวนอน 1600 จด มจดภาพในแนวตง 1200 จด โดยทวไปแลวจอภาพสามารถเลอกโหมดการแสดงผลทมความละเอยดคาตาง ๆ ได และไดมการกาหนดโหมดมาตรฐานดงน
มาตรฐาน ชอเตม ความละเอยด Aspect Ratio
SVGA Super Video Graphics Array 800 x 600 4 : 3 XGA Extended Graphics Array 1024 x 768 4 : 3 SXGA Super XGA 1280 x 1024 5 : 4 WXGA Wide XGA 1280 x 800 or
1366 x 768 16 : 10 or 16 : 9
UXGA Ultra XGA 1600 x 1200 4 : 3 WSXGA Wide Super XGA 1680 x 1050 16 : 10 WUXGA Wide Ultra XGA 1920 x 1200 16 : 10 WQXGA Wide Quad XGA 2560 x 1600 16 : 10
ตวอยางเชน ถาหากมคอมพวเตอรโนตบคบอกวาสามารถแสดงผลในระดบ WXGA ได กหมายความวาคอมพวเตอรเครองนนแสดงภาพความละเอยด 1280 x 1024 ไดเปนตน
• ขนาด ขนาดของจอภาพจะวดเปนแนวทะแยงมม เชนจอแบบ 19 นว แบบ 21 นวเปนตน • ดอตพช (dit pitch) บางครงจะเรยกวา pixel pitch หมายถงระยะหางระหวางจดภาพ จอภาพใน
ปจจบนควรเลอกทมขนาดนอยกวา 0.28 mm
เครองพมพ การแสดงผลทางเครองพมพเปนการแสดงผลแบบถาวร สามารถเกบไวใชตอไปได จงเรยกวาเปนการแสดงผล ฮารดกอปป (hard copy) ซงเปนการแสดงผลแบบภาวร ในปจจบนเครองพมพถกใชสาหรบการพมพเอกสารตาง ๆ รวมทงภาพกราฟกสวย ๆ ภาพทถายจากกลองดจตอล จนกลายเปนอปกรณทคอมพวเตอรแทบทกเครองจะตองม เครองพมพทพบมากในปจจบนไดแก เครองพมพแบบกระทบ หรอ Dot-Matrix โดยจะใชหวเขมกระทบผาหมกลงไปบนกระดาษทตองการพมพ เครองพมพแบบเลเซอร (Laser Printer) และเครองพมพแบบฉดหมก (Inkjet Printer) อปกรณสงเสยง (Speaker) ใชสาหรบแสดงเสยงทไดจากโปรแกรมคอมพวเตอร โดยทวไปแลวจะใชลาโพง ซงมกจะอยในชดมลตมเดยของคอมพวเตอร เสยงทไดออกมานนจะมการดเสยง (Sound Card) เปนตวควบคม โดยคอมพวเตอรจะนาไฟลเสยงทไดมาประมวลผลแลวใหการดเสยงนเปลยนขอมลดจตอลใหเปนสญญาณอนาลอกแลวขยายสญญาณทไดใหไปขบลาโพงใหดงเปนเสยงตอไป
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 13 of 229
การดเสยงทใชกบคอมพวเตอรนนยงมขวตอสาหรบไมโครโฟน ขวตอสาหรบรบสญญาณเสยงภายนอก และสงเสยงใหกบลาโพงแบบพเศษไดอกดวย
หนวยความจาหลก หนวยความจา (Main Memory) ทาหนาทเปนตวพกขอมลทไดรบจากผใช เพอสงตอไปยงหนวยประมวลผลกลางอกทหนง ในระบบคอมพวเตอรมหนวยความอยหลายสวน โดยหนวยความจาหลกเปนหนวยความจาทคอมพวเตอรใชเกบขอมลและคาสงทตองการประมวลผลในงานนน ๆ ถาหากคอมพวเตอรตองการทางานโปรแกรมใด ๆ จะตองนาโปรแกรมมาเกบในหนวยความจาหลกเสมอ อยางเชนในฮารดดสกของคอมพวเตอรมขอมลและโปรแกรมอยมากมาย หากคอมพวเตอรตองทาโปรแกรมใดกจะตองนาโปรแกรมจากฮารดดสกขนมาเกบในหนวยความจาหลกกอนจงจะทางานได หนวยความจาหลกของระบบคอมพวเตอรจะสรางจากวงจรอเลกทรอนกสอยในรปของวงจรรวม (Integrated circuit) หรอไอซ แบงเปนสองประเภทใหญ ๆ คอ แรม(RAM) และ รอม(ROM)
หนวยความจาแรม หนวยความจาแรม (RAM) มาจากคาวา Random Access Memory) บางครงจะเรยกวาหนวยความจาแบบชวคราว เปนหนวยความจาททางานรวมกบซพย ใชพกขอมลและโปรแกรมชวคราว แตขอมลตาง ๆ จะหายไปเมอปดเครอง หนวยความจาประเภทนคอหนวยความจาทเราเหนบนเครองคอมพวเตอร และมกนกถงเมอพดถงหนวยความจาของเครองคอมพวเตอรนนเอง
กระแสไฟฟาจากการดเสยง
เปลยนเปนสญญาณแมเหลก
สนามแมเหลกเปลยนแปลง
ลาโพงสน
เกดเปนเสยงใหไดยนตอไป
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 14 of 229
รปท 2. ตวอยางหนวยความจาแรม หนวยความจารอม หนวยความจารอม (ROM) มาจากคาวา (Read Only Memory) เปนหนวยความจาทบนทกขอมลแบบถาวร (เปลยนแปลงไมได) ขอมลจะคงอยตลอดแมวาจะปดเครองคอมพวเตอรไปแลว หนวยความจาประเภทนจะถกโปรแกรมมาจากโรงงานทผลต ในเครองคอมพวเตอรจะใชหนวยความจารอมสาหรบเกบโปรแกรมทใชเรมตนการทางานของระบบ หรอโปรแกรมทใชเปดเครอง ควบคมการทางานของเครองทเรยกวา ROM BIOSนนเอง การเกบขอมลในหนวยความจานนจะใชหนวยในการเกบเปนไบต (Byte) กโลไบต(kilobyte) เมกะไบต(Megabyte) กกะไบต(Gigabyte) และเทราไบต(Terabyte) โดยขนาดความจตาง ๆ มความสมพนธกนดงน
ความจ ตวยอ ความจโดยประมาณ ความจเปนไบต กโลไบต kB หนงพนไบต 1,024 เมกะไบต MB หนงลานไบต 1,048,576 กกะไบต GB หนงพนลานไบต 1,073,741,825 เทราไบต TB หนงลานลานไบต 1,099,511,627,776
หนวยความจารอง หนวยความจารอง (Secondary Memory) ใชสาหรบเกบคาสงและขอมลทคอมพวเตอรยงไมใชในทนททนใด แตตองการใชในอนาคต และใชเกบขอมลทไดจากการประมวลผลเพอนาไปใชงานตอไป หนวยความจานจะเกบขอมลไวไดแมวาจะปดเครองไปแลว หนวยความจารองมอยหลายชนดขนกบเทคโนโลยทใชในการบนทกขอมล บางประเภทเกบขอมลโดยใชเทคโนโลยแบบแมเหลก บางประเภทเกบขอมลโดยใชเทคโนโลยทางแสง ตวอยางของหนวยความจารองไดแก ฮารดดสก(Harddisk), CD, DVD, หนวยความจาแบบแฟช (Flash Memory) เปนตน หนวยความจารองจะเกบขอมลไดมาก โดยทวไปแลวขนาดความจของหนวยความจารองจะมากกวาหนวยความจาหลก แผนดสกซงเปนหนวยความจารองประเภทหนงมความจเพยง 1.44 MB แตหนวยความจายคใหม ๆ จะเกบขอมลไดมากขน หนวยทใชวดความจขอมลแสดงไดดงตารางตอไปน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 15 of 229
หนวย จานวนไบตโดยประมาณ หาไดจาก Kilobyte (kB) 1 พนไบต 210 หรอ 1,024 Megabyte(MB) 1 ลานไบต 220 หรอ 1,048,576 Gigabyte (GB) 1 พนลานไบต 230 Terabyte(TB) 1 ลานลานไบต 240 Petabyte(PB) 1000 ลานลานไบต 250 Exabyte(EB) 1 ลานลานลานไบต 260 Zettabyte(ZB) 1000 ลานลานลานไบต 270 Yottabyte(YB) 1 ลานลานลานลานไบต 280
2.3 ประเภทของคอมพวเตอร เครองคอมพวเตอรนนสามารถจาแนกไดหลายประเภท ขนกบขนาด ประสทธภาพ และลกษณะการใชงาน โดยทวไปแลวสามารถแบงประเภทของคอมพวเตอรไดดงน คอมพวเตอรสวนบคคล หรอพซ(Personal Computer) คอมพวเตอรประเภทนเปนคอมพวเตอรทมใชงานกนทวไป เปนคอมพวเตอรแบบตงโตะทเหมาะสาหรบใชงานในบาน ในสานกงาน ราคาไมแพง คอมพวเตอรประเภทนทนยมใชกนมอยสองตระกลคอ PC-Compatible ทมตนแบบเปนคอมพวเตอรของบรษท IBM และคอมพวเตอรตระกล Apple คอมพวเตอรแบบ PC มการผลตออกมาหลายรนหลายแบบ โดยสวนใหญแลวจะใชโปรแกรมระบบปฏบตการ Windows สวนคอมพวเตอร Apple จะใชโปรแกรมระบบปฏบตการของ Macintosh ทเรยกวา Mac OS
คอมพวเตอร PC ใชระบบปฎบตการ Windows คอมพวเตอร Apple ใชระบบปฎบตการ Mac OS
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 16 of 229
คอมพวเตอรโนตบก (Notebook Computer) เปนคอมพวเตอรสวนบคคลขนาดเลกทมนาหนกเบา สะดวกกบการเคลอนยายไปยงทตาง ๆ คอมพวเตอรแบบนอาจเรยกไดวาเปน Mobile Computer สามารถใชพลงงานไฟฟาทวไปหรอพลงงานจากแบตเตอรได ในปจจบนคอมพวเตอรประเภทนจะมประสทธภาพสงไมแพคอมพวเตอรแบบ PC แตหากเทยบกบ PC ทมประสทธภาพเทากนแลว คอมพวเตอรแบบโนตบกจะมราคาสงกวา
คอมพวเตอรแบบพกพา (Handheld Computer) เปนคอมพวเตอรขนาดเลกทเหมาะสาหรบพกพาไปทตาง ๆ เนองจากเครองมขนาดเลกจงไมเหมาะทจะออกแบบคยบอรตไวบนตวเครอง การใชคอมพวเตอรประเภทนจะใชปากกาทเรยกวา สไตลส (Stylus) เปนอปกรณสาหรบปอนขอมล คอมพวเตอรประเภทนสามารถใชงานพนฐานทวไปได รบสง mail และใชในการสอสารได เครองคอมพวเตอรประเภทนจะรวมถงคอมพวเตอรแบบ PDA (Personal Digital Assistant) หรอ Pocket PC ทใชกนทวไปดวย ปจจบนคอมพวเตอรประเภทนยงมกลองถายภาพตดมาบนตวเครองดวย
ตวอยาง Hand-held คอมพวเตอร โดยจะใช Stylus เปนอปกรณอนพต
คอมพวเตอรแบบ Notebook
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 17 of 229
เครองคอมพวเตอรเซรฟเวอร เครองคอมพวเตอร Server เปนเครองคอมพวเตอรทมขนาดใกลเคยงกบคอมพวเตอรทวไป แตจะมความสามารถสงกวามาก คอมพวเตอรประเภทนจะใชเปนเครองใหบรการกบคอมพวเตอร PC ตาง ๆทตออยในเครอขาย และยงใชเปนเครองใหบรการบนเวบอกดวย ขนาดและประสทธภาพของคอมพวเตอรเซรฟเวอรนมหลายรน ขนกบการใชงานวาจะใหบรการกบเครองคอมพวเตอรอน ๆ หลายเครองหรอไม
เครองเซรฟเวอรขนาดเลก และขนาด ใหญทใชกบระบบเครอขายขนาด
ใหญ คอมพวเตอรเมนเฟรม (Mainframe Computer) เปนคอมพวเตอรขนาดใหญ ทตองการประมวลผลขอมลจานวนมากดวยความเรวสง มหนวยความจาขนาดใหญ คอมพวเตอรประเภทนจะนยมใชในองคกรทมผใชจานวนมาก เชนระบบธนาคารขนาดใหญ ระบบธรกจขนาดใหญ ระบบการจองตวเครองบน เปนตน ในการใชงานคอมพวเตอรแบบเมนเฟรมมกจะไมใชเครองเมนเฟรมนเพยงเครองเดยว แตจะมการตอทางานรวมกบคอมพวเตอรอน ๆ ดวย โดยใหเครองเมนเฟรมเปนเครองหลกในการประมวลผล สวนคอมพวเตอรอน ๆ จะใชเปนตวปอนและแสดงขอมลทวไป
คอมพวเตอรแบบเมนเฟรมทมขนาดใหญ ใช
สาหรบประมวลผลขอมลจานวนมาก ซเปอรคอมพวเตอร (Supercomputer) เครองคอมพวเตอรประเภทนจดวาเปนคอมพวเตอรทมประสทธภาพการทางานสงทสด สามารถทางานไดมากกวาพนลานคาสงในหนงวนาท มนาหนกหลายตน สามารถเชอมตอกบคอมพวเตอร PC ทวไปไดจานวนมาก คอมพวเตอรประเภทนจะใชในงานทตองการประมวลผลกบขอมลจานวนมากดวยความเรวสง ๆ เชน งาน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 18 of 229
ทางดานการพยากรณอากาศ การคานวณตาง ๆ ทมความซบซอน และงานคอมพวเตอรสาหรบการออกแบบในอตสาหกรรมเปนตน
เครองซเปอรคอมพวเตอร คอมพวเตอรฝงตว (Embedded Computer) เปนคอมพวเตอรทไดรบความนยมอยางมากในปจจบน โดยจะเปนระบบประมวลผลทฝงตวอยในอปกรณตาง ๆ เพอควบคมการทางานของอปกรณนน ๆ ซงถาหากมองภายนอกแลวจะไมพบวามคอมพวเตอรเชอมตออย ระบบประเภทนจะพบในเครองมออเลคทรอนกสสมยใหม ตเยน เครองปรบอากาศ หรอในรถยนตทควบคมการทางาน การจดระเบด ระบบเบรค ดวยระบบคอมพวเตอร
ตวอยางคอมพวเตอรฝงตวทควบคมการทางานของรถ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 19 of 229
แบบฝกหดทายบท ตอนท 1 จงกาเครองหมาย ถก หรอขอทถกและกาเครองหมาผดหนาขอทผด …ถก…. 1. หนวยประมวลผลกลางเปนอปกรณอเลกทรอนกสทใชในการประมวลผลคาสงและขอมล …ผด…..2. ฮารดดสกจดวาเปนหนวยความจาหลก สวนแรมจดวาเปนหนวยความจาสารอง …ถก…..3. คอมพวเตอรทมขนาดใหญ มกมความเรวสงกวาคอมพวเตอรทมขนาดเลก …ถก…. 4. หนวยความจารอมของคอมพวเตอรเปนหนวยความจาทเกบโปรแกรม BIOS และอานขอมลไดอยางเดยว …ผด…. 5. ในอนาคตไมโครโปรเซสเซอรแบบสารกงตวนาจะทางานดวยเรวสงขนเรอย ๆ …ถก…. 6. การแบงประเภทของคอมพวเตอรจะแบงตามขนาด ประสทธภาพ และลกษณะการใชงาน …ผด…. 7. หากไมมหนวยความจาหลกคอมพวเตอรกยงคงทางานได …ถก…. 8. ขนาดความจของหนวยความจาจะบอกเปนจานวนไบต …ถก…. 9. เทคโนโลยสารกงตวนาเปนเทคโนโลยททาใหคอมพวเตอรมขนาดเลกลง …ผด…. 10. หนวยสงออกทาหนาทเปลยนรหสทมนษยเขาใจเปนรหสทคอมพวเตอรเขาใจ ตอนท 2 จงเลอกคาตอบทถกทสดเพยงคาตอบเดยว
1. ความสามารถของคอมพวเตอรขนอยกบอะไร ก. การทางานภายในของซพย ข. ประสทธภาพของโปรแกรมทใชงาน ค. ความเรวของซพย ง. ถกทกขอ 2. หนวยความจาแบบใดทจดวาเปนหนวยความจาหลก ก. หนวยความจาประเภทแรม ข. ฮารดดสก ค. Flash Memory ง. ถกทกขอ 3. ไมโครโปรเซสเซอรถกเรยกวาอะไรในคอมพวเตอร ก. ชพ (chip) ข. หนวยประมวลผลกลางหรอซพย ค. เมนบอรต ง. การดแสดงผล 4. คอมพวเตอรขนาดเลกทซอนอยในอปกรณอเลกทรอนกสคอขอใด ก. MiniComputer ข. MicroComputer ค. Embedded Computer ง. Microprocessor 5. การบอกขนาดของหนวยเกบขอมลในหนวยความจาจะบอกในหนวยใด ก. รจสเตอร ข. กโลไบต ค. แอดเดรส ง. บต 6. ขอใดเปนโปรแกรมระบบปฏบตการของเครอง Apple ก. Mac OS ข. Windows ค. DOS ง. ถกทกขอ 7. หนวยความจาประเภทใดเมอปดเครองแลวขอมลทเกบอยจะหายไป ก. แรม ข. รอม ง. ฮารดดสก ง. หนวยความจารอง
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 20 of 229
8. จานวนจดในแนวนอนและแนวตงของจอภาพจะบอกลกษณะใดของภาพ ก. ความละเอยดของภาพ ข. สทจะแสดงได ค. ขนาดของภาพ ง. ถกทกขอ 9. ขอใดคอสงทควบคมการทางานของซพย ก. ขอมลทรบทางอปกรณรบเขา ข. คาสง ค. ตวเลขทปอนทางคยบอรต ง. การใชเมาส 10. หนวยแสดงผลจะอยบนคอมพวเตอรประเภทใด
ก. mobile computer ข. notebook computer ค. desktop personal computer ง. ถกทกขอ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 21 of 229
บทท 2 ภาษาคอมพวเตอรและการพฒนาโปรแกรม
เครองคอมพวเตอรเปนอปกรณอเลกทรอนกสประเภทหนง การใหเครองคอมพวเตอรทางานไดนน
จะตองปอนคาสงใหกบมนและตองเปนคาสงทเครองคอมพวเตอรเขาใจ การนาคาสงมาเรยงตอกนใหทางานอยาง
ใดอยางหนงเรยกวาโปรแกรม เมอโปรแกรมถกปอนเขาไปในเครองคอมพวเตอรแลวมนจะทางานทละคาสง
สาหรบการใชคาสงสงงานใหคอมพวเตอรทางานนนจะตองใชภาษาทคอมพวเตอรสามารถเขาใจได ภาษาท
คอมพวเตอรเขาใจเรยกวาภาษาเครอง (Machine Language) ซงเปนรหสเลขฐานสองเมอมการปอนภาษานเขาไป
ในเครองคอมพวเตอร รหสเลขฐานสองจะถกเปลยนเปนสญญาณทางไฟฟาทคอมพวเตอรเขาใจ
แตถามนษยตองการปอนโปรแกรมใหกบคอมพวเตอรเปนเลขฐานสองนนจะทาไดยากมาก เพราะเปน
ภาษาทมนษยเขาใจไดยากจงไดมการออกแบบตวอกษรภาษาองกฤษใหแทนคาสงรหสเลขฐานสองเหลานน
เรยกวารหสนโมนก (mnemonic) ภาษาคอมพวเตอรทใชรหสนโมนกในการเขยนโปรแกรมเรยกวา
ภาษาแอสเซมบล (Assembly Language) ตอมาไดมการพฒนาชดคาสงภาษาตาง ๆ ใหมความใกลเคยงกบภาษาท
มนษยเขาใจเรยกวาภาษาระดบสง (High-level Language) ซงมอยหลายภาษาไดแก ภาษาซ ภาษาเบสก ภาษา
ปาสคาล สาหรบภาษาแอสเซมบลเปนภาษาททางานไดเรวเพราะเขาถงหนวยประมวลผลไดเรวทสดเราเรยกภาษา
นวาภาษาระดบตา (Low-level Language)
ดงนนในการเขยนโปรแกรมคอมพวเตอร ผเขยนโปรแกรมจะตองมตวแปลภาษาทจะแปลภาษา
โปรแกรมใหไดเปนรหสทางดจตอลทคอมพวเตอรสามารถรจกและทางานได
2.1 ชนดของภาษาคอมพวเตอร เนองจากคอมพวเตอรประมวลผลดวยระบบดจตอล การทางานภายในคอมพวเตอรจะควบคมดวย
สญญาณไฟฟาทมลกษณะเปดปด หรอแทนดวย “0” และ “1” เปนระบบเลขฐานสอง ซงภาษาทคอมพวเตอร
สอสารกนภายในเครองดวยระบบเลขฐานสองนน เรยกวา ภาษาเครอง (Machine Language) แตถาหากมนษยตอง
จาเลขฐานสองเปนจานวนมากเพอควบคมเครองคอมพวเตอรนนจะเปนไปไดยาก ดงนนจงมการพฒนาภาษาท
เปนกลาง คอ เปนภาษาคาสงทใกลเคยงกบคาทมนษยรจกกนด แลวแปลงกลบไปเปนเลขฐานสองใหคอมพวเตอร
อกครงหนง วธนจะทาใหโปรแกรมคอมพวเตอรทาไดงายขน ดงนนจงมการคดคนภาษาคอมพวเตอรออกมา
มากมาย โดยสามารถแบงไดเปน 5 ระดบ ดงน
• ภาษาเครอง (Machine Language)
กอนป ค.ศ. 1952 คอมพวเตอรจะใชภาษาระดบตาสด คอ การใชเลขฐานสองในการแทนคาสงและ
ขอมลตาง ๆ จงทาใหนกเขยนและพฒนาโปรแกรมในยคนนตองกาหนดชดตวเลขขนมาในการใชแทนคาสง
จากนนจงนาชดตวเลขมาใชในการเขยนโปรแกรม ซงเปนวธทยงยากมาก
ตวอยางเชน การเขยนคาสงเพอทาการบนทกขอมล 61H (61 ฐานสบหก) เกบไวในหนวยความจาภายใน
ซพยทเปนรจสเตอร AL โดยใชภาษาเครองของคอมพวเตอรรน x86/IA-32 จะเขยนดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 22 of 229
10110000 01100001
• ภาษาแอสเซมบล (Assembly Language)
ตอจากนนในป ค.ศ. 1952 ไดมการพฒนาโปรแกรมภาษาตวใหมทชวยใหจดจาคาสงไดงายขน ชอวา
ภาษาแอสเซมบล (Assembly Language) โดยการใชตวอกษรภาษาองกฤษมาแทนคาสงทเปนเลขฐานสอง ซงเรา
เรยกอกษรสญลกษณทใชแทนคาสงนวา นโมนกโคด (Mnemonic code) แตถงอยางไรกยงจดใหภาษาแอสเซมบล
อยในภาษาระดบตา
ตวอยาง การใชภาษาเครองของคอมพวเตอรรน x86/IA-32 เขยนคาสงใหบนทกขอมล 61H เกบไวในรจ
สเตอร AL ภายในซพย สามารถทาไดดงน
1011000 01100001
ถาหากเปนการนาภาษาแอสเซมบลมาเขยนเปนโปรแกรม จะทาใหคาสงโปรแกรมดและจาไดงายขน
โดยมรปแบบการเขยนดงน
MOV AL , 61H
เหตผลททาใหคอมพวเตอรสามารถรบคาสงทเปนรหสนโมนกได เพราะมการใช แอสเซมเบอร
(Assembler) ซงเปนตวแปลภาษานโมนกใหเปนรหสภาษาเครอง จงทาใหคอมพวเตอรทางานตามคาสงทปอนเขา
ไปได สาหรบตวอยางนตวแอสเซมเบอรจะแปลคาสง MOV AL , 61H ใหไปเปนรหสเลขฐานสองทคอมพวเตอร
เขาใจนนเอง
• ภาษาระดบสง (High-level Language)
ในป ค.ศ. 1960 มการพฒนาภาษาโปรแกรมเปน ภาษาระดบสงโดยใชคาภาษาองกฤษมาสงงานและ
ควบคมคอมพวเตอร เรยกภาษาสงในยคนวา ภาษายคทสาม (Third-generation Language) ซงทาใหยคนนมการ
หนมาใชคอมพวเตอรกนมากยงขน
ในยคนมภาษาระดบสงเกดขนมากกมาย เชน ภาษา BASIC, COBOL, FORTRAN และภาษา C ซงแต
ละภาษากมความแตกตางกนไป เพราะภาษานน ๆ จะตองมตวแปลภาษา หรอคอมไพลเลอร ทจะแปลเปนภาษาท
ทาใหเครองคอมพวเตอรทางานไดตรงตามโปรแกรมทเขยนเอาไว
ตวอยาง ถาหากตองการเขยนโปแกรมภาษา C โดยสงใหพมพคาวา “Test” ซงใชคาสงทเปนคา
ภาษาองกฤษเขาใจงาย ๆ ดงน
#include <stdio.h>
main()
printf(“ Test “);
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 23 of 229
เมอตองการใหคอมพวเตอรทางานจะตองนาตวแปลภาษาซ หรอ ซคอมไพลเลอรมาแปลงคา
ภาษาองกฤษดานบนใหเปนเลขฐานสองทคอมพวเตอรเขาใจอกทหนง
• ภาษาระดบสงมาก (Very high-level Language)
เปนยคทพฒนาโปรแกรมขนมาเปนระดบท 4 หรอ ภาษายคทส (Fourth-generation Language) หรอ
4GLs เปนการพฒนาคณสมบตของภาษาไดแตกตางจากยคกอนไดอยางชดเจน โดยใชหลกการเขยนโปรแกรม
แบบไมใชโพรซเยอร (Procedural Language) ซงแบบเกาเราตองเขยนโปรแกรมสรางโพรซเยอรแตละตวเพอไว
ใหทางานในดานตาง ๆ แตยคนโปรแกรมการทางานในสวนตาง ๆ จะถกสรางไวพรอมแลว ดงนนนกพฒนา
โปรแกรมไมจาเปนตองเขยนโปรแกรมขนใหมทงหมด ซงสามารถเรยกชดการทางานทมอยแลวมาสรางเปน
โปรแกรมใหมทตองการไดทนท
ตวอยางเชน ถาหากตองการใหแสดงรายชอพนกงานทมอยในกรงเทพ จะสามารถเขยนโปรแกรมไดสน
มาก เมอเทยบกบโปรแกรมแบบเกา โดยใชคาสงสน ๆ ดงน
SELECT First Name, Last Name
FROM Employees
WHERE City = “Bangkok”
จากตวอยางเปนการเขยนโปรแกรมทสนมาก เนองจากโปรแกรมภาษาทใชมความใกลเคยงกบภาษาของ
มนษยมากยงขน หากเทยบกบการเขยนโปรแกรมดวยภาษา COBOL จะพบวาตองเขยนโปรกรมหลายรอยบรรทด
จงจะไดผลลพธเหมอนกน
ขอดของภาษาในยคทส
• การเขยนโปรแกรมจะมงหวงทจะไดผลลพธของงานเปนหลกวาอยากไดอะไร ไมสนใจ
วธการทามากนก
• สงเสรมตอการพฒนาเนองาน เนองจากสามารถเขยนและแกไขโปรแกรมไดงาย
• ลดเวลาในการอบรมและพฒนาผเขยนโปรแกรม เพราะไมเชยวชาญในการเขยนโปรแกรมก
สามารถทาได
• ผเขยนโปรแกรมไมจาเปนตองรและศกษาถงโครงสรางของโปรแกรม และระบบฮารดแวร
ของเครอง
ในยคทสไดมการพฒนาภาษาเพอใชเรยกดขอมลจากฐานขอมล ซงรจกกนในชอ ภาษาเรยกคนขอมล
(Query Language) เพอชวยใหเราสามารถเรยกแสดงขอมลและตดตอฐานขอมลไดสะดวกยงขน เพราะกอนหนาน
ถาจะทาการจดเกบและเรยกแสดงขอมลจะตองมการวางแผนไวลวงหนา หากมการเรยกแสดงขอมล
นอกเหนอจากแผนทกาหนดไว กจะตองใชเวลาในการรอนาน แตถาเปนการใชภาษาเรยกคนขอมลกจะชวยใหเรา
เรยกดไดเรวขน และภาษาเรยกคนขอมลทเปนมาตรฐานซงรจกกนด คอ SQL (Structured Query Language)
• ภาษาธรรมชาต (Natural Language)
เปนภาษาโปรแกรมทพฒนามาถงระดบท 5 เรยกวา ภาษายคทหา (Fifth generation Language) หรอ
5GLs เหตผลทมาของภาษาธรรมชาตเนองจากวาเปนภาษาทใกลเคยงกบภาษาธรรมชาตของมนษย ไมตองสนใจ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 24 of 229
เรองไวยากรณของภาษา เพยงแคผใชพมพคาสงลงไป โดยผใชแตละคนอาจจะใชคาศพท รปประโยคทตางกน
จากนนคอมพวเตอรจะแปลความหมายและทางานตามคาสงเหลานนเอง แตถามคาสงทไมเขาใจหรอไมแนใจ ก
จะมการแจงกลบมาใหเรายนยนความถกตอง ซงการแปลความหมายของคาสงในภาษาธรรมชาตจะใช ระบบ
ฐานความร (Knowledge base system) ทมความใกลเคยงกบการใชภาษาของมนษย
ตวอยางเชน การใชภาษา SQL เรยกคนขอมลโดยใหแสดงรายชอพนกงานทมอยในกรงเทพสามารถ
เขยนไดดงน
SELECT First Name , Last Name
FROM Employees
WHERE City = “BANGKON”
แตถาเปนการเขยนโปรแกรมดวยภาษาธรรมชาต เราจะเขยนโปรแกรมไดใกลเคยงกบภาษามนษยมาก
ขน ดงน
TELL ME THE NAMES OF EMPLOYEES IN BANGKOK
ในการเขยนโปรแกรมคอมพวเตอรไมวาจะเขยนดวยภาษาระดบสงหรอภาษาระดบตา เราจะตองแปลง
ภาษาเหลานนใหเปนรหสภาษาเครองทคอมพวเตอรเขาใจเสยกอน คอมพวเตอรจงจะทางานได ตามทไดกลาว
มาแลววาภาษาคอมพวเตอรเปนการนาชดคาสงแตละคาสงมาตอกนใหคอมพวเตอรทางาน การเขยนชดคาสงนไม
วาจะเขยนดวยภาษาอะไรจะเรยกวาโปรแกรมตนฉบบ (Source Program) หรอรหสตนฉบบ (Source Code)
จากนนเราจะตองแปลงใหเปนภาษาเครองทคอมพวเตอรทางานไดเรยกวาเอกซควโปรแกรม (Executable
Program)
การเขยนโปรแกรมดวยภาษาแอสเซมบลจะตองใชตวแปลภาษาใหเปนภาษาเครอง ตวแปลนเรยกวา แอ
สเซมเบอร (Assembler) ขนตอนการแปลสามารถเขยนไดดงรปท 2.1
รปท 2.1 ขนตอนการแปลงภาษาแอสเซมบลเปนภาษาเครอง
สาหรบการเขยนโปรแกรมดวยภาษาระดบสงจะมวธในการแปลสองประเภทคอ การแปลคาสงทละ
คาสงใหเครองทางานทละคาสง จากนนจงแปลคาสงบรรทดตอไปเชนการเขยนโปรแกรมดวยภาษาเบสก ตวท
แปลภาษาประเภทนเรยกวาอนเตอรพรเตอร (Interpreter) การทางานของตวอนเตอรพรเตอรนจะแปลความหมาย
ของคาสงทละคาสง ถาไมพบขอผดพลาดเครองจะทาคาสงทแปลได แตถาพบขอผดพลาดจะหยดทางานและแจง
ขอผดพลาดออกมา สวนการแปลคาสงอกแบบหนงเรยกวา คอมไพเลอร (Compiler) โดยมนจะมองโปรแกรม
ตนฉบบทงหมด และแปลใหเปนรหสภาษาเครองถาพบขอผดพลาดกจะแจงออกมา ทาใหโปรแกรมทางานไดเรว
เพราะเครองไมตองแปลอกเมอจะทาคาสงถดไป ขนตอนการแปลภาษาทงสองประเภทนแสดงไดดงรปท 2.2
โปรแกรมตนฉบบ
ภาษาแอสเซมบล
โปรแกรม
แอสเซมเบอร
รหสภาษาเครอง
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 25 of 229
รปท 2.2 ขนตอนการแปลภาษาโปรแกรม
2.2 ภาษาคอมพวเตอรสาหรบพฒนาโปรแกรม ในปจจบนมภาษาคอมพวเตอรทใชสาหรบพฒนาโปรแกรมมากมาย บางภาษาแมวาจะมมานานแลวแต
กยงไดรบความนยมอยเนองจากมการพฒนามาอยางยาวนาน จงมเครองมอชวยใหเขยนโปรแกรมไดงายขน
มากมาย ภาษาแตละภาษาจะมโครงสรางของภาษาตางกน มความสามารถเดน ๆ ตางกน และแตละภาษากใช
สภาพแวดลอมของเครองคอมพวเตอรตางกนดวย ภาษาคอมพวเตอรทนยมใชในการเขยนโปรแกรมไดแก
ภาษาเบสก (BASIC)
ภาษาเบสกเปนภาษาคอมพวเตอรระดบสง เกดขนเมอป ค .ศ. 1963 ทมหาวทยาลย Dartmouth College
ตอมาไดถกนามาใชในคอมพวเตอรทวไปในป ค .ศ. 1980 คาวา Basic ยอมาจากคาวา Beginner’s Allpurpose
Symbolic Instruction Code ภาษานเหมาะสาหรบผเรมตนเขยนโปรแกรมเนองจากเปนรปแบบคาสงทงาย แต
ความสามารถจะนอยกวาภาษาอน ๆ เนองจากเปนภาษาทพฒนามานานแลว
ขอด : เปนภาษาระดบสงทมรปแบบคาสงใชงานไดงาย นาไปประยกตสรางโปรแกรมไดทวไป ทงงานดานธรกจ
และวทยาศาสตร เหมาะกบผทเรมตนฝกเขยนโปรแกรม
โปรแกรมตนฉบบ Interpreter รหสภาษาเครอง
แปลทละบรรทด
โปรแกรมตนฉบบ Compiler รหสภาษาเครอง
แปลทงโปรแกรม
10 PRINT “HELLO WIKIPEDIA!”
20 GOTO 10
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 26 of 229
ขอเสย : ถกพฒนาและใชในยคแรกของเครองไมโครคอมพวเตอร จงทาใหประสทธภาพของคาสงมนอยกวา
ภาษาอน ๆ และเนองจากรปแบบของการเขยนโปรแกรมจะไมเปนโครงสราง ดงนนจงไมเหมาะกบการเขยน
โปรแกรมทมการเชอมตอกบระบบฐานขอมล
ภาษาฟอรแทรน (FORTRAN)
เปนภาษาระดบสงเกดขนเมอป ค .ศ. 1950 คาวา FORTRAN ยอมาจากคาวา FORmular TRANslator
ภาษานเปนภาษาทมประสทธภาพสงในการคานวณ เหมาะสาหรบการเขยนโปรแกรมประยกตทางคณตศาสตรท
ทางานบนเครองเมนเฟรม แตในปจจบนไดมคอมไพลเลอรหลายตวทพฒนาขนสาหรบแปลภาษานบนเครอง
คอมพวเตอรทวไป
ในอดสวชาการเขยนโปรแกรมคอมพวเตอร ภาษานเปนวชาบงคบสาหรบนกศกษาทางดานวทยาศาสตร
และวศวกรรมศาสตรทตองการนาคอมพวเตอรมาชวยคานวณในดานตาง ๆ เนองจากภาษานมความสามารถใน
การคานวณดกวาภาษาอน ๆ
ขอด : เปนภาษาระดบสงทถกพฒนาขนเพอใชในงานทซบซอน มประสทธภาพในงานคานวณ ซงถกนาไปใช
สรางโปรแกรมประยกตดานวทยาศาสตรและวศวกรรมศาสตร ททางานบนเครองเมนเฟรม
ขอเสย : เนองจากเปนภาษาทพฒนาขนเพอใชบนเมนเฟรม จงทาใหตองมการปรบคาสงมากมายเพอใหเหมาะสม
กบการนามาใชสรางโปรแกรมประยกตบนเครองไมโครคอมพวเตอร จงเปนเหตใหหมดความนยมเมอมการ
พฒนาภาษาเบสกมาใชบนไมโครคอมพวเตอรทมการใชงานกนอยางแพรหลาย
ภาษาโคบอล (COBOL)
ภาษานเกดจากความรวมมอของรฐบาลสหรฐ กบองคกรธรกจ และมหาวทยาลยตาง ๆ ถกประกาศใช
อยางเปนทางการเมอป ค .ศ. 1960 ภาษานมชอเตมวา Business Oriented Language เปนภาษาทใชเขยน
โปรแกรมแบบโครงสราง (Structure Program) เหมาะสาหรบการพฒนาโปรแกรมประยกตทางธรกจ การ
จดเกบขอมล งานทางดานบญช และการเชอมตอคอมพวเตอรภายในองคกร
program HelloWorld
write (*,*) ‘Hello, world! ‘
end program HelloWorld
IDENTIFICATION DIVISION.
Program-Id. Hello-World.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
*
PROCEDURE DIVISION.
Para1.
DISPLAY “Hello, world.”.
*
Stop Run
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 27 of 229
ขอด : เปนภาษาทนยมใชในงานธรกจ ไดแก การจดเกบขอมล งานบญช การเงนและสนคาคงคลง เพราะเปน
ภาษาทมการเขยนโปรแกรมเชงโครงสราง จงสามารถประยกตใหทางานเชอมตอกบฐานขอมลได ปจจบนได
พฒนาเปนการเขยนโปรแกรมเชงวตถ (OOP)
ขอเสย : ผพฒนาโปรแกรมตองศกษาโครงสรางของโปรแกรม เพอการใชคาสงไดถกตอง
ภาษาปาสคาล (PASCAL)
ภาษานเกดขนเมอป 1970 ชอของภาษาเปนการตงชอตามนกคณตศาสตรทประดษฐเครองคานวณในยค
แรก ทชอ Blaise Pascal ภาษานเปนภาษาระดบสงทใชเขยนโปรแกรมเชงโครงสรางได ตวแปลภาษาทไดรบ
ความนยมอยางมากคอ โปรแกรมเทอรโบปาสคาล (Turbo Pascal) ของบรษทบอรแลนด ในปจจบนในประเภท
ไทยไดใชโปรแกรมนในการสอนการโปรแกรมเบองตนใหกบนกเรยนนกศกษาทวไป
ขอด : เปนภาษาทเขยนเชงโครงสราง เหมาะกบการศกษาสาหรบผเรมตนเขยนโปรแกรม นอกจากน คาสงไดถก
ออกแบบใหทางานอยางมประสทธภาพ จงสามารถพฒนาไปใชในงานทวไป งานดานธรกจ วทยาศาสตรและ
วศวกรรม
ขอเสย : เปนภาษาทยงคงใชงานยาก เมอเทยบกบการเขยนโปรแกรมเชงวตถ
ภาษาซ C
ภาษานพฒนาขนในหองปฎบตการเบลล (Bell Laboratory) ของบรษท เอทแอนดท ในป ค .ศ. 1970
เพอใชบนระบบปฏบตการยนกซ (Unix) ตอมาไดมตวแปลภาษาออกมาหลายตว และไดถกใชอยางแพรหลายบน
เครองคอมพวเตอรทวไป ภาษานเปนภาษาทมความยดหยนสง สามารถทางานบนระบบปฏบตการตาง ๆ ไดเปน
อยางด สามารถใชควบคมฮารดแวรไดโดยตรง แตชดคาสงจะมกฎเกณฑและรายละเอยดตาง ๆ จานวนมาก
Program HelloWorld(output);
Begin
Writeln(‘Hello, World!’)
End.
#include “stdio.h”
int main(void)
printf(“Hello, world\n”);
return 0;
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 28 of 229
ขอด : เปนภาษาทมความยดหยนสามารถทางานบนเครองคอมพวเตอรสวนบคคล และระบบปฏบตการตาง ๆ ได
นอกจากนยงสามารถเขาถงฮารดแวรของคอมพวเตอรไดโดยตรง
ขอเสย : คาสงของภาษาจะไมเหมอนคาศพทภาษาองกฤษโดยตรง จงอาจจะจดจายากขน และวธการใชคาสงจะม
กฎเกณฑรายละเอยดจานวนมาก จงไมเหมาะกบผเรมตนเขยนโปรแกรม
ภาษาซพลสพลส (C++)
ภาษานพฒนาตอมาจากภาษาซ โดยเพมการเขยนโปรแกรมแบบ Class เขาไป ทาใหภาษาซม
ความสามารถในการทางานสงขน สามารถนามาเขยนโปรแกรมเชงวตถ (Object-oriented programming) ได
ทาใหภาษานไดรบความนยมอยางสง แตจะไมเหมาะสาหรบผเรมตนเขยนโปรแกรมเนองจากโครงสรางของ
ภาษามความซบซอนมากขน
ขอด : เปนภาษาทมรปแบบการเขยนโปรแกรมเชงวตถ สามารถทางานเขาถงการทางานของฮารดแวรไดโดยตรง
จงเหมาะกบการพฒนาโปรแกรมประยกต และไดรบความนยมเปนอยางสง
ขอเสย : เปนภาษาระดบสง และมรปแบบการเขยนโปรแกรมทซบซอนขน ไมเหมาะสาหรบผเรมตนเขยน
โปรแกรม
วชวลเบสก (VISUAL BASIC)
ภาษานพฒนาขนโดยบรษทไมโครซอฟต ชดคาสงตาง ๆ จะคลายกบภาษา BASIC เดม และเปนภาษาท
ไดรบความนยมอยางมากในการเขยนโปรแกรมบนระบบปฏบตการวนโดว เนองจากผเขยนโปรแกรมสามารถ
สรางหนาจอในการตดตอกบผใชไดงาย ปจจบนภาษานถกนยมใชในการเขยนโปรแกรมขนาดใหญ ๆ จานวนมาก
ภาษานเหมาะสาหรบผพฒนาโปรแกรมแตไมเหมาะผทจะเรมตนเขยนโปรแกรม
#include <iostream>
int main()
std::cout << “Hello World!” << std::endl;
return 0;
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 29 of 229
ขอด : เปนการพฒนาโปรแกรมทเหมาะกบการทางานบนระบบปฏบตการแบบ GUI เชน Windows เพราะม
เครองมอทใชในการสรางกราฟก เหมาะกบการสรางโปรแกรมขนาดใหญ
ขอเสย : ไมเหมาะกบผเรมตนเขยนโปรแกรม เพราะจะเหมาะกบผทเคยมพนฐานการเขยนโปรแกรมภาษาอนมา
กอน การเขยนโปรแกรมมความซบซอน
ภาษาจาวา (JAVA)
ภาษานเกดขนในป ค .ศ. 1990 โดยบรษท Sun Microsystem ทพฒนาใหเปนภาษาสาหรบการเขยน
โปรแกรมเชงวตถ ภาษาจาวานสามารถทางานไดบนเครองคอมพวเตอรทกระบบ เนองจากเวลาคอมไพลออก
มาแลวจะไดขอมลแบบ ไบตโคด (Bytecode) เครองคอมพวเตอรทจะใชภาษานจะตองตดตง Java Virtual
Machine กอนเพอใหโปรแกรมทางานได ปจจบนภาษานไดถกพฒนามาหลายรปแบบ มทงการเขยนโปรแกรม
บนระบบเครอขาย การเขยนโปรแกรมบนโทรศพทมอถอเปนตน
ขอด : เปนโปรแกรมภาษาทสามารถทางานไดทกระบบ จงเหมาะกบการพฒนาโปรแกรม หรอเกมทตองการ
เขาถงผใชไดในทกระบบ
ขอเสย : เปนมาตรฐานทมความซบซอน การพฒนาและการศกษาโปรแกรมจงยากกวาภาษาอน ๆ
การพฒนาโปรแกรมเพอประยกตใชในงานแตละดาน จาเปนอยางยงทจะตองเลอกใชภาษาทเหมาะสม
และเนองจากภาษาคอมพวเตอรมเปนจานวนมาก ดงนนจาเปนจะตองพจารณาสงตาง ๆ ในการเลอกใช
ภาษาคอมพวเตอรดงน
• ภาษามาตรฐานทใชในองคกร
การพฒนาโปรแกรมไวใชในองคกร โดยสวนใหญจะยดภาษาใดภาษาหนงไวเปนหลก เพราะไมตอง
เสยเวลาศกษาโครงสรางของภาษาในการเขยนโปรแกรมใหม ทาใหสะดวกตอการเขยน การดแล และการบรหาร
ระบบ
ตวอยางเชน องคกรทใชภาษา JAVA เปนมาตรฐาน กจะมงเนนใชภาษา JAVA ในการสรางโปรแกรม
ทงหมด เพราะนกพฒนาโปรแกรมแตละคนไมไดเกงในการเขยนโปรแกรมไดทกภาษา นอกจากนควรเปนภาษาท
สามารถสรางบคลากรมาทางานเขยนโปรแกรมและบรหารไดอยางตอเนองได ตวอยางเชน องคกรทใชภาษา
JAVA เรมตนในการเขยนโปรแกรม ตอจากนนโปรแกรมเมอรชดเกาลาออกไป หากองคกรไมสามารถหา
โปรแกรมเมอรทชานาญภาษา JAVA มาแทนทได กจะทาใหงานนนหยดชะงกไป
// Hello.java
public class Hello
public static void main(String[] args)
System.out.println(“Hello, world!”);
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 30 of 229
• คณสมบตและความเหมาะสม
แตละภาษาจะมคณสมบตและความเหมาะสมกบงานเฉพาะดาน เชน งานดานธรกจ งานดานบญช งาน
ดานวทยาศาสตร และงานดานวศวกรรม ตวอยางเชน การเขยนโปรแกรมดานบญชจะนยมใชภาษา COBOL เปน
ตน
• การทางานรวมกบโปรแกรมอน
การเขยนโปรแกรมการทางานในบางดาน อาจจะตองทางานรวมกบโปรแกรมอนดวย เชน การเขยน
โปรแกรมสนคาคงคลง เราจาเปนตองเขยนโปรแกรมทงสวนทตดตอกบผใชและสวนตดตอกบฐานขอมล ดงนน
การเลอกใชภาษาทรองรบกน จะชวยใหโปรแกรมทางานไดอยางมประสทธภาพ
ตวอยางเชน หากเรามระบบฐานขอมลบนโปรแกรม Microsoft Access และเมอมการพฒนาโปรแกรม
สวนตดตอกบผใชใหม โดยจะตองทางานรวมกบฐานขอมลบน Access ทเคยมอย งานลกษณะนควรเลอกใช
Visual Basic ซงจะทางานเขากนมากกวาการเลอกใช JAVA เพราะ Visual Basic ถกออกแบบใหสามารถรองรบ
การตดตอกบฐานขอมลบน Access ไดเปนอยางด
• การทางานรวมกบระบบอน ๆ
โปรแกรมประยกตบางตว อาจจะมเปาหมายใหสามารถทางานขามระบบได เชน โปรแกรมรบรายการ
อาหารจากลกคา และการออกใบเสรจเกบเงนลกคาของภตตาคาร ซงจะตองทางานรวมกนระหวางโปรแกรมรบ
รายการสนคาบนระบบเครอง PDA ของพนกงานขาย และสงขอมลไปยงระบบเครองคอมพวเตอรเซรฟเวอรทจะ
บนทกรายการอาหารของลกคาแตละโตะไปคานวณราคา และพมพในเสรจรบเงนออกมา
2.3 ขนตอนการพฒนาโปรแกรม การเขยนโปรแกรมคอมพวเตอรใหทางานไดตามทเราตองการนน ผเขยนโปรแกรมจะตองรวาจะให
โปรแกรมทาอะไร มขอมลอะไรทตองใหกบโปรแกรมบาง และตองการ เอาตพตอยางไรจากโปรแกรมรวมทง
รปแบบการแสดงผลดวย ผททาการเขยนโปรแกรมจะตองทราบถงขนตอนวธการของการแกปญหาของโปรแกรม
ดวยวาจะตองทาอยางไรโดยเขยนเปนลาดบขนตอนขนมากอนแลวจดบนทกเอาไว จากนนจงนาลาดบขนตอนท
เขยนขนมาพฒนาเปนโปรแกรม ถาหากผเขยนโปรแกรมไมไดวางแผนขนตอนการทางานตาง ๆ ไวกอน หาก
ตองการปรบปรงแกไขโปรแกรมในภายหลงจะทาใหเสยเวลามากในศกษาโปรแกรมกอนทจะทาการแกไข ถา
หากโปรแกรมมความซบซอนไมมากการศกษาโปรแกรมเพอแกไขปญหาอาจไมนานนก แตถาหากโปรแกรมม
ความซบซอนมากจะทาใหขนตอนการศกษาปญหายงใชเวลามากขนไปดวย โดยทวไปแลวขนตอนการพฒนา
โปรแกรมแบงไดดงน
1. กาหนดและวเคราะหปญหา (Problem Definition and Problem Analysis)
2. เขยนผงงานและซโดโคด (Pseudocoding)
3. เขยนโปรแกรม (Programming)
4. ทดสอบและแกไขโปรแกรม (Program Testing and Debugging)
5. ทาเอกสารและบารงรกษาโปรแกรม (Program Documentation and Maintenance)
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 31 of 229
การกาหนดและวเคราะหปญหา ขนตอนนเปนขนตอนแรกสดทนกเขยนโปรแกรมจะตองทา การใหคอมพวเตอรแกปญหาตางๆ ใหเรา
นนเราจะตองมแนวทางทแกไขปญหาทเหมาะสมใหกบคอมพวเตอร เพอใหการทางานเปนไปอยางม
ประสทธภาพ ถาหากผทเขยนโปรแกรมไมสามารถทาความเขาใจกบปญหาทตองการแกไขได การนา
คอมพวเตอรมาใชในการแกปญหาตาง ๆ กไมสามารถทาได การกาหนดและวเคราะหปญหามขนตอนยอย ๆ ดงน
1. กาหนดขอบเขตของปญหา โดยกาหนดรายละเอยดใหชดเจนวาจะใหคอมพวเตอรทาอะไร ตวแปร
คาคงททตองใชเปนลกษณะใด ถาหากเราไมกาหนดขอบเขตของปญหาจะทาใหคอมพวเตอรตดสนใจไดยากวา
ขอมลตาง ๆ ทเกดขนนนถกหรอผด
2. กาหนดลกษณะของขอมลเขาและออกจากระบบ (Input/Output Specification) โดยตองรวาขอมลท
จะสงเขาไปเปนอยางไร มอะไรบาง เพอใหโปรแกรมทาการประมวลผลและแสดงผลลพธ เชนการรบคาจากคย
บอรต การใชเมาส การกาหนดปมตาง ๆ ลกษณะการแสดงผลทางหนาจอวาจะใหมรปรางอยางไรโดยคานงถง
ผใชเปนหลกในการออกแบบโปรแกรม ตวอยางเชนถาหากตองการรบขอมลเขาไปประมวลผล กตอง
พจารณาวาขอมลนนเปนตวอกษรหรอตวเลข ถาเปนตวเลขกตองพจารณาตอวาเปนเลขจานวนเตม
หรอทศนยม เอาตพตทแสดงออกทางจอภาพจะใหแสดงทศนยมกตาแหนงเปนตน
3. กาหนดวธการประมวลผล (Process Specification) โดยตองรวาจะใหคอมพวเตอรประมวลผล
อยางไรจงไดผลลพธตามตองการ
ตวอยางท 2.1 ถาหากตองการออกแบบโปรแกรมใหคอมพวเตอรรบคาขอมล 3 คา และแสดงคาเฉลยทางจอภาพ
เราอาจกาหนดและวเคราหปญหาไดดงน
1. รบขอมลจากคยบอรต
1.1 รบขอมลเฉพาะทเปนตวเลขมาเกบในตวแปร
1.2 ถาขอมลเทากบ 0 ใหรบใหม
2. หาคาเฉลย
2.1 รวมคาทกคาทรบมาเขาดวยกน
2.2 นาคาผลรวมทไดหารดวย 3
2.3 นาคาผลลพธไปเกบในตวแปร
3. แสดงผลลพธทางจอภาพ
3.1 แสดงคาวาคาเฉลยเทากบ
3.2 แสดงผลลพธโดยมทศนยมสองตาแหนง
จะเหนวาเราจะนาปญหามาแจกแจงยอยวาจะตองทาอะไรบาง โดยขอมลทรบเขาไปคอตวเลขสามตว
การประมวลผลคอการหาคาเฉลย สวนเอาตพตคอการพมพผลลพธ เราสามารถเขยนการทางานของระบบไดดง
แผนภาพในรปท 2.3
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 32 of 229
นาขอมลเขา ประมวลผล นาขอมลออก
รปท 2.3 ขนตอนการทางานของระบบ
การเขยนผงงานและซโดโคด หลงจากทไดวเคราะหปญหาแลว ขนตอนตอไปจะตองใชเครองมอชวยในการออกแบบโปรแกรม ซงยง
ไมไดเขยนเปนโปรแกรมจรง ๆ แตจะชวยใหเขยนโปรแกรมไดงายขน และทาใหผอนนาโปรแกรมของเราไป
พฒนาตอไดงายขน โดยเขยนเปนลาดบขนตอนการทางานของโปรแกรมทเรยกวาอลกอรทม (Algorithm) ซงจะ
แสดงขนตอนการแกปญหา โดยใชประโยคทชดเจนไมคลมเครอ และมรายละเอยดการทางานพอสมควรเพยง
พอทจะนาไปเขยนเปนโปรแกรมใหทางานจรง โดยอลกอรทมนนอาจเขยนใหอยในรปของรหสจาลองหรอซโด
โคด (Pseudo-code) หรอเขยนเปนผงงาน (Flowchart) กได โดยซโดโคดจะเปนคาอธบายขนตอนการทางาน
ของโปรแกรม เปนคายอไมมรปแบบเฉพาะตว โดยแตละสวนจะเปนแนวทางในการเขยนโปรแกรมซงทาให
เขยนโปรแกรมเปนภาษาตาง ๆ ไดงายขน สวนผงงานจะใชสญลกษณตาง ๆ แทนการทางานและทศทางของ
โปรแกรม
การเขยนโปรแกรม หลงจากทผานขนตอนทงสองแลว ขนตอไปจะตองเขยนเปนโปรแกรมเพอใหคอมพวเตอรสามารถ
ประมวลผลได โดยเปลยนขนตอนการทางานใหอยในรปรหสภาษาคอมพวเตอร การเขยนโปรแกรมจะตองเขยน
ตามภาษาทคอมพวเตอรเขาใจโดยอาจใชภาษาระดบสง หรอระดบตาซงสามารถเลอกไดหลายภาษา การเขยน
โปรแกรมแตละภาษาจะตองทาตามหลกไวยากรณ (syntax) ทกาหนดไวในภาษานน นอกจากนการเลอกใช
ภาษาจะตองพจารณาถงความถนดของผเขยนโปรแกรมดวย
การทดสอบและแกไขโปรแกรม หลงจากเขยนโปรแกรมจะตองทดสอบความถกตองของโปรแกรมทเขยนขน หาจดผดพลาดของ
โปรแกรมวามหรอไม และตรวจสอบจนไมพบทผดอก จดผดพลาดของโปรแกรมนเรยกวาบก (Bug) สวนการ
แกไขขอผดพลาดใหถกตองเรยกวา ดบก (debug) โดยทวไปแลวขอผดพลาดจากการเขยนโปรแกรมจะมสอง
ประเภทคอ
รบขอมลตวท 1
รบขอมลตวท 2
รบขอมลตวท 3
อานคาเฉพาะทเปนเลข 3 ตว
นาตวเลขทงสามตวมารวมกน
นาผลรวมมาหารดวย 3
แสดงคาเฉลย
ทศนยมสอง
ตาแหนง
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 33 of 229
1. การเขยนคาสงไมถกตองตามหลกการเขยนโปรแกรมภาษานน ๆ ซงเรยกวา Syntax Error หรอ
Coding Error ขอผดพลาดประเภทนเรามกพบตอนแปลภาษาโปรแกรมเปนรหสภาษาเครอง
2. ขอผดพลาดทางตรรก หรอ Logic Error เปนขอผดพลาดทโปรแกรมทางานได แตผลลพธออกมา
ไมถกตอง
ทาเอกสารและบารงรกษาโปรแกรม ขนตอนนจะทาใหผใชสามารถใชงานโปรแกรมไดอยางมประสทธภาพ และสะดวกในการตรวจสอบ
ขอผดพลาดโดยเขยนเปนเอกสารประกอบโปรแกรมขนมา โดยทวไปแลวแบงออกเปนสองประเภทคอ
1. คมอการใช หรอ User Document หรอ User guide ซงจะอธบายการใชโปรแกรม
2. คมอโปรแกรมเมอร หรอ Program Document หรอ Technical Reference ซงจะอานวยความ
สะดวกในการแกไขโปรแกรมและพฒนาโปรแกรมในอนาคต โดยจะมรายละเอยดตางๆ เกยวกบ
โปรแกรม เชนชอโปรแกรม การรบขอมล การพมพผลลพธขนตอนตาง ๆ ในโปรแกรม เปนตน
สวนการบารงรกษาโปรแกรม (Maintainance) เปนการทผเขยนโปรแกรมจะตองคอยตรวจสอบการใช
โปรแกรมจรง เพอแกไขขอผดพลาดซงอาจเกดขนในภายหลง รวมทงพฒนาโปรแกรมใหทนสมยอยเสมอเมอ
เวลาผานไป
แบบฝกหดทายบท
ตอนท 1 จงเลอกคาตอบทถกตองทสดเพยงหนงขอ
1. ขอใดเปนลกษณะของภาษาระดบสง
ก.ทางานไดโดยไมตองมโปรแกรมระบบ ข . มภาษาใกลเคยงกบภาษามนษย
ค. เปนภาษาคอมพวเตอรยคใหม ง . เปนภาษาทใชกบงานขนสง
2. ภาษาคอมพวเตอรภาษาใดทตองใชตวอนเทอรพรเตอรเปนตวแปลภาษา
ก. ภาษา Basic ข. ภาษาปาสคาล
ค. ภาษาซ ง . ภาษาฟอรแทน
3. โปรแกรมแอสเซมเบอรคออะไร
ก. ตวแปลภาษา Basic ข. ตวแปลภาษาซ
ค. ตวแปลภาษาแอสเซมบล ง . ถกทกขอ
4. ขอใดจดวาเปนซอฟตแวรระบบ
ก. โปรแกรมฆาไวรส ข . โปรแกรม Window
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 34 of 229
ค. โปรแกรมพมพรายงาน ง . โปรแกรมภาษา
5. จดประสงคของตวแปลภาษาคออะไร
ก. ตรวจสอบการทางานของระบบ ข . ใชแปลภาษาหนงเปนอกภาษาหนง
ค. แปลโปรแกรมตนฉบบใหทางานได ง . ใชแปลคาศพท
6. ในการเขยนโปรแกรมภาษาซจะตองเกบโปรแกรมตนฉบบเปนนามสกลอะไร
ก. .OBJ ข. .BAS
ค. .C ง. .CPP
7. เมอตองการพฒนาโปรแกรมจะตองทาสงใดกอน
ก. วเคราะหปญหา ข . เขยนซโดโคด
ค. เขยนโปรแกรม ง . เลอกภาษาทตองใชเขยน
8. โปรแกรมดภาพยนตรจดวาเปนโปรแกรมประเภทใด
ก. ซอฟตแวรระบบ ข . ซอฟตแวรอรรถประโยชน
ค. ซอฟตแวรสาเรจรป ง . ซอฟตแวรภาษา
9. การแปลภาษาคอมพวเตอรเปนรหสภาษาเครองทมการแปลทละบรรทดเรยกวาอะไร
ก. คอมไพเลอร ข . อนเทอรพรเตอร
ค. แอสเซมเบอร ง . รนไทม
10. ถาหากเขยนโปรแกรมสาหรบงานคานวณ แตผลลพธไมถกตองตามตองการ ขอผดพลาดน
เรยกวาอะไร
ก. bug ข. syntax error
ค. logic error ง. coding error
ตอนท 2 จงทาเครองหมาย √ หนาขอทถก และเครองหมาย × หนาขอทผด
…….1. ภาษาระดบตาคอภาษาทใชกบคอมพวเตอรรนทใชไมโครโปรเซสเซอรกอน 80486
…….2. ภาษาระดบสงคอภาษาคอมพวเตอรทคลายกบภาษาพด
…….3. คอมพวเตอรจะทางานไดจะตองแปลภาษาคอมพวเตอรใหเปนภาษาเลขฐานสองเสยกอน
…….4. ระบบปฏบตการ Windows จดวาเปนโปรแกรมระบบ
…….5. สงทไดจากการคอมไพลภาษาซคอไบตโคด
ตอนท 3 จงตอบคาถามตอไปน
1. ภาษาเครองคออะไร แตกตางจากภาษาระดบสงอยางไร
………………………………………………………………………………………………
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 35 of 229
……………………………………………………………………………………………….
2. จงบอกชอภาษาระดบสงทใชทวไป
……………………………………………………………………………………………….
……………………………………………………………………………………………….
3. แอสเซมเบอร (Assembler) คออะไร
…………………………………………………………………………………………………..
…………………………………………………………………………………………………..
4. การคอมไพลคออะไร
…………………………………………………………………………………………………..
…………………………………………………………………………………………………...
5. โปรแกรมตนฉบบ (Source Code) คออะไร มประโยชนอยางไร
…………………………………………………………………………………………………..
…………………………………………………………………………………………………..
6. โปรแกรมเอนกประสงคตางจากโปรแกรมระบบปฏบตการอยางไร
…………………………………………………………………………………………………..
…………………………………………………………………………………………………..
7. ซโดโคดจะชวยผพฒนาโปรแกรมไดอยางไร
…………………………………………………………………………………………………..
…………………………………………………………………………………………………...
8. การดบกคออะไร
…………………………………………………………………………………………………
…………………………………………………………………………………………………
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 36 of 229
3
!"#$ %$&# '( ()# &( 6 #$)#) ## "%!&("&+,-& % '.!/ 0 1+)./ $2#3$( 410)./ ()"!5"//(" +5!/(/(0/() "&+53!$&5#)/(6 ).2.5&"!'&"..# !2 03#)."."!'/(3 ". = Hours * PayRate &%5#) %"!'&# 03#).&"!'/(3
= π x 2 x "3
3.1 #)$&!& 5#)/(&)1 ().1$#)/(0 1+
&% .1#)&%#!$/.&%6 #)$0 1+/(/.53/ ).2.#)!&&# ()$&".#F +". !".& //(." +5(0 1+&/( .5&F".3)+#/" +6/.5"!'/( 5&03#)/./(4(6!$&#)/.3'+
!/(( !/(53 .5& .&%4$&(#!/() 6/.5%."4' '#( %03#)/.&/./(( /./(#)"!1)#. G $&03 .5#$/(.) G !&"4' '#( " '(./
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 37 of 229
1. ! ($&0 1+53.)! /."("% "3'+4( "% 0.(""4 /.".)(,-& 53!/$2$($!"- G #03&
2. #$%&' ,403$2$!# $!03$203/. %H(" +) # $&$2.)(%"!"-
3. %'%() . 0".$2.) % 6""4".$2.)$&/0 $4#03$2!/("4.)/ $4#03 ".$2.)$ !.".3"
4. %%(+),''-% "53 "$&-.II "(3 (Module) ).) G .).) %$&03 "%5#$ !/ .$&&)4")/(
5. !/( #3!"-$6/$" + # 50) .$+6 !$&(")$%#"(O)##3 2. /##3()/./(4- #) /5!)#3 ("(O)3
6. '' % ,4")1!)).(6 !$&/.5$2/$ /.2..6 ")/ .6// $#)&% +))#)).# )#&.. (Program Development Life Cycle: PDLC) () 6 #( 1. #"&+" (Requirement Analysis & Feasibility Study) 2. #0/#,-& (Algorithm Design) 3. #(!#) (Program Coding) 4. #(/# (Program Testing & Debugging) 5. ##) (Documentation) 6. #!4 (Program Maintenance)
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 38 of 229
$!. G $.#"53$&..!5(/ !&$'5& .,-&).(#6)/")!.&6/( !&$# 5 !/ G $# 1 5 4 )6/( 1" +#$(!2.)$&#)(!/).1O /(0 1+4.&) .#2.)$&(")$#) !$&))"("2( /. (".).#)&% .$,41)$&.(# 2. ")#)254 .1" +)!.! ()i ).)03 $&.#) 2.)$&"(# )/.
3.2 -123'$-345- "&+,-&&%"&+" !"#$,-&"& "% ())(. 0 1+/ $2#3/ %$&/(0 1+ #0)./ ")#. "&+,-&&%"&+ "&+"#.#) 5%.#!"-4( .5#0/#,-&(!#)
#)
(/#
#)
!4
"&+"
0/#,-&
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 39 of 229
$"&+,-&(6 '# G (
• / 1).$&" +! $&!/()#)# G 6/(
• + 4)./ 1)5 '#0 1+.)./ (O ("% + &%.)! ()1)))(() 2.5$&(O &)./ #()!&. ()./ 5&("% +().$& +#&&%/. .&&%)&%/.
• #3#)./ .&/(.(0/ ()%3#0 1+(3.5#3 4")./ #3.$(0/(+ 4
• $2 %.$2/#3!# &%".)3.$&.0 ($2(0 1+
• 10)./ 1)5!(##0 1,-& %$&/(0 1+ () '.#3. G #/6$ O$( 0#! G )./ 5&0#3&)".#3#/".0 &%#3#/&(0 #)"!1)10#)# G $ '#&) &%#)06/(
10#)$ '1(!(""(# %$2$,-&!&#) ()(!(##2"!'I#3###,-&! '/0 1+ ()#. G #)#/"!#" +/( 1!/((3/#,-&&"!/(4'
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 40 of 229
%/("&+,-&((3() ()F#3#/ (3.,-&/&%/. (%6 3.1 #),-&()" + !&$&" +"!'&". )2 ("."!'/( $76)
/ ".# ." + 4)./ + 4".41# O #3# & , 2% , !2!6$
2% Hours , ".)26$2% PayRate 10 !&(1"!' ".41 = !2 x .2 #0 1.
2. & , 2% , !2! , ".)2 3. "!' ".41 = Hours x PayRate 4. (0 1+ & 2% ".41 5. !
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 41 of 229
(%6 3.2 #),-&()" +$& ("."!'/( $76) / "!'#3 + 4)./ ".3#)O #3# "3# (h) #(r) 3#) 10 1"!'
= π x 2 x "3 #0
1. 2. "."3".#
3. "!'". = π x r2 x h 4. (".O 5. !
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 42 of 229
(%6 3.3 #) %)0# 2" + ()$&("( $76) / +"0(# + 4)./ ("(# ." #3# &! (ID) ,2%name , " O" (mid) , ").) (test) , ")O" (final) 10 1"!' " = "O" + ").) + ")O" 5 " >= 80 /(( pAq 5 " >= 70 <80 /(( pBq 5 " >= 60 < 70 /(( pCq 5 " >= 50 <60 /(( pDq 5" < 50 /(( pFq #0
1. 2. ". ID , name , mid , test , final 3. "!'"(
Total = mid + final + test 5 Total >= 80 , Grade = pAq /# 4 5 Total >= 70 , Grade = pBq /# 4 5 Total >= 60 , Grade = pCq /# 4 5 Total >= 50 , Grade = pDq /# 4 5 Total < 50 , Grade = pFq
4. ( id , name , Total , Grade # 5. /# 2 %"4" 5"/# 6 6. &)4(!
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 43 of 229
(%6 3.4 "&+,-&#)##!"..#(0"% + $76) #3# #".$&)3.$2% number1 , number2 number3 #3+ 4 0$&2% total 10 .".#!". #". (0## 5#)/(( Add_three_number 1. Read number1 , number2 , number3 2. total = number1 + number2 + number3 3. Printf total END (%6 3.5 "&+,-&#)!&&".i)#4'&O3! ()".4'&O334(4'&O3!4(#!6#/$&(".4'&O3i)O $76) #3# ".4'&O334()3.$2% max_temp
4'&O3!4()3.$2% min_temp #3+ 4 ".4'O3i)O ()$22% avg_temp 10 1. ".4'&O344(4'&O3.4( 2. &".i)()() avg_temp = (max_temp + min_temp)/2 3. (". avg_temp O 5#)/(( Find_average_temperature 1. READ max_temp , min_temp 2. avg_temp = (max_temp + min_temp) / 2 3. Output avg_temp to the screen END
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 44 of 229
3.3 $7& 10 #0 %$&/(0 1+3 ()$2#3!#
. G /(!&(/ ##10#)3.1#) ()/)"!$ %0#3 2 1 "% #3".#/0 #3#/&(0
• ,88+%$36( 1#3)#0(0 1+ ()F +&%/+
6/( &6#3)$&. %!/0(0 1+ 2.%) G /.&(#30 11()$2()/ 2. $#)" #)&% ).0#)/((0O ./
!"#$"
#$"
• ,869-!'9!(
1#3&(6$&.)"!. 0(0 1+#4)$"() 1$2%&.)"!# #'F#3#/
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 45 of 229
" %&
%&
,,&73:188 $.#10!&(3(0 1+().()./ 51#3().5&#". '$( &$21#3#&(0#3)./ I3(!(
1. '.3#0 1+& (Table Heading) &%/. 5 +&. 2. 5"!')(&( 2. )((%# 4" 6!&(&
%6".#)(/. !&((.!&($&"..3)+$ 2. sum = 0
3. '#3!# (Input Data) &%#)# 5#$2 ')//. ."% "&.##/.. 6$21".!# 2. (%# #3#"&.#"./.. "% "(% 7500 " 9000 " 13000 " 20000 /%) G I"."&.##/..
!(". 7500 9000 13000 20000 .. 2.&.#"./.. /.. '#32. $2#". .5#3)#2.&.. 2. !(#3 1 2 3 4 5 6 7 ".#3 5 10 15 20 25 30 35
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 46 of 229
#3 '(.$21!&($&"..".##3#6 #)$&!&(". 2. n =1 number = 5 !&(#3#.# 1 &%# 2 %/(!&(#3 #./"%0 +0 1+
4. $#)#3) !&(4(#0 &%(.#3&(&%) ()$21(#34() &%$21!&(!& (Loop) %$&!0."!" ())(./
6!+,8+;!6( (#34() 2 1 (
1. %#3!# $(&".//./(( !(#()3.5(#3 ( (.#3#&(&%)!.0 &( ."..".//./(60#3)
2. $21!&( 1 %"..#3&(&%) 1"!()3.&6(0 1+$. "%#3)4()0.0 & .)4()60 '#)()O ".) G ./
)+ -( 10 INPUT X ".#F + 6/$ X " 1 ". 20 IF X < 0 THEN GOTO 60 5#$ X ".( $&!"!$( 60 .5
/.$2.$&!"!$( 30 ./ 30 Y = X + 200 !".)3.$ X #' 200 6$ Y 40 PRINT X , Y (".)3.$ X Y 50 GOTO 10 )/!"!$( 10 "% ".#F +
$&. 6/$ X (".(53()".$&.) 60 PRINT pGOOD BYEq 5".#F + ". 6!"!$( 60
"%("!. GOOD BYE & 70 END $&&)4(!
).O "!$( 20 $2!&(.#3#&(&%) ()(.5#".&)".#3#"&( ((/)( 60 % +"!. pGOOD BYEq I !&)../&2%. LC (
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 47 of 229
)+ -( 10 INPUT X , LC ".##6$ X LC 5&".$ LC 1
(.#3)/.&( 20 Y = X + 200 !".$ X 200 6/$ Y 30 PRINT X , Y (0 1+". X Y O 40 IF LC = 1 THEN GOTO 10 ELSE GOTO 50
5&".)3.$ LC 1 $&/!"!( 10 .5/.$2. $&/!"!( 50 /
50 PRINT pGOOD BYEq ("!. pGOOD BYEq O 60 END
).%!$&$.".#". ()".".#36/$ X .".#3( 6$ LC ()5&".$ LC ". 1 &)".)/.$2.#34() %!5( 40 (.".$ LC 1 $2.&%/. 5$2((/)( 10 %#3"./
3.4 6!+,89$745- &/("&+,-& #4()"%#!&(.1,-&/(#5$2/(&%/. I(()#3$2#3 4$,-&())).#3'&%' $&".$#. G #0 './("!&%/. 5&"!0( (//#.!(#$(!/.53$&//##!$&. (#,-&"(#3&) G 24( 5&(#324(()!536/./(&)".#!#!/().53 $.#"#(!$.##0 &(#0( (#/((3/(.).0( ($#$(
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 48 of 229
(%6 3.6 #1$,-&#)+$). 3.4 $76) ). 3.4 0( Add_three_number 1. Read number1 , number2 , number3 2. total = number1 + number2 + number3 3. Printf total END
#1!/(( 1. #( 4#24( ()$&24(". 10,20 30 #24(
". 40,41 42 8;! 8;!6+
number1 10 40 number2 20 41 number3 30 42
2. "("!#0() 8;! 8;!6+
Total 60 123
3. #(!.#()$&(".#0$.#! G
-(8)!, number1 number2 number3 Total
24( 1 1 10 20 30 2 60 3 Print
24( 2 1 40 41 42 2 123 3 Print
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 49 of 229
4. 0 1+## 2 # 3 (60 123) ./(0 1+&%/.()(3 Total
(%6 3.7 5& $#!6F +! 9 $&.#&.".# # 3)+ ()$&(0 1+O $76) ,-&(.5"&+/(( +$6 !# 3)+ &736 (!#, 3)+O 8)8 #3#F + 6' $& X ##F + num_p ! num_n ! num_z !3)+ $7& !&,-&$#F +". ()1( !&(1"( 5#! $& 1 #! 5#! $& 1 #! 5#3)+ $& 1 #!3)+ 10
1. !&($& num_p, num_n num_z ".3)+ 2. .".#F +6$ X 3. 5././( /# 7 4. 5 X ! $& 1 num_p /# 2 5. 5 X ! $& 1 num_n /# 2 6. 5 X ".3)+ $& 1 num_z /# 2 7. +".O 8. &)4(
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 50 of 229
!&10 5&$# 6 ("!. p5 X ".3)+q / "!6/(.( %5&0.# 4 5 /(6(.#".3)+)3. !&105!/((
1. )).#3# 1 24( 5&# 9 ". 13,7,-4,0,-5,2,6,-2 35 2. "("!0() /(! 5 ! 3 3)+ 1
8;!
num_p 5 num_n 3 num_z 1
3. 5&# %(#10/((
-(8)!, 8 (X) num_p num_n num_z
1 - 0 0 0 2 13 0 0 0 3 13 0 0 0 4 13 1 0 0 2 7 1 0 0 3 7 1 0 0 4 7 2 0 0 2 -4 2 0 0 3 -4 2 0 0 4 -4 2 0 0 5 -4 2 1 0 2 0 2 1 0 3 0 2 1 0 4 0 2 1 0 5 0 2 1 0 6 0 2 1 1 2 -5 2 1 1 3 -5 2 1 1 4 -5 2 1 1 5 -5 2 2 1 2 2 2 2 1 3 2 2 2 1 4 2 3 2 1 2 6 3 2 1 3 6 3 2 1
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 51 of 229
-(8)!, 8 (X) num_p num_n num_z 4 6 4 2 1 2 -2 4 2 1 3 -2 4 2 1 4 -2 4 2 1 5 -2 4 3 1 2 35 4 3 1 3 35 4 3 1 4 35 5 3 1 2 - 5 3 1 7 - 5 3 1
4. ."!$# 7 "!"(/ (.053 I
5!/ .//(
%.$.1,-™(!#)
#)#64(0( (2. 4(0( (#). pq (Bug) !&(!/##0( (). p(q (DeBug) !&!/./(54"+ ). Error ( Error # 2 &4&"%
1. 8&$!!6 (138/: (Syntax Error) #0( ((#)"("! (Source Code) /./)'+ (Syntax) # G #0( (#0( (.)4($&/# % $&.O 5#0( (O)3. O " +$& ).2. 5#)()O " $&" + +#"&()"! WXRITLN(The Area is : ,my_area); %O " +/)'+#O ."! WXRITLN /.)3.$O " ($(" +(#0( (O Syntax Error $&&6 2. 8&$!!6$!-(845-&$! (Logical Error) #0( ((1$&!0(54"+&%" /##0( (O!()/."! %�( ($& 2. 03#)!". A /". B .#)"%&) 6!$&"."!'/(/.53 I5#0( (()$2 #3( (Test Data) &%#3"!$# (Execution Run) 553 0 1+/("!)3..
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 52 of 229
%�( ((. !# ( 1. .!#"%" + )1. pDesk Checkingq 1
.5$&0 1+/(&%/. #0( ( ()!&(#324(&#".#. G #)/. ().#"%" + 12.2.)(#0( (/( ..#"%./
2. ()"%" + %0.$# 6.#"%" + #34"! #"%" +! Syntax Error &%#0( (/)'+ 50("%" + +#.#0( ( 5/("!6".#$/(..53 %( 5! #3#"%" + %!0./
3.5 ,,8($3 $#)" + '#))3.&) ' I#O " +%$2() 3#))$2(
8(,,,% (Top-Down Programming)
0#)(3+!( (),-&.! 5&(3$("II6$&.(3(3).) $&(3&)(3).). G $2!( $#)". G '&)0%0 ()#)!..)!(/ !"# " +
8(,,!3 (Modular Programming)
#))!. G ).)#(6&) .). (3 (Module) I5!/((3% G !$&5&"0( (65/#(30( (/(.)# !&$#)(3&!&""4!&( .)(3$($2. (3.(35)(3).) G /( .(3.""4/)(3% G /(()
#)$ '(3).)O"% ).)O)$ (Internal Subroutine) ).)03#)#)# %.&#& .5)$2/( O&"%).)O) (External Subroutine) I).)6/$/ (library) 5)$2/( 5!/$2$% G /(
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 53 of 229
3&)(3).)
3&6.& &%(3&)(3).) %!(3).) !&./ )(3).) 5)$2/(&) G " !&#).O "!!&)(3).)./ (3).)6"! %.).)
3(3).)5)(3).)%
………………
…..
………………
…..
………………
…..
CALL
SUBPRO_A
………………
….
………………
….
&
………
…
CALL
sub_B
………
……
………
……
(3).)
SUBPRO_A
………
…
………
…….
………
……
………
……
(3).) sun_B
………………
…..
………………
…..
………………
…..
CALL
SUBPRO_A
………………
….
………………
….
&
………
………
………
………
………
…
RETU
RN
(3).)
SUBPRO_A
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 54 of 229
8($; (Object-Oriented Programming)
#)$&.!. G 54 &%6 ().6"%/ $2!/ %$2 65!6$2/( #(/( )/( $#)!6. G %!&)$2$O)&
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 55 of 229
,,^_-!6(,6
6 1 %"!534( )&#
1. #"&+,-&#$(03 5104(
. #. 3(0+ 4 ". 0 . '##3#
2. #$#4()#"&+,-& . !"#$,-& #. !"#$ '#3# ". (#1,-& . (3#3##3
3. #$("%"&)# . !"#$,-& #. 1)#!# G ". "(1,-& . (#!
4. 5&$&" +"!'& %#&) ."(.#3$("%#3 4
. % , "3 #. % , ")H ". ")H , "3 . % , ")H "3
5. #)" +#)#$( . '#3 4 #. '#3+ 4 ". 1)10 . + 4
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 56 of 229
6. ("53##,-&"!#3).24( . ).) 1 24( #. ).) 2 24( ". # '#,-& . 4'5//($,-& G
7. #$("%"&++ 4 . "&+.!"%4.$( #. "&+.0 1+/0 ". "&+3 +0 1+ . 534#
8. ."(.0#3#/0". &O$( . !&.)2O )+!( #. 2%#)" ". !&.)"+/.!( . 534#
9. &4$(2%$0 . %06#3 #. - '+$&#$.)$0 ". 5!/$2$##)/( . 534#
10. #3#/4)0()&O$( . &".(%i)# #. )%"%&%#&4( ". #34"" . 534#
6 2 !"%&) √ 5 "%&) × �(
.......1. #)"!1)10!$&52.)#)/(.)#
.......2. 5#3## '2(##().)&%!6 3. "&+,-&(3+ 4# 4( .......4. 10/."&)# .......5. ' +"% + 5%.+ 4
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 57 of 229
6 3 "!5./ 1. "&)#"&+,-& ................................................................................................................................................... .................................................................................................................................................. ................................................................................................................................................. 2. "&)#"&+3##3 4+ 4 ............................................................................................................................................... .............................................................................................................................................. ............................................................................................................................................... .............................................................................................................................................. 3. 5&"!'"#)"()/(!/ 20% O 7%
"&+,-& #)10# G .............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ........................................................................................................................................... .......................................................................................................................................... .............................................................................................................................................. .............................................................................................................................................. 4. "&+,-&#"!')".#4'&O3&.)II)(Celsius)
&.)/+(Fahrenheit) ()5"!'/(3 F = (C x 9)/5 + 32
() F "%4'&O3$&.)/+ C "%4'&O3$&.)I2) (!##1
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 58 of 229
บทท 5 การเขยนอลกอรธมโปรแกรม
เมอไดทาการวเคราะหปญหาและวางแผนการแกปญหาแลว กอนทจะลงมอเขยนโปรแกรมเราจะตอง
ออกแบบขนตอนการทางานหรออลกอรทม (Algorithm) กอน โดยจะ ใชเปนเครองมอในการแสดงขนตอนการ
ทางานของระบบงานใด ๆ เพอใหการเขยนโปรแกรมเปนไปไดรว ดเรวและงายขน โดยเราอาจเขยนอลกอรทมใน
ลกษณะผงงาน (Flowchart) ตามทไดศกษามาในบทท 4 หรอเขยนเปนรหสลาลองทเรยกวาซโดโคด
(Psudocodes) กได 5.1 ความหมายของอลกอรธม อลกอรธม (Algorithm) หมายถงลาดบของขนตอนเชงคานวณทแปลขอมลดานอนพตของปญหาไปเปน
ผลลพธทตองการ ขนตอนตาง ๆ ในอลกอรธมสามารถเปลยนไปเปนคาสงทใหคอมพวเตอรทางานได ดงนนถา
หากทาตามอลกอรธมแลว ปญหาจะตองถกแกไดสาเรจและไดคาตอบทถกตองสาหรบทกกรณตามทกาหนดใน
อลกอรธม ดงนนเราจะไมยอมรบอลกอรธมทการทางานตดอยในวงวนไมสนสด หรออลกอรธมประเภทททางาน
แลวไดคาตอบถกบาง ผดบาง ดงนนจดประสงคของการออกแบบอลกอรธมสาหรบแกปญหาหนง ๆ กคอการ
ทางานทถกตอง และทางานไดอยางมประสทธภาพ นอกจากการบรรยายอลกอรธมดวยผงงานแลว ยงสามารถ
เขยนบรรยายอลกอรธมดวยคาบรรยายสน ๆ ทไดใจความได โดยการเขยนรหสลาลอง หรอซโดโคด (pseudo
code) ซงคลายกบโปรแกรมภาษาคอมพวเตอร แตจะบรรยายดวยคาทงาย ๆ
ซโดโคดเปนคาอธบายขนตอนการทางานของโปรแกรมโดยใชถอยคาผสมระหวางภาษาองกฤษและ
ภาษาการเขยนโปรแกรมแบบโครงสรางทเขาใจงายมาแสดงลาดบการทางานของโปรแกรม หรออาจใชภาษาไทย
กได โดยใหผเขยนโปรแกรมสามารถพฒนาขนตอนตาง ๆ ใหเปนโปรแกรมไดงายขน แตสวนใหญแลวคาทใช
มกเปนคาเฉพาะ (Reserve Word) ทมอยในภาษาการเขยนโปรแกรมและมกจะเขยนดวยตวอกษรตวใหญ ซโด
โคดทดจะตองมความชดเจน สน และไดใจความ ขอมลตาง ๆ ทใชจะถกเขยนอยในรปของตวแปร ซโดโคดน
บางครงจะเรยกวาอลกอรทมกได รปแบบทวไปจะเปนดงน
Algorithm < ชอของอลกอรทม >
1. ……………….
2. ……………….
……………………
……………………
END
ขบวนการทางานตาง ๆ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 59 of 229
2
ตวอยางเชนในการเขยนซโดโคดสาหรบใหคอมพวเตอรหาคาเฉลยจากขอมลทรบเขาทางแปนพมพอาจ
เขยนไดดงน
Algorithm การหาคาเฉลย
1. ตวนบ = 0
2. ผลรวม = 0
3. รบคาทางแปนพมพเกบไวใน (ขอมล)
4. ถา ขอมล มากกวา 0
เพมคาตวนบขนหนงคา
ผลรวม = ผลรวม + คาขอมล
ยอนกลบไปทาขนตอนท 3
ถาไมมากกวาไปทาขนตอนท 5
5. คาเฉลย = ผลรวมหารดวยตวนบ
6. แสดงคาเฉลยทางจอภาพ โดยมทศนยมสองตาแหนง
7. จบ
จะเหนวาขนตอนการหาคาเฉลยไดเขยนไวจะเขาใจไดงาย เราสามารถทราบไดวาในการทางานตาง ๆ
จะตองใชตวแปรใดบาง แตละขนตอนมการประมวลผลอยางไร แตโดยทวไปแลวซโดโคดจะถกเขยนดวย
ภาษาองกฤษ ดงตอไปน
Algorithm Avarage_Sum
1. count = 0
2. sum = 0
3. INPUT (value)
4. IF value > 0 THEN
count = count +1
sum = sum + value
GOTO 3
ELSE GOTO 5
5. avarage = sum / count
6. OUTPUT (avarage)
7. END
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 60 of 229
3
ในการคานวณหาพนทสามเหลยมเราอาจเขยนซโดโคดไดดงตอไปน
ซโดโคดหาพนทสามเหลยม
เรมตน
1. รบคาความยาวของดานทเปนฐานมาเกบในตวแปร X
2. รบคาความยาวของสวนสงมาเกบในตวแปร Y
3. คานวณพนทโดย ARRAY = (X * Y)/2
4. แสดงผลพนท
จบ
หรออาจเขยนเปนภาษาองกฤษไดเปน
START
1. READ X
2. READ Y
3. Compute ARRAY = (X * Y)/2
4. Print ARRAY
END
5.2 คณสมบตพนฐานในการประมวลผลของคอมพวเตอร กอนทจะศกษาวธการเขยนอลกอรธมควรมความเขาใจและคานงถงคณสมบตพนฐานของระบบ
คอมพวเตอรกอน เพอนาไปประยกตใชในขนตอนการเขยนอลกอรธมไดอยางถกตอง แมวาคอมพวเตอรจะเปน
อปกรณแบบอเลกทรอนกสททางานไดรวดเรว ไมมความผดพลาด ไมมการทางานในลกษณะเครองจกรทมกลไก
การเคลอนไหว แตการออกแบบการทางานภายในกยงตองอาศยการกาหนดกลไกเชงวธการทางานไวดวย ถาหาก
กาหนดกลไกการทางานผด คอมพวเตอรกจะทางานแบบผด ๆ ตามไปดวย คณสมบตพนฐานของกลไกการ
ทางานมดงน
• คณสมบตดานหนวยความจา
ในงานเขยนโปรแกรมคอมพวเตอร ตองเกยวของกบการใชงานพนทหนวยความจาของระบบคอมพวเตอร
ในภาษาคอมพวเตอรใหแทนสญลกษณการกาหนดพนทหนวยความจาดวยการกาหนดชอเปนตวแปรสาหรบใช
งาน เพอใชอางถงขอมลในหนวยความจานนเอง ตวอยางเชน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 61 of 229
4
X = 4 หมายถง กาหนดคา 4 เกบไวในตวแปร X
X = Y + Z หมายถง การนาคาในตวแปร Y มาบวกกบคาของตวแปร Z แลวเกบผลลพธทไดไว
ในตวแปร X
X = X + 1 หมายถง การเอาคาในตวแปร X ไปบวกเพมอก 1 คา แลวเอาคาผลลพธใหมไปเกบ
ในตวแปร X แทนคาเดม
• คณสมบตดานการคานวณ
คณสมบตดานการคานวณในระบบคอมพวเตอรนน ในระดบพนฐานจะสามารถดาเนนการบวก ลบ คณ หาร
ได แตลกษณะการพจารณาเลอกประมวลผลงานคานวณของคอมพวเตอรนน มความแตตางจากระบบการคานวณ
ของมนษย คอ คอมพวเตอรคานวณโดยพจารณาลาดบความสาคญของสญลกษณเครองหมายการคานวณทปรากฏ
ในนพจนการคานวณนน ๆ เปนสาคญ มใชเพยงการคานวณโดยยดหลกเรยงจากซายไปขวาแบบทเราบวกเลขท
เขยนเปนสมการบนกระดานเทานน เชน 2 + 3 x 4 จะไดผลลพธเปน 14 แตถาเขยนเปน 2 x 3 + 4 จะไดผลลพธ
เปน 10
สญลกษณทใชในการคานวณและลาดบการทางานของการคานวณ มดงน
สญลกษณ ความหมายในการทางาน ลาดบการทางาน
+ บวก 3
- ลบ 3
* คณ 2
/ หาร 2
** หรอ ^ ยกกาลง 1
• คณสมบตดานการเปรยบเทยบเชงตรรกะ
ประสทธภาพการทางานของเครองคอมพวเตอรทมเหนอกวาเครองคานวณชนดอนอยางหนงกคอ
ความสามารถในการประมวลผลเชงเปรยบเทยบ โดยใชหลกการทางานของพชคณตมาทางานเชงตรรกะนนเอง
ประสทธภาพการทางานของคาสงแตละภาษากคอ ความสามารถในการเปรยบเทยบเงอนไขทผเขยนคาสง
กาหนดขน เพอใหคอมพวเตอรสามารถประมวลผล ลกษณะการตดสนใจพจารณาเงอนไข โดยหากเงอนไขเปน
จรงใหเครองทางานตามคาสงหนง หรอหากเงอนไขเปนเทจกใหเครองทาตามอกคาสงหนง
การเขยนคาสงทมลกษณะของเงอนไขเพอใหเครองใชในการพจารณาเลอกทศทางการทางานตามเงอนไขท
กาหนดนน มสงทเกยวของกบผพฒนางานโปรแกรมกคอตองศกษาวธการใชสญลกษณในการเขยนประโยค
คาสงแบบเงอนไขของแตละภาษาทกาหนดใหเลอกใชโดยทวไปมสญลกษณของพชคณตบลลน (Boolean) ดง
ลกษณะตอไปน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 62 of 229
5
การใชสญลกษณเขยนประโยคคาสงเงอนไขแบบ 1 ประโยค
การเขยนประโยคคาสงเงอนไขแบบ 1 เงอนไขนน มสญลกษณในการใชงานดงน
สญลกษณ ความหมายในการทางาน
= เทากบ < นอยกวา
> มากกวา
<= นอยกวาหรอเทากบ
>= มากกวาหรอเทากบ
<> ไมเทากบ
ตวอยางท 5.1 รปแบบการเขยนนพจนโดยใชเงอนไขแบบ 1 ประโยค เทยบกบการเขยนผงงาน
ถา A > 0 แลว (ถาเงอนไขเปนจรง)
คาสงชดท 1
(ถาเงอนไขเปนเทจ)
คาสงชดท 2
หรอ
ถา A <> 0 แลว (ถาเงอนไขเปนจรง)
คาสงชดท 2
(ถาเงอนไขเปนเทจ)
คาสงชดท 1
การใชสญลกษณเชอมประโยคคาสงเงอนไข
การเขยนคาสงกาหนดเงอนไขการทางานในลกษณะเชอมประโยคเงอนไข 2 ประโยค ตองใชสญลกษณ
คาสงเพมเตม เพอใหไดขอสรปของการทางานวาเปนคาจรง (True) หรอคาเปนเทจ (False) ดงน
A > 0
คาสงชดท 1 คาสงชดท 2
จรง เทจ
คาสงชดท 1 คาสงชดท 2
จรง เทจ A <> 0
คาสงชดท 1
เทจ A <> 0
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 63 of 229
6
• สมมตใหผลลพธการเปรยบเทยบในประโยคเงอนไขท 1 เปนสญลกษณ A
• สมมตใหผลลพธการเปรยบเทยบในประโยคเงอนไขท 2 เปนสญลกษณ B
เมอมการทางานหาขอสรปตงแต 2 เงอนไขประกอบกน โดยใชหลกการของพชคณตบลลน จะไดดงตาราง
ตอไปน
A B (A) AND (B) (A) OR (B) NOT (A)
T T T T F
T F F T F
F T F T T
F F F F T
• การใชสญลกษณ AND ในการเชอมประโยคเงอนไขนน จะใหผลลพธสรปเงอนไขวาเปนจรงไดก
ตอเมอประโยคทงสองประโยคมคาเปนจรงเทานน ถามประโยคใดประโยคหนงเปนเทจ จะสรปไดวา
คาทไดจะเปนเทจทนท
• การใชสญลกษณ OR ในการเชอมประโยคเงอนไขนน จะใหผลลพธสรปเงอนไขวาเปนจรงได กตอเมอ
มประโยคใดประโยคหนงเปนจรง จะสามารถสรปไดวาคานนเปนจรงทนท
• การใชสญลกษณ NOT นาหนาประโยคเงอนไขนน จะใหผลลพธสรปในทางตรงกนขาม
ตวอยางท 5.2 การเขยนนพจนใชเงอนไขแบบ 2 ประโยค โดยใชสญลกษณ AND
ถา (X > 10) AND (X <= 15) แลว (เงอนไขเปนจรง)
คาสงชดท 1
(เงอนไขเปนเทจ)
คาสงชดท 2
จากตวอยาง ถาหากเงอนไขทกาหนดเปนจรง โปรแกรมจะทาคาสงชดท 1 แตถาเงอนไขเปนเทจ
โปรแกรมจะทาคาสงชดท 2 จากเงอนไขทกาหนดในตวอยาง คาในหนวยความจา X ตองมคามากกวา 10 แตไม
เกน 15 จงจะทาใหขอสรปของประโยคเงอนไขดงกลาวเปนจรง นอกเหนอจากขอสรปนจะเปนเทจ
ตวอยางท 5.3 การเขยนนพจนใชเงอนไขแบบ 2 ประโยค โดยใชสญลกษณ OR
ถา (X > 50) OR (X <= 60) แลว (เงอนไขเปนจรง)
คาสงชดท 1
(เงอนไขเปนเทจ)
คาสงชดท 2
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 64 of 229
7
จากตวอยางถาคาในหนวยความจา X มคามากกวา 50 หรอมคานอยกวาหรอเทากบ 60 แลวจะทาใหได
ขอสรปของประโยคเงอนไขนเปน “จรง”
• คณสมบตดานการแสดงผลคาขอมล
เปนการอานคาขอมลจากพนทหนวยความจาทเขยนคาสงนาไปเกบไว หรอจากการคานวณทตองมการนาคา
ไปเกบไว เพอนามาแสดงผลลพธในรปแบบ และในตาแหนงงานทตองการ
• คณสมบตการจดลาดบการทางาน
คอมพวเตอรจะทางานทละคาสง ตามลาดบจากบนลงลาง กลาวคอ คอมพวเตอรจะทางานตามคาสงทอย
บรรทดบนสดกอน แลวจงทางานตามคาสงทอยในลาดบตอมา จนถงคาสงในบรรทดสดทาย
5.3 พนฐานการเขยนซโดโคด แมวาการเขยนซโดโคดจะไมมรปแบบทแนนอน แตโดยทวไปแลวมกจะทากนดงลกษณะตอไปน
การรบขอมลเขาและการแสดงผลขอมล
ในการรบขอมลจะนยมใชคาวา READ หรอ GET หรอ INPUT ตามดวยตวแปรทตองการใชเกบขอมล
ถาหากมตวแปรหลายตวจะใชเครองหมายคอมมา (“,”) คน สวนการแสดงผลมกใชคาวา PRINT หรอ WRITE
สาหรบการรบขอมลมรปแบบดงน
READ VAR1, VAR2,…..
หรอ
INPUT VAR1, VAR2,……
หมายความวารบขอมลเขามาเกบในตวแปรตวท 1,2,……โดย VAR มาจากคาวา Variable หมายถงตว
แปร
ตวอยาง
READ X,Y ;หมายความวารบขอมลมาเกบในตวแปร X และ Y ตามลาดบ
ตวอยาง
Read student_name ;อานคามาเกบในตวแปรชอ student_name
Get system_date ;อานคามาเกบในตวแปรชอ system_date
Read number_1, number_2 ;อานคามาเกบในตวแปร number_1,number_2
สาหรบการแสดงขอมลมรปแบบดงน
PRINT VAR1, VAR2,…….
หรอ WRITE VAR1, VAR2,…….
หมายความวาใหแสดงขอมลทถกเกบในตวแปรตวท 1,2,……
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 65 of 229
8
ตวอยาง
WRITE DATA1 ;แสดงขอมลทอยในตวแปร DATA1
PRINT A, B ;แสดงขอมลทอยในตวแปร A และตวแปร B
การคานวณ ในการประมวลผลแบบคานวณจะขนตนดวยคาวา Compute หรอ Calculate แลวตามดวยตวแปรท
ตองการเกบคาจากการคานวณ เครองหมายเทากบและนพจนการคานวณ ซงประกอบไปดวยเครองหมายการ
กระทาทางคณตศาสตร
ตวอยาง
Compute ARRAT = (X * Y)/2
หมายความวาใหตวแปร ARRAT มคาเทากบการนาตวแปร X คณกบตวแปร Y แลวหารดวยสอง
ตวอยาง
Compute Profit = Price – Cost
หมายความวากาไรคานวณไดจากตวแปรทเกบราคาลบดวยตนทน
การกาหนดคา การกาหนดคาเรมตนใหกบตวแปรจะใชคาวา INIT และ SET ถาหากเปนการประกาศตวแปรจะตองระบ
ดวยวาเปนตวแปรประเภทใด และถาเปนการประกาศคาคงทจะใชเครองหมายเทากบในการกาหนดคา
ตวอยาง
INIT A, B : INTEGER ;ใหตวแปร A และ B เปนตวแปรทเกบเลขจานวนเตม
INIT Y :REAL ;ใหตวแปร Y เปนตวแปรทเกบเลขทศนยม
SET A = 8 ;กาหนดใหตวแปร A มคาเทากบ 8
ตวอยางท 5.4 การเขยนซโดโคดคานวณราคาเครองคอมพวเตอรรวมกบภาษ 7%
ComputeTotal
init total, price, vat : real \** ประกาศตวแปร total, price, vat
init vat = 0.07 \** ประกาศ vat เปนคาคงท 0.07
read price \** รบราคาจากการปอนขอมล
compute total = price + (price x 0.07) \**คานวณราคาบวก vat
print price, total \**แสดงผลราคา และราคารวม
end \**จบโปรแกรม
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 66 of 229
9
5.4 การเขยนซโดโคดสาหรบตดสนใจและทดสอบทางเลอก การเขยนโปรแกรมทตองมการเลอกทศทางการทางานนนในโปรแกรมจะตองมการเปรยบเทยบหรอ
ตดสนใจเกนขนในโปรแกรม วธการตดสนใจของโปรแกรมจะตองมการเปรยบเทยบเงอนไขเกดขน โดยผลลพธ
ทไดจะเปนจรงหรอเทจอยางใดอยางหนงเทานน
การตดสนใจเพอเลอกทาระหวางทางสองทางจะใชคาวา IF หรอ IF-THEN-ELSE และ ENDIF โดยจะ
เปรยบเทยบเงอนไข ถาเงอนไขเปนจรงจะทากลมคาสง (Statement) กลมหนง ถาเปนเทจจะทากลมคาสงอกกลม
หนง โดยมรปแบบดงน
IF ตรวจสอบเงอนไข THEN ;เรมตน
กลมคาสง 1 ;ถาเปนจรงทากลมคาสงน
ELSE
กลมคาสง 2 ;ถาเปนเทจทากลมคาสงน
ENDIF ;จบการทางาน
ตวอยางท 5.5 ตวอยางนจะนาตวเลขในตวแปร number มาทดสอบถามากกวา 0 ใหแสดงวาเปนเลขบวก แตถา
ไมมากกวา 0 ใหแสดงวาเปนเลขลบ
IF number > 0 THEN
PRINT POSITIVE NUMBER
ELSE
PRINT NEGATIVE NUMBER
ENDIF
จากตวอยางหมายความวาถาคา number มคามากกวา 0 ใหคอมพวเตอรพมพคาวา POSITIVE
NUMBER ถาไมมากกวาจะพมพคาวา NEGATIVE NUMBER
สาหรบกรณทมทางเลอกมากกวาสองทางจะใชคาวา CASE , OF และ ENDCASE โดยจะตรวจสอบวา
ตวแปรทอยหลง CASE มคาเทากบคาคงทตวใด กจะทากลมคาสงทอยหลงคาคงทตวนน ตวอยางเชน
CASE num OF
1 : PRINT 11111
2 : PRINT 22222
3 : PRINT 33333
ENDCASE
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 67 of 229
10
จากตวอยางถาคาในตวแปร num เปน 1 จะใหพมพคาวา 11111 ถาตวแปร num มคาเปน 2 จะใหพมพ
คาวา 22222
5.5 การเขยนซโดโคดแบบวนซา ในการทาซ าหมายความวาใหระบบทางานซ า ๆ ตามเงอนไขทกาหนด โดยจะมการเปรยบเทยบเงอนไข
ในการทาซ า แบงออกไดสามรปแบบดงน
1. การทาซ าททราบจานวนครงในการทาซ า การทาซ าแบบนจะมการตงจานวนการทาซ าไวและมการ
เพมคาในแตละรอบ จะใชคาวา FOR , DO และ ENDFOR โดยมคาวา IN STEPS OF เปนการ
บอกคาทเพมในแตละรอบ ถาไมมคาวา IN STEPS OF หมายความวาเพมคารอบละหนง โดยม
รปแบบดงน
FOR กาหนดรอบการทาซ า
Statement
ENDFOR
2. การทาซ าจนระบบมเงอนไขอยางหนงจงหยดทา จะใชคาวา REPEAT – UNTIL ดงรปแบบตอไปน
REPEAT
Statement_1
…………….
UNTIL (Condition)
3. ถาเงอนไขเปนจรงจะทาคาสงภายใน จะใชคาวา WHILE - ENDWHILE โดยจะตรวจสอบเงอนไข
กอนททาชดคาสงภายใน ดงรปแบบตอไปน
WHILE (Condition)
Statement_1
…………….
ENDWHILE
ตวอยางท 5.6 จงเขยนซโดโคดใหมการพมพตวเลขตงแต 1 – 10 โดยใช repeat-until
Print number 1 to 10
init num : integer /**ประกาศตวแปร num เปนตวเลข
init num = 1 /**ใหคา num เรมตนเทากบ 1
repeat /**การทางานวนซ า (จนกวา num = 10)
print num /**พมพคาของ num จากคาเรมตน 1 - 10
increase num (num+1) /**เพมคา num ขน 1 เพอลดการวนซ า
until num > 10 /**เมอ num มากกวา 10 จบการทางานแบบวนซ า
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 68 of 229
11
ตวอยางท 5.7 จงเขยนซโดโคดใหมการพมพตวเลขตงแต 1 – 10 โดยใช while
Print number 1 to 10
init num : integer /**ประกาศตวแปร num เปนตวเลข
init num = 1 /**กาหนดใหคา num เรมตนเทากบ 1
while (num <= 10) /**ถา num นอยกวา 10 ใหทาคาสงวนซ า
print num /**พมพคา num จากคาเรมตน 1 – 10
increase num (num + 1) /**เพมคา num ขน 1 คา เพอลดการวนซ า
endwhile /**จบการทางานแบบวนซ า
ตวอยางท 5.8 จงเขยนซโดโคดสาหรบบวกเลข 1 + 2 + 3 + ….+100 แลวพมพผลลพธออกมา
วธทา ตวอยางนสามารถนารปแบบของ while มาใชได โดยใหโปรแกรมกาหนดคาเรมตนใหกบตวนบเปน 1
และเพมคาขนครงละหนง จนกวามการตรวจสอบวาคาตวนบมคานอยกวาหรอเทากบ 100 มคาเปนเทจจงหยดนบ
โดยสามารถเขยนซโดโคดไดดงน
Sum_number_1_100
init i, sum : integer /**ประกาศตวแปร i และ sum เปนจานวนเตม
init i = 0 /**กาหนดคาเรมตนให i มคาเปน 0
init sum = 0
while (i <= 100) /**ทาซ าเมอ i นอยกวาหรอเทากบ 100
compute sum = sum + i /**นาคา i มาบวกกบ sum แลวเกบใน sum
compute i = i + 1 /**เพมคาในตวแปร i ขนหนงคา
endwhile
print sum /**แสดงคาผลรวมทเกบอยในตวแปร sum
ตวอยางท 5.9 จงเขยนซโดโคดใหมการพมพตวเลขตงแต 1 – 10 โดยใช for
Number 1-10
init num : integer /**ประกาศตวแปร num เปนตวเลข
for num = 1 to 10 do /**ตงคา num = 1 และใหวนรอบ 10 ครง
print num /**พมพคาของ num จากคาเรมตน 1 - 10
endfor /**จบการทางานแบบวนซ า
5.6 การเขยนซโดโคดเพอเรยกโปรแกรมยอยและกระโดดขาม สาหรบการเรยกโปรแกรมยอยหรอโพซเยอรจะใชคาวา CALL แลวตามดวยชอโปรแกรมยอยหรอโพซ
เยอร มรปแบบดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 69 of 229
12
CALL ชอโปรแกรมยอย
การกระโดดขามไปทาชดคาสงใด ๆ จะใชคาวา LABEL กาหนดตาแหนงทจะกระโดดมา และใชคาวา
GOTO ในตาแหนงทจะกระโดด ตวอยางเชน
START :
Statement_1
…………..
AB1: ………….
…………
GOTO AB1
END
แบบฝกหดทายบท ตอนท 1 จงเลอกคาตอบทถกตองทสดเพยงหนงขอ
1. ทานคดวา รหสเทยม ถกเขยนขนมาในขนตอนใด
ก. การทดลองแกปญหา
ข. การเขยนขนตอนวธการแกปญหา
ค. การทดสอบการแกปญหา
ง. การพจารณาลกษณะขอมลอนพตและเอาตพต
2. ทานคดวา รหสเทยมจะถกนาไปใชในขนตอนใดตอไป
ก. การเขยนโปรแกรม
ข. การอธบายการทางานของโปรแกรม
ค. การพจารณาขอมลอนพตและเอาตพต
ง. การแกไขโปรแกรม
3. ในการเขยนรหสเทยมขอใดไมถกตอง
ก. ใชคาวา READ ในการรบขอมล
ข. ใชคาวา FOR ในการทาซ า
ค. ใชคาวา MEM แทนชอตวแปรในหนวยความจา
ง. ใชคาวา CALL ในการเรยกโพซเยอรหรอโปรแกรมยอย
4. ถาหากมการเขยนซโดโคดดงตอไปน ทานคดวาทาอะไร
NUMBER
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 70 of 229
13
INIT NUM : INTEGER
INIT NUM = 1
WHILE (NUM <= 100)
PRINT NUM
INCRAESE NUM
ENDWHILE
ก. หาผลรวมของตวเลขตงแต 1 ถง 100
ข. พมพตวเลขตงแต 1 ถง 100
ค. พมพตวเลขทมคานอยกวา 100
ง. ไมสามารถหาคาได
5. จากขอ 5 ทานคดวาคาวา INCRAESE NUM คออะไร
ก. เพมคาตวแปร NUM ขนหนงคา
ข. ลดคาตวแปร NUM ลงหนงคา
ค. นาคา NUM บวกกบคา NUM ทผานมา
ง. ไมสามารถบอกได
ตอนท 2 จงตอบคาถามตอไปน
1. ทานคดวารหสเทยมหรอซโดโคดตางจากอลกอรทมอยางไร
…………………………………………………………………………………………
………………………………………………………………………………………….
………………………………………………………………………………………….
2. จงอธบายขอดและขอเสยของการเขยนรหสเทยมกอนเขยนโปรแกรม และไมเขยน
รหสเทยมกอนเขยนโปรแกรม
………………………………………………………………………………………….
………………………………………………………………………………………….
…………………………………………………………………………………………..
………………………………………………………………………………………….
3. ทานคดวาในการกาหนดคาตวแปร เหตใจจงตองระบชนดของตวแปร
…………………………………………………………………………………………
………………………………………………………………………………………….
………………………………………………………………………………………….
4. จงเขยนซโดโคดในการรบคาตวเลขเขาไป 10 คา แลวใหแสดงผลคาสงสดและคา
ตาสด
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 71 of 229
บทท 6 การเขยนโปรแกรมภาษาซ
การเขยนโปรแกรมคอมพวเตอรนนมภาษาใหเลอกอยหลายภาษา สาหรบภาษาซเปนภาษาทเหมาะ
สาหรบผเรมตนการเขยนโปรแกรมคอมพวเตอร หากเรมศกษาดวยภาษานแลวการศกษาการเขยนโปรแกรมภาษาอน ๆ จะทาไดงายขน ภาษาซเปนภาษาทมการพฒนามายาวนาน ในปจจบนไดพฒนาใหสามารถเขยนโปรแกรมเชงวตถได ซงอยในรปแบบของภาษา C++ และ C#
6.1 ขนตอนการพฒนาโปรแกรมดวยภาษาซ ขนตอนการเขยนโปรแกรมคอมพวเตอรดวยภาษาระดบสงนนโปรแกรมเมอรจะตองเขยนโปรแกรม
ตนฉบบทเรยกวาซอสซโคดขนมากอนสาหรบภาษาซโปรแกรมนจะมนามสกลเปน .c จากนนจงจะใชโปรแกรมคอมไพเลอรมาแปลภาษาใหเปนภาษาทเครองคอมพวเตอรสามารถทางานได จากนนจงทาการเชอมโยงหรอลงค
กบไฟลตาง ๆ ทเกยวของใหสามารถทางานบนเครองคอมพวเตอรทใชงานอยได ในการเขยนโปรแกรมภาษาซนนมตวแปลภาษาหรอคอมไพเลอรใหใชงานหลายตว โดยออกมาในรป
ของซอฟตแวรททาใหโปรแกรมเมอรสามารถเขยนโปรแกรมไดงาย โดยขบวนการทงสามขนตอนจะทาไดใน
ครงเดยว โดยซอฟตแวรลกษณะนไดรวมโปรแกรมพฒนางาน หรอ ไอดอ (Integrated Development Environment : IDE) เอาไวดวย สาหรบโปรแกรมทแนะนาในการศกษาภาษาซ ในทนไดแก DEV C++ ซงเปนโปรแกรมทมขนาดเลก สามารถใชเรมตนศกษาการเขยนโปรแกรมไดเปนอยางด และยงสามารถเขยนโปรแกรมแบบ C++ ไดอกดวย เมอเปดโปรแกรมขนมา หนาตาของโปรแกรมเปนดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 72 of 229
สวนประกอบทสาคญของโปรแกรม DEV C++ ในการใชงานเบองตน มดงน 1. สวนของเมน เปนคาสงตาง ๆ ทจาเปนสาหรบใชงานโปรแกรม เชน การสรางไฟลใหม การคอม
ไพล การรนโปรแกรม นอกจากนในดานลางของเมนยงมทลบารทรวบรวมคาสงตาง ๆ ทใชงานบอย ๆ ในรปของไอคอนใหผใชเลอกใชไดงาย ๆ อกดวย
2. สวนของ Editor Screen ใชสาหรบสรางหรอแกไขโปรแกรม โดยทผเขยนโปรแกรมจะพมพคาสงตาง ๆ ลงในบรเวณน
ในการใชงานเบองตน ถาหากตองการเรมเขยนโปรแกรมจะตองสรางไฟลขนมาใหม โดยเลอกเมน File
เลอก New เพอสรางงานใหม เลอก Source File โปรแกรมจะแสดง Editor Screen ใหเขยนโปรแกรมและตงชอโปรแกรมใหมชอเปน Untitled1 โดยอตโนมต
เมอถงตรงนจะสามารถเขยนโปรแกรมภาษาซได โดยการเขยนโปรแกรมจะตองเขยนตามโครงสรางทกาหนด ถาหากเขยนผดโปรแกรมจะแจงขอผดพลาดออกมาตอนคอมไพโปรแกรม
1. เลอก File -> New
2. เลอก Source File
3. โปรแกรมแสดงหนาตางออกมา
สวนของเมน
สวนของ Editor Screen
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 73 of 229
6.2 โครงสรางโปรแกรมภาษาซ การเขยนโปรแกรมแตละภาษานนโครงสรางของโปรแกรมจะตางกน ในบทนจะกลาวถงโครงสรางของ
การเขยนโปรแกรมดวยภาษาซ (C/C++) รวมทงการเขยนโปรแกรมอยางงาย ลกษณะโครงสรางของภาษาซแบงออกไดเปน 5 สวนดงตอไปน
1. พรโพรเซสเซอรไดเรกทฟ (Preprocessor directives) 2. สวนการกาหนดคา (Global declarations) 3. สวนฟงกชนหลก (The main() function) 4. การสรางฟงกชนและการใชฟงกชน (Uses-defined function) 5. สวนอธบายโปรแกรม (Program comments)
โครงสรางของโปรแกรมประกอบดวยหลายสวน แตในการเขยนโปรแกรมนนไมจาเปนตองเขยนหมด
ทกสวน สวนใดไมใชกสามารถตดทงได แตทกโปรแกรมตองมสวนพรโพรเซสเซอรไดเรกทฟ และสวนฟงกชนหลก รายละเอยดของสวนตาง ๆ เปนดงตอไปน
พรโพรเซสเซอรไดเรกทฟ (Preprocessor directives) สวนนทกโปรแกรมตองม จะใชสาหรบเรยกไฟลทโปรแกรมตองการในการทางานและกาหนดคาตาง ๆ โดยคอมไพลเลอรจะกระทาตามคาสงกอนทจะคอมไพลโปรแกรม ซงจะตองเรมตนดวยเครองหมาย ไดเรกทฟ (directive) # และตามดวยชอโปรแกรมหรอชอตวแปรทตองการกาหนดคา สวนนอาจเรยกอกชอหนงวาสวนหวโปรแกรม (Header Part) สาหรบ Directive ทใชกนบอย ๆ ไดแก
#include เปนการแจงใหคอมไพเลอรอานไฟลอนเขามาคอมไพรวมดวย รปแบบการใชจะทาโดยเขยน #include แลวตามดวยชอไฟล ดงน #include “stdio.h” หมายความวา อานไฟล stdio.h เขามาดวย #include “Pro1.c” หมายความวา อานไฟล Pro1.c เขามาดวย การกาหนดชอไฟลตามหลง #include นนอาจใชเครองหมาย <> ครอมชอไฟลกได ซงจะเปนการอานไฟลจากไดเรกทอรทกาหนดไวกอน แตถาใช “ “ เปนการอานไฟลจากไดเรกทอรปจจบนทกาลงตดตออย และไฟลทจะ include เขามานจะตองไมมฟงคชน main() โดยมากแลวจะประกอบดวยโปรแกรมยอย คาคงท หรอขอกาหนดตาง ๆ
#define เปนการกาหนดคานพจนตาง ๆ ใหกบชอของตวแปร โดยมรปแบบดงน #define NAME VALUE เชน #define END 20 กาหนด END มคาเทากบ 20 #define A 5*6+3 กาหนด A มคาเปน 5*6+3
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 74 of 229
สวนประกาศ (Global declarations) สวนนจะใชในการประกาศตวแปรหรอฟงกชนทตองใชในโปรแกรม โดยทก ๆ สวนของโปรแกรม
สามารถจะเรยกใชขอมลทประกาศไวในสวนนได สวนนบางโปรแกรมอาจไมมกได สาหรบรายละเอยดตาง ๆ จะไดกลาวตอไป
สวนฟงกชนหลก (main() function) สวนนทกโปรแกรมจะตองม จะประกอบไปดวยประโยคคาสงตาง ๆ ทจะใหโปรแกรมทางาน โดยนาคาสงตาง ๆ มาตอเรยงกน แตละประโยคคาสงจะจบดวยเครองหมายเซมโคลอน (Semi colon ;) โดย
โปรแกรมหลกนจะเรมตนดวยคาวา main() ตามดวยเครองหมายปกกาเปด และจบดวยเครองหมายปกกาปด ถาหากในโปรแกรมมหลายฟงกชน สวนของฟงกชน main() นจะเปนฟงกชนแรกทโปรแกรมจะทางาน
สวนกาหนดฟงกชนขนใชเอง (Uses – defined functions) เปนการเขยนคาสงและฟงกชนตาง ๆ ขนใชในโปรแกรม โดยตองอยในเครองหมาย และสรางฟงกชนหรอคาใหมทใหทางานตามทเราตองการใหกบโปรแกรมและสามารถเรยกใชได ภายในโปรแกรม ตวอยางเชน #include “stdio.h” main()
function(); /*เรยกใชฟงกชนทสรางขน */ function() /*สรางฟงกชนใหม โดยใหชอวา function return ; /*คนคาทเกดจากการทาฟงกชน
สวนอธบายโปรแกรม (Program comments) สวนนใชเขยนคอมเมนตโปรแกรม เพออธบายการทางานตาง ๆ ทาใหผศกษาโปรแกรมในภายหลงทาความเขาใจโปรแกรมไดงายขน เมอคอมไพลโปรแกรมสวนนจะถกขามไป การเขยนคาอธบายนจะเรมดวย
เครองหมาย /* และปดดวยเครองหมาย */ แตถาหากเขยนคาอธบายทละบรรทดจะใชเครองหมาย // เขยนกากบบรรทดคาอธบายไวกได ดงทกลาวมาแลววาสวนประกอบของโปรแกรมมหลายสวน สวนใดไมใชสามารถตดทงไดภาษา C เปนภาษาทการเขยนโปรแกรมเปนแบบโครงสรางโมดล โดยจะมการเขยนโมดลตาง ๆ เกบไวใช ซงแตละโมดล
สามารถเรยกมาใชในภายหลงได ในทนจะเขยนโปรแกรมอยางงายทสดกอน จากนนจะพฒนาโปรแกรมใหใหญขนโดยเขยนโปรแกรมแทรกเขาไปในโปรแกรมอยางงายน ตวอยางการเขยนโปรแกรมขนตนเปนดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 75 of 229
#include “stdio.h” สวนหว main() สวนฟงกชนหลก จากตวอยางโปรแกรมอยางงายจะประกอบดวยสองสวนคอ 1. สวนทหนงเปนสวนหวหรอสวนเรยกโมดลอน ๆ เขามาแปรความหมายรวม โดยเปนสวนของพรโพรเซสเซอรไดเรกทฟ ซงอาจเปนโมดลมาตรฐานทมอยแลวในโปรแกรมหรอโมดลใหมทสรางขนมาเอง โดย
โมดลเหลานจะบรรจคาสงหรอขอกาหนดตาง ๆ ทจะใชในโปรแกรมทเขยนขน 2. สวนทสอง เรยกวาสวนฟงกชนหลกซงเปนสวนคาสงหรอสเตตเมนต (Statement) จะเปนสวนทเกบคาสงตาง ๆ ทจะใหโปรแกรมทางาน โดยจะเรมตนดวยเครองหมายปกกา และจบดวยเครองหมายปกกาปด สวนนจะมมากกวาหนงฟงกชนกได แตทกโปรแกรมจะตองมฟงกชน main ซงถอวาเปนฟงกชนหลกทโปรแกรมจะทางานได โปรแกรมตอไปนจะเปนโปรแกรมแรกทจะใชเขยนโปรแกรมภาษาซ โดยจะใชฟงกชน printf() ซงจะทาหนาทพมพขอมลออกทางจอภาพ
#include “stdio.h” main() printf(“COMPUTER”); ตวอยางโปรแกรมภาษาซ โปรแกรมนเมอทางานคอมพวเตอรจะพมพคาวา COMPUTER ออกทางจอภาพ พจารณาจากโปรแกรมจะเหนวาในฟงกชนหลกมการเรยกใชฟงกชน printf() ซงจะทาหนาทพมพขอความหรอสตรง (string) ทอยในเครองหมายคาพดออกทางหนาจอ และจบฟงกชนดวยเครองหมายเซมโคลอน โดยฟงกชนนจะเกบไวใน stdio (ยอมาจาก standard input output) ซงจะเกบชดคาสงเกยวกบการสงขอมลเขาออกเอาไว เราจงตองเรยก stdio.h ขนมา สาหรบ #include เรยกวา ไดเรกทฟ (directive) และ stdio.h เรยกวา ไฟลสวนหว (header file) สาหรบในการเขยนโปรแกรมเราสามารถเขยนคาอธบาย (comments) ตาง ๆ ได โดยคอมไพเลอรจะไมแปรความหมายเปนภาษาเครอง ซงจะตองเปดดวยเครองหมาย /* และปดดวยเครองหมาย */ เชน /* PROGRAM BY TEERAWAT PRAKOBPHON */
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 76 of 229
จากตวอยางทกลาวมาเมอเขยนโปรแกรมดวย Dev-C++ ทาไดดงขนตอนตอไปน
1. เปดโปรแกรมสรางไฟลใหม โดยเลอกเมน File -> New ->Source File 2. พมพโปรแกรมลงไปดงตอไปน
3. จดเกบไฟล (Save) ไวในเครองคอมพวเตอร โดยเลอกเมน File -> Save จากนนเลอกโฟเดอรสาหรบเกบขอมล แลวตงชอไฟลตามตองการ ในทนใหชอเปน pro1 กดปม Save ดงรป
1. เลอกเมน File -> Save
2. เลอกโฟเดอรเกบขอมล
3. ตงชอไฟล 4. กดปม Save
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 77 of 229
4. โปรแกรมจะบนทกไฟลเปนชอ pro1.cpp (เนองจากโปรแกรมนสามารถเขยนในลกษณะ C++ ได จงมนามสกลเปน cpp)
5. คอมไพลและรนโปรแกรมโดยเลอกเมน Execute ->Compile & Run หรอคลกทไอคอนดงรป เมอโปรแกรมคอมไพลจะแจงขอผดพลาดออกมา เนองจากการเขยนคาอธบายไมไดใสเครองหมาย */ เพอปดคาอธบาย
แสดงชอไฟลตามทตงไว
1. คลกเลอก “คอมไพลและรน”
2. โปรแกรมแจงวามขอผดพลาดในบรรทดท 1 ในสวนของการอธบายโปรแกรม
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 78 of 229
ใหแกไขโปรแกรมใหถกตอง แลวคลก “คอมไพลและรน” อกครงหนง โปรแกรมจะรนอยางรวดเรว ไมสามารถมองไดทน ใหทดลองเพมคาสง getch() ซงเปนสาหรบรอรบการกดคย แตคาสงนถกเกบไวใน conio.h ดงนนจะตองเรยก conio.h ขนมาในโปรแกรมดวย โดยเขยนโปรแกรมดงตอไปน
6. ทดลองคลกปม “คอมไพลและรน” อกครง จะพบวาโปรแกรมจะทาฟงกชน printf เปนพงกชนแรกแลวแสดงคาวา “COMPUTER” ออกมา จากนนทาฟงกชน getch() เพอรอการกดแปนพมพ ทาใหสามารถดผลลพธการทางานไดทน โดยโปรแกรมจะแสดงหนาตางออกมาดงน
จากตวอยางทผานมาจะพบวาการเขยนโปรแกรมดวยภาษาซนน ผเขยนโปรแกรมจะตองเขยนโปรแกรมใหถกตองตามโครงสรางของภาษา ตองทราบวาในโปรแกรมตองใชฟงกชนหรอคาสงใดบาง และฟงกชนนนอยในกลมใด ตอง include เฮดเดอรไฟลใดขนมาจงจะทางานได สาหรบรายละเอยดของฟงกชนจะกลาวตอไปเมอถงเรองทเกยวของ
พมพเพมเขาไป 2 บรรทด
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 79 of 229
6.3 ฟงกชนพนฐานและการประกาศตวแปร การเขยนเบองตนดวยโปรแกรมดวยภาษาซนนมกจะเปนการเขยนโปรแกรมรบขอมลจากแปนพมพ
และแสดงขอมลออกทางจอภาพ รวมถงการประมวลผลทางคณตศาสตรอยางงายซงมกจะตองมการประกาศตวแปรสาหรบเกบขอมลดวย ตอไปจะกลาวถงการรบขอมลและการสงขอมลโดยจะกลาวถงฟงกชนในการรบขอมลจากแปนพมพ และการสงขอมลออกทางจอภาพ โดยคาสงดงกลาวจะอยในไลบราล stdio.h ซงจะตองเรยกออกมากอนดวย #include
ฟงกชน printf() ฟงกชนนเราไดทดลองใชอยางงาย ๆ มาแลว โดยใชสาหรบแสดงขอความหรอตวแปรฟงกชน printf() มชอเตมวา print format เปนฟงคชนทใชพมพขอความตาง ๆ ออกทางจอภาพโดยมรปแบบดงน
printf(“ขอความ”) หรอ printf(“รหสควบคมรปแบบ”,ตวแปร) หรอ printf(“control string”,variable list,……..); โดยคาทสงเขาไปในฟงกชนจะมสองสวน สวนแรกเรยกวาสตรงฟอรแมต เปนสวนทใชควบคมลกษณะการแสดงผล และสวนทสองหมายถงคาคงท หรอตวแปรทจะใหแสดงผล โดยฟงกชนจะพมพคาทอยในตวแปรในสวน variable list ในรปแบบทกาหนดโดย control string ซงจะศกษาไดจากตวอยางตอไป
โปรแกรมท 6.1 /* PROGRAM BY TEERAWAT PRAKOBPHON */ #include “stdio.h” main() printf(“COMPUTER\n”); ขอความทจะพมพจะอยในเครองหมาย “” ตามดวย\n printf(“\n\nCOMPUTER”); ขอความทจะพมพจะอยในเครองหมาย “” โดยม\n นาหนา printf(“%d\n”,20); จากตวอยางใหลอง RUN โปรแกรมด ซงจะเหนวาขอความทจะพมพจะอยในเครองหมายคาพด นอกจากนยงมเครองหมายแบคสแลซตามดวย n (\n) ซงเปนการบอกวาเมอพมพเรยบรอยแลวใหขนบรรทดใหม สวนคาสงตอมาม \n นาหนาสองตวบอกวาใหขนบรรทดใหมกอนสองครง แลวคอยพมพคาวา COMPUTER เครองหมายนเรยกวา รหสแบตสแลซ (backslash) ซงมอยหลายรปแบบดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 80 of 229
รหส ผลทได
\n ใหขนบรรทดใหม \t ใหเวน tab เปนระยะ 8 ชวง \xhh ใสตวอกษร hh เมอเปนเลขฐานสบหก \a สงเสยงบป \\ เครองหมาย Backslash
จากโปรแกรมท 6.1 พจารณาฟงคชน printf() บรรทดท 3 เครองหมาย %d หมายถงรหสควบคมการพมพ (format code) ซงเปนตวบอกใหพมพเลขฐานสบ เครองหมาย % นเรยกวา format specification ซงมใชหลายรปแบบดงตาราง
เครองหมาย การใชงาน
%d ใหพมพรปแบบเลขจานวนเตมฐานสบ %u ใหพมพรปแบบเลขจานวนเตมไมมเครองหมาย %f ใหพมพรปแบบเลขทศนยม %e ใหพมพเลขจานวนจรงในรปเลขยกกาลง %c ใหพมพตวอกษรตวเดยว (Char) %s ใหพมพชดตวอกษร (string) หรอขอความ %% ใหพมพเครองหมาย % %o ใหพมพเลขฐานแปด %x ใหพมพเลขฐานสบหก
ในการเขยนคาสง printf หนงบรรทด เราสามารถใหพมพตวอกษรหลาย ๆ รปแบบได ดงเชนคาสง
ตอไปน printf(“%s %d %f %c \n”,”Sam”,14,-8.76,’X’); จะเหนวาคาสงนมการพมพหลายรปแบบและม variable list หลายตว ถาเปนสตรงจะอยในเครองหมาย
“ “ ถาเปนตวอกษรจะอยในเครองหมาย ‘ ‘ สาหรบคา variable list จะตองเรยกตามลาดบทกาหนดใน control string ผลลพธจากการทาคาสงจะเปนดงน
Sam 14 -8.760000 X จะสงเกตเหนวาในการพมพเลขทศนยมขอมลทใสไปคอ –8.76 แตผลลพธทไดจะไดทศนยมหลาย
ตาแหนง คาสง printf สามารถระบจานวนเลขทศนยมได โดยใสจานวนทศนยมและเครองหมายจดระหวาง % และ f ดงตวอยางคาสงตอไปน
printf(“%f %.3f %.2f %.1f”,4.5678,4.5678,4.5678,4.5678);
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 81 of 229
ผลลพธทไดจากการทาคาสงจะเปนดงน 4.567800 4.568 4.57 4.6
ฟงกชน scanf() ฟงกชนนจะตรงขามกบฟงกชน printf() โดยจะใชอานคาจากการกดแปนพมพทอยในรปรหส ASCII ไปเกบในตวแปรทกาหนด และสามารถใชเปนรหสควบคมหรอ controlstring ระบชนดของขอมลทจะเกบในตวแปรได รปแบบของคาสงเปนดงน
scanf(“control string”,&variable list,……..); หรอ scanf(“รหสรบขอมล”,&ตวแปรเกบขอมล); โดยเครองหมาย & เปนการชไปทแอดเดรสหนวยความจาของตวแปรทกาหนดเพอใหเกบขอมล สาหรบ control string จะเปนตวบอกวาจะใหเกบขอมลในลกษณะใด ตวอยางเชน
int num; /*ประกาศตวแปรชอ num สาหรบเกบเลขจานวนเตม */ scanf(“%d”,&num); เมอคอมพวเตอรทาชดคาสงจะรอรบขอมลจากแปนพมพ เมอใสขอมลและกด Enter จะนาขอมลไปเกบในตวแปรชอ num ในรปของเลขฐานสบเนองจาก control string เปน %d สาหรบ control string มไดหลายตวเชนเดยวกบคาสง printf() พจารณาชดคาสงตอไปน
int i,j; /*ประกาศตวแปรชอ i และ j สาหรบเกบจานวนเตม */
scanf(“%o %x”,&i,&j); printf(“%o %x”,i,j);
เมอคอมพวเตอรทางานจะรบขอมลเขาไป 2 คา การใสขอมลระหวางคาแรกและคาทสองตองกดคยเวนวรรคเปนการแยกคาของขอมล ขอมลคาแรกทรบเขาไปจะรบในรปเลขฐานแปดเนองจากใชรหสควบคมเปน %o คาทสองจะรบในรปเลขฐานสบหก คาสงตอมาจะใหคอมพวเตอรพมพขอมลทเกบอยในรปเลขฐานแปดและฐานสบหก พจารณาชดคาสงตอไปน
char str[80]; printf(“Enter a string : “); scanf(“%s”,str); /*รบสตรงมาเกบในตวแปร ไมตองมเครองหมาย & */
printf(“Here ‘ s your string: %s”,str);
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 82 of 229
จะเปนการประกาศตวแปร str เปนตวแปรประเภทสตรงทเกบขอมลไดไมเกน 80 ตวอกษร และแสดงขอความใหพมพสตรง ตอมาจะรบขอมลในรปสตรงเขาไปเกบในตวแปร str และพมพออกทางจอภาพ
ตวแปร การเกบขอมลของคอมพวเตอรนนจะเกบลงในหนวยความจาสวนทเปน RAM โดยขอมลทเกบอยแตละคาจะอางถงโดยการอางไปทหมายเลขตาแหนงของหนวยความจานน สาหรบในการเขยนโปรแกรมจะใชวธการ
ประกาศตวแปรในการอางถงหนวยความจาทตองการตดตอ โดยชอของตวแปรจะเปนตวแทนคาหมายเลข
ตาแหนงหนวยความจาทใชเกบขอมลนนเอง เมอมการนาขอมลไปเกบในตวแปรขอมลนนจะถกเปลยนเปนรหส
เลขฐานสองทคอมพวเตอรเขาใจได ตวอยางเชนถาหากตองการใหตวแปรนนเกบเลขจานวนเตมคอมพวเตอรจะ
เปลยนเลขจานวนเตมเปนเลขฐานสองทสอดคลองกน ถาหากตองการใหตวแปรเกบตวอกขระคอมพวเตอรจะ
เปลยนตวอกขระนนเปนรหส ASCII หรอรหส Unicode ตามการประมวลผลของคอมพวเตอรนน ดงนนถาหากตองการใหโปรแกรมรบขอมลจากผใชมาเกบไว หรอมการคานวณและเกบผลลพธจะตองสรางตวแปรสาหรบ
เกบขอมลทเปนผลลพธนน พจารณาโปรแกรมตอไปน
เมอรนโปรแกรมนบนจอภาพคอมพวเตอรจะปรากฏคาวา Height in inches is 72
บรรทดแรกของโปรแกรมจะเปนอนคลดไฟลหรอไฟลสวนหว สวนบรรทดทสองจะเปนการประกาศ
ตวแปรขนมาสองตว โดยใช int นาหนาในการประกาศตวแปร โดยกาหนดใหตวแปรชอ feet และ inches เปนตวแปรประเภท Integer (เกบเลขจานวนเตม) ในสวนของโปรแกรมหลกจะเรมตนดวย main() และสเตตเมนตถดไปจะเปนการกาหนดคาให feet ใหมคาเปน 6 โดยใชเครองหมายเทากบในการกาหนดคา สวนสเตตเมนตตอมาจะนาคา feet คณดวย 12 และเกบคาทไดในตวแปร inches สวนสเตตเมนต printf จะใชสาหรบพมพคาเอาตพตทางจอภาพ ในคาสง printf จะเหนวามการแสดงผลสองสวนคอสวนทเปนขอความ และสวนทเปนตวแปร โดยใชเครองหมายคอมมา(Comma) คน เมอโปรแกรมทางานจะนาขอมลทเปนตวแปรไปแสดงผลในตาแหนงทเขยน
เปน %d ซงเปนตวบอกวาใหแสดงผลตวแปรเปนเลขฐานสบ
#include “stdio.h” int feet ,inches; main() feet = 6; inches = feet * 12; printf(“Height in inches is %d ‘,inches)
ประกาศตวแปร
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 83 of 229
ในสวนของการประกาศตวแปรชอของตวแปรจะตองเปนไปตามกฎการตงชอซงจะไดกลาวตอไป ถา
หากชอตวแปรมความยาวมากกวา 63 ตวอกษร โปรแกรมจะรบรเพยง 63 ตวแรกเทานน และในการประกาศตวแปรถาหากมตวแปรมากกวา 1 ตวจะใชเครองหมาย , ขน การกาหนดตวแปรจะตองเรมตนดวยประเภทของขอมลตามดวยชอตวแปร และสามารถประกาศหลาย ๆ ตวพรอมกนไดโดยใชเครองหมายคอมมา (,) คน รปแบบ ประเภทของขอมล ชอตวแปร, …..; หรอ Data Type Variable Name, …. ; ตวอยาง
int feet , inches; เปนการบอกวามตวแปรสองตว และเปนตวแปรประเภท Integer ดงนนตวแปรทงสองตวนจะใสเลข
จานวนเตมใด ๆ กได แตตองอยในชวง -32767 ถง +32767 (ขนอยกบชนดของคอมไพเลอร) ในการประกาศตวแปรนนมกฎการตงชอดงตอไปน
ชอตวแปรประกอบดวยตวอกษร A ถง Z รวมถงตวเลข 0 ถง 9 ชอตวแปรตองขนตนดวยตวอกษร ตวพมพใหญ ตวพมพเลกมความหมายตางกน ตองไมมเวนวรรคระหวางชอตวแปร ชอตองไมซ ากบคาสงวน (Reserved Word) ทโปรแกรมรจก
นอกจากนในภาษาซยงประกาศตวแปรพรอมกบกาหนดคาใหกบตวแปรได โดยจะใชเครองหมาย = ตามดวยคาทจะใหกบตวแปร รปแบบทวไปของการกาหนดคาใหกบตวแปรจะเปนดงน
variable = expression; โดยท expression อาจเปนคาคงท ตวแปร หรอการกระทาทางคณตศาสตรกได การทางานของ
โปรแกรมจะนาคาทอยทางขวาของเครองหมาย assignment (=) มาใสใหกบตวแปรทอยทางซาย ในการเขยน
โปรแกรมดวยภาษาซ สามารถใชเครองหมายการกระทาทางคณตศาสตรบวก(+) และ (-) ได สวนการคณจะใชเครองหมาย * และการหารจะใชเครองหมายสองตวคอ div และ / สวนรายละเอยดจะไดกลาวตอไป
ประเภทของขอมล ชอตวแปร
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 84 of 229
ตวอยาง int x; /*ประกาศตวแปรชอ x สาหรบเกบเลขจานวนเตม */ x = 5; /*กาหนดคา 5 ใหกบตวแปร x */ ตวอยาง int x, y; /*ประกาศตวแปรชอ x และ y เกบเลขจานวนเตม */ y = 3; /*กาหนดให y มคาเทากบ 3 */ x = y + 5; /*นาคา y บวกกบ 5 แลวนาไปเกบในตวแปร x */ ในการนาคาสง printf มาใชแสดงผลเอาตพตจะใหเอาตพตเปนตวแปร หรอการกระทาทางคณตศาสตรกได แตตองใชเครองหมาย % ในการกาหนดประเภทของขอมล ตวอยางเชน เอาตพต
x = 7; printf(“%d”,x); 7 printf(“%d”,x + 9); 16
คาถาม หลงจากคอมพวเตอรทาคาสงตอไปน เอาตพตทไดจะเปนอยางไร yards = 8; yards = 8; feet = yards * 3; feet = yards * 3; printf(“%d yards is “, yeads); printf(“%d yards is \n“,yeads); printf(“%d feet” , feet); printf(“%d feet \n”, feet);
คาตอบ
8 yards is24 feet 8 yards is 24 feet
คาถาม ถาหากคอมพวเตอรทาคาสงตอไปน เอาตพตทไดจะเปนอยางไร printf(“Yes \n”); printf(“Yes \n”); printf(“Yes”); printf(“No \n”); printf(“\n”); printf(“No”); printf(“No \n”);
นาขอมลในตวแปร x พมพเปนเลขฐานสบ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 85 of 229
คาตอบ
Yes Yes YesNo No No
คาถาม เอาตพตทางจอภาพจะเปนอยางไร ถาหากคอมพวเตอรทาโปรแกรมตอไปน #include “stdio.h” int nickels,dimes,TotCenter; main() nickels = 3; dimes = 7; TotCenter = (nickels * 5) + (dimes * 10); printf(“%d nickels and %d dimes \n”,nickels,dimes); printf(“= %d cents \n”,TotCenter);
คาตอบ
3 nickels and 7 dimes = 85 cents
ชนดของขอมล ในการเขยนโปรแกรมเมอมการประกาศตวแปรคอมพวเตอรจะจองหนวยความจาใหกบตวแปรนน ถา
หากตวแปรเกบขอมลตางประเภทกนหนวยความจาทใชสาหรบเกบขอมลกจะไมเทากนดวย สาหรบขอมลในภาษาซอาจแบงออกไดเปน 4 กลมดงตอไปน - ขอมลชนดชมเปล (simple type) - ขอมลประเภทสตรง (string type) - ขอมลประเภทโครงสราง (structure type) - ขอมลประเภทพอยตเตอร (pointer type) ในหวขอนจะกลาวถงขอมลชนดซมเปลและขอมลชนดสตรงกอน สวนขอมลประเภทอน ๆ จะกลาวตอไปในภายหลง
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 86 of 229
ขอมลชนดซมเปล ขอมลชนดซมเปลแบงไดเปนขอมลประเภทลาดบ (ordinal type) และขอมลประเภทจานวนจรง (Real Data Type) โดยขอมลแบบลาดบเปนขอมลทมคาเปนลาดบแนนอน เชนตวเลขทใชในการนบ ลาดบตวอกษรเปนตน ในภาษาซยงแบงขอมลชนดลาดบออกไดหลายประเภท ในทนจะกลาวถงขอมลประเภทจานวนเตม ขอมล
อกขระ และขอมลตรรกะ
ขอมลชนดจานวนเตม (Integer Data Type) ขอมลประเภทนจะใชเกบตวเลขทเปนจานวนเตม ในคอมพวเตอรจะใชหนวยความจาในการเกบขอมล
ถาหากคอมพวเตอรใชหนวยความจา 8 บตหรอ 1 ไบตในการเกบขอมลจะทาใหเกบขอมลทเปนเลขฐานสบไดในชวง 0 ถง 255 ขอมลชนดจานวนเตมนยงแบงไดหลายประเภทขนกบขนาดของหนวยความจาทคอมพวเตอรใชเกบ โดยขอมลประเภทตาง ๆ แสดงไดดงตารางตอไปน
ประเภท ชวงของขอมลทเกบได ขนาดหนวยความจา
char -128 – 127 1 ไบต unsigned char 0 – 255 1 ไบต
signed char -128 .. 127 1 ไบต int -2,147,483,648 .. 2,147,483,647 4 ไบต
unsigned int 0 .. 4,294,967,296 4 ไบต ตารางแสดงประเภทของขอมลและชวงของขอมลทเกบได
จากตารางจะพบวาการประกาศตวแปรใหเกบเลขจานวนเตมจะประกาศไดหลายประเภท แตละประเภทจะใชหนวยความจาไมเทากน ทาใหเกบขอมลไดในชวงทตางกนไปดวย แตขนาดของหนวยความจาทใชกบขอมลแตละประเภทนนจะขนกบชนดของคอมไพเลอรทใชดวย ตวอยางเชน ถาหากประกาศตวแปรเปนขอมลชนด int แลวใชคอมไพเลอร Turbo-C จะใชหนวยความจาเพยง 2 ไบต ทาใหเกบขอมลไดในชวง -32768 ถง +32767 แตถาหากเปนคอมไพเลอรตวอน เชน DEV-C จะใชหนวยความจา 4 ไบต ทาใหเกบขอมลไดในชวงทกวางกวา ในการประกาศตวแปรนถาหากประกาศตวแปรทเกบขอมลไดมากเกนความจาเปนจะทาใหโปรแกรมทเขยนขนใชหนวยความจามากขนตามไปดวย ตวอยางเชนถาหากแนใจวาขอมลตวเลขทเกดขนมคาไมเกน 127 กควรประการตวแปรเปนชนด char กเพยงพอ
ขอมลประเภทตวอกขระ (Character Data Type)
ขอมลประเภทนจะเปนตวอกขระหนงตว ซงเปนไปตามตารางรหส ASCII ประกอบดวยขอมลทเปนตวอกษร ตวเลข และอกขระพเศษ ขอมลประเภทนจะเปนขอมลแบบลาดบได เนองจากเรยงตามลาดบรหส ASCII ขอมลประเภทนจะใชเนอทในการเกบหนงไบตเชน ‘A’,’B’,’C’ นอกจากนยงมอกขระพเศษเชน ‘\n’ รหสขนบรรทดใหม
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 87 of 229
‘\t’ รหสเวนวรรค 1 tab ‘\a’ เสยง Beep
ขอมลประเภทตรรก (Boolean Data Type) จะเปนคาทางลอจก ไดแกจรง(True) กบเทจ (False) จะใชในคาสงควบคมเพอตดสนใจการทางาน ในการเรยงลาดบจะใหคาทเปนเทจมลาดบกอนคาทเปนจรง ในการเขยนโปรแกรมบางครงจะแทนคาจรงดวยเลข
จานวนเตม 1หรอคาทมากกวา 1 และแทนคาเทจดวยเลข 0
ขอมลประเภทจานวนจรง (Real Data Type)
ขอมลประเภทนจะเปนจานวนจรงหรอเลขทศนยม ขอมลประเภทนจะจดลาดบกอนหลงไดยาก จงไม
เปนขอมลชนดลาดบเนองจากทศนยมมไดหลายตาแหนง ขอมลจานวนจรงนยงแบงออกไดหลายประเภท โดยแตละประเภทจะใชหนวยความจาในการเกบแตกตางกน ทาใหเกบขอมลไดแตกตางกน ดงตารางตอไปน
ประเภท ชวงของขอมลทเกบได ขนาดหนวยความจา
float 3.4 x 10-38 ถง 3.4 x 1038 4 ไบต
double 1.7 x 10-308..ถง 1.7 x 10+308 8 ไบต long double 3.4 x 10-4032 .ถง. 1.1 x 104032 10 ไบต
ตารางแสดงประเภทของขอมลชนดจานวนจรง
ขอมลประเภทสตรง (string type) นอกจากขอมลแบบตวเลขและตวอกษรแลวในภาษาซยงมขอมลอกประเภทหนงเรยกวาสตรง ขอมล
ประเภทนจะเปนการนาตวอกขระมาตอเรยงกบเปนขอความตงแตหนงตวขนไป โดยสามารถเกบตวอกขระได 255 ตว โดยตวอกขระจะตองอยในเครองหมาย “ “ ในการเขยนโปรแกรมดวยภาษาซจะมการเตมตวอกษรวาง NULL (\0) เปนตวสดทาย อยางเชนการเกบสตรงคาวา “COMPUTER” จะใชเนอทในการเกบ 9 ไบต โดยแตละไบตเปนดงน
“C” “O” “M” “P” “U” “T” “E” “R” “\0”
การเกบขอมลของตวแปร ในการประกาศตวแปรใหกบโปรแกรมนน เมอโปรแกรมถกรนตวแปรตาง ๆ จะเปนตาแหนง
หนวยความจาทใชเกบขอมล ตวอยางเชนในโปรแกรมทผานมา จะใชหนวยความจาสามตาแหนง หลงจาก
โปรแกรมทางานคาในหนวยความจาตาแหนงตาง ๆ จะเปน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 88 of 229
nickels Dimes TotCentr
3 7 85
เมอโปรแกรมมการทางานใด ๆ คาในหนวยความจาหรอตวแปรอาจมการเปลยนแปลงได โดยคาเกาจะหายไปและถกแทนดวยคาใหม พจารณาโปรแกรมตอไปน
#include “stdio.h” int x; หนวยความจา main() x x = 6; x = 8; printf(“X is %d”,x);
เมอโปรแกรมมการรน เรมแรกคาในตวแปร x จะมคาเปน 6 ตอมามการใสคา 8 ลงในตวแปร x ทาใหคาใน x เปน 8 เมอโปรแกรมรนไปถงคาสง printf จะทาใหพมพเลข 8 ออกทางหนาจอ ในการเขยนโปรแกรมภาษาซ เราสามารถนาคาในตวแปรใสใหกบตวแปรได โดยใชเครองหมายเทากบ (=) เชนเดยวกบการกาหนดคาใหตวแปร พจารณาโปรแกรมตวอยางตอไปน num1 = 5; เอาตพต num2 = 14; num1 = num2; printf(“%d”,num1); printf(“%d”,num2);
เมอโปรแกรมทางาน เรมแรกคาในหนวยความจา num1 จะเปน 5 และคาใน num2 เปน 14 ตอมามการใสคาในตวแปร num1 ดวยคา num2 ซงจะทาใหคาในตวแปร num1 เปลยนไป เอาตพตจากการรนโปรแกรมจะไดเลข 14 จานวนสองตวทางจอภาพ ในการกาหนดคาใหกบตวแปรนนเราสามารถนาคาตวแปรเดมมากระทาทางคณตศาสตรได โดยทตว
แปรทางซายเปลยนไปตามการกระทาทางขวามอ ดงตวอยางตอไปน ก. count = count +1 เพมคาในตวแปร count ขนหนง ข. sum = sum + x นาคาใน sum บวกกบ x โดยคาใน x จะไมเปลยน ค. num = 3 * num นาคาใน num คณกบ 3 และเกบไวทเดม
6 8
14 14
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 89 of 229
6.4 นพจนและตวดาเนนการทางคณตศาสตร ในการเขยนโปรแกรมใหคอมพวเตอรประมวลผลนนสามารถนนเอาคาคงท ตวแปร ตวดาเนนการมาประกอบกนเปนนพจนได โดยในนพจนหนง ๆ สามารถนาตวดาเนนมากกวาหนงตวมาใชได ตวอยางเชน int y; /*ประกาศตวแปร y สาหรบเกบเลขจานวนเตม */ y = 5 * 3 + 2*2; /*สรางนพจนแลวกาหนดคาใหกบตวแปร y */ printf(“Output = %d “,y); จากตวอยางผลลพธทไดจะเปน Output = 19 โดยการประมวลผลลกษณะนผเขยนโปรแกรมจะตองเขาใจลาดบกอนหลงของการกระทาของตวดาเนนการดวยวาถาหากมตวดาเนนการหลาย ๆ ตวประกอบอย คอมพวเตอรจะประมวลผลอยางไร จากตวอยางโปรแกรมจะนา 5 คณกบ 3 กอน จากนนนาคา 2 คณกบ 2 แลวนาผลลพธทงสองมารวมกนแลวเกบไวในตวแปร y สาหรบตวดาเนนการทางคณตศาสตรแสดงไดดงตารางตอไปน
ตวดาเนนการ ความหมาย ตวอยาง + บวก (Addition) y = x + 5; - ลบ (Subtraction) y = x – 2; * คณ (Multiplication) y = x * 3; / หาร (Division) y = x / 2;
% การหารแบบเอาเศษ (Modulus) y = 5 % 3; ++ เพมคาขนหนงคา (Increment) y++; -- ลดคาลงหนงคา (Decrement) y--;
ตวดาเนนการทางคณตศาสตร
โปรแกรมท 6.2 โปรแกรมแสดงการใชตวดาเนนการ #include “stdio.h” #include “conio.h” main() int x,y; x = 3; y = 2; printf(“x + y = %d\n”,x+y); printf(“x * y = %d\n”,x*y); printf(“%d + %d = %d\n”,x,y,x+y); printf(“5 + 3 = %d\n”,5 + 3); getch();
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 90 of 229
เมอโปรแกรมทางานเรมตนจะประกาศตวแปรชอ x และ y สาหรบเกบเลขจานวนเตมจากนนกาหนดให x มคาเปน 3 และ y มคาเปน 2 เมอมาถงฟงกชน printf() โปรแกรมจะนาคาอารกวเมนตมาประมวลผลและนาตวดาเนนการ บวก มาใช ผลลพธทไดจะถกแสดงผลทางรหสกาหนดรปแบบ %d สวนฟงกชน printf() ฟงกชนทสามจะมรหสกาหนดรปแบบสามตว ดงนนจะตองมอารกวเมนตสามตวดวย เมอคยโปรแกรมและรนดวย DEV-C ผลลพธทไดจะเปนดงน
ในการเขยนโปรแกรมทมการใชตวดาเนนการหลาย ๆ ตวนนถาหากปองกนผลลพธทคลาดเคลอนจากการกระทากอนหลงของตวดาเนนการมกจะนาวงเลบมาใช สาหรบลาดบการประมวลผลของนพจนจะเปนดงตารางตอไปน
ลาดบท ตวดาเนนการ ทศทางการประมวลผล 1 ( ) ทาในวงเลบมลาดบความสาคญสงสด 2 ++ , -- เรยงจากขวาไปซาย 3 *, / , % เรยงจากซายไปขวา 4 + , - เรยงจากซายไปขวา 5 = นาขอมลทางขวาไปใสทางซาย
ตารางแสดงลาดบการทางานของตวดาเนนการ
ตวอยาง จงหาคาจากการประมวลผลตอไปน y = 7 + 8 * 2 วธคด นา 8 คณ 2 ได 16 แลวบวกกบ 7 ทาให y มคาเปน 23 ตวอยาง จงหาคาจากการประมวลผลตอไปน y = 5%2 + 14/3 – 6 วธคด
1. 5 % 2 = 1 2. 14/3 = 4.66 3. 1 + 4.66 = 5.66
4. 5.66 – 6 = -0.33 ดงนน y มคาเทากบ -0.33
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 91 of 229
6.5 คาสงกาหนดเงอนไข การเขยนโปรแกรมคอมพวเตอรนนเปนการนาคาสงตาง ๆ มาตอเรยงกนใหเครองทางานตอเนองกนไป สาหรบโปรแกรมทมความซบซอนมากขนจะตองมการเปลยนทศทางการทางานของโปรแกรมบาง ซงจะตองใหโปรแกรมตดสนใจดวยวาจะเลอกทาชดคาสงทตามมาหรอไม หรออาจตองเลอกทาชดคาสงใดชดคาสงหนง
การทางานแบบเลอกทานนสามารถแบงทศทางการทางานของโปรแกรมไดดงน 1. การทางานแบบมทางเลอกเดยว (Single Selection) 2. การทางานแบบสองทางเลอก (Double Selection)
เงอนไข
ชดคาสง
เงอนไข
ชดคาสง 1ชดคาสง 2
จรงจรง เทจ
ก. การเลอกทาแบบทางเลอกเดยว ข. การเลอกทาแบบสองทางเลอก รปแสดงการทางานแบบมทางเลอก
สาหรบการทางานแบบมทางเลอกเดยวและแบบสองทางเลอกจะตองมการตรวจสอบเงอนไขเพอเปนตว
พจารณาวาจะทาโปรแกรมในทศทางใดตอไป การตรวจสอบเงอนไขนนผลลพธทไดจะเปนคาทางบลน คอมคาเปนไปได 2 กรณคอ เปนจรง (true) หรอเปนเทจ (false)
กรณการเลอกทาแบบทางเลอกเดยว ถาหากเงอนไขเปนจรง โปรแกรมจะทาชดคาสงทกาหนด แตถาหากเงอนไขเปนเทจโปรแกรมจะไมทาชดคาสง สวนการเลอกทาแบบสองทางเลอก(รป ข) ถาหากเงอนไขเปนจรง โปรแกรมจะทาชดคาสงท 1 แตถาหากเงอนไขเปนเทจโปรแกรมจะทาชดคาสงท 2
ในสวนของการตรวจสอบเงอนไขนนจะเปนการเขยนนพจนทแสดงความสมพนธระหวางตวแปรกบตว
แปร หรอระหวางตวแปรกบคาคงท โดยจะนาตวดาเนนการเปรยบเทยบและตวดาเนนการทางตรรกะมาใช
ตวดาเนนการเปรยบเทยบ ตวดาเนนการเปรยบเทยบ (Relation Operators) จะนาขอมลสองคามาเปรยบเทยบกน โดยขอมลทงสองคาจะตองเปนขอมลประเภทเดยวกน ผลลพธทไดจะเปนคาทางลอจกคอจรงหรอเทจ ตวดาเนนการเปรยบเทยบในภาษาซเปนดงตารางตอไปน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 92 of 229
ตวดาเนนการ ความหมาย ตวอยาง == เทากบ (Equal) 6 == 3 เปนเทจ != ไมเทากบ (Not Equal) 6 != 3 เปนจรง <= นอยกวาหรอเทากบ (Less Than or Equal) 6 <= 3 เปนเทจ >= มากกวาหรอเทากบ (Greater Than or Equal) 6 >= 3 เปนจรง > มากกวา (Greater Than) 6 > 3 เปนจรง < นอยกวา (Less Than) 6 < 3 เปนเทจ
ตารางแสดงตวดาเนนการเปรยบเทยบ
ตวดาเนนการทางตรรกะ ตวดาเนนการทางตรรกะ(Logical Operator) เปนตวดาเนนการทเชอมระหวางเงอนไขสองเงอนไขหรอมากกวา ผลลพธทออกมาจะเปนจรงหรอเทจ ตวดาเนนการทางตรรกะแสดงไดดงตารางตอไปน
ตวดาเนนการ ความหมาย การกระทา
&& และ (AND) ผลลพธจะเปนจรงเมอเงอนไขสองเงอนไขเปนจรง || หรอ (OR) ผลลพธจะเปนเทจเมอเงอนไขสองเงอนไขเปนเทจ ! ไมใช (NOT) เปลยนคาจากจรงเปนเทจ จากเทจเปนจรง
ตารางแสดงตวดาเนนการทางตรรกะ
ตวอยาง การกระทาตอไปนใหผลลพธเปนจรงหรอเทจ (5 == 4 + 1) && (18 <= 6 * 4) เนองจากประโยคในวงเลบทงสองวงเลบเปนจรง ดงนนผลลพธทไดจะเปนจรง การเขยนโปรแกรมดวยภาษาซนนการตรวจสอบเงอนไขจะใชคาสง if แลวตามดวยเงอนไข ถาหาก
เงอนไขเปนจรงโปรแกรมจะทาสเตตเมนตทตามมา แตถาหากเปนเทจจะไมทา ถาหากสเตตเมนตมคาสงหลาย
คาสงจะเขยนอยในเครองหมายปกกา รปแบบของคาสงเปนดงน
if(การตรวจสอบเงอนไข) คาสงหรอสเตตเมนต
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 93 of 229
ตวอยาง ถาหากคอมพวเตอรทาคาสงตอไปน if (x >= 10) printf(“A\n”); printf(“B”); ถาหากคาในตวแปร x เปนคาตาง ๆ จะทาใหคอมพวเตอรแสดงผลลพธดงตอไปน
x = 12 x = 8 x = 15 ในการตรวจสอบเงอนไขถาหากมเงอนไขมากกวาหนงเงอนไขเราสามารถนาตวดาเนนการทางตรรกะ
มาใชได ตวอยางเชนถาหากตวแปร sc เกบคาคะแนน และตองการตรวจสอบวาถาคะแนนทไดมคามากวา 80 และนอยกวาหรอเทากบ 100 ใหไดเกรด A จะเขยนคาสง if ไดดงน if((sc > 80) && (sc <= 100)) printf(“A”); สาหรบการเลอกทาแบบสองทางเลอกจะใชคาสง if-else ถาหากเงอนไขเปนจรงจะทานพจนหลง if แตถาเงอนไขเปนเทจจะทานพจนหลง else โดยรปแบบของคาสงเปนดงน
if(ตรวจสอบเงอนไข) สเตตเมนตท 1; else สเตตเมนตท 2; ตวอยางท จงเขยนผงงานและรหสเทยมสาหรบโปรแกรมตรวจสอบอาย ถาหากอายมากกวา 25 ป ใหแสดงคาวา “เปนผใหญแลว” แตถาอายยงไมเกน 25 ใหทางานตอไป วธทา กาหนดใหตวแปร x เปนอายทรบเขาไป และแยกการทางานของโปรแกรมออกเปนสองทศทาง คอทศทางทเงอนไขเปนจรง และทศทางทเงอนไขเปนเทจ จะเขยนผงงานและคาอธบายโปรแกรมไดดงน
A B
B
A B
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 94 of 229
รบคา X
X > 25
แสดงผลเปนผใหญแลว
จรง
เทจ
รปแสดงผงงานและคาอธบายโปรแกรม
ตวอยาง จงเขยนรหสเทยมการทางานจากผงงานในรปตอไปน
รปแสดงผงงานทมการเลอกทาแบบสองทางเลอกซอนกน
1. รบคาอายมาเกบในตวแปร x 2. ถา x มากกวา 25 แลว 2.1 แสดงคาวา “เปนผใหญแลว” 3. ชดคาสงตอไป
เรมตน
รบขอมล X
X > 0
พมพเปนคาบวก
X < 0
พมพคาเปนศนย
พมพเปนคาลบ
จรงเทจ
จรงเทจ
จบ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 95 of 229
วธทา จากผงงานทโจทยกาหนด จะเหนวามทงหมด 4 ขนตอนการทางาน โดยขนตอนการทางานท 3 จะเปนขนตอนการทางานแบบมทางเลอก และถาเงอนไขเปนเทจกจะมการเลอกทาซอนขนมาอกทางหนง ผงงานนสามารถเขยนคาอธบายไดดงน
1. เรมตนทางาน 2. รบขอมลคา X 3. ถา X > 0 แลว
3.1 แสดงผลวาเปนคาบวก มฉะนน
3.2 ถา X < 0 แลว 3.2.1 แสดงผลเปนคาลบ
มฉะนน 3.2.1 แสดงผลวาเปนคาศนย
4. จบการทางาน
แบบฝกหดทายบท ตอนท 1 จงเลอกคาตอบทถกตองทสดเพยงหนงขอ
1. จงหาคาตอบของนพจน (7%2) + (8%5) % 10 ก. 3 ข. 4 ค. 5 ง. 6
2. ตวดาเนนการใดไมใชตวดาเนนการทางตรรก ก. > ข. = ค. >= ง. !=
3. การเขยนประโยคใดตอไปนไมสามารถใชกาหนดเงอนไขใหกบ if ได ก. m = 4.5 ข. x = = 8 ค. ‘A’ > ‘B’ ง. C > D
4. ประโยคในขอใด เปนการตรวจสอบวาตวแปร x อยในชวงตงแต 20 ถง 30 ก. if((x >= 20) && (x <= 30)) ข. if((x >= 20) || (x <= 30)) ค. if(20 < x < 30) ง. if((x <= 10) && (x >=20))
5. ในการทาซาทกรปแบบจะตองมการประมวลผลแบบใด ก. การตรวจสอบเงอนไข ข. การคานวณคากบตวแปร
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 96 of 229
ค. การเพมคาใหตวแปร ง. การลดคาตวแปรลงหนงคา 6. คาสง if – else ใชกบเงอนไขแบบใด
ก. เงอนไขแบบทางเดยว ข. เงอนไขเลอกทาสองทาง ค. เงอนไขเลอกทาหลายทาง ง. ไมมขอถก
7. ลปประเภทใดทตรวจสอบเงอนไขกอนการทาในลป ก. do..while ข. do..while และ for ค. for ง. for และ while
ตอนท 2 จงตอบคาถามตอไปน
1. เหตใดจงตองมการใชคาสงควบคม 2. รปแบบของคาสง if มกแบบ จงอธบายลกษณะการทางานแตละแบบ 3. ถาหากผเรยนตองการเขยนโปรแกรมเครองคดเลขอยางงาย โดยใหผใชกดคย ‘+’, ‘-‘, ‘*’
และ ‘%’ จากนนใหโปรแกรมไปทางานตามตองการจะมวธออกแบบโปรแกรมอยางไร
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 97 of 229
1
บทท 8 เขยนโปรแกรมแบบมทางเลอก
การทางานแบบลาดบในบทท 7 นนถอเปนวธการทางานทตองมในทกโปรแกรม เมอนามาพฒนาเปนโปรแกรมกจะเสมอนวาเปนการนาคาสงตาง ๆ ของภาษาโปรแกรมทตองการเขยนมาตอเรยงกนไปทาให
คอมพวเตอรทาคาสงแตละคาสงตอเนองกนไป(Sequential Connection) สาหรบโปรแกรมทมการทางานท
ซบซอนขนจะตองมการเปลยนทศทางการทางานของโปรแกรมบาง เพอใหคอมพวเตอรสามารถเลอกไดวาคาสง
หรอชดคาสงใด ๆ คอมพวเตอรจะตองทาหรอไมหรอตองทาในเวลาใด การทางานของโปรแกรมในลกษณะนเรยกวาการทางานแบบมทางเลอก หรอการทางานแบบเลอกทา
8.1 ประเภทของการทางานแบบมทางเลอก การทางานแบบเลอกทานนสามารถแบงทศทางการทางานของโปรแกรมไดดงน
1. การทางานแบบมทางเลอกเดยว (Single Selection) 2. การทางานแบบสองทางเลอก (Double Selection)
เงอนไข
ชดคาสง
เงอนไข
ชดคาสง 1ชดคาสง 2
จรงจรง เทจ
ก. การเลอกทาแบบทางเลอกเดยว ข. การเลอกทาแบบสองทางเลอก
รปท 8.1 การทางานแบมทางเลอก
สาหรบการทางานแบบมทางเลอกเดยวและแบบสองทางเลอกจะตองมการตรวจสอบเงอนไขเพอเปนตว
พจารณาวาจะทาโปรแกรมในทศทางใดตอไป การตรวจสอบเงอนไขนนผลลพธทไดจะเปนคาทางบลน คอมคาเปนไปได 2 กรณคอ เปนจรง (true) หรอเปนเทจ (false)
ใชคาสง if()
ใชคาสง if() … else …
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 98 of 229
2
กรณการเลอกทาแบบทางเลอกเดยว ถาหากเงอนไขเปนจรง โปรแกรมจะทาชดคาสงทกาหนด แตถาหากเงอนไขเปนเทจโปรแกรมจะไมทาชดคาสง สวนการเลอกทาแบบสองทางเลอก(รป ข) ถาหากเงอนไขเปนจรง โปรแกรมจะทาชดคาสงท 1 แตถาหากเงอนไขเปนเทจโปรแกรมจะทาชดคาสงท 2
ในสวนของการตรวจสอบเงอนไขนนจะเปนการเขยนนพจนทแสดงความสมพนธระหวางตวแปรกบตว
แปร หรอระหวางตวแปรกบคาคงท โดยจะนาตวดาเนนการมาใชซงสวนใหญแลวจะเปนตวดาเนนการ
เปรยบเทยบและตวดาเนนการทางลอจกดงทไดศกษามาในบทท 3 สาหรบคาอธบายทใชในการเลอกทาจะใชคาวา “ถา”,”แลว” และ “มฉะนนแลว” เปนคาเรมตน จากนนจะตามดวยเงอนไขทใชตดสนใจ
การเขยนคาอธบายโปรแกรมจากผงงานแบบมทางเลอก ถาหากมผงงานทมการเลอกทาไมวาจะเปนแบบทางเดยวหรอแบบสองทางแลวตองการเขยนคาอธบาย
การทางาน สงแรกทตองกระทาคอพยายามแยกกระบวนการทางานทงหมดออกจากผงงานเปนสวน ๆ กอน จากนนใหพจารณาทศทางการทางานของโปรแกรมทละขนตอน แลวจงเขยนคาอธบายการทางานออกมา โดย
คาอธบายการทางานควรมหมายเลขบรรทดดวยและหมายเลขนควรมหมายเลขตามลาดบของสญลกษณของผง
งาน
ตวอยางท 8.1 จงเปลยนผงงานตอไปนใหเปนคาอธบายการทางาน
X > 10
READ A, B X = X + 5
X = A * B WRITE X
NY
รปท 8.1 ผงงานโครงสรางทมสองทางเลอก
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 99 of 229
3
วธทา จากรปเปนการเลอกทาแบบสองทางเลอก ใหแยกการทางานออกเปนสองทศทาง จะไดวาทศทางการทางานเมอเงอนไขเปนจรงจะมสองขนตอนการทางาน และขนตอนการทางานเมอเงอนไขเปนเทจจะมสองขนตอนการทางานเชนกน และใชคาอธบาย “ถา………แลว………มฉะนน” แทนการเลอกทา จะเขยนไดดงน
1. ถา X > 10 แลว 1.1 รบคา A และรบคา B 1.2 คานวณคา X เทากบ A คณกบ B
มฉะนน 1.3 คานวณคา X เทากบ X บวก 5 1.4 แสดงผลคา X
2. ทาชดคาสงตอไป
8.2 การเขยนโปรแกรมสาหรบงานแบบมทางเลอก จากทไดศกษาการเขยนซโดโคดมาแลวจะพบวาซโดโคดทนามาใชการเขยนโปรแกรมแบบเลอกทาจะ
ใชคาวา IF หรอ IF-THEN-ELSE และ ENDIF ถาหากตองการนามาเขยนแทนคาอธบายการทางานของโปรแกรมจะใชคาวา “IF” แทนคาอธบายวา “ถา” ใชคาวา “THEN” แทนคาอธบายวา “แลว” และใชคาวา “ELST” แทนคาอธบายวา “มฉะนน” และจบประโยคการเลอกทาดวย ENDIF จากปญหาในตวอยางท 8.1 ถาหากนาคาอธบายโปรแกรมในลกษณะของขอความมาเขยนเปนซโดโคดจะเขยนไดดงน
1. ถา X > 10 แลว IF X > 10 THEN
1.1 รบคา A และรบคา B READ A, B 1.2 คานวณคา X เทากบ A คณกบ B X = A * B
มฉะนน ELSE 1.3 คานวณคา X เทากบ X บวก 5 X = X + 5; 1.4 แสดงผลคา X WRITE X
2. ทาชดคาสงตอไป ENDIF ถาหากนาซโดโคดทเขยนขนไปพฒนาเปนโปรแกรมกสามารถไดงาย แตจะตองทราบวาในภาษาทตองการเขยนโปรแกรมมขอกาหนดและรปแบบในการเขยนโปรแกรมอยางไร ถาหากนาซโดโคดในตวอยางท 8.1 มาเขยนเปนโปรแกรมภาษาซจะเขยนไดดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 100 of 229
4
ซโดโคด IF X > 10 THEN READ A, B X = A * B ELSE
X = X + 5; WRITE X ENDIF จากโปรแกรมทเขยนขนผลลพธจากการรนโปรแกรมจะไดดงรปโดยครงแรกปอน X เทากบ 5 กจะทาใหเงอนไขเปนเทจและจะไปทาการคานวณ X บวกกบ 5 แลวไปเกบใน X ซงทาให X มคาเปน 10 แลวแสดงผลออกมาทางหนาจอ เมอรนโปรแกรมครงทสองโดยปอน X เทากบ 12 กจะทาใหเงอนไขของ IF เปนจรง คอมพวเตอรกจะรบขอมลสองคาไปเกบในตวแปร A และตวแปร B
ผลลพธจากการรนโปรแกรม
โปรแกรมท 8.1 จงเขยนโปรแกรมรบเลขจานวนเตมทางแลวใหคอมพวเตอรแสดงคาสมบรณของเลขนนออกมา วธทา จากการวเคราะหปญหาของโจทยจะพบวาขอมลอนพตคอตวเลขจานวนเตม เอาตพตกเปนเลขจานวนเตมทเปนคาสมบรณของเลขนน สาหรบวธการประมวลผลทาโดยตรวจสอบวาเลขทรบเขามานนมคามากกวา 0 หรอไม ถามากกวาใหแสดงเลขนน ถานอยกวาใหทาเปนคาบวกโดยนาคา -1 ไปคณ
#include “stdio.h” #include “conio.h” main() int A, B, X; printf(“X = “); scanf(“%d”, &X); if (X > 10) scanf(“%d”,&A); scanf*”%d”,&B); X = A+B; else X = X+5; printf(“%d”,X); getch();
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 101 of 229
5
จากปญหานจะเปนการเลอกทาแบบทางเดยว ซงสามารถเขยนผงงานและโปรแกรมภาษาซไดดงรปท 8.2
เรมตน
รบคาตวเลขX
X < 0
X = X * (-1)
แสดงผลX
จบ
จรง
เทจ
รปท 8.2 ผงงานและโปรแกรมหาคาสมบรณของตวเลข
โปรแกรมท 8.2 จงเขยนโปรแกรมรบตวเลขสองคา จากนนใหแสดงคาทมากกวาทางจอภาพ วธทา อนพต รบคาตวเลขสองคา A และ B เอาตพต แสดงคาตวเลขทมากกวาทางจอภาพ วธการประมวลผล นาตวเลข A และ B มาเปรยบเทยบ ถา A > B แลว แสดงผลคา A มฉะนน แสดงผลคา B
#include <stdio.h> #include <conio.h> main() int x; printf(“INPUT X : “); scanf(“%d”,&x); if (x < 0) x = x * -1; printf(“%d”,x); getch();
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 102 of 229
6
จากปญหานจะเปนการเลอกทาแบบสองทศทาง การตรวจสอบเงอนไขทาโดยนาตวเลขสองตวมาเปรยบเทยบกน สามารถเขยนเปนผงงานและโปรแกรมไดดงรปท 8.3
รปท 8.3 ผงงานและโปรแกรมหาเลขสงสด
โปรแกรมท 8.3 จงเขยนผงงานและโปรแกรมตดเกรดของนกเรยนโดยใหปอนคะแนนสอบเขาไปจากนนใหแสดงเกรดออกมา โดยเงอนไขของเกณฑการตดเกรดเปนดงน คะแนนตงแต 80 ขนไป ไดเกรด “A” คะแนนตงแต 70 ขนไป ไดเกรด “B” คะแนนตงแต 60 ขนไป ไดเกรด “C” คะแนนตงแต 50 ขนไป ไดเกรด “D” คะแนนตากวา 50 ไดเกรด “F”
#include <stdio.h> #include <conio.h> main() int A, B; printf(“INPUT A : “); scanf(“%d”,&A); printf(“INPUT B : “); scanf(“%d”,&B); if (A > B) printf(“ %d is larger”, A); else printf(“%d is larger” , B); getch();
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 103 of 229
7
วธทา จากปญหานสามารถนาการตรวจสอบเงอนไขแบบสองทางมาซอนกนใหเปนการเลอกทาแบบหลายทาง
ได ซงเขยนเปนผงงานไดดงรปท 8.4
เรมตน
รบคาคะแนนX
Grade = ‘A’
X >= 80
X >= 70
Grade = ‘B’X >= 60
X >= 50 Grade = ‘C’
Grade = ‘D’
Grade = ‘F’
แสดงผลGrade
จบ
จรง
จรง
จรง
จรง
เทจ
เทจ
เทจ
เทจ
รปท 8.4 ผงงานของโปรแกรมตดเกรดโดยการนาการเลอกทาแบบสองทางมาซอนกน
การเลอกทาในลกษณะนสามารถนาการเลอกทาแบบทางเดยวมาใชได แตตองเปลยนเงอนไขของการตดสนใจเปนการประมวลผลในลกษณะตอไปน ถาคะแนนตงแต 80 ขนไป ไดเกรด “A” ถาคะแนนตงแต 70 ขนไป แตนอยกวา 80 ไดเกรด “B” ถาคะแนนตงแต 60 ขนไป แตนอยกวา 70 ไดเกรด “C” ถาคะแนนตงแต 50 ขนไป แตนอยกวา 60 ไดเกรด “D” ถาคะแนนไมถง 50 ไดเกรด “F” ดงนนสามารถนาการเลอกทาแบบทางเดยวมาเขยนผงงานและโปรแกรมไดดงรปท 8.5
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 104 of 229
8
เรมตน
รบคาคะแนนX
Grade = ‘A’X >= 80
X >= 70 และX<80 Grade = ‘B’
X >= 60 และX<70
X >= 50 และX<60
Grade = ‘C’
Grade = ‘D’
Grade = ‘F’
แสดงผลGrade
จบ
จรง
จรง
จรง
จรง
เทจ
เทจ
เทจ
เทจ
รปท 8.5 การตดเกรดโดยใชการเลอกทาแบบทางเดยว
#include <stdio.h> #include <conio.h> main() int x; char Grade; printf(“Input Score “); scanf(“%d”,&x); if (x >= 80) Grade = 'A'; if ((x >= 70)&&(X < 80)) Grade = 'B'; if ((x >= 60)&&(x < 70)) Grade = 'C'; if ((x >= 50)&&(X < 60)) Grade = 'D'; if (X < 50) Grade = 'F'; printf(“Grade = %c”,Grade); getch();
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 105 of 229
9
8.3 การเขยนผงงานจากซโดโคดแบบมทางเลอก ผงงานนอกจากจะเขยนขนมาจากการวเคราะหปญหาแลวยงเขยนขนมาจากซโดโคดไดเชนกน สาหรบกรณทโปรแกรมเปนแบบมทางเลอก ใหพยายามแยกประโยค IF ออกมาเปนกลม ๆ แลวพจารณาวาถาเงอนไขเปนจรงจะทาทศทางใด เงอนไขเปนเทจจะทาทศทางใด
รปท 8.6 ซโดโคดและผงงานแบบเลอกทา
จากรปท 8.6 จะเหนวาการตรวจสอบเงอนไขหลงคาวา IF จะนาไปเขยนในสเหลยมขนมเปยกปน และนาชดคาสงทเปนจรงมาเขยนในสญลกษณการประมวลผลเมอเปนจรง นาชดคาสงหลง ELSE มาเขยนใน
สญลกษณการประมวลผลเมอเปนเทจ สาหรบโปรแกรมทมเงอนไขการเลอกทาซอนกนกใชวธการแยกประโยค IF ออกมาเปนกลมในลกษณะเดยวกน
ตวอยางท 8.2 รานคาแหงหนงตองการพฒนาโปรแกรมคอมพวเตอรเพอจายคาตอบแทนกบพนกงานขาย โดยถาหากเปนพนกงานประจาจะจายเปนเงนเดอนปกต ถาหากเปนพนกงานททางานเปนชวโมงจะจายเปนรายชวโมง แตถาหากทางานเกน 40 ชวโมง จานวนชวโมงทเกนจะไดคาแรงเปน 1.5 เทาของอตราปกต จงเขยนซโดโคดและผงงานของโปรแกรมน
วธทา สงทตองการ คาตอบแทนพนกงาน ขอมลเขา ประเภทของพนกงาน (PayType), จานวนชวโมง (Hours) วธประมวลผล วธการประมวลผลในสวนของการคานวณคาตอบแทนเปนดงน
1. ตรวจสอบวาเปนพนกงานประเภททาเปนชวโมงหรอไม 2. ถาเปนประเภททางานเปนรายชวโมง ตรวจสอบวาทาเกน 40 ชวโมงหรอไม 3. ถาทางานเกน 40 ชวโมง
คาตอบแทน = คาตอบแทน 40 ชวโมง + 1.5 เทาของชวโมงทเกน 4. ถาทางานไมเกน 40 ชวโมง ไดคาตอบแทนเปนรายชวโมง 5. ถาไมใชพนกงานททางานเปนชวโมงใหไดเงนเดอนปกต
IF <Condition> THEN <ชดคาสงทเปนจรง > ELSE <ชดคาสงทเปนเทจ > ENDIF
T
F
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 106 of 229
10
การประมวลผลจะเปนแบบมการเลอกทาซอนกน ดงนนควรเขยนเงอนในภายในกอน
IF Hours > 40 THEN Pay = Rate * (40 +1.5 *(Hours - 40)) ELSE Pay = Rate * Hours รปท 8.7 การเขยนซโดโคดและผงงานเงอนไขภายใน
ถาหากเขยนเปนซโดโคดของการประมวลผลทงหมด กเขยนเงอนไขภายนอกเพมเขาไปจะไดดงน
IF PayType = “Hourly” THEN IF Hours > 40 THEN Pay = Rate * (40 + 1.5 * (Hours – 40)) ELSE Pay = Rate * Hours ENDIF ELSE Pay = Salary ENDIF
จากซโดโคดทเขยนขน และแบงสวนทเปนจรงและเปนเทจของประโยค IF..THEN..ELSE เมอเขยนเปนผงงานใหแทนสญลกษณของการตดสนใจในตาแหนงของคาวา “IF” และเขยนประโยคการตดสนใจไวภายในสญลกษณ จะไดผงงานดงรปท 8.8
T
F
T
F
A
IFHours > 40
Pay =Rate * Hours
Pay = Rate *(40 + 1.5 *
(Hours – 40))
B
TF
T
F
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 107 of 229
11
รปท 8.8 ผงงานในสวนของการคานวณคาตอบแทน
งานแบบมทางเลอกบางประเภทสามารถเขยนซโดโคดหรอเขยนผงงานไดทงแบบยาวโดยตรวจสอบ
เงอนไขไปเรอย ๆ และแบบมเงอนไขซอนกนดงตวอยางท 9.6 ตวอยางท 8.3 การแสดงคอนเสรตรายการหนงจะขายบตรชมคอนเสรตทมราคาตางกน โดยมราคาชารตเพมตามอายผชมดงน
อาย Charge (%) Age < 16 7 Age >= 16 และ Age <65 10 Age >= 65 5
จงเขยนซโดโดดและเขยนผงงานจากซโดโคดของปญหาน
วธทา สามารถนาการเลอกทาแบบทางเดยวมาใชได และใหแยกการเลอกทาเปนสวน ๆ จะไดสวนของโปรแกรมดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 108 of 229
12
A
IFAge < 16
IFAge >= 16
ANDAge < 65
Charge = 7
Charge = 10
IFAge >= 65
B
Charge = 5
T
T
T
รปท 8.9 ซโดโคดและผงงานของสวนของโปรแกรมปญหาการคดราคาตว
นอกจากนปญหาในขอน สามารถเขยนซโดโคดและผงงานแบบมการเลอกทาซอนกนไดดงน
IF Age < 16 THEN Charge = 7 ELSE IF Age < 65 THEN Charge = 10 ELSE Charge = 5 ENDIF ENDIF
IF Age < 16 THEN Charge = 7 ENDIF IF Age >= 16 AND Age < 65 THEN Charge = 10 ENDIF IF Age >= 65 THEN Charge = 5 ENDIF
T
T
T
T
F
T
F
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 109 of 229
13
หากตองการเขยนผงงานกทาโดยนาสญลกษณการเลอกทามาแทนคาวา “IF” และเขยนเงอนไขการเลอกทาลงไปในสญลกษณ จะไดดงรปท 8.10
รปท 8.10 ผงงานทเขยนจากซโดโคดขางบน
จากตวอยางท 8.3 ถาหากพจารณาการทางานของโปรแกรมจะพบวา ถาหากผซอบตรมอายมากกวา 65 ป การเขยนโปรแกรมในแบบแรกนนโปรแกรมจะตองตรวจสอบเงอนไข 3 ครง หรอตรวจสอบ 3 เงอนไข แตถาหากเขยนโปรแกรมทการเลอกทาแบบซอน การตรวจสอบเงอนไขจะทา 2 เงอนไขเทานน ทาใหในกรณนการเขยนโปรแกรมทเลอกทาแบบซอนโปรแกรมจะทางานไดเรวกวา สาหรบปญหาในตวอยางท 8.3 จะไมมผลตอประสทธภาพของโปรแกรมมากนก เนองจากในการขายตวผซอจะมาซอครงละไมกใบ แตถาหากตองการประมวลผลกบขอมลจานวนมากการออกแบบโปรแกรมควรจะพจารณาถงลาดบการตรวจสอบเงอนไขดวย ตวอยางเชน ถาหากมแฟมขอมลพนกงานประกอบดวยขอมลจานวน 1000 เรคอรด โดยขอมลทเกบอยมลกษณะดงตอไปน
ลกษณะของขอมล จานวน รอยละ เพศชาย 600 60 เพศหญง 400 40 อายมากกวา 30 ป 200 20 อายนอยกวา 30 ป 800 80
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 110 of 229
14
จากปญหาดงกลาวถาหากตองการเขยนโปรแกรมสาหรบคนหาพนกงานทเปนผหญง ทมอายมากกวา 30 ป โดยใหโปรแกรมอานขอมลทงหมดขนมา 1000 เรคอรด โดยมการประมวลผลดงน จากขอมลในตารางเบองตนจะเหนวา ถาหากใหโปรแกรมตรวจสอบเงอนไขทเปนเพศกอนวาเปนผหญงหรอไมแลวจงเปรยบเทยบอาย จะพบวาโปรแกรมจะตรวจสอบเงอนไขทงหมด 1400 ครง แตถาหากใหโปรแกรมทางานตรวจสอบอายกอน ดงวธการตอไปน จะเหนวาถาหากเปลยนเงอนไขการตรวจสอบ จะทาใหจานวนครงในการตรวจสอบเงอนไขลดลงเหลอ 1200 ครง ซงทาใหประสทธภาพของโปรแกรมดกวากรณแรก ดงนนในการออกแบบโปรแกรมทมการตรวจสอบเงอนไขหลาย ๆ อยาง ผเขยนโปรแกรมควรพจารณาถงเงอนไขกอนหลงในการใชคาสงตดสนใจเลอกทาในแตละครงดวย
ปญหาการสลบคา ตวอยางปญหาหนงทนาการเขยนโปรแกรมแบบตดสนใจมาใช เชน ปญหาการเรยงลาดบขอมล ซง
จะตองนาขอมลมาเปรยบเทยบและสลบคาขอมลตามเงอนไขทกาหนด ตวอยางเชนถามตวแปร X และ Y เกบคาตวเลขสองคา และตองการออกแบบโปรแกรมให X เกบคามาก และตวแปร Y เกบคานอย อยางเชนถามคาดงตอไปน
Sex = ‘F’
age > 30
เทจ
เทจ
จรง
จรง
1000 ครง
400 ครง
age > 30
sex = ‘F’
เทจ
เทจ
จรง
จรง
1000 ครง
200 ครง
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 111 of 229
15
X Y X Y เรมตน 4 6 เปลยนเปน 6 4
X Y เรมตน 8 0 ไมตองเปลยนเนองจาก X เกบคามากอยแลว
X Y เรมตน 6 6 ไมตองเปลยนเนองจากตวแปรทงสองมคาเทากน
จากปญหานสามารถนาการเลอกทาแบบ IF-THEN-ELSE-ENDIF มาใชได แตจะตองวางแผนการเขยนโปรแกรมใหดในการสลบคา ตวอยางเชน ถา X เกบคา 14 และ Y เกบคา 20 แลวใชวธการประมวลผลดงตอไปน
X Y คาเรมตน 14 20 สลบคา Y ไปเกบใน X 20 20 สลบคา X ไปเกบใน Y 20 20
จะพบวาหลงการสลบคาผลลพธทไดจะไมถกตอง เนองจากขอมลทงสองตวทบกนมคาเปน 20 ทงค แตถาหากสลบวธการสลบคาดงตอไปน
X Y คาเรมตน 14 20 สลบคา X ไปเกบใน Y 14 14 สลบคา Y ไปเกบใน X 14 14
คาผลลพธกจะไมถกตองเชนกน แมวาเปลยนวธการสลบคาแลว ผลลพธจะไมเหมอนกน แตคาทไดกไมถกตอง ปญหานจะตองสรางตวแปรพเศษขนมาตวหนง เพอเปนทพกขอมลในการสลบคา สมมตวาใหตวแปรนนชอวา TEMP ปญหานจะออกแบบวธการประมวลผลไดดงน
X Y TEMP คาเรมตน 14 20 - ยาย X ไปเกบใน TEMP 14 20 14 ยาย Y ไปเกบใน X 20 20 14 ยาย TEMP ไปเกบใน Y 20 14 14
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 112 of 229
16
จะทาใหตวแปร X เกบคาทมากกวาไดถกตอง สาหรบวธการสลบขอมลระหวางตวแปรสองตวนเรยกวา swap วธการแกปญหานสามารถเขยนเปนซโดโคดโดยใชการเลอกทาแบบทางเดยวไดดงน IF X < Y THEN MOVE X TO TEMP MOVE Y TO X MOVE TEMP TO Y ENDIF
ตวอยางท 8.4 ถาหากตองการรบตวอกขระจานวนสามตว จากนนใหแสดงตวอกขระเรยงตามรหสแอสกแลวแสดงออกทางจอภาพ จงเขยนซโดโคดของการแกปญหาน พรอมทงแสดงวธการตรวจสอบคาตอบ
วธทา ตองการอะไร เรยงลาดบตวอกขระจานวนสามตวตามรหสแอสก ตองการเอาตพตอยางไร แสดงตวอกขระทงสามตวเรยงกนทางจอภาพ ขอมลเขา ตวอกขระจานวนสามตว (char_1, char_2, char_3) วธการประมวลผล จบคอกขระทละสองตวแลวนามาเปรยบเทยบกน ถาตวแรกมรหสแอสกมากกวาตวทสองจรง ใหสลบระหวางตวแรกกบตวทสอง การสลบคาขอมลนเรยกวา swap สามารถเขยนขนตอนไดดงน โดยประกาศตวแปรทพกขอมล (temp) ขนมา
temp char_1 char_1 = char_2 char_2 = temp ดงนนจะเขยนซโดโคดในสวนของการรบขอมลแลวเรยงลาดบของปญหานไดดงน
1. READ char_1, char_2, char_3 2. IF char_1 > char_2 THEN
temp = char_1 char_1 = char_2 char_2 = temp ENDIF
3. IF char_2 > char_3 THEN temp = char_2 char_2 = char_3 char_3 = temp ENDIF
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 113 of 229
17
4. IF char_1 > char_2 THEN temp = char_1 char_1 = char_2 char_2 = temp ENDIF 5. PRINT To The screen char_1, char_2, char_3 สาหรบการตรวจสอบความถกตองของขนตอนการทางานสามารถทาโดยการสมมตคาตวแปรขน
มาแลวทดลองแทนคาดงขนตอนตอไปน 1. สรางตวเลขทดสอบทางอนพต
ตวแปร ขอมลชดแรก ขอมลชดทสอง char_1 K z char_2 B s char_3 G a
2. ลองคดคาตอบการประมวลผลดวยตนเอง
ตวแปร ขอมลชดแรก ขอมลชดทสอง char_1 B a char_2 G s char_3 K z
3. สรางตารางขนมาแสดงการทางานและดคาตวแปรทละขนตอน
ขนตอน char_1 char_2 char_3 Temp ขอมลชดแรก
1 k B g 2 b K k 3 G k k 4 5 แสดงผล แสดงผล แสดงผล
ขอมลชดทสอง 1 z S a 2 s Z z 3 A z z 4 a S 5 แสดงผล แสดงผล แสดงผล
4. จะพบวาการแสดงผลในตารางในขอ 3 จะตรงกบตารางในขอ 2 ดงนนวธการนทาได
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 114 of 229
18
ตวอยางท 8.5 รานคาแหงหนงจาหนายอปกรณไฟฟา สามารถใชลกคาเลอกวธการชาระเงนได 2 วธโดยแตละวธจะทาใหราคาสนคาไมเทากนดงน 1. ซอดวยเงนสด มสวนลด 5% จากราคาสนคา 2. ซอแบบผอนชาระ จะคดคาดอกเบย 2% ตอเดอน โดยทลกคาสามารถเลอกจานวนเดอนสาหรบการผอนชาระได จงเขยนขนตอนการทางานในลกษณะขอความ และผงงานสาหรบการแกปญหาน
วธทา จากโจทยสามารถวเคราะหปญหาไดดงน ตองการอะไร คานวณราคาสนคาทตองชาระหรอราคาทผอนเปนรายเดอน ตองการเอาตพตอยางไร ราคาสนคาทตองชาระทางจอภาพ ขอมลเขา ราคาสนคา(Price), วธการชาระเงน(choice), จานวนเดอนทผอน วธการประมวลผล ถาเลอกวธท 1 จานวนเงนทตองชาระคอราคาสนคาลบดวยสวนลด 5% ถาเลอกวธท 2 จานวนเงนทตองชาระรายเดอนคอราคาสนคารวมดอกเบยแลว หารดวยจานวนเดอน โดยทดอกเบยหาไดจาก จานวนเดอน(Month) x ราคาสนคา(Price) x 2%
ดงนนขนตอนการทางานในลกษณะขอความสามารถเขยนไดดงน
1. เรมตน 2. รบคาราคาสนคา (Price) 3. รบวธการชาระเงน (Choice) 4. ถา Choice = 1 แลว
4.1 จานวนเงนทตองชาระ = Price – (Price *(5/100)) มฉะนน
4.2 รบจานวนเดอน (Month) 4.3 ภาษ = Price x Month x (2/100) 4.4 จานวนเงนทตองชาระ = (Price + ภาษ) / Month
5. แสดงผลจานวนเงนทตองชาระทางจอภาพ 6. จบ
สาหรบผงงานของปญหานเขยนไดดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 115 of 229
19
เรมตน
รบคา Price
Choice = 1
แสดงผลจานวนเงน
จบ
จรง
เทจ
รบคา Choice
จานวนเงน = Price – (Price x (5/100) )
รบคา Month
ดอกเบย = Price x (2/100) x Month
จานวนเงน = (Price + ดอกเบย)/Month
รปท 8.11 ผงงานของปญหาในตวอยางท 8.5
8.4 การทางานแบบมทางเลอกหลายทาง สาหรบการทางานทมทางเลอกหลายทางนนสามารถเขยนประโยค IF..THEN..ELSE มาซอนกนได แตถาหากมทางเลอกมากขนจะทาใหการเขยนแบบ IF ดแลวซบซอนและไมคอยสะดวก ดงนนจงมการนาคาวา “CASE”, “OF” และ “ENDCASE” มาใช พจารณารปท 8.12
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 116 of 229
20
CASE = ?
กจกรรม กจกรรม กจกรรม กจกรรม
NO case
Case 1 Case 2 Case3 Case 4
รปท 8.12 ตวอยางการเลอกทาแบบหลายทาง
เมอการทางานของระบบเขาสเงอนไขการเลอกทา ระบบจะตรวจสอบวาคาคงททไดจากการตรวจสอบ
เงอนไข (CASE)นน ถาหากทราบวามคาเทากบคาคงทหรอ CASE ใด กจะกระโดดไปทากจกรรมทอยใน CASE นน แตถาหากไมเทากบ CASE ใดเลยกจะตรวจสอบ CASE ใหม หรอกไมทากจกรรมใดเลย
ตวอยางท 8.6 การจายคาจางพนกงานของรานคาแหงหนง เมอถงวนจายคาแรงฝายการเงนจะคยรหสของพนกงานเขาไป โดยรหสและวธการจายคาแรงเปนดงน รหส อตราคาแรง H จายเปนอตราชวโมง P จายเปนรายการทขายได C จายเปนอตราคา Commission S จายเปนเงนเดอน ถาให Rate เปนคาจางรายชวโมงและตามรายการทขายได Sales เปนอตราทขายตาม Commission Salary เปนอตราเงนเดอน จงเขยนซโดโคดและผงงานของสวนการคานวณอตราคาจางพนกงาน
วธทา กรณนเปนการเลอกทาแบบหลายทาง สามารถนาคาวา CASE มาใชได โดยไดดงน 1. CASE code OF “H” : Pay = Rate * Hours “P” : Pay = Rate * Pieces
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 117 of 229
21
“C” : Pay = Commission “S” : Pay = Salary ENDCASE 2. EXIT
โดย code เปนรหสทปอนเขาไป ถาหากเทากบคาคงททเปนรหสตวใดกจะไปคานวณคาจางตามทกาหนดหลงคาคงทนน ถาหากเขยนเปนผงงานจะไดดงรปท 8.13
รบคารหสcode
CASE ofcode
Pay = Rate * Hours
Pay = Rate * Pieces
Pay = Commission * Sales
Pay = Salary
= “H” = “P” = “C” = “S”
รปท 8.13 ผงงานสวนของการคานวณคาจางพนกงาน
ขนตอนตอไปถาหากตองการพฒนาเปนโปรแกรมจะตองทราบวาโปรแกรมภาษาทใช จะใชคาสงหรอฟงกชนใดมาใชกบกรณการเลอกทาแบบน สาหรบการเขยนโปรแกรมดวยภาษาซ การเลอกทาในลกษณะนจะใชคาสง switch .. case ซงมรปแบบคาสงดงน
switch (variable) case constant_1 : statement; break; case constant_2 : statement; break; case constant_3 : statement; break; ……………. …….
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 118 of 229
22
case constant_n : statement; break;
default : statement; คาสง switch นจะนาคาใน variable มาตรวจสอบวาเทากบคาคงทคาใดหลง case จากนนโปรแกรมจะไปทา statement หลงคาคงทตวนน และออกจาก switch เมอถงคาสง break แตถาไมเทาคาคงทคาใดเลยโปรแกรมจะไปทา statement หลง default สาหรบคาทใชตรวจสอบจะเปนตวแปร นพจน หรอฟงกชนกได สาหรบในแตละ case สามารถมคาสงไดมากกวาหนงคาสงหรออาจไมมกได โดยถาไมมคาสงโปรแกรมจะไปทางานใน case ถดไป และคาคงทหลง case จะตองเปน int หรอ char เทานน
NOTE การใชคาสง switch มสงสาคญทควรร 4 ประการคอ
1. คาสง switch ตางจากคาสง if ตรงท switch สามารถทดสอบเงอนไขไดหลายอยาง แตคาสง if จะตรวจสอบเฉพาะความสมพนธ หรอลอจกเทานน
2. คาคงทของคาสง switch สามารถมคาซ ากนได 3. ถาคาคงทเปนตวอกษร คาสง switch จะมองเปนเลขจานวนเตม 4. คา default จะมหรอไมมกได
ตวอยางเชนการเขยนคาสงตอไปน
switch (year) case 1 : printf(“Fershman\n”); break; case 2 : printf(“Sophomore\n”); break; case 3 : printf(“Junior \n”); break; case 4 : printf(“Senior\n”); break; default : printf(“Nonmatriculated\n”); จากชดคาสงทผานมา ถาหากคาใน year มคาเทากบ 1 คอมพวเตอรจะพมพคาวา Freshman ถาหากมคาเทากบ 3 จะพมพคาวา Junior แตถาหากไมเทากบ 1,2,3,4 จะพมพคาวาNonmatriculated เราอาจสรปไดวาคาสง switch นจะนาคาในตวแปร selector ไปเปรยบเทยบกบคาคงทคาตาง ๆ ถาเทากบคาคงทคาใดโปรแกรมจะไปทาคาสงหรอชดคาสงทอยหลงคาคงทนน แตถาไมเทากบคาคงทคาใดเลย โปรแกรมจะทาคาสงทอยตอจาก default
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 119 of 229
23
สาหรบตวแปรทใชเลอกทาทอยตามหลง switch จะตองเปนตวแปรประเภทลาดบ ซงจะทาให
คอมพวเตอรสามารถเดาคาได และคาคงทตองเปนตวแปรประเภทเดยวกบตวแปรทตามหลง case การทางานของคาสง case อาจะเขยนเปนผงงานไดดงน
รปท 8.14 การทางานของคาสง switch..case
ตวอยาง ถาหากตวแปร num เปนเลขจานวนเตม การกาหนดคาหลง case ในคาสง switch เชน switch(num) case 4 : ชดคาสง; break; /* ถกตองเพราะเปนตวเลข */ case 2.5 : ชดคาสง; break; /*ไมถกตองเพราะเปนทศนยม */ case m : ชดคาสง; break; /*ไมถกตองเพราะเปนตวแปร */ case ‘2’ : ชดคาสง; break; /*ไมถกตองเพราะเปนตวอกขระ */ default : ชดคาสง
selector = const 1
selector = const 2
selector = const 3
selector = const n
จรงชดคาสง 1
จรงชดคาสง 2
จรงชดคาสง 3
จรงชดคาสง n
default
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 120 of 229
24
8.5 กรณศกษาการทางานแบบมแบบมทางเลอก สาหรบในหวขอนจะแสดงตวอยางงานทมการทางานแบบเลอกทาเพอเปนแนวทางในการเขยน
โปรแกรมตอไป โปรแกรมท 8.4 จงเขยนโปรแกรมรบเลขจานวนเตมทางแลวใหคอมพวเตอรแสดงคาสมบรณของเลขนนออกมา วธทา จากการวเคราะหปญหาของโจทยจะพบวาขอมลอนพตคอตวเลขจานวนเตม เอาตพตกเปนเลขจานวนเตมทเปนคาสมบรณของเลขนน สาหรบวธการประมวลผลทาโดยตรวจสอบวาเลขทรบเขามานนมคามากกวา 0 หรอไม ถามากกวาใหแสดงเลขนน ถานอยกวาใหทาเปนคาบวกโดยนาคา -1 ไปคณ จากปญหานจะเปนการเลอกทาแบบทางเดยว ซงสามารถเขยนผงงานและโปรแกรมภาษาซไดดงรปท 8.15
เรมตน
รบคาตวเลขX
X < 0
X = X * (-1)
แสดงผลX
จบ
จรง
เทจ
รปท 8.15 ผงงานและโปรแกรมหาคาสมบรณของตวเลข
#include “stdio.h” #include “conio.h” main() printf(“INPUT X : “); scanf(“%d”,&x); if (x < 0) x = x * -1; printf(“%d\n”,x); getch();
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 121 of 229
25
โปรแกรมท 8.5 จงเขยนโปรแกรมรบตวเลขสองคา จากนนใหแสดงคาทมากกวาทางจอภาพ วธทา อนพต รบคาตวเลขสองคา A และ B เอาตพต แสดงคาตวเลขทมากกวาทางจอภาพ วธการประมวลผล นาตวเลข A และ B มาเปรยบเทยบ ถา A > B แลว แสดงผลคา A มฉะนน แสดงผลคา B จากปญหานจะเปนการเลอกทาแบบสองทศทาง การตรวจสอบเงอนไขทาโดยนาตวเลขสองตวมาเปรยบเทยบกน สามารถเขยนเปนผงงานและโปรแกรมไดดงรปท 8.16
รปท 8.16 ผงงานและโปรแกรมหาเลขสงสด
#include “stdio.h” #include “conio.h” main() int A, B; printf(“INPUT A : “); scanf(“%d”,&A); printf(“INPUT B : “); scanf(“%d”,&B); if (A > B) printf(“A, is larger”) else printf(“B, is larger”); getch();
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 122 of 229
26
โปรแกรมท 8.6 จงเขยนผงงานและโปรแกรมตดเกรดของนกเรยนโดยใหปอนคะแนนสอบเขาไปจากนนใหแสดงเกรดออกมา โดยเงอนไขของเกณฑการตดเกรดเปนดงน คะแนนตงแต 80 ขนไป ไดเกรด “A” คะแนนตงแต 70 ขนไป ไดเกรด “B” คะแนนตงแต 60 ขนไป ไดเกรด “C” คะแนนตงแต 50 ขนไป ไดเกรด “D” คะแนนตากวา 50 ไดเกรด “F” วธทา จากปญหานสามารถนาการตรวจสอบเงอนไขแบบสองทางมาซอนกนใหเปนการเลอกทาแบบหลายทาง
ได ซงเขยนเปนผงงานไดดงรปท 8.17
เรมตน
รบคาคะแนนX
Grade = ‘A’
X >= 80
X >= 70
Grade = ‘B’X >= 60
X >= 50 Grade = ‘C’
Grade = ‘D’
Grade = ‘F’
แสดงผลGrade
จบ
จรง
จรง
จรง
จรง
เทจ
เทจ
เทจ
เทจ
รปท 8.17 ผงงานของโปรแกรมตดเกรดโดยการนาการเลอกทาแบบสองทางมาซอนกน
การเลอกทาในลกษณะนสามารถนาการเลอกทาแบบทางเดยวมาใชได แตตองเปลยนเงอนไขของการตดสนใจเปนการประมวลผลในลกษณะตอไปน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 123 of 229
27
ถาคะแนนตงแต 80 ขนไป ไดเกรด “A” ถาคะแนนตงแต 70 ขนไป แตนอยกวา 80 ไดเกรด “B” ถาคะแนนตงแต 60 ขนไป แตนอยกวา 70 ไดเกรด “C” ถาคะแนนตงแต 50 ขนไป แตนอยกวา 60 ไดเกรด “D” ถาคะแนนไมถง 50 ไดเกรด “F” ดงนนสามารถนาการเลอกทาแบบทางเดยวมาเขยนผงงานและโปรแกรมไดดงรปท 8.18
เรมตน
รบคาคะแนนX
Grade = ‘A’X >= 80
X >= 70 และX<80 Grade = ‘B’
X >= 60 และX<70
X >= 50 และX<60
Grade = ‘C’
Grade = ‘D’
Grade = ‘F’
แสดงผลGrade
จบ
จรง
จรง
จรง
จรง
เทจ
เทจ
เทจ
เทจ
รปท 8.18 การตดเกรดโดยใชการเลอกทาแบบทางเดยว
#include <stdio.h> #include <conio.h> main() int x; char Grade; printf(“Input Score “); scanf(“%d”,&x); if (x >= 80) Grade = 'A'; if ((x >= 70)&&(X < 80)) Grade = 'B'; if ((x >= 60)&&(x < 70)) Grade = 'C'; if ((x >= 50)&&(X < 60)) Grade = 'D'; if (X < 50) Grade = 'F'; printf(“Grade = %c”,Grade); getch();
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 124 of 229
28
แบบฝกหดทายบท ตอนท 1 จงเลอกคาตอบทถกตองทสดเพยงหนงขอ
1. สญลกษณของผงงานในขอใด จาเปนจะตองมอยในโครงสรางผงงานแบบมทางเลอก ก. การรบขอมล ข. การตดสนใจ ค. การแสดงผลขอมล ง. ถกทกขอ
2. การอธบายการทางานของโปรแกรมทมทางเลอกจะใชคาอธบายวาอะไร ก. ถา…แลว ข. เมอ…จะ ค. ถา…ดงนน ง. ทา…ถา
3. ถาหากในซโดโคดมการใชคาวา IF แตไมมคาวา ELSE ทานคดวาเปนการเลอกทาแบบใด ก. การเลอกวาชดคาสงทตามมาจะทาหรอไม ข. การเลอกทาทมสองทางเลอก ค. การเลอกทาทมสามทางเลอก ง. ถกทกขอ
4. สญลกษณการตดสนใจทนามาใชกบการทางานแบบมทางเลอกจะมลกษณะใด ก. มลกศรชเขาสองทศทาง ชออกทางเดยว ข. มลกศรชเขาสองทศทาง ชออกสองทศทาง ค. มลกศรชเขาทศทางเดยว ชออกทศทางเดยว ง. มลกศรชเขาทศทางเดยว ชออกสองทศทาง
5. ในการเขยนซโดโคดแบบการทางานทมทางเลอก ขนตอนวธทอยตอจากคาวา IF คอขนตอนแบบใด
ก. การตรวจสอบเงอนไข ข. การคานวณ ค. การรบคาอนพต ง. การพสจน
6. ขอใดถกตองสาหรบการเขยนซโดโคดสาหรบงานทมหลายทางเลอก ก. ใชคาวา “IF” ,”THEN”,”ELSE มาซอน ๆ กน ข. คานาวา “CASE” มาใช ค. เขยน “IF”,”THEN” หลาย ๆ ครง ง. ถกทกขอ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 125 of 229
29
จากผงงานตอไปนใชตอบคาถามขอ 7 ถงขอ 10
START
READ A, B
A >= B
A = A + B B = A * B
PRINT B
END
YN
7. จากผงงานดงรปในสวนของการทางานแบบมทางเลอกจะเปนการทางานลกษณะใด
ก. การเลอกวาการประมวลผลทตามมาจะทาหรอไม ข. การเลอกทาแบบสองทางเลอก ค. การเลอกทาถาผลลพธเปนเทจ ง. การเลอกทาถาผลลพธเปนจรง
8. ถาหากเงอนไขในการตรวจสอบเงอนไขเปนจรง การทางานจะเปนในลกษณะใด ก. คานวณคา B เทากบ A คณกบ B ข. คานวณคา A เทากบ A บวกกบ B ค. แสดงผลคาในตวแปร B ง. มขอถกมากกวาหนงขอ
9. ถาหากรบคา A เทากบ 3 และรบคา B เทากบ 2 ขอใดถกตอง ก. การตรวจสอบเงอนไขจะเปนจรง ข. ตวแปร A มคาเทากบ 5 ค. ระบบจะแสดงผลคา 2 ง. ถกทกขอ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 126 of 229
30
10. จากขอ 9 การแสดงผลจะเปนอยางไร ก. แสดงผลคา 2 ออกทางจอภาพ ข. แสดงผลคา 2 ออกทางเครองพมพ ค. แสดงผลคา 6 ออกทางจอภาพ ง. แสดงผลคาตอบโดยไมระบประเภทเอาตพต
ตอนท 2 จงทาเครองหมาย หนาขอทถก และเครองหมาย หนาขอทผด ……. 1. โครงสรางการทางานแบบมทางเลอกจะตองมการตรวจสอบเงอนไขเสมอ ……. 2. การทางานแบบมทางเลอก เงอนไขจะเปนไดทงจรง เทจ หรอมทงสองกรณ ……. 3. การทางานแบบมทางเลอกระบบจะทาเงอนไขทเปนจรงกอนแลวจงทาเงอนไขทเปนเทจ ……. 4. การเขยนผงงานแบบมทางเลอก ไมจาเปนตองมขนตอนการทางานครบทงสองกรณ ……. 5. การเขยนคาอธบายการทางานแบบมทางเลอกจะตองมคาวา “และ” ประกอบอย ตอนท 3 จงตอบคาถามตอไปน
1. การทางานแบบมทางเลอกมลกษณะเปนอยางไร ……………………………………………………………………………………………… ……………………………………………………………………………………………… ………………………………………………………………………………………………. 2. จงเขยนผงงานตามคาอธบายโปรแกรมตอไปน
เรมตน รบคา X รบคา Y ถา Y มากกวา X แลว คานวณคา M มคาเทากบ X ยกกาลงสอง บวกกบ Y ยกกาลงสอง มฉะนน คานวณคา M มคาเทากบ X บวกกบ Y แสดงคาของ M ทางจอภาพ จบ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 127 of 229
31
3. จากขอ 2 ถาหาก X เทากบ 7 และ Y เทากบ 3 จอภาพจะแสดงผลคาใด ……………………………………………………………………………………………… ……………………………………………………………………………………………… 4. จงเขยนคาอธบายการทางาน และผงงานสาหรบคานวณเกรดของนกศกษา โดยใหปอน
คะแนนการบาน คะแนนสอบกลางภาค และคะแนนสอบปลายภาคเขาไป แลวใหระบบคานวณคะแนนรวมและเกรดพรอมทงแสดงออกทางจอภาพ โดยเงอนไขของเกรดเปนดงน
ไดคะแนน 0 ถง 49 ไดเกรด F ไดคะแนน 50 ถง 59 ไดเกรด D ไดคะแนน 60 ถง 69 ไดเกรด C ไดคะแนน 70 ถง 79 ไดเกรด B ไดคะแนน 80 ถง 100 ไดเกรด A
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 128 of 229
1
บทท 9 การทางานแบบมทาซา
การวนซ าหรอการทาเปนวงรอบคอการทางานอยางเดยวกนหรอซ า ๆ กนตามเงอนไขทกาหนด ซงการทางานแบบนคอมพวเตอรสามารถทาไดเปนอยางดและมความถกตองมากกวามนษย ในโปรแกรมหนง ๆ อาจมชดคาสงทตองทาซ าบอย ๆ การออกแบบคอมพวเตอรใหทางานอยางนถอวามความจาเปนสาหรบการเขยนโปรแกรม ในบทนจะกลาวถงลกษณะการทาซ า การเขยนคาอธบายการทางาน การเขยนซโดโคดและการเขยนผงงานของงานทมการทาซ า 9.1 ประเภทของการทาซาและคาสงภาษาซ การทางานแบบวนซ านนจะตองมการตรวจสอบเงอนไขอยภายในลปของการทาซ าดวย งานบางประเภทมจานวนครงในการทาซ าทแนนอน งานบางประเภทมจานวนครงในการทาซ าไมแนนอน ขนอยกบเงอนไขทเขยนในโปรแกรม ประเภทของการทาซ าจะแบงไดเปน 3 ประเภทดงน
1. การทาซ าแบบททราบจานวนครงในการทาซ า 2. การทาซ าจนระบบมเงอนไขอยางหนงจงหยด 3. การทาซ าแบบถาเงอนไขเปนจรงจะทาชดคาสง
รปท 9.1 ลกษณะของการทาคาสงซ า ๆ
การทาซ าแบบแรกนนมกจะใชกบงานททราบจานวนครงในการทาซ าทแนนอน โดยในลปจะมตวแปร
สาหรบควบคมการนบลปอยภายใน สวนการทาซ าแบบทาซ าจนระบบมเงอนไขอยางหนงจงหยด เมอโปรแกรมเขาสลปการทาซ าจะมการตรวจสอบเงอนไขทดานทายของลปถาหากเงอนไขเปนจรงกจะออกจากลปการทาซ า สวนการทาซ าแบบถาเงอนไขเปนจรงจะทาชดคาสง จะมการตรวจสอบเงอนไขกอนการทาซ าถาเงอนไขเปนจรงจะทาชดคาสงภายใน แตถาเงอนไขเปนเทจจะออกจากลปการทาซ า
A
Instruction
Instruction
IF<Condition(s)>
B
F
GoTo
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 129 of 229
2
คาสงการทาลปในภาษาซ การทางานซ าหรอการทาลปทง 3 ประเภททกลาวมานนในภาษาซจะมคาสงอย 3 ประเภท ดงน
คาสง for คาสงนจะทาซ าในลปโดยมการกาหนดคาเรมตน แลวตรวจสอบเงอนไข ถาเงอนไขเปนจรงจะทาในลปซ า
จนกวาเงอนไขจะเปนเทจ โดยทวไปจะใชคาสงนในการทางานซ า ๆ ททราบจานวนครงในการทาซ าแนนอน รปแบบของคาสงเปนดงน
for (initialization; condition; increment or decrement) คาสงตาง ๆ ในลป โดยท initialization เปนการกาหนดคาเรมตนใหกบตวแปรทใชตรวจสอบเงอนไข condition เปนนพจนทใชตรวจสอบเงอนไข increment เพมคาใหกบตวแปร decrement ลดคาใหกบตวแปร
ตวอยาง พจารณาสวนของการเขยนโปรแกรมตอไปน int i; /*ประกาศตวแปร I สาหรบเกบเลขจานวนเตม */ for ( i = 1; i <= 5; i++) printf(“%d “,i);
เมอโปรแกรมทางานจะกาหนดให i มคาเรมตนเปน 1 จากนนจะตรวจสอบวา i มคานอยกวาหรอเทากบ 5 จรงหรอไม ถาจรงจะทางานในลป คอพมพคาตวแปร i จากนนจะเพมคา I ขนหนงคา แลวกลบมาตรวจสอบเงอนไขอกครงหนง ถาหากเงอนไขเปนเทจจะออกนอกลป ทาใหการทางานของคาสงเปนการพมพตวเลข 1 2 3 4 5 ออกมาทางจอภาพ
คาสง do-while เปนคาสงทใชในการวนซ าทมจานวนครงไมแนนอน เมอโปรแกรมเขาสลปจะทาคาสงตาง ๆ ในลปกอน
หนงครง จากนนจะมการตรวจสอบเงอนไขอยดานทายลป ถาหากตรวจสอบเงอนไขแลวเปนจรงโปรแกรมจะทาในลปตอไป แตถาเงอนไขเปนเทจจะออกนอกลป รปแบบของคาสงเปนดงน
do คาสงตาง ๆ ในลป while (condition) โดยท condition เปนการตรวจสอบเงอนไขทายลป ถาหากเปนเทจจะออกจากลป
คาสง while เปนคาสงทจะตรวจสอบเงอนไขกอนทจะทาซ า ถาหากเงอนไขเปนจรงจะทาซ าในลป ถาหากเงอนไข
เปนเทจจะออกนอกลป การใชคาสงนโปรแกรมอาจไมทาในลปเลยกไดถาหากเงอนไขเปนเทจ รปแบบของคาสงเปนดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 130 of 229
3
while (condition) คาสงตาง ๆ ในลป
โดยท condition เปนการตรวจสอบเงอนไขกอนการทางานในลป
9.2 การทาซาแบบทราบจานวนครงในการทาซา การทาซ าในแบบนจะเรมตนดวยการกาหนดคาเรมตนใหกบตวแปรททาหนาทเปนตวควบคมลป จากนนจะตรวจสอบเงอนไขวาเปนจรงหรอเทจ ถาเปนจรงจะทากจกรรมตาง ๆ ทอยในลป แตถาเปนเทจจะออกนอกลป โดยภายในลปนนจะมการเพมคาหรอลดคาตวควบคมลปดวย ดงตวอยางในรปท 9.2
รปท 9.2 ผงงานและตวอยางลกษณะการทาซ าทมตวควบคม
ภายในลปของการทาซ าจะประกอบดวยชดคาสงทตอกนแบบลาดบกได หรอจะมหลาย ๆ คาสงกได การทาซ าประเภทนการอธบายการทางานจะใชคาวา “ในขณะท” และคาวา “ทา” เปนคาทใชอธบายการทางาน โดยมการตรวจสอบเงอนไขอยระหวางคาวา “ในขณะท” กบคาวา “ทา” ดงตวอยางในรปท 10.2
ตวอยางคาอธบายการพมพคาตวเลข 1 ถง 10
1. เรมตน 2. กาหนดให X = 1 3. ในขณะท X นอยกวาหรอเทากบ 10 ทา
พมพคา X ทางจอภาพ เพมคา X ขนหนงคา
4. ทาคาสงตอไป
เทจ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 131 of 229
4
สาหรบการเขยนซโดโคดจะใชคาวา “FOR”, “DO” และ “ENDFOR” โดยมรปแบบดงน FOR กาหนดรอบการทาซ า ชดคาสงทตองการทาซ า ENDFOR ตวอยางท 9.1 จงเขยนผงงานสาหรบหาผลบวกของเลขยกกาลงสอง ถาหากตวเลขเปนเลขจานวนเตมระหวาง 1 ถง 10 แลวแสดงผลบวกออกทางจอภาพ วธทา งานในลกษณะนจะทาจานวน 10 ครง ดงนนจะกาหนดให
sum เปนตวแปรสาหรบเกบผลรวม I เปนตวแปรทใชนบลป การทางานของโปรแกรมจะเขยนไดดงน
รปท 9.3 ผงงานและคาอธบายการทางานของตวอยางท 9.1
1. เรมตน 2. ให sum = 0 3. ให I = 1 4. ในขณะท I นอยกวาหรอเทากบ 10 ทา
4.1 sum เทากบ sum บวก I คณ I 4.2 เพม I ขนหนงคา
5. แสดงผล sum 6. จบ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 132 of 229
5
จากตวอยางท 9.1 จะพบวาการหาผลบวกนนจะตองกาหนดคาเรมตนสาหรบตวแปรเกบผลบวก (Sum) ใหมคาเปนศนยเสยกอน จากนนในลปจะนาคาจานวนนบ (I) มายกกาลงสองแลวเอามาบวกกบตวแปร sum น โดยใหตวแปร I เปนตวแปรควบคมลปไปดวย สาหรบการทาลปแตละครงจะตรวจสอบดวาคาตวแปร I มคาเกน 10 หรอยง ถาหากเกน 10 แลวใหออกจากลปแลวแสดงผล
โปรแกรมท 9.1 ถาหากตองการรบตวเลขจานวนเตมระหวาง 0 ถง 100 เขาไปจานวน 10 คา และใหระบบแสดงคาสงสดและคาตาสดออกมาทางจอภาพ จงวเคราะหงานของปญหาน พรอมทงเขยนผงงานและตวอยางโปรแกรมในภาษาซ
วธทา ตองการอะไร คาสงสด (Max), คาตาสด (Min) ตองการเอาตพตอยางไร แสดงคา Max และ Mix ทางจอภาพ ขอมลเขา รบขอมลเลขจานวนเตม 10 คาทางแปนพมพ วธการประมวลผล ใหตวแปร I เปนตวนบจานวนขอมล 10 คา กาหนดให Max = 0 และ Min = 100 ใหตวแปร x เปนคาขอมลทรบเขาทางแปนพมพ แลวใหเปรยบเทยบวาคานควรเปน Max หรอ Min จากลกษณะของงานจะตองมการใชคาสงเลอกทาอยในลปดวย เพอตรวจสอบวาคา x ทรบเขามาเปนคาสงสดหรอตาสด ซงสามารถนาการเลอกทาแบบทางเดยวมาใชได ดงนนสามารถเขยนคาอธบายการทาขนตอนการทางานไดดงน
1. เรมตน 2. กาหนดให I = 1 3. กาหนดให Max = 0, Min = 100; 4. ในขณะท I นอยกวาหรอเทากบ 10 ทา
4.1 รบคา x 4.2 ถา x นอยกวา Min แลวทา
Min = x 4.3 ถา x มากกวา Max แลวทา
Max = x 4.4 เพมคาตวนบ I
5. แสดงผลคา Max และ Min 6. จบการทางาน
การทางานภายในลป
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 133 of 229
6
I = 0
I <= 10
เพมตา I หนงคา
จรง
เทจ
เรมตน
Max = 0, Min = 100
แสดงคา Max, Min
จบ
รบคา x
X < Min
Min = X
X > Max
Max = X
จรง
จรง
เทจ
เทจ
รปท 9.4 ผงงานและโปรแกรมของปญหาการคาคาสงสดตาสดจากขอมล 10 คา สาหรบตวอยางและผลลพธในการรนโปรแกรมจะไดดงรปตอไปน
#include “stdio.h” #include “conio.h” main() int I, X, Max, Min; Max = 0; Min = 100; for(I = 1; I <= 10; I++) printf(“Input Num %d “,I); scanf(“%d”,&X); if (X < Min) Min = X; if (X > Max) Max = X; printf(“Max = %d, Min = %d\n”, Max, Min) getch();
โปรแกรมภาษาซ
ภายในลป
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 134 of 229
7
รปแสดงตวอยางและผลลพธในการรนโปรแกรมในตวอยาง
9.3 การทาซาจนระบบมเงอนไขอยางหนงจงหยด การทาซ าในลกษณะนเปนการทาซ าทมจานวนครงในการทาไมแนนอน เมอโปรแกรมเขาสลปการทาซ าจะมการตรวจสอบเงอนไขอยดานทายของลป ถาหากตรวจสอบเงอนไขแลวเปนเทจโปรแกรมจะกลบไปทากจกรรมในลปอกครงแตถาตรวจสอบเงอนไขแลวเปนจรงโปรแกรมจะออกนอกลป ดงนนโปรแกรมจะตองทากจกรรมตาง ๆ ภายลปหนงครงเสมอ การทางานในลกษณะนจะใชคาอธบายวา “จนกระทง” และตามดวยเงอนไขของการตรวจสอบ สวนซโดโคดทใชในการเขยนการทาซ าแบบนจะใชคาวา “REPEAT…UNTIL” หรอ “DO…UNTIL” กได การทาซ าในลกษณะนเขยนเปนผงงานไดดงรปท 9.5
รปท 9.5 ลกษณะการทาซ าทตรวจสอบเงอนไขหลงการทาลป
ขอมล 10 คาทปอนเขาไป
REPEAT ……………. ……………. ชดคาสงตาง ๆ ภายในลป ……………… ……………… UNTIL (ตรวจสอบเงอนไข)
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 135 of 229
8
การทาซ าลกษณะนภาษาซจะใชคาสง do..while ในการทาลป โดยรปแบบของคาสงเปนดงน
do statement; while(condition); ชดคาสงตาง ๆ ทจะทาซ าจะอยในเครองหมายปกกาหลง do สวน condition ทอยหลง while จะใชสาหรบตรวจสอบเงอนไข ถาหากเงอนไขเปนจรงจะทาในลป ถาเปนเทจจะออกนอกลป ตวอยางท 9.2 พจารณาการทาชดคาสงตอไปน int counter = 1; /*กาหนดตวแปร counter เทากบ 1 */ do printf(“%d “,counter); while(++counter <= 10); /*ทาในลปถา counter นอยกวา 10 จรง */ จากชดคาสงเรมแรกโปรแกรมจะพมพตวเลข 1 ออกมา จากนนจะเพมคาตวแปร counter ขนหนงคาแลวตรวจสอบวาคาตวแปรนยงนอยกวา 10 จรงอยหรอไม ถาจรงทาในลปอกครง ถาเปนเทจจะออกนอกลป ถาหากรนโปรแกรมผลลพธทไดจะเปนดงน 1 2 3 4 5 6 7 8 9 10
ตวอยางท 9.3 ถาหากตองการเขยนชดคาสงวนลปรบคาตวเลขทมคาเกน 100 ไปเรอย ๆ ถาหากตวเลขทปอนเขาไปมาคานอยกวา 100 ใหออกนอกลปจะเขยนชดคาสงไดดงน
int num; /* ประกาศตวแปร num สาหรบเกบขอมล */ do printf(“Input Number “); scanf(“%d”,&num); /*รบคาตวเลขมาเกบในตวแปร num */ printf(“/n”); /*ขนบรรทดใหม */ while(num > 100); /*ตรวจสอบวา num มคามากกวา 100 หรอไม */
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 136 of 229
9
โปรแกรมท 9.2 ถาหากตองการใหระบบคอมพวเตอรรบคาตวเลขจานวนเตมเขาไปทละคา แลวนาตวเลขมารวมกนจนกระทงปอนตวเลขเปน 0 ใหหยดรบคาและแสดงผลรวมออกมาทางจอภาพ จงวเคราะหปญหาน พรอมทงเขยนผงงาน ซโดโคดและโปรแกรมตวอยางภาษาซ
วธทา ตองการอะไร หาคาผลรวมของตวเลข ตองการเอาตพตอยางไร แสดงผลรวมทางจอภาพ ขอมลเขา รบตวเลขทละคา ถาตวเลขเปน 0 ใหจบโปรแกรม วธการประมวลผล ตองประกาศตวแปรหนงตว (sum) สาหรบเกบผลรวม โดยเรมตนใหตวแปรนมคาเปน 0 รบขอมล(x) เขามาทละคาแลวเอาไปรวมกบ sum ถาหาก x เปน 0 ใหแสดงผลรวมแลวออกจากโปรแกรม
การทาซ าแบบนจะไมทราบจานวนครงในการทาซ าทแนนอน โดยจะทาไปเรอย ๆ จนกวาขอมลทรบเขาไปจะเปน 0 ดงนนสามารถเขยนคาอธบายวธการทางานไดดงน
1. เรมตนทางาน 2. กาหนดคา sum ใหเทากบ 0 3. รบคา X ทางแปนพมพ 4. ทาในลปถา X มคาไมเทากบ 0
4.1 หาคาผลรวม sum = sum + X 4.2 รบคา X ทางแปนพมพ
5. แสดงคาผลรวม sum ทางจอภาพ 6. จบการทางาน
สาหรบซโดโคดสามารถเขยนไดดงน
START INIT SUM = 0 READ X do SUM = SUM + X READ X while (X !=0) PRINT X END รปท 9.6 ซโดโคดและผงงานของโปรแกรมท 9.2
sum = 0
X = 0
start
INPUT X
sum = sum + x
INPUT X
STOP
Display sum
NO
YES
ภายในลป
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 137 of 229
10
ถาหากเขยนเปนโปรแกรมภาษาซจะไดดงโปรแกรมตอไปน #include “stdio.h” #include “conio.h” main() int x, sum; sum = 0; printf(“INPUT DATA “); scanf(“%d”,&x); do sum = sum + x; printf(“INPUT DATA “); scanf(“%d”,&x); while(x != 0); printf(“Sum = %d\n”,sum); getch(); สาหรบผลลพธจากการรนโปรแกรมจะไดดงรป โดยโปรแกรมจะใหปอนคาตวเลขตาง ๆ เขาไป เมอปอนเลข 0 จะแสดงผลรวมและออกจากโปรแกรม
รปแสดงผลลพธจากการรนโปรแกรมในตวอยาง ตวอยางท 9.4 จงเขยนรหสลาลองและผงงาน ถาหากตองการออกแบบโปรแกรมหาคาเฉลยของอาย โดยใหโปรแกรมรบอายเขาไปทละคา ถาหากปอนอายเปน 0 ใหหยดรบคา จากนนใหพมพคาเฉลยของอายออกมา
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 138 of 229
11
วธทา การหาคาเฉลยจะตองทราบผลรวมและจานวนขอมลทงหมด ดงนนจะใหตวแปร Sum เปนตวแปรทหาคาผลรวม ตวแปร Counter เปนตวแปรทนบคาขอมลทปอนเขาไป โดยอายเฉลยหาไดจาก ผมรวม (Sum) หารดวยจานวนขอมล (Counter) ดงนนรหสลาลองและผงงานเขยนไดดงรปท 9.7
START
Sum = 0
Counter = 0
EnterAge
Sum = Sum+Age
Counter = Counter+1
EnterAge
Average = Sum/Counter
PrintAverage
END
T
UntilAge = 0
T
F
รปท 9.7 ซโดโคดและผงงาน
1.START 2.Sum = 0 3.Counter = 0 4.READ Age 5 DO Sum = Sum + Age Counter = Counter+1 READ Age WHILE Age != 0 6.Average = Sum/Counter 7.Print Average 8. STOP
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 139 of 229
12
9.4 การทาซาแบบถาเงอนไขเปนจรงจะทาชดคาสง การทาซ าแบบนจะมการตรวจสอบเงอนไขกอนการเขาสลป ถาหากเงอนไขเปนจรงจะทาในลป แตถาหากเงอนไขเปนเทจจะออกจากการทาลป ดงนนลปแบบนอาจไมมการทางานภายในลปเลยกไดถาหากเงอนไข
เปนเทจ สาหรบคาอธบายการทางานจะใชคาวา “ในขณะท…ทา” โดยระหวางคาวาขณะทกบทาจะเปนนพจนทตรวจสอบเงอนไป สาหรบการเขยนซโดโคดสาหรบการทาซ าแบบนจะใชคาวา “WHILE…ENDWHILE” ผงงานของการทาซ าแบบนแสดงไดดงรปท 9.8 ตวอยางเชนถาหากตองการใหแสดงคาเลขจานวนเตมทเกบอยในตว
แปร x ตงแต 1 ถง 10 จะเขยนคาอธบายไดดงน
1. เรมตน 2. ให x เทากบ 0 3. ในขณะท x < 10 ทา
เพมคา x ขนหนงคา แสดงคา x
4. จบการทางาน
รปท 9.8 ผงงานของการทาซ าถาเงอนไขเปนจรง
ตวอยางท 9.5 ถาหากตองการพฒนาโปรแกรมคอมพวเตอรสาหรบแปลงหนวยการวดอณหภมจากหนวยฟาเรนไฮซ(fahrenheit) เปนหนวยเซลเซยส(Celsius) โดยสามารถรบไดสงสด 15 คา จงเขยนรหสลาลองของปญหานพรอมทงแสดงวธการตรวจสอบคาตอบ
วธทา ตองการอะไร แปลงหนวยวดอณหภมจากฟาเรนไฮซเปนเซลเซยส ตองการเอาตพตอยางไร แสดงคาในหนวยเซลเซยส ขอมลเขา รบคาเปนฟาเรนไฮซทละคาทางแปนพมพ วธการประมวลผล เนองจากรบไดสงสด 15 คา ดงนนจะตองมตวแปรสาหรบนบ การแปลงจากฟาเรนไฮซเปนเซลเซยสคานวณไดจาก
A
While<Condition>
Instruction
Instruction
B
F
T
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 140 of 229
13
c_temp = (f_temp – 32)*(5/9) ใหตวแปรเปนดงน c_temp เปนตวแปรอณหภมในหนวยเซลเซยส f_temp เปนตวแปรอณหภมในหนวยฟาเรนไฮซ temp_count เปนตวแปรสาหรบนบคาทรบเขาไป วธการประมวลผลสามารถเขยนเปนคาอธบายไดดงน
1. เรมตน 2. กาหนดให temp_count มคาเปนศนย 3. ในขณะท temp_count นอยกวา 15
3.1 รบคา f_temp 3.2 หาคา c_temp จาก c_temp = (f_temp - 32) * 5/9 3.3 แสดงผล c_temp 3.4 เพมคา temp_count ขนหนงคา
4. จบ สาหรบรหสลาลองเขยนไดดงน
1. START 2. INIT temp_count = 0 3. WHILE temp_count < 15 4. READ f_temp 5. c_temp = (f_temp – 32) * 5/9 6. PRINT c_temp 7. temp_count = temp_count + 1
ENDWHILE 8. STOP สาหรบการตรวจสอบคาตอบนนอาจทาโดยสมมตขอมลขนมาเพยงสองคา แลวพจารณาวาการทางาน
ตาง ๆ ในลปถกตองหรอไม ดงขนตอนตอไปน 1. กาหนดตวแปรอณหภมขนมาสองคาโดยใหเปน 32 กบ 50
ตวแปร ขอมลตวแรก ขอมลตวทสอง f_temp 32 50
2. ลองคดคาตอบการประมวลผลเปลยนเปนอณหภมหนวยเซลเซยสเองจะได
ตวแปร ขอมลตวแรก ขอมลตวทสอง c_temp 0 10
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 141 of 229
14
3. สรางตารางขนมาแสดงการทางานและดคาตวแปรทละขนตอนจากซโดโคด โดยพจารณาเงอนไขของลปดวย
ขนตอน temp_count WHILE f_temp c_temp 1,2 0 3 จรง 4 32 5 0 6 แสดงผล 7 1 3 จรง 4 50 5 10 6 แสดงผล 7 2
4. จะพบวาการแสดงผลของตวแปร c_temp ในตารางในขอ 3 จะตรงกบตารางในขอ 2 ดงนนวธการนทาได
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 142 of 229
15
9.5 แนวทางการประยกตการทาซา จากททราบมาแลววาการทาซ าของคอมพวเตอรนนจะเปนการทาชดคาสงซ าตามเงอนไขทกาหนด และไมวาจะออกแบบการทาซ าใหออกมาในรปแบบใด ขนตอนวธการทาโปรแกรมจะตองมจดจบของการทาซ า เนองจากการทาซ าจะตองมการตรวจสอบเงอนไข โดยทเงอนไขนอาจตรวจสอบหลงการทาชดคาสงทตองทาซ าไปแลวหนงรอบ หรอตรวจสอบกอนทจะทาชดคาสงทตองการทาซ ากได ดงแสดงในแผนภาพตอไปน
A
C = B
Instruction
Instruction
C = C + S
IFC <= E
D
T
F
A
C = B
IFC <= E
Instruction
Instruction
C = C + S
D
F
T
ก. ข.
รปท 9.9 ลกษณะผงงานการทาซ า
จากตวอยางผงงานจะให C เปนตวนบ, B แทนคาตวเลขเรมตน, E แทนคาตวเลขตวสดทาย และ S แทนคาการนบทจะมขน การทาซ าในของผงงานในรปแบบ ก. เปนการทาซ าทตรวจสอบเงอนไขหลงการทาในลป สวนรปแบบ ข. จะตรวจสอบเงอนไขกอนเขาสลป สาหรบการเขยนเปนซโดโคดทาไดโดยใชคาวา WHILE และ REPEAT-UNTIL ถาหากนาการทาซ าดงผงงานในรป ก. มาเขยนเปนซโดโคด โดยใสคาเรมตนใหกบตวนบและตรวจสอบเงอนไขของการนบวานบมาถงคาสดทายหรอยงจะเขยนไดดงน
การทางานในลป
การทางานในลป
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 143 of 229
16
Counter = Begin REPEAT Instruction Instruction Counter = Counter + S UNTIL Counter > End สาหรบการทางานในลกษณะของผงงานรป ข. ถาหากกาหนดคาเรมตน และเงอนไขการตรวจสอบการทาซ า จะเขยนซโดโคดและผงงานไดดงน Counter = Begin WHILE Counter <= End Instruction Instruction ENDWHILE จากการทาซ าทงสองรปแบบทกลาวมา จะเหนวาเปนการทาซ าทมตวนบการทาซ าอยภายในลป และคา S คอคาทจะเพมขนในการนบแตละครง ลปทงสองประเภทดงกลาวสามารถใชกบโปรแกรมททราบจานวนครงในการทาซ าแนนอน หรอไมทราบจานวนครงในการทาซ ากได แตในการเขยนโปรแกรมจะตองมจดจบของการทาซ า
Counter = Begin
Instruction
Instruction
Counter = Counter + S
Counter > End
T
Counter = Begin
Counter <= End
Instruction
Instruction
Counter = Counter + S
T
F
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 144 of 229
17
ถาหากคอมพวเตอรตองการรบขอมลเขามาหรออานขอมลใด ๆ เขามา แลวมการเขยนโปรแกรมทาซ าเพออานขอมลคาตอ ๆ ไป เราสามารถเขยนโปรแกรมตรวจสอบเงอนไขการทาซ ากบขอมลเหลานนได แตอาจใชไมไดกบงานบางประเภท เทคนคทใชในการตรวจสอบหาจดจบของขอมลนยมใชสองเทคนคดงน
1. ใชวธตรวจสอบหาขอมลตวสดทาย วธนจะใชโปรแกรมทาซ าไปเรอย ๆ จะกวาจะพบขอมลตวสดทาย โดยจะมการสมมตคาขอมลตวสดทายเปนคาทรแน ๆ วาขอมลทใชจะไมเปนคานน เชน การเขยนโปรแกรมรบคาตวเลขจานวนเตมบวก โดยใหโปรแกรมวนลปรบไปเรอย ๆ ถาหากตวเลขทรบมาเปนเลขลบกหมายความวาขอมลนน ๆ เปนขอมลตวสดทายแลว การเขยนโปรแกรมทาซ าลกษณะนจะเปนการทาซ าแบบ WHILE ดงตวอยางซโดโคดตอไปน
READ DATA WHILE DATA != คาทกาหนดตวสดทาย ……. ……. READ DATA ENDWHILE
2. การใชตวนบ วธการนจะตองใชเมอทราบจานวนครงในการทาซ าทแนนอน โดยโปรแกรมจะตองมการตรวจสอบวาตวนบนนไดนบมาถงคาทกาหนดหรอยง ถาถงแลวกใหหยดการประมวลผล การทาซ าแบบนสามารถนาการทาซ าในลกษณะ WHILE หรอ FOR มาใชได ดงปญหาในตวอยางท 9.5 ทผานมา
ตวอยางท 9.6 ถาหากตองการพฒนาโปรแกรมหาคาผลรวม ผลคณและคาเฉลยของตวเลขสองคา โดยใหโปรแกรมรบคาตวเลขเขาไปสองคาทางแปนพมพ จากนนคานวณคาผลรวม ผลคณ และคาเฉลยแลวแสดงออกทางจอภาพ ถาหากผลรวมของตวเลขมคามากกวา 200 ใหแสดงเครองหมาย asterisk (*) ออกมาดวย โดยใหโปรแกรมวนลปรบตวเลขครงละสองคาไปเรอย ๆ แตถาหากตวเลขทงสองคาเปนศนยทงสองตว ใหหยดการทาซ า จงออกแบบแนวทางการเขยนโปรแกรมและเขยนซโดโคดของโปรแกรมน วธทา จากตวอยางนจะเปนการทาซ า โดยสามารถออกจากการทาซ าโดยใชเทคนคการตรวจสอบหาขอมลตวสดทาย จากตวอยางทโจทยกาหนดสามารถสรปไดดงน
ตองการอะไร คานวณหาคาผลรวม ผลคณและคาเฉลย ตองการเอาตพตอยางไร แสดงเอาตพตทางจอภาพ ถาผลรวมเกน 200 ใหแสดง * ขอมลเขา ตวเลขสองคา ถาเปนศนยทงสองคาใหหยดรบคา วธการประมวลผล ผลรวม = ตวเลขแรก + ตวเลขทสอง ผลคณ = ตวเลขแรก * ตวเลขทสอง คาเฉลย = ผลรวม หารดวยสอง ถา ผลรวม > 200 แลวแสดงเครองหมาย *
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 145 of 229
18
กาหนดใหตวแปรเปนดงน number1 เปนตวแปรเกบตวเลขตวแรก number2 เปนตวแปรเกบตวเลขตวทสอง sum, product, average เปนตวแปรสาหรบเกบคาผลรวม ผลคณ และคาเฉลย
การประมวลผลแบบทาซ าจะใชรปแบบ WHILE โดยตรวจสอบเงอนไขกอนการทาซ า วาตวเลขทเขามาเปนศนยหรอไม
การตรวจสอบเงอนไขจะนาตวดาเนนการ AND มาใช ใชการเลอกทาแบบ IF วาจะพมพเครองหมาย * หรอไม
วธการประมวลผลสามารถเขยนเปนคาอธบายไดดงน 1. เรมตน 2. กาหนดให sum มคาเปนศนย 3. แสดงเครองหมาย Prompt สาหรบรบตวเลขสองตว 4. รบคา number1 และ number2 5. ในขณะท number1 และ number2 ไมเทากบศนย
5.1 หาคา sum = number1 + number2 5.2 หาคา produce = number1 * number2 5.3 หาคา average = sum / 2 5.4 ถา sum มากกวา 200 แลว 5.4.1 แสดงผล sum, ‘*’ ,product, average มฉะนน 5.4.2 แสดงผล sum, product, average 5.5 แสดงเครองหมาย Prompt สาหรบรบตวเลขสองตว 5.6 รบคา number1 และ number2
6. จบ
สาหรบซโดโคดเขยนไดดงน START INIT sum = 0 Prompt for number1, number2 READ number1, number2 WHILE NOT(number1 = 0 AND number2 = 0) sum = number1 + number2 product = number1*number2 average = sum/2 IF sum > 200 THEN Display sum, ‘*’, product, average ELSE Display sum, product, average
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 146 of 229
19
ENDIF Prompt for number1, number2
READ number1, number2 ENDWHILE
STOP ตวอยางท 9.7 ถาหากมแฟมขอมลของนกเรยนอยแฟมหนง โดยทขอมลของนกเรยนแตละคนจะถกเกบเปนเรคอรด นกเรยนหนงคนมสองเรคอรด ใชชอวาเรคอรด ‘S’ และเรคอรด ‘U’ โดยเรคอรด ‘S’ เกบรหสประจาตวนกเรยน, ชอ, อาย, เพศ, ทอย และสถานภาพวาเปนนกเรยกแบบ เตมเวลา (full-time :F/T) หรอเปนนกเรยนแบบนอกเวลา (part-time : P/T) สาหรบเรคอรด ‘U’ จะเกบชอ และหนวยกตทนกเรยนคนนนเรยนอย จงออกแบบอลกอรธมสาหรบอานไฟลเรคอรดขอมลนกเรยนแลวพมพรหสประจาตวนกเรยน ชอ และทอยของนกเรยนแตละคาออกมา
วธทา กาหนดปญหา ขอมลและตวแปรทางอนพต มเรคอรดขอมลอยสองเรคอรด ‘S’ Records
number แทนรหสประจาตวนกเรยน name แทนชอนกเรยน address แทนทอยนกเรยน age แทนอาย gender แทนเพศ attendance_pattern แทนสถานภาพนกเรยน
‘U’ Record วธการประมวลผล
พมพสวนหวของรายการ อานเรคอรดขอมลนกเรยนแตละคน เลอกเฉพาะเรคอรด ‘S’ พมพเฉพาะเรคอรดทเลอก
เอาตพต
พมพสวนหวของรายการ เลอกเรคอรด แลวพมพ number, name และ address
การประมวลผลจะตองใชวธการทาซ า โดยวนลปอานขอมลขนมาจนกวาจะอานขอมล
นกเรยนครบทกคน โดยจะใหจดสดทายของไฟลเปนตวบอกวาจบการทาซ า ในการอานขอมลของนกเรยนแตละคน จะตองใชการเลอกทา โดยเลอกเฉพาะเรคอรด ‘S’ ขนมาแสดงผลเทานน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 147 of 229
20
จากการวเคราะหปญหาทโจทยกาหนดสามารถเขยนเปนอลกอรธมและผงงานไดดงน Print_student_records
Print ‘STUDENT LIST’ heading READ student record WHILE more records exist IF student record = ‘S’ record THEN Print student_number, name, address ENDIF READ student record
ENDWHILE END
START
Print heading
Read studentrecord
MoreRecords?
Record = ‘S’?
PrintStudentdetails
ReadStudentrecord
STOP
F
T
FT
รปท 9.10 แสดงผงงานของตวอยางท 9.7
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 148 of 229
21
ตวอยางท 9.8 จากปญหาในตวอยางท 9.7 จงออกแบบอลกอรธมสาหรบสรางโมดลยอยเพออานไฟลนกเรยน และแสดงรหสประจาตว, ชอ, ทอย และอาย ของนกเรยนทเปนผหญง และเรยนแบบนอกเวลา วธทา จากปญหาน จะตองใชวธการวนลปอานขอมลในลกษณะเดยวกบตวอยางท 9.7 แตในลปนนจะตองเพมเงอนไขเพอเลอกเฉพาะนกเรยนทเปนผหญง และเรยนแบบนอกเวลา การเขยนอลกอรธมเพอแกปญหานทาไดหลายวธ โดยอาจนาการเลอกทามาชอนกนเพอเลอกเงอนไขทละเงอนไข หรอกาหนดเงอนไขการเลอกทาใหละเอยดขนกได สาหรบในตวอยางนจะเสนออลกอรธมของโปรแกรมยอยสามแบบคอ
รปแบบท 1 ใช IF ในการเลอกทาแตละเงอนไข Produce_part_time_female_list
Print ‘PART TIME FEMALE STUDENTS’ heading READ student record WHILE more records IF student record = ‘S’ record THEN IF attendance_pattern = P/T THEN IF gender = female THEN Print student_number, name,
address, age ENDIF ENDIF ENDIF READ student record
ENDWHILE END รปแบบท 2 ใช IF ซอนกนสองตว แลวกาหนดเงอนไขใหละเอยดขน Produce_part_time_female_list
Print ‘PART TIME FEMALE STUDENTS’ heading READ student record WHILE more records IF student record = ‘S’ record THEN IF (attendance_pattern = P/T AND gender = female) THEN Print student_number, name,
address, age ENDIF ENDIF READ student record
ENDWHILE END
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 149 of 229
22
รปแบบท 3 กาหนดเงอนไขของ IF ใหละเอยดขน Produce_part_time_female_list
Print ‘PART TIME FEMALE STUDENTS’ heading READ student record WHILE more records IF student record = ‘S’ record AND attendance_pattern = P/T AND gender = female) THEN Print student_number, name, address, age ENDIF READ student record
ENDWHILE END สาหรบผงงานเขยนไดดงน
รปท 9.11 แสดงผงงานอลกอรธมในตวอยางท 9.8
กาหนดเงอนไขใหระเอยดขน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 150 of 229
23
ตวอยางท 9.9 จากตวอยางท 9.8 จงพฒนาอลกอรธมใหแสดงผลเพมเตมดงตอไปน
แสดงจานวนนกเรยนทงหมด แสดงจานวนนกเรยนเพศหญงทเรยนนอกเวลา
วธทา จากปญหาในขอนจะตองสรางตวนบขนมาสองตวดงน total_students ใชนบจานวนนกเรยนทงหมด total_selected_students ใชนบจานวนนกเรยนทเลอก การประมวลผลในเบองตนจะกาหนดใหตวนบทงสองตวมคาเปนศนย เมออานเรคอรดของนกเรยนเขามาแลวใหเพมตวนบขนหนงคา และถาเปนนกเรยนหญงทเรยนนอกเวลาใหเพมตวนบนกเรยนทเลอกขนหนงคา ซงจะเขยนอลกอรธมของโปรแกรมยอยนไดดงน Produce_part_time_female_list
Print ‘PART TIME FEMALE STUDENTS’ heading Set total_students to zero Set total_selected_students to zero READ student record WHILE records exist IF student record = ‘S’ record THEN increment total_students IF (attendance_pattern = P/T AND gender = female) THEN increment total_selected_students Print student_number, name,
address, age ENDIF ENDIF READ student record
ENDWHILE Print total_students Print total_selected_students END
สาหรบผงงานของการแกปญหานเขยนไดดงน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 151 of 229
24
START
Print heading
Read studentrecord
MoreRecords?
Record = ‘S’?
PrintStudentdetails
ReadStudentrecord
STOP
F
T
FT
Student=P/T&female
T F
Incrementtotal_
students
Incrementtotal_selected_
students
Print_total_students
Print_total_Selected_students
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 152 of 229
25
แบบฝกหดทายบท ตอนท 1 จงเลอกคาตอบทถกตองทสดเพยงหนงขอ
1. โครงสรางโปรแกรมแบบมการทาซ ามกแบบ ก. 1 แบบ ข. 2 แบบ ค. 3 แบบ ง. 4 แบบ
2. ซโดโคดของการทาซ าททราบจานวนครงในการทาทแนนอนมกจะมคาใดประกอบอย ก. “FOR” ข. “REPEAT” ค. “LOOP” ง. “UNTIL”
3. ขนตอนการทางานทประกอบอยภายในการทางานแบบทาซ าคอขอใด ก. การทางานแบบลาดบ ข. การแสดงผลขอมล ค. การทาแบบมทางเลอก ง. ถกมากกวาหนงขอ
4. ในการเขยนผงงานของงานทมการทาซ า จะมสญลกษณใดประกอบอย ก. สญลกษณการทาแบบมทางเลอก ข. สญลกษณการรบขอมล ค. สญลกษณเรมตน ง. สญลกษณการแสดงขอมล
5. ในการทาซ าแบบททราบจานวนครงทแนนอน ระบบจะทาสงใดกอน ก. เพมคาตวนบ ข. ตรวจสอบเงอนไข ค. ทางานในลป ง. พสจนตวนบ
6. การทาซ าจนระบบมเงอนไขอยางหนงจงหยด มลกษณะดงขอใด ก. ตรวจสอบเงอนไขกอนทาชดคาสงในลป ข. ตรวจสอบเงอนไขหลงจากทาชดคาสงในลป ค. ตองมตวควบคมการนบลป ง. ในลปตองมตวแปรมากกวาหนงตว
7. ในการเขยนซโดโคดของการทาซ าแบบถาเงอนไขเปนจรงจะทาชดคาสงจะใชคาวาอะไร ก. “REPEAT….UNTIL” ข. “WHILE….ENDWHILE” ค. “UNTIL…GO” ง. ถกมากกวาหนงขอ
8. ในการทาซ าทกรปแบบจะตองมการประมวลผลแบบใด ก. การตรวจสอบเงอนไข ข. การคานวณคากบตวแปร ค. การเพมคาใหตวแปร ง. การลดคาตวแปรลงหนงคา
9. ขอใดถกตองสาหรบการทาซ าทซโดโคดมคาวา “REPEAT…UNTIL” ประกอบอย ก. ถาเงอนไขเปนจรงจะออกจากลป ข. ตรวจสอบเงอนไขกอนทาลป ค. มการลดคาตวแปรควบคม ง. ถกทกขอ
10. ขอใดถกตองสาหรบการทาซ าทซโดโคดมคาวา “WHILE…ENDWHILE” ประกอบอย ก. ทาภายในลปหนงครงเสมอ ข. ตรวจสอบเงอนไขกอนการทาซ า ค. ตองมตวแปรภายในลปสองตว ง. ถกทกขอ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 153 of 229
26
ตอนท 3 จงตอบคาถามตอไปน 1. การทางานแบบมการทาซามลกษณะเปนอยางไร ……………………………………………………………………………………………… ……………………………………………………………………………………………… ………………………………………………………………………………………………. 2. จงเขยนผงงานตามคาอธบายโปรแกรมตอไปน
เรมตน ให I เทากบ 0 ในขณะท I < 5 ทา รบคา X รบคา Y ถา Y มากกวา X แลว คานวณคา M มคาเทากบ X ยกกาลงสอง บวกกบ Y ยกกาลงสอง มฉะนน คานวณคา M มคาเทากบ X บวกกบ Y เพมคา I ขน 1 คา แสดงคาของ M ทางจอภาพ
จบ
3. จากขอ 2 โปรแกรมมการทาซ ากครง และเมอออกจากลปตวแปร I มคาเทาไร ……………………………………………………………………………………………… ………………………………………………………………………………………………
4. ถาหากตองการออกแบบโปรแกรมใหทาการรบขอมลเลขจานวนเตมเขาไป 10 คา จากนน
ใหแสดงผลรวม คาเฉลย คาสงสด และคาตาสดออกมาทางจอภาพ จงวเคราะหปญหาน พรอมทงเขยนคาอธบายโปรแกรม ซโดโคดและผงงาน
5.จงเขยนอลกอรธมใหคอมพวเตอรแสดงสตรคณดงตวอยางตอไปน 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 ……… ………. 7 x 12 = 84 6. จากขอ 5 ถาหากโปรแกรมสามารถปอนคาเขาทางอนพตไดวาตองการสตรคณแมใด จะเขยนอลกอรธมไดอยางไร
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 154 of 229
1
บทท 10 การประมวลผลแบบอารเรย
เมอเครองคอมพวเตอรมการประกาศตวแปรเกดขน ชอตวแปรจะเปนตวแทนตาแหนงหนวยความจา
ของคอมพวเตอร ตวแปรหนงตวจะแทนหนวยความจาหนงตาแหนงสามารถเกบขอมลไดหนงตว ถาหากตองการเกบขอมลหลายคาจะตองประกาศตวแปรขนมาหลายตว แตการประมวลผลของคอมพวเตอรจะมการเกบขอมลอกแบบหนงทใชชอเพยงชอเดยวแตสามารถเกบขอมลไดหลายตวโดยทตวแปรแตละตวจะใชเนอทของหนวยความจาเทากน ตวแปรประเภทนเรยกวาตวแปรแบบอารเรย (array)
การเกบขอมลแบบอารเรยนนอาจมองอกอยางหนงวาเปนการเกบขอมลแบบตาราง เมอมการพจารณาถงอารเรยหนงตวกเสมอนวาเรากาลงมองขอมลอยชดหนงทอยเรยงลาดบกน ในหนงตาแหนงของหนวยความจาแบบอารเรยเรยกวา อลเมนต (element) หรอเซล(cell) สวนการระบถงอลเมนตในอารเรยจะใชตวเลขอนเดกซ (index number) ในการอางถงแตละตาแหนงในอารเรยนน ตวอยางเชนถามขอมลอยกลมหนงซงเปนคะแนนของนกศกษา 8 คน สามารถเกบไดดงน
หมายเลข X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8] คะแนน 20 35 84 21 45 65 71 39
จากขอมลขางตนสามารถบอกไดวาขอมลอยในอารเรยชอ X ในแตละเซลจะเกบเลขจานวนเตม สวนตวเลขทอยในเครองหมาย [ ] คออนเดกซ ซงจะตองเปนขอมลประเภทจานวนเตมเทานน ขอมลขางตนอาจเขยนเตม ๆ ไดวา X[1..8] ถาหากตองการตดตอกบเซลลใดกใหใชอนเดกซเปนตวช ถาหากเราอางตวแปร X[3] หมายความวาเปนการตดตอกบอารเรย X เชลลท 3 ตวอยาง X[2] อางเชลลท 2 มคาเทากบ 35 X[2] + X[3] นาเซลลท 2 บวกกบเซลลท 3 จะได 35 + 84 เทากบ 119 X[1+3] อางเชลลท 4 มคาเทากบ 21 X[5] + 1 นาเซลลท 5 มาบวกดวย 1 จะไดเทากบ 46 ถาหากในโปรแกรมมการประกาศตวแปรอารเรยเอาไว เราสามารถนาตวแปรนมาใชไดเหมอนกบตวแปรทวไป เชน X[5] := 45; ใสคา 45 ลงในตวแปรอารเรย X เชลลท 5 Print X[6]) พมพคาในตวแปรอารเรย X เชลลท 6
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 155 of 229
2
สาหรบการใชอนเดกซในการอางถงเซลในอารเรยนน ในการเขยนโปรแกรมบางภาษาจะเรมตนดวยเลข 0 เชนภาษาซ บางภาษาจะเรมตนดวยเลข 1 เชนภาษาปาสคาล ซงผเขยนโปรแกรมจะตองทราบดวยวาภาษาทใชเขยนนนเรมตนดวยเลขใด
10.1. เหตใดจงตองเกบขอมลแบบอารเรย สมมตวามนกเรยนกลมหนงในกลมนนมอย 9 คน ถาหากตองการเกบอายของนกเรยนทง 9 คน อาจทาไดโดยประกาศตวแปรอารเรยขนมา ในทนใหชอวา Age แลวเกบอายของนกเรยนแตละคนลงไป การอางถงอายของนกเรยนแตละคนสามารถทาไดโดยใชชออารเรย แลวปอนลาดบทของนกเรยนลงไป กจะไดอายของนกเรยนลาดบนนออกมา เชนถาหากตองการอายของนกเรยนคนท 7 กอางไปท Age(7) เปนตน
Array Age
การอางถง ชอตวแปร
1 12 Age(1) 2 9 Age(2) 3 11 Age(3) 4 12 Age(4) 5 9 Age(5) 6 14 Age(6) 7 13 Age(7) 8 8 Age(8) 9 16 Age(9)
ตวอยางการเกบอายของนกเรยนในรปของตวแปรอารเรย
การเกบขอมลในลกษณะอารเรยหรอตารางนจะทาใหสามารถอางถงขอมลไดงาย ถาหากไมมการเกบเปนแบบอารเรย จะตองประกาศตวแปรสาหรบเกบอายขนมา 9 ตว การใชงานตวแปรแบบอารเรยสวนใหญแลวมกจะมการประมวลผลในลกษณะตอไปน
โหลดขอมลเปนคาเรมตนใหกบขอมลแตละเซลในอารเรย ประมวลผลขอมลในแตละเซลของอารเรย คนหาขอมลในอารเรย พมพขอมลในอารเรยออกมาเปนรายงาน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 156 of 229
3
ถาหากตองการเขยนโปรแกรมใหรบขอมลทางแปนพมพเขาไปจานวน 10 คา แลวหาผลรวม เราอาจเขยนอลกอรธมไดตามวธทเคยไดศกษามาเชน
Fine_sum_10_number Set sum to zero FOR I = 1 TO 10 DO /** วนลปรบขอมล 10 คา READ x /** รบคา x sum = sum + x /** คานวณหาคาผลรวมทละคา ENDFOR PRINT x /** แสดงคาผลรวม END
การเขยนอลกอรธมดงกลาว โปรแกรมสามารถรบตวเลขเขาไปทละคาจนครบ 10 คา แลวหาผลรวมได
เชนกน แตการเขยนโปรแกรมในลกษณะนขอมลทรบเขาไปแตละคาจะทบกบตวแปรตวเดม เนองจากมการประกาศตวแปร x เพยงหนงตวเทานน ทาใหเราไมสามารถอางถงขอมลทเคยเกบไวแลวได แตกหาผลลพธไดเชนกน ถาหากนาอารเรยมาใชโดยตอนรบขอมลจะนาไปเกบในอารเรยแตละเซล แลวนามาหาผลรวม จะทาใหเราสามารถอางถงขอมลทเกบไวแลวได
ตวอยางท 10.1 จงเขยนอลกอรธม สาหรบโปรแกรมยอยคานวณหาคาผลรวมของตวเลขทเกบอยในอารเรยทงหมด ตามจานวนทกาหนด วธทา กาหนดให array คอชออารเรยทเกบขอมล, ให Sum เปนตวแปรเกบผลรวม และให number_of_elements เปนจานวนเซลทงหมดของอารเรย ดงนนจะเขยนอลกอรธมไดดงน Find_sum_of_elements
Set sum to zero /** กาหนดให sum เรมตนเปน 0 FOR index = 1 to number_of_elements sum = sum + array(index) /** หาคาผลรวมทละเซล ENDFOR Print sum
END
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 157 of 229
4
ตวอยางท 10.2 จากตวอยางท 10.1 จงเขยนอลกอรธมสาหรบหาคาเฉลยของขอมลทงหมดทเกบอยในอารเรย วธทา คาเฉลยหาไดจากผลรวมหารดวยจานวนทงหมด สามารถเขยนอลกอรธมไดดงน Find_element_average
Set sum to zero FOR index = 1 to number_of_elements sum = sum + array(index) ENDFOR average = sum / number_of_elements Print average
END
ตวอยางท 10.3 ถาหากมขอมลอยในอารเรย จงออกแบบอลกอรธมสาหรบหาคาสงสดทเกบอยในอารเรย วธทา สมมตวาในอารเรยเกบขอมลดงตอไปน 8 3 4 9 2 6 วธแกปญหาอาจกาหนดตวแปรขนมาตวหนงสาหรบเกบคาสงสด แลวใหคาตวแปรนนมคาเทากบเซลท 1 ในทนคอ 8 จากนนอานเซลตอไปเขามาแลวเปรยบเทยบวามคามากกวาคาสงสดหรอไม ถาไมมากกวากใหขามไป แตถามากกวา กใหตวแปรทเกบคาสงสดเทากบคาในเซลนน แลววนลปเปรยบเทยบไปจนครบทกเซลของอารเรย ถาหากใหตวแปรชอ largest_element เกบคาสงสด จะสามารถเขยนอลกอรธมของโปรแกรมยอยหาคาสงสดแลวแสดงผลออกมาไดดงน Find_largest_element
Set largest_element to array(1) FOR index = 2 to number_of_elements IF array(index) > largest_element THEN
largest_element = array(index) ENDIF
ENDFOR Print largest_element
END
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 158 of 229
5
ตวอยางท 10.4 ถาหากมขอมลเกบอยในอารเรย จงเขยนอลกอรธมสาหรบหาคาตาสดทเกบอยในอารเรย วธทา คลายกบตวอยางท 10.3 โดยกาหนดตวแปรชอ smallest_element เปนตวแปรเกบคาตาสด แลวกาหนดใหเซลแรกเปนคาตาสด จากนนเปรยบเทยบไปจนครบทกเซล ซงสามารถเขยนเปนอลกอรธมไดดงน Find_smallest_element
Set smallest_element to array(1) FOR index = 2 to number_of_elements IF array(index) < smallest_element THEN
smallest_element = array(index) ENDIF
ENDFOR Print smallest_element
END
ตวอยางท 10.5 ถาหากมขอมลอยในอารเรย จงเขยนอลกอรธมสาหรบหาคาสงสดและคาตาสดขอขอมลทเกบอยในอารเรย วธทา คลายกบตวอยางท 10.4 และ 10.5 โดยใหการตรวจสอบหาคาสงสดและคาตาสดทาไปพรอมกนและทาภายในลปการทาซ า ซงสามารถเขยนอลกอรธมไดดงน Find_range_of_elements
Set smallest_element to array(1) Set largest_element to array(1) FOR index = 2 to number_of_elements
IF array(index) < smallest_element THEN smallest_element = array(index)
ELSE IF array(index) > largest_element THEN
largest_element = array(index) ENDIF ENDIF
ENDFOR Print the range as smallest_element followed by largest_element
END
ลปทาซ า
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 159 of 229
6
10.2 แนวคดการใชอารเรยในการประมวลผล การประมวลผลแบบอารเรยนนมทงการใชอารเรยเดยว ๆ และใชอารเรยหลาย ๆ อารเรยใหทางานสมพนธกนทเรยกวาอารเรยแบบขนาน ลองพจารณาตวอยางการใชอารเรยในการประมวลผลในลกษณะตอไปน ถาหากมรานขายสนคารานหนง ไดเกบรหสสนคาไวเปนขอมลในลกษณะอารเรย โดยเกบอยในหนวยความจาในลกษณะดงตอไปน รหสสนคา A1 B1 C2 D2 ถาหากในการขายสนคาครงหนง ๆ ผขายไดคยรหสสนคาเขามา เราอาจออกแบบระบบใหอานขอมลในอารเรยนออกมาทละเซลเพอตรวจสอบวารหสสนคานนเหมอนกบขอมลทเกบอยในอารเรยนหรอไม ถาหากไมเหมอนกบเซลใดเลยกใหระบบแจงวาปอนรหสผดได นอกจากนถาหากปอนรหสสนคาเขาไปกสามารถใหเครองแจงไดวาสนคานนเปนลาดบทเทาใด แตถาใหอารเรยประมวลผลแบบขนาน โดยมอารเรยอกตวหนงเกบชอสนคาไว ดงรปตอไปน รหสสนคา ชอสนคา A1 คอมพวเตอร B1 เครองเลนเทป C2 เครองรบวทย D2 นาฟกา ถาหากการประมวลผลทาในลกษณะของอารเรยค โดยมจานวนสมาชกเทากน และมความสมพนธกนดงรป ในอารเรยของรหสสนคาจะทาใหเราทราบลาดบของสนคาตามทผใชปอนรหสเขาไป ดงนนเราสามารถนาลาดบของสนคานไปอางในอารเรยชอสนคาได วาสนคานชออะไร ตวอยางเชน ถาหากปอนรหสสนคาเปน C2 แลวใหโปรแกรมไปคนในอารเรยรหสสนคา พบวาสนคานอยลาดบท 3 จากนนกนาคาลาดบนไปแทนคาอนเดกซเพออางไปทอารเรยชอสนคา กจะทาใหทราบไดวาสนคานชอวา “เครองรบวทย” ถาหากมอารเรยเพมขนอก เชนเกบราคา เกบสวนลด และเกบขอมลอน ๆ เราสามารถใชวธการนในการประมวลผลเพอหาขอมลตาง ๆ ทเกยวของกนได การประมวลผลในลกษณะนจะเหนวาการคนหาขอมลในอารเรยแรกซงทาโดยการเปรยบเทยบคาท
ปอนเขาไปกบคาแตละเซลของอารเรย จะทาใหไดคาลาดบออกมา แลวใชลาดบนการคนหาคาในอารเรยตาง ๆ ทเกยวของตอไป
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 160 of 229
7
ในการเขยนโปรแกรมลกษณะนจะตองสรางตารางสาหรบเกบขอมลขนในหนวยความจา สาหรบการสรางอารเรยหรอตารางสาหรบเกบขอมลตาง ๆ จะเปนการจองหนวยความจาของคอมพวเตอรเพอใชในการเกบขอมล วธในการจองหนวยความจานขนกบฟงกชนของภาษาทใชเขยนโปรแกรม เมอมการจองหนวยความจาแลว การกาหนดคาขอมลลงไปในอารเรยจะทาไดสองวธ คอใหโปรแกรมประมวลผลแลวเกบในอารเรย เชนเกดการการคานวณตาง ๆ หรออานขนมาจากไฟล หรอรบขอมลทปอนเขาไปทางแปนพมพเปนตน อกวธหนงจะเปนการกาหนดขอมลใหกบอารเรยโดยตรงในโปรแกรม ซงวธนเหมาะสาหรบขอมลทไมมการเปลยนแปลง เชนรหสสนคา ชอสนคา ตารางเงนเดอน ชอเดอน ชอวน เปนตน ตวอยางเชนถาหากตองการเกบชอเดอนลงไปในอารเรยชอ month_table จะเขยนเปนซโดโคดไดดงน
Initialise_month_table month_table(1) = ‘January’
month_table(2) = ‘February’ : : month_table(12) = ‘December’
END สาหรบกรณทตารางมการเปลยนแปลงบอย เชน การลดราคาสนคา ตารางราคาสนคา กอาจใชวธการปอนขอมลเขาไปเกบในอารเรยหรอออกแบบใหมการปรบคาขอมลในอารเรยเมอมการรนโปรแกรมแตละครง
แทน ตวอยางท 10.6 โรงงานแหงหนงจายคาตอบแทนพนกงานเปนรายชวโมง โดยโรงงานนมพนกงานหลายคน แตละคนมชวโมงทางานไมเทากน และไดคาตอบแทนในอตรารายชวโมงไมเทากน ถาหากโรงงานตองทารายการแสดงชวโมงการทางาน และคาจางพนกงานออกมาจะตองออกแบบโปรแกรมอยางไร
วธทา งานลกษณะนควรนาการประมวลผลตารางแบบขนานมาใช โดยการประกาศตวแปรอารเรยเพอเกบขอมลของพนกงาน ประกอบดวย อารเรยรหสพนกงาน, ชวโมงทางาน, คาจางรายชวโมง และคาตอบแทน ในลกษณะดงตอไปน
ID H R Total A001 20 50
A002 30 45
A003 27 75
B001 32 30
B002 19 40
โดยให ID เปนอารเรยเกบรหสพนกงาน H เปนอารเรยเกบจานวนชวโมงทางาน R เปนอารเรยเกบอตราคาจางรายชวโมง Total เปนอารเรยเกบจานวนเงนคาตอบแทน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 161 of 229
8
ขนตอนตอมาใหระบบรบขอมลทเปนจานวนชวโมงทางาน และอตราคาจางรายชวโมงเขาไปแลวคานวณอตราคาจางรวมออกมา โดยใหอารเรย Total ในลาดบเดยวกน มคาเทากบคาในอารเรย H คณกบคาในอารเรย R ในลาดบเดยวกน เชนถามพนกงาน 100 คน กเขยนอลกอรธมไดดงน
FOR I = 1 TO 100 DO Total(I) = H(i) x R(I) ENDFOR ถาหากตองการทราบวาพนกงานคนใดไดคาตอบแทนรวมเทาไร กทาโดยการนารหสของพนกงานคนนนไปคนในอารเรยทเกบรหสพนกงาน เมอไดลาดบของพนกงานคนนนออกมา กนาคาลาดบนไปเปนคาอนเดกซในการคนหาคาตอบแทนในอารเรย Total ตอไป
ตวอยางท 10.7 ถาหากมอารเรยทเกบขอมลไดหลายคา และตองการเขยนโปรแกรมยอยในการอานขอมลจากภายนอกเขาไปเกบในอารเรย โดยอานขอมลเขามาไดเรอย ๆ แตถาหากขอมลยงไมหมด แตอารเรยเตมแลว ใหระบบแจงวาอารเรยมขนาดเลกไป จงออกแบบอลกอรธมในการประมวลผลโปรแกรมยอยน
วธทา การทางานในลกษณะนอาจทาโดยใชลปแบบ While วนรบขอมลเขามาเกบในอารเรยจนกวาจะหยดปอน โดยใหอนเดกซของอารเรยเรมท 1 และเพมคาขนหนงคาทปอนขอมลเขาไป ซงสามารถเขยนอลกอรธมไดดงน
Read_values_into_array Set max_num_elements to required value /*กาหนดคาสงสดทอารเรยสามารถเกบได
Set index to zero Read first input value WHILE (input values exist) AND (index < max_num_elements) index = index + 1 array(index) = input value /* เอาคาไปเกบในอารเรยทละเซล Read next input value /*อานคาตอไปมาเกบในตวแปร ENDWHILE IF (input values exit) AND index = max_num_elements THEN Print ‘Array size too small’ ENDIF END
ทาซ า 100 ครง นาคาในอารเรย H คณกบ R แลวเกบใน Total
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 162 of 229
9
ตวอยางท 10.8 จากตวอยางท 10.7 ถาหากขอมลทปอนเขาไปเปนตวเลข ถาหากตวเลขทปอนเขาไปเปน 9999 หมายความวาตวเลขนเปนขอมลสดทายทจะปอนเขาไปในอารเรย จงเขยนอลกอรธมของโปรแกรมยอยน
วธทา ทาไดโดยใชลป WHILE ในการตรวจสอบวาการรบแตละครงนนคาทรบมาเปน 9999 หรอไม ถาใชใหหยดรบ แลวเกบคานนลงไปในอารเรยถดไป สามารถเขยนอลกอรธมไดดงน Read_values_into_variable_array Set max_num_elements to required value Set index to zero Read first input value WHILE (input values NOT = 9999) AND (index < max_num_elements) index = index + 1 array(index) = input value /* เอาคาไปเกบในอารเรยแตละเซล Read next input value ENDWHILE IF index < max_num_elements THEN index = index + 1 array(index) = 9999 ELSE Print ‘Array size too small’ ENDIF END ถาหากตองการพมพขอมลในอารเรยทงหมดออกมาสามารถเขยนอลกอรธมไดดงน Write_values_of_array FOR index = 1 to number_of_elements DO Print array(index) ENDFOR END
ทาซ าถาหากขอมลไมใช 9999 และยงไมเตมอารเรย
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 163 of 229
10
ตวอยางท 10.9 จงออกแบบแนวทางการพฒนาโปรแกรม ถาหากตองการใหรบขอมลทเปนคะแนนของนกเรยนเขาไป 18 คา จากนนใหคอมพวเตอรคานวณหาคาเฉลย แลวแสดงคะแนนของนกเรยนทงหมดออกมาพรอมกบคาเฉลย วธทา ขอมลอนพต คะแนนของนกเรยน 18 คน เอาตพตทตองการ แสดงคะแนนของนกเรยนทง 18 คน และคะแนนเฉลย การประมวลผล รบคะแนนเขาไปทละคน หาคะแนนรวม หาคะแนนเฉลย แสดงคะแนนทงหมด และคะแนนเฉลย
การทางานในลกษณะนควรนาการเกบขอมลแบบอารเรยมาใช ถาหากใชตวแปรธรรมดา
กสามารถหาคะแนนเฉลยได แตจะไมสามารถแสดงคะแนนดบของนกเรยนทงหมดได สาหรบการประมวลผลเนองจากทราบจานวนนกเรยนทแนนอน ดงนนจะใชลปแบบ FOR ได โดยจะประกาศตวแปรอารเรยชอ scores สาหรบเกบคะแนนนกเรยนแตละคน แลวใชอนเดกซแทนลาดบทของนกเรยนแตละคน จากปญหานสามารถเขยนอลกอรธมและผงงานไดดงน Process_exam_scores Set total_score to zero FOR index = 1 to 18 Prompt operator for score Get scores(index) total_score = total_score+scores(index) ENDFOR Compute average_score = total_score / 18 FOR index = 1 to 18 Display scores(index) ENDFOR Display average_score END
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 164 of 229
11
ผงงานของโปรแกรมในตวอยางท 10.9
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 165 of 229
12
ตวอยางท 10.10 ถาหากมขอมลอย 100 คา เกบอยในอารเรยชอ number จงอธบายแนวทางในการพฒนาโปรแกรมใหคอมพวเตอรแสดงคะแนนเฉลย และแจงวามขอมลกคาทมากกวาคะแนนเฉลย
วธทา อนพต ขอมล 100 คาเกบอยในอารเรยชอ number เอาตพต ตองการคะแนนเฉลย และจานวนขอมลทมคามากกวาคาเฉลย วธการประมวลผล อานขอมลทเกบอยในอารเรย number คานวณหาคาเฉลย นบวามขอมลทมากกวาคาเฉลยกคา แสดงคาเฉลย แสดงจานวนขอมลทมากกวาคาเฉลย
การหาคาเฉลยทาไดตามวธในตวอยางท 10.9 จากนนใหโปรแกรมวนลปอานขอมลจากอารเรยอกครง เพอตรวจสอบวามคาใดบางทมากกวาคาเฉลย ถาคาใดมากกวาใหเพมตวนบขนหนงคา ดงนนสามารถเขยนอกลอรธมและผงงานของปญหานไดดงน ให integer_total เปนตวแปรเกบผลรวม โดยกาหนดคาเรมตนเปนศนย ให integer_count เปนตวแปรเกบจานวนทมากกวาคาเฉลย โดยกาหนดคาเรมตนเปนศนยเชนกน
Process_integer_array Set integer_total to zero Set integer_count to zero
FOR index = 1 to 100 integer_total = integer_total + number(index) ENDFOR integer_average = integer_total / 100
FOR index = 1 to 100 IF number(index) > integer_average THEN add 1 to integer_count ENDIF ENDFOR Display integer_average, integer_count END
วนลปหาคาเฉลย
ถาหากขอมลใดสงกวาคาเฉลย
ใหเพมตวนบ
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 166 of 229
13
ผงงานของปญหาในตวอยางท 10.10
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 167 of 229
14
10.3 ตวแปรอารเรยในภาษาซ การประกาศตวแปรอารเรยในภาษาซนนจะเปนการจองหนวยความจาของคอมพวเตอรใหเกบขอมลแบบตอเนองกนไป ถาหากเปนอารเรยแบบ 1 มตจะเกบขอมลตอเนองกนไปเปนแถว การประกาศตวแปรจะใชชอเพยงชอเดยวแลวตามดวยเครองหมาย [ ] ครอมคาตวเลขทบอกจานวนของขอมลทตองการ โดยมรปแบบดงน type var_name[size] หรอ ประเภทของขอมล ชอตวแปร[จานวนสมาชก] โดย type เปนประเภทของขอมลทใชเกบในอารเรย var_name เปนชอของตวแปรอารเรย และ size เปนจานวนเซลขอมลในอารเรย ตวอยางเชน ถาตองการประกาศตวแปรอารเรยชอ A สาหรบเกบจานวนเตมจานวน 10 จานวน สามารถเขยนไดดงน int A[10]; อนเดกซของอารเรยในภาษาซจะเรมตนท 0 และเมอประกาศตวแปรอารเรยขนมาแลวจะสามารถใชงานไดเหมอนกบตวแปรทวไป ตวอยางเชน ถาหากตองการใสคา 150 เขาไปในเซลแรก และใสคา 200 ลงไปในเซลสดทายของอารเรย A จะเขยนไดดงน A[0] = 150; A[9] = 200; โปรแกรมท 10.1 เปนตวอยางทประกาศอารเรยสาหรบเกบขอมลจานวน 4 เซล แลวใหรบขอมลจากแปนพมพมาเกบในอารเรย จากนนนาขอมลทงหมดมารวมกนแลวแสดงผลรวมออกทางจอภาพ #include "stdio.h" #include "conio.h" main() int A[4]; /*ตวแปรอารเรยเกบขอมลได 4 เซล */ int sum = 0; /*ตวแปรเกบผลรวม */ printf("Input Number 1 : "); scanf("%d",&A[0]); printf("Input Number 2 : "); scanf("%d",&A[1]); printf("Input Number 3 : "); scanf("%d",&A[2]); printf("Input Number 4 : "); scanf("%d",&A[3]); sum = A[0] + A[1] + A[2] + A[3]; printf("Sum = %d\n",sum); getch();
ผลลพธการรนโปรแกรม
คาทปอนเขาไป 4 คา
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 168 of 229
15
จากตวอยางโปรแกรมจะพบวาการใชคาสง scanf() ในการรบขอมลมาเกบในอารเรยจะใชไดคลายกบตวแปรทวไป โดยเซลของอารเรยทเกบขอมลจะถกระบโดยอนเดกซ ในการประกาศตวแปรอารเรยนนเราสามารถกาหนดคาเรมตนใหกบตวแปรอารเรยได โดยมรปแบบดงน type array_name[size] = value-list โดยขอมลทกาหนดตองอยในเครองหมายปกกา ถาหากมขอมลหลายตวจะใชเครองหมาย , คน ตวอยางเชน ถาหากตองการกาหนดคาเลขจานวนเตมใหกบตวแปรอารเรยชอ A จานวน 5 ตว สามารถเขยนไดดงน int A[5] = 1, 8, 4, 9, 7; หรอถาหากตองการกาหนดคาใหกบอารเรยเปนตวอกขระสามารถทาไดดงน char A[3] = ‘A’, ‘B’, ‘C’; โปรแกรมท 10.2 จงแสดงแนวคดและเขยนโปรแกรมรบจานวนเตมเขามา 10 คา จากนนใหหาคาเฉลย แลวแสดงออกทางจอภาพ วธทา ปญหานสามารถเขยนอลกอรธมไดคลายกบตวอยางท 10.9 โดยวเคราะหปญหาไดดงน ขอมลอนพต รบขอมลจานวนเตมเขามา 10 คา เอาตพตทตองการ แสดงผลคาเฉลยออกทางจอภาพ การประมวลผล รบคะแนนเขาไปทละคาจนครบ 10 คา นาคะแนนทงหมดมาบวกกน หาคะแนนเฉลย แลวแสดงผล สาหรบโปรแกรมภาษาซเขยนไดดงน #include "stdio.h" #include "conio.h" main() int number[10], i, sum = 0; /*ประกาศตวแปรอารเรย ตวแปรสาหรบนบลป และตวแปรเกบผลรวม */ for(i = 0; i<10; i++) printf("Input Number %d : ",i); scanf("%d",&number[i]); for(i = 0; i<10; i++) sum = sum + number[i]; printf("The average is %.2f\n",sum/10.0); /*หาคะแนนเฉลย แลวแสดงผล */ getch();
รบคะแนนเขาไปทละคาจนครบ 10 คา
นาคะแนนทงหมดมาบวกกน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 169 of 229
16
จากการเขยนโปรแกรมจะพบวาการเกบตวเลขทงสบคานนจะนาตวแปรแบบอารเรยมาใช จากนนเขยนโปรแกรมแบบวนลปรบขอมลเขาไปเกบทละคา จากนนวนลปนาขอมลทงหมดมาบวกกน แลวนาผลลพธทไดมาหารดวย 10 เพอหาคาเฉลย จากปญหานสามารถเขยนโปรแกรมใหสนลงไดโดยรวบการคานวณหาผลรวมไวในลปของการรบขอมล ทาใหโปรแกรมทาลปเพยงครงเดยว โดยโปรแกรมใหมเขยนไดดงน #include "stdio.h" #include "conio.h" main() int number[10], i, sum = 0; for(i = 0; i<10; i++) printf("Input Number %d : ",i); scanf("%d",&number[i]); sum = sum + number[i]; printf("The average is %.2f\n",sum/10.0); getch();
ตวแปรอารเรยแบบ 2 มต อารเรยแบบ 2 มต จะเปนการเกบขอมลในแนวแถวและหลก การอางถงเซลในอารเรยจะตองใชอนเดกซทอางไปยงแถวและหลก การเกบขอมลบางประเภทนนตวแปรอารเรยแบบมตเดยวจะทางานไมสะดวกซงอาจตองใชตวแปรอารเรยแบบ 2 มต เชนการเกบคะแนนของนกศกษา 4 คน แตละคนมคะแนน 4 วชา โดยโครงสรางการเกบขอมลเปนดงรปตอไปน การเกบขอมลของนกเรยนแตละคนจะเกบในแนวแถว สวนการเกบคะแนนแตละวชาจะเกบในแนวหลก การประกาศตวแปรอารเรยแบบ 2 มตน จะใชดชน 2 ตว เพอระบจานวนสมาชกในแตละแถวและหลก ดงรปแบบตอไปน
รบขอมลเขามาแลวหาผลรวมทนท
ขอมลทปอนเขาไปทละคา
วชา นกเรยน
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 170 of 229
17
type array_nameRow] [ Column] ตวอยางเชน int AB[2][3] หมายความวาเปนการประกาศตวแปรชอ AB สาหรบใชเกบเลขจานวนเตม มสมาชกทงหมด 6 ตว (2 x 3) การอางสมาชกแตละตวทาไดดงน แถวท 0 AB[0][0] , AB[0][1] , AB[0][2] แถวท 1 AB[1][0] , AB[1][1] , AB[1][2] ตวแปรอารเรยแบบ 2 มตน สามารถกาหนดคาเรมตนใหกบอารเรยไดเชนกน ตวอยางเชน int sqr[3][3] = 1 , 2 , 3, 4 , 5 , 6 , 7 , 8 , 9 ; เปนการประกาศตวแปรชอ sqr เปนตวแปรอารเรยแบบ 2 มตสาหรบเกบเลขจานวนเตม โดย sqr[0][0] เกบคา 1 sqr[0][1] เกบคา 2 sqr[0][2] เกบคา 3 ตามลาดบ
แบบฝกหดทายบทท 10 ตอนท 1 จงตอบคาถามตอไปนพอสงเขป
1. ทานคดวาขนาดของตวแปรอารเรยหาไดอยางไร 2. งานประเภทใดทควรใชการเกบขอมลแบบอารเรย 3. งานในลกษณะใดควรใชการประมวลผลอารเรยแบบขนาน 4. จงเปรยบเทยบขอดขอเสยระหวางการเกบขอมลโดยใชตวแปรทวไป กบการประกาศตวแปรแบบ
อารเรย 5. จากตวอยางท 10.6 ถาไมใชหนวยความจาแบบอารเรยจะไดหรอไม และเขยนอลกอรธมไดอยางไร
ตอนท 2 แบบฝกหดฝกทกษะการเขยนรหสเทยมสาหรบการประมวลผลแบบอารเรย 1. จงเขยนรหสเทยมสาหรบรบขอมลเขาไปเกบจานวน 10 คา จากนนใหคอมพวเตอรแสดงคาทงหมด คา
ผลรวมของขอมล คาสงสด และคาตาสด 2. จากขอ 1 ถาหากไมใชอารเรยจะเขยนรหสเทยมไดอยางไร และมสวนใดททาไมไดบาง
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 171 of 229
18
3. ถาอารเรย A เปนตวแปรทม 20 เชล จงเขยนซโดโคดสาหรบเกบตวอกขระภาษาองกฤษ 20 ตวแรกลงไป พรอมทงนาออกมาแสดงผล
4. รานคารานหนงจะมสวนลดใหลกคาตามยอดทซอดงน ยอดสนคาไมเกน 10,000 ลด 5 % ยอดสนคามากกวา 10,000 แตไมเกน 30,000 ลด 10 % ยอดสนคาเกน 30,000 ลด 15 %
ถาหากโปรแกรมรบยอดซอเขาไป แลวแสดงยอดเงนทมสวนลดแลวออกมา จงเขยนซโดโคดแบบใชอารเรย และไมใชอารเรย
5. นกเรยนหองหนงม 40 คน เรยนวชาฟสกส คณตศาสตร และเคม จงออกแบบแนวทางการพฒนาโปรแกรม ทสามารถเกบคะแนนทง 3 วชาของนกเรยนเขาไป แลวแสดงผลเปนคะแนนรวมของคะแนนแตละคนได
6. จากขอ 5 จงออกแบบแนวทางการเขยนโปรแกรมยอย ถาหากตองการทราบวาผทไดคะแนนสงสดคอใคร คะแนนตาสดคอใคร และใครบางทมคะแนนสงกวาคาเฉลย
รองศาสตราจารย ธรวฒน ประกอบผล
28/04/2010 172 of 229
1
()
(SP2) / .. 2
BCPL
B
C
1. 1.
PDP-7(UNIX).. 2513
.. 2515 !
Basic CombinedProgrammingLanguage
(SP2) / .. 3
# header 1main( ) /* */
declaration 2
'''()) * 3
2. -).)/01234)5672. -).)/01234)567
(SP2) / .. 4
1 89:;.74 </=4>? @()@(;A:1<. -A?;.()B 04); ? # C# include <stdio.h>@89:;.(<H=> stdio.h @8<H=>1 /04B I:C.()4?J:<H=>1 :C.)<A.
;04 # define START 0@@(;A):;.@8Q START -A?:;. 0
;04 # define temp 37@@(;A:;.Q temp @8 37
(SP2) / .. 5
2 declaration @@(;ACA3.4 J=B:C.:-Q@ 7T)Q;043.4 J=) * 1B.4)IJ@@U(declare) :1@4 BT)B I(<:C.:-Q@ <A. C
int stdno;@@(;AQ stdno 3.4 J=CAB(W ;04 interger 7T)4B<A.Q@ 0,4,-1,-3,'. .
float score;@@(;AQ score 3.4 J=CA=3 B9AU? (floating point)7T)4B 0.23, 1.34, -21.002, .
(SP2) / .. 6
3 Body 0434)-Q@ -A?B.4) .A.?H^)@>Cmain ( ) Q=.:04); ?@(;A3483 .34)-Q@ 04 ;=)B@1:();04H^)@>C) * -A?Q=();04H^)@>C1 * B.4)_AA.?04); ? ; 04.4)@B8-Q@ :;.:04); ? _A.? C
main ( ) /* .-Q@ */
()) * ;H^)@>C;'''''''''...
/* B8-Q@ */
28/04/2010 173 of 229
2
(SP2) / .. 7
04); ?) *
- @(;A3483;048=W4@34)H^)@>C( ) - @89b;044>@ >:;.@8H^)@>C
I.5?:)=W8< 3.4 :A * QA)< b.4)@89(;8H^)@>C1 *
/* */ - @@(;A comment ;043.4 < .4)@:;.4 </=4>c8) 7T)3.4 4?J5?:04); ?1BI04 < :C()c8)
(SP2) / .. 8
# include <stdio.h>int main (void )
printf(%Hello, Good morning. \n+);
4?)-Q@
-Q@ 1
"#$%&'( Hello, Good morning.
(SP2) / .. 9
! 2
# include <stdio.h>main ( )
float point;printf("\n\nPut your score in\n");scanf("%f", &point);printf("Your score is %f point\n\n", point);
"$)*)+,!-$( point .*$/$0#$1.'%Q
(SP2) / .. 10
&&'2**)-$(1 &&'2**)-$(1
;=@@ A)11. .4)3T1.A.?4@62. ;. :C.04); ?)dU>:C04Q3. I:C.04); ? underline e_g <A.4. ;. :C. reserved words C int, float, etc.
Note: 4 </=4>:567 I;W Q@)34)C04Q<A.?< @ 8 4@6 Q=C04QBQ@)@I.:C.JQ8834)4@6)@
(SP2) / .. 11
Q883.4 J=;04CA34)Q) * @(;A<.:567char CA34)4@6;044@3int CAB(W @short CAB(W @long CAB(W ? 2 unsigned CA34)=3< A04); ?float CA=3 B9AU? double CA=3 B9AU? ? 2
Q883.4 J=Q=3A
(SP2) / .. 12
6789:;<= 7>?;@ABCDEFGHG(IGJK) LMDJFN=9@AHG
Char 1 HGJFN;FQ ASCII I8: 1 JFNE>;UCD7N7JHVENMDW 0 YZW 255Int 2 LMDJFN=9VENMDW ]32768 YZW 32767Short 2 LMDJFN=9VENMDW ]32768 YZW 32767Long 4 LMDJFN=9VDd ± 2000 =:D7Unsigned Unsigned short = 2
Unsigned long = 4LMDJFN=9VENMDW 0 YZW 65535LMDJFN=9VENMDW 0 YZW 4000 =:D7
Float 4 I8:LMDJFN=9hCD=FW 10x 8h x ALMDVENMDW ]37 YZW +38Double 8 LNDY<J:;W9;WJFN=9UVALMDB<W9Z?7
-#0!1.,((/3*),-$(*&!+&&'2*-,*)
28/04/2010 174 of 229
3
(SP2) / .. 13
:@3?-Q@ Q883.4 J=:C.BQ8)44@ 4 @=9 :;l A)1
3.4 J=Q=QCA4@3
3.4 J=Q=QCAB(W
3.4 J=Q=QCA=3 B9AU?
3.4 J=Q=QQ88)
(SP2) / .. 14
&'2**)-$( $&)
1 4@3QA.? char -A?4?J5?:04); ? e g C
# include <stdio.h>main ( )
char reply;
reply = myn;ooooooo
(SP2) / .. 15
@:;.4@3;/U6;04;89 4@3;=1< I:;.-A?) QB(<A.-A?@:;.
; ASCII 7T)B3?:J34)=32QA -A?:C.04); ? e\g (;. ;04:C.4@3@(;A:;.@8;1 * 3? 04); ? e\g (;8;8) C
; BELL QA.? ASCII 007 7T)@(;A<A.A)1beep = e\007g;
;04;89 @3T18A:; 4@3@(;A:;.@8; 04 n I@(;A newline = e\ng;
(SP2) / .. 16
4?)-Q@
# include <stdio.h>main ( )
char newline;
newline = m\nn;printf(%Hello, Good morning. %c+,newline);printf(%Hello, Good morning.\n+);
(SP2) / .. 17
&'2**)-$( /3(-+
B(W :567 I:C.Q<A. 4 JQ8804 int, short, long Q= unsigned (;8@@(;AQQ88 unsigned 04B(W < A04); ?1B.4):C.8J@8JQ883.4 J=B(W CA40 * 04 int ;04 short ;04 long 4?)C
unsigned int plusnum;unsigned long width;unsigned short absno; /* absolute number */
(SP2) / .. 18
&'2**)-$( *&/4!
(;8=3 B9AU? 1Q<A. 2 Q8804 float Q= double -A? double @W8<A. 2 34) float (;8))?U>.4)@ =4?A:@@W8 @:C.@@W8:JQ881 04@W8Q884W@-/7> A)4?)4<1
=3 QA)Q88?U> Q884W@-/7>9,000,000,000 9.0*109 9.0e9345,000 3.45*105 3.45e50.00063 6.3*10-4 6.3e-40.00000924 9.24*10-6 9.24e-6
28/04/2010 175 of 229
4
(SP2) / .. 19
&'2**)-$(#-
); ?IT)4@3;=? * @48@3.4 7T)@(Q;=? * @W8 @:5671?@ 4?>(array) A)13.4 J=Q88)04 4?>34)4@3 4)
04); ?34)4?>04 [ ] JQ88@@(;A)BT) =@6dA)1
char name[30];; ?IT) Q name CA char ? 30 4@6-A?@W8 4?> @@W81B@W8?)@=<8> Q=<8>9A.?@W8; null 04 \0 A)1B@W8<A.B)/?) 29 4@6
(SP2) / .. 20
@@(;A:;.Q4B(<A.-A?@(;A:-Q@
;04@(;A:3d @@(;ACA@W<A. Cmain ( )
int age = 18;float height;
height = 172.5;printf(%Mr. Surasak is %d years old+,age);printf(% and tall %f cms.\n+,height);
(SP2) / .. 21
4?)34)-Q@ :@@(;AQ=)b==/v># include <stdio.h>main ( )
int sum,valuea;int count = 1;
valuea = 4;sum = count + valuea;printf(%Total value is %d.\n+,sum);
b==/v>B@c3.4 : Total value is 5.
(SP2) / .. 22
printf( ) scanf( )
JQ8834) printf ( )printf( 89 @/ />, 4>@ >, 4>@ >,...)
89 @/ /> ) 3.4 Q=JQ8834)@/ />-A?4?J:04); ? w x
4>@ > B(3.4 J= / /> JQ88@(;A :89 @/ />
(SP2) / .. 23
JQ88:C.(;8@(;A@/ />:H^)@>C printf%d / />A.?=328%o x x =32QA%x x x =328;@%u x x =328Q88< A04); ?%e x x =3Q88?U> C 2.13e45%f x x =3 B9AU? %g x x JQ88 %e ;04 %f -A?=04@Q88
19A(;8) JQ88@/ />A)1
%c / />A.?4@6A?%s x x3.4
(SP2) / .. 24
04); ?(;88=?JQ8834)3.4 J=
04); ?=8 :;./ />3.4 J=CA3487.? (@3.4 J=1); AB/ />CA3)
)=3 89 @.)34)H_=A>B9AU? @@(;A @.)34)B9AU?
Note @8=?JQ8834)3.4 J=1(<A.-A? @:04); ?;=1;)04); ? % Q=04); ?@(;AJQ88@/ />
28/04/2010 176 of 229
5
(SP2) / .. 25
JQ8834) scanf ( )
scanf( 89 3.4 J=, 4>@ >, 4>@ >,...)
89 3.4 J= @@(;AJQ883.4 J=:04); ? w x
4>@ > B(3.4 J= @W8(:Q) 7T)CA34)3.4 J=.4)) JQ88@(;A:89 3.4 J= @@(;A=@6d4>@ > <A. 2 Q88A)1
I.3.4 J=14BB(<:C.:@(d - B:04); ? & ;.Q
I.3.4 J=13.4 B(<@W8<.:Q=?- < B(.4):04); ? & ;.Q
(SP2) / .. 26
-%*)/%-%*)/%
@Q-444>)dU>(;8567+ @8@- @=8* @Jd/ @;% @;4U6 (- AJ=)
(SP2) / .. 27
@=?CA34)3.4 J=
(<A.-A?89CA.4)@=?5?:04); ? ( )Q=.);.Q;043.4 J=.4)@=?Q=)CA
float money;.4)@=?Q float < integer (<A.A)1
(int) money;
int cost;cost = 2.7+4.5;cost = (int)2.7+(int)4.5;
(SP2) / .. 28
+,- ++n / n 4@ 1- -n =A n =) 1
Q@);) count++ Q= ++count C
count = 5;x = count++; B<A. x @8 5
Q=. count @8 6count = 5;x = ++count; B<A. x @8 6
(SP2) / .. 29
,. (Assignment expression)04); ?:C.@(;A04 =
-A?@@(;A)334)04); ? :;.@8Q4?J)7.? C j = 7+2 ;04 k = k+4
3.4.6 +-9,.+:9;+<:9;> ;04 >= @@ ;04 @@@8
< ;04 <= .4?@ ;04 .4?@@8== @8!= < @8
(SP2) / .. 30
(--,&. = *) ==. = "-$(3.,
1&6)!. == ".! -$(, ,
point = 44;; ?IT) @@(;A:;.@8Q point :;. @8 44
point == 44;.78 "-(/#(,, point ,!,$ 44 .:,
28/04/2010 177 of 229
6
(SP2) / .. 31
+-9,.+:9;+<:9;;;=&& Q= (and)| | ;04 (or)! < (not)
34)/B>?8?8C)@/B> 1 && /B> 2 B) 04/B>1)4)B)/B> 1 | | /B> 2 B) 04/B>:A/B>;T)
B);04 1)4)/B>1B)! /B>?8?8 B) 04/B>?8?8WB
(SP2) / .. 32
ifJQ8834)()
if ()04<3)().4)( I.)04<31B);
4?)C if (score >= 80)
grade = eAg; /* simple statement */;04
if (math >= 60 && eng >= 55) grade = eSg; /* compound statement */
printf(wYour grade is %c\nx,grade);
(SP2) / .. 33
if >.. else >..JQ8834)()
if (();04/B>)04<3)().4)( 04)04<31B)
else ().4)( 04)04<31< B)
4?)C if (value1 > value2)
min = value2;else
min = value1;
(SP2) / .. 34
+-9,+=@<:+:9;+<:9;+AB ? :JQ88<34)()?8?8)04<3 ? : A)1
/B> 1 ? /B> 2 : /B> 3
; ?04 if /B> 1 B)
( ():/B> 2else
( ():/B> 3
C x = (y< 0) ? -y : y;
(SP2) / .. 35
.;+AB9 E < : switch break
JQ88()switch (/B>)
case label1 : statement1;
case label2 : statement2;'''''..'''''..
default : statementn;
(SP2) / .. 36
4?)switch (ch)
case m1n :
printf(%Red\n+);case m2n :
printf(%Blue\n+);case m3n :
printf(%Yellow\n+);default :
printf(%White\n+);
28/04/2010 178 of 229
7
(SP2) / .. 37
4?)switch (ch)
case m1n : printf(%Red\n+);break;
case m2n : printf(%Blue\n+);break;
case m3n : printf(%Yellow\n+);break;
default : printf(%White\n+);
(SP2) / .. 38
3#$ loop .3#$(033#$ loop .3#$(03
J whileJQ88
while (/B>)04<3)
()=J;'''' compound statements
''''.
(SP2) / .. 39
J forJQ88
for ( /B> 1 ; /B> 2 ; /B> 3 )
()48;''.
():C.:@89 :;. @48();=? * 48
-A?/B> 1 04@@(;A .:;.@8Q:C.:@48/B> 2 @?8?8 @4B48I.)04<334)/B>B)B @() ()48 /B> 3 ():@@(;AB=?Q=)<:Q=48
(SP2) / .. 40
;;;<:.;+AB<: : do whileJQ88
dostatement;
while (/B>)04<3);
C num = 2;do
num++;printf(wNow no is %d\nx,num);
while (num == 10)
(SP2) / .. 41
3#$(4 ; break, continue, goto *) labels3#$(4 ; break, continue, goto *) labels
break:C. 04.4)@:;.@() I;=9A44@B@=JQ=@-AA
<?)()4?J4@=J -A?< .4)B48)04<3:A *
continue:C. 04.4)@:;.@()1 ?.4@=8<48:; 4@1)
7T) =@6d)3. @8() break
(SP2) / .. 42
goto labels() goto @48A.? 2 04 - () goto ():;.@-AA<?)(Q;)@(;A
-A?B@(;AC04 ?@ label name- C04 (label name) @(;A(Q;)()B@-AA
<()
3.4) ! ()1I04();=@=?):@3?-Q@ QI.B(;04;=@=?)< <A.1 BT)B:C.()1
28/04/2010 179 of 229
8
(SP2) / .. 43
4?)-Q@ :C.() goto#include<stdio.h>main() int sum,n;
for(n=1;n<10;n++)if (n==5)
goto part1;else printf(%%d\n+,n);
part1 : printf(%Interrupt with no. 5\n+);
(SP2) / .. 44
( (Function)Function)
(SP2) / .. 45
yzWK6F7yzWK6F7 ( (Functions)Functions)
@44@Q88-Q@ :567B4?J8/01234)@44@Q88- AJ= (Module Design) -A?@Q8)-Q@ 44@)?4? * (;04- AJ=) Q=)?4?B()4?):A4?);T)1 Q=< B 3A:;lB@< )?4?;=1 04(<3?-Q@ :567B@3?:=@6d34)H)@>C
(SP2) / .. 46
83.4 J= 2 B(B@bJ.:C.
8@=3 2 B(Q=.@W8b==/v>
QA)b==/v>34)@()
-Q@ /048@=34)B(8B@bJ.:C. Q=QA)b=@(d
IQ8)@())?4?<A.A)1
(SP2) / .. 47
H^)@>C@83.4 J=
H^)@>C:@8@=3
H^)@>CQA)b==/v>
B<A.-Q@ @48A.?H^)@>C 4 H^)@>C04
H^)@>C;=@
()
(SP2) / .. 48
Source filefunctionfunctionfunction
Source filefunctionfunctionfunction
Object file
Object file
Library file
Execute file
compile
compile
link
link
link
314@.)-Q@ A.?56 C
28/04/2010 180 of 229
9
(SP2) / .. 49
4.1 JQ8834)H)@>C
CA3.4 J=0 C04H)@>C ( @@UQ )
@@UQ5?:H^)@>C;();return (3.4 J=.4)@)@=8);
int , char , float , double =Q88 1
(SP2) / .. 50
JQ8834)H^)@>C (4)
void C04H^)@>C ( @@UQ )
@@UQ5?:H^)@>C;();
Q88 2
(SP2) / .. 51
4?) 4.1 QA)@()34)-Q@ @8@=3B(B) 2 B(8B@bJ.:C.
#include <stdio.h>double InputDouble ( )
double x;printf ( w\nInput real value : w );scanf ( w%.2f x, &x );return ( x );
(SP2) / .. 52
4.1 (4)
double SumDouble ( double x, double y )
return ( x + y );void PrintOut ( double x )
printf ( w\n Result of sum is : %.2fx, x );
(SP2) / .. 53
4.1 ()
void main ( )
double a1, a2, sumVal;a1 = InputDouble( );a2 = InputDouble( );sumVal = SumDouble ( a1, a2 );PrintOut ( sumVal );
(SP2) / .. 54
4.2 @@U-/-<34)H^)@>C
@@U--<)B(:56704)B@56756:=@6d.4) @@UH^)@>C@4B?@:C.H)@>C1 (Predefined Function)
28/04/2010 181 of 229
10
(SP2) / .. 55
B@4?) 4.1 B;WH)@>C main ( ) B4?J:.H^)@>C40 * @?@:C. =@6d.4)@UH^)@>C.4)@?@:C.@4B@?@:C.H^)@>C1 Q;@.4)@?.?H^)@>C main ( ) 3T1<<.A.8 B.4) @@U--<34)H^)@>C.4)@?@:C.@4 4
(SP2) / .. 56
#include <stdio.h>double InputDouble ( );double SumDouble ( double , double );void PrintOut ( double );
4.2QA)@()34)-Q@ @8@=3B(B) 2 B(8B@bJ.:C. :=@6d @@U--<
(SP2) / .. 57
void main ( )
double a1, a2, sumVal;a1 = InputDouble( );a2 = InputDouble( );sumVal = SumDouble ( a1, a2 );PrintOut ( sumVal );
4.2 ()
(SP2) / .. 58
B;W:--<< @@UC04Q Q@3?534)Q<.5?: @C?:;.4 </=4> IB48B(34)Q 534)Q 534)@0 5?:-Q@ @?@:C.))) * @?@8H)@>C1IJ@.4);04< 4@B@14BBQ?@--<<3?<.:4=JC<H=>@W<A.CA?@
(SP2) / .. 59
4.3 @?@:C.H)@>C
@?@:C.H)@>C @0 B:C.JQ88A)4<1
8 = H^)@>C (4>@ >)
(SP2) / .. 60
a1 = a1 = InputDoubleInputDouble ( );( );:C.J@8--<
double double InputDoubleInputDouble ( );( );
a1 .4) CA double 04)B@B)0@=8 B@H)@>C CA double
28/04/2010 182 of 229
11
(SP2) / .. 61
sumValsumVal = = SumDoubleSumDouble (a1,a2 );(a1,a2 );:C.J@8--<
double double InputDoubleInputDouble ( );( );
a1 Q= a2 .4) CA double
/04:;.)@8CAQ34)4>@ >@U:--<
(SP2) / .. 62
PrintOutPrintOut( ( sumValsumVal ););:C.J@8--<
void void PrintOutPrintOut ( double );( double );
)1.'2'(,<=% $0:,,
(SP2) / .. 63
4.4 3483 ( Scope)
@()34)-Q@ 567B()H^)@>C main ( ) @4 4 04H^)@>C main ( ) ?@:C.)H)@>C40 @WB @)4-= (Control) 89 @()<?)H^)@>C1 * B@BB8H^)@>C ;04/8() return
(SP2) / .. 64
04 @?@:C.)H)@>CB @B4)/01;? B((;8Q.4):C.5?:H^)@>C1 Q= 0419A@()34)H^)@>C@WB @0/01;? B(1@=8J88 @:C.)QQ=B 348334)@:C.)3T14?J@8(Q;)@UQ1
(SP2) / .. 65
a1a2
sumVal
main ( )
xInputDouble ( )
a1 = a1 = InputDoubleInputDouble( );( );
step1step1
B@4?) 4.1 Q= 4.2 IQA)3483@()<A.A)1
(SP2) / .. 66
a1a2
sumVal
main ( )
xInputDouble ( )
a2 = a2 = InputDoubleInputDouble( );( );
()
step2step2
28/04/2010 183 of 229
12
(SP2) / .. 67
a1a2
sumVal
main ( )
xsumDouble ( )
sumValsumVal=SumDouble(a1,a2)=SumDouble(a1,a2)
()
Step3Step3
y (SP2) / .. 68
a1a2
sumVal
main ( )
xPrintSum ( )
PrintSum(sumValPrintSum(sumVal););
()
step4step4
(SP2) / .. 69
B;WQ x @U:Q=314B()4?J5?:H)@>C @@U1 Q=:C./01:@@W83.4 J==@
3483@()34)QQ=B@(;A4?J5?8=W4@34)()5?:04); ?@@ ( ) ;04@@U:C)34)@@UH)@>C ?@Q
;=1 QQ-=4=-=4= (Local Variable)(Local Variable)
(SP2) / .. 70
4@B@1 I@UQ<.5?4@H)@>C8d 34)-Q@ B?@ QQ-@-@==84=84= (Global Variable)(Global Variable) 7T)Q I?@:C.(Q;):A * :-Q@ @W<A. ?@.:@d @@UQ C04A?@Q-@=84=5?:8=W4@;04H^)@>C
(SP2) / .. 71
#include <stdio.h>int x;void func1 ( )
x = x + 10;printf ( wfunc1 -> x : %d\nx, x );
4.3 QA)@()34)-Q@ :=@6d Q-@=84= QA)3483@:C.)34)Q5?:-Q@
(SP2) / .. 72
void func2 ( int x )
x = x + 10;printf ( wfunc2 -> x : %d\nx, x );
void func3 ( )
int x=0;x = x + 10;printf ( wfunc3 -> x : %d\nx, x );
4.3 ()
28/04/2010 184 of 229
13
(SP2) / .. 73
void main ( )
x = 10;printf ( wmain (start) -> x : %d\nx, x );func1 ( );printf ( wmain (after func1) -> x : %d\nx, x );func2 ( x );printf ( wmain (after func2) -> x : %d\nx, x);func3 ( );printf ( wmain (after func3) -> x : %d\nx, x);
4.3 ()
(SP2) / .. 74
main (start) -> x : 10func1 -> x : 20main (after func1) -> x : 20func2 -> x : 30main (after func2) -> x : 20func3 -> x : 10main (after func3) -> x : 20
4.3 ()
>*!3
(SP2) / .. 75
9:;<=GGLWB:DW=Vh<7Ah7(Structures and Unions)
(SP2) / .. 76
5.1 LND<:@FNIAhNFGLWB:DW
(0,0)
(4,3)
EDJ:;WDHG9:;<=U8G77L;;87@ UVV;GI9:;<=7 x =V y |79:;<=UCD7N7JHV@ int V@9:;<=@A~6:I8:MV@9:;<=GGLWB:DW BDDYVDV@
9:;<=@A~6:8FW7A?
(SP2) / .. 77
struct point int x;int y;
;
@@U53.4 J=53.4 J=Q88-).)
Member
-9+N =-,O9 struct .PA..QR ; <:9JO9 struct <:9JO9 struct
+:9 -=QR (SP2) / .. 78
struct point int x;int y;
x, y , z;
@@UQ3.4 J=Q3.4 J=Q88-).)
-9+N .+PB struct .=A-PA A--:=.A--S struct R ;-A:
Q88 1
28/04/2010 185 of 229
14
(SP2) / .. 79
struct point int x;int y;
;
struct point x,y,z
Q88 2 @@U
Q883.4 J=-).)
@@UQ
3.4 J=Q88-).)
(SP2) / .. 80
struct point pt = 320,200;
@@(;A .:;.@8Q3.4 J=Q88-).)
struct_name.member
@4.)IT) C@5?:Q3.4 J=Q88-).)
(SP2) / .. 81
04.4)@4.)IT) C@5?: struct4?J)@8B9A:A8Q@-44AB:C.
printf ( T%d, %dW, pt.x, pt.y );
;04;@.4)@(d?)B;)B@B9A . (0, 0) :A I:C.
double dist, sqrt (double);dist =sqrt ((double)pt.x * pt.x +(double)pt.y * pt.y );
4?)
(SP2) / .. 82
; ?;9 C@34)3.4 J=5 struct 4BBQ5:A@W<A. 1)3.4 J=/012 Q=
53.4 J=40 * C 4?> Q=?)@U Q34)3.4 J=5 struct <A.4@A.?
4?)
pt2
pt1
;@.4)@@W83.4 J=34);=? A)J
I(@@UQ<A.A)1
(SP2) / .. 83
struct rect struct point pt1;
struct point pt2; ;
struct rect screen;int co_x;co_x = screen.pt1.x
@@UQ883.4 J=-).)
@@U Q3.4 J=Q88-).)
@4.)IT) C@
(SP2) / .. 84
5.2 DHG9:;<=GGLWB:DW
@@W83.4 J=Q88-).)5?:;? B(B@W8 =(A8 @@U C@34)3.4 J=1 -A?<3.4 J=Q88-).)B@483T1B@3.4 J=;=? * CA Q=3.4 J=Q=CA @B @B4)/01:C.)Q)@ 04)B@@B4)/01;? B(:88:;lBB4)Q4AA;A.? 2 ;04 4 =)
28/04/2010 186 of 229
15
(SP2) / .. 85
struct alignment int num1;char ch;int num2;
example;
4?)
num1 ch num2
member
0 2 3 4Byte Offset
B;W num2 B< I:C./01A@8 ch <A. 04)B@ num2 3.4 J=5=3B(.4):C./01 Q4AA;A.? 2 ;04 4 =) (:;.@A)< I( :C.-?C><A. /1@@U C@34)-).)B b=4@:C./01:;? B(A.?
(SP2) / .. 86
5.3 D~6:9:;<=GGLWB:DWFGyzWK6F7
@()34)Q5-).) I()) * <A.CA?@8Q40 * ?@.@?8?8Q struct @8Q struct 04)B@3.4 J=34)Q struct B@W84?J:Q C@34) struct @?8?8BT).4)(bQ C@34) struct 1 @:C.)Q struct @8H)@>C I(<A.;=?=@6d 1)@:;.H)@>C0 struct @)4@ >:;.H)@>CQ struct
(SP2) / .. 87
4?) 5.1H)@>C:C.:@@(;A:;.@8Q struct
struct point makepoint ( int x, int y )
struct point temp;temp.x = x;temp.y = y;return temp;
-9+N 9:R <:< ;+J;;_
(SP2) / .. 88
@?@:C.)H)@>C
struct rect screen;struct point middle;struct point makepoint ( int, int );screen.pt1 = makepoint ( 0, 0 );screen.pt2 = makepoint ( XMAX, YMAX );middle = makepoint ((screen.pt1.x + screen.pt2.x) / 2,
(screen.pt1.y + screen.pt2.y) / 2 );
(SP2) / .. 89
4?) 5.2 H)@>C@8@ x Q= y 34)B9A 2 B9A Q=0b=34)@8@ struct
struct point addpoint(struct point p1, struct point p2)
p1.x += p2.x;p1.y += p2.y;return p1;
-9+N 9:R,+-<;; struct ;
(SP2) / .. 90
4?) 5.3 H)@>C@;B9A4?J:/01;=? ;04<
int pinrect ( struct point p, struct rect r )
return p.x >= r.pt1.x && p.x < r.pt2.x && p.y >= r.pt1.y && p.y < r.pt2.y;
-9+N 9:R+^.N<:;N9JR<::+:9-A- _9.NR<::+:9-+^,+-< ; .N9JR<::+:9-.1 .N9JR<::+:9-.+^ 0
28/04/2010 187 of 229
16
(SP2) / .. 91
JFN6A?=V;DKhK(Pointer and Array)
(SP2) / .. 92
<@A 6.1 D@79:;<=~7E7MNhLNDUCD9;WJFNV@>?7D7
int i;i 400
402404
i = 10;i 400
402404
10
int i;i = 10;
6.1 JFN6A?FG;88B (Pointers and Address)
(SP2) / .. 93
p
i
360
400
400
10
p
i10
p
i10
<@A 6.2 D@79:;<=~7E7MNhLNDUCD9;WJFNV@JFN6A? (SP2) / .. 94
6.2 DVDJFNV@JFN6A?
@@UQ5/4?>4>B:C. Unary Operator * * 7T) C04?@ Indirection ;04 Dereferencing Operator -A?B.4)@U534)Q/4?>4>:;.4A=.4)@8534)Q.4)@ (?@.Q/4?>4>5 void IC1<?)Q5:A@W<A.)
(SP2) / .. 95
int *ip;
@@UQ ip :;.Q/4?>4>C1<?)Q5 int
double *dp, atof(char *);
@@UQ dp Q/4?>4>C1<?)Q5 double Q=@UH)@>C atof / 4>Q/4?>4>5 char
4?)
(SP2) / .. 96
6.3 DCDE78LMD=VD;MD7LMDJFNV@JFN6A?
@@(;A:;.@8Q/4?>4>B@@(;AQ4AA34)Q 54A=.4)@8534)Q/4?>4>1 -A?@:C. Unary Operator && -444>4.)IT)Q4AA34)44BW (Object) :A *
28/04/2010 188 of 229
17
(SP2) / .. 97
int x = 1, y = 2;int *ip, *iq;ip = &x;y = *ip;*ip = 0;y = 5;ip = &y;*ip = 3;iq = ip;
<@A 6.3 DCDE78LMD=VD;MD7LMDJFNJFN6A? (SP2) / .. 98
400
500
402
502
x
ip
y
iq
1
2 int x = 1, y = 2;int *ip, *iq;
(SP2) / .. 99
x
ip
400
500
y 402
502iq
1
2
400
ip = &x;
(SP2) / .. 100
x
ip
400
500
y 402
502iq
1
1
400
y = *ip;
(SP2) / .. 101
x
ip
400
500
y 402
502iq
0
1
400
*ip = 0;
(SP2) / .. 102
x
ip
400
500
y 402
502iq
0
5
400
y = 5;
28/04/2010 189 of 229
18
(SP2) / .. 103
x
ip
400
500
y 402
502iq
0
5
402
ip = &y;
(SP2) / .. 104
x
ip
400
500
y 402
502iq
0
3
402
*ip = 3;
(SP2) / .. 105
x
ip
400
500
y 402
402 502iq
0
3
402
iq = ip;
(SP2) / .. 106
6.4 JFN6A?=V;DKN7@K9;WyzWK6F7(Pointer and Function Arguments)
04)B@567 @)4@ >:;.@8H)@>CQ88 By Value Q=H^)@>C I0 (return) <A./?);T) ;@.4)@:;.H^)@>C @=?Q=)Q=0@=8 ?)H^)@>C?@:C. @@;T)B.4)(/4?>4>3. C?
(SP2) / .. 107
4?)C ;@.4)@3?H)@>C/04=834)Q 2 b==/v>.4)@<A.B@H)@>C1B 2 34)Q(@=8 ;@4>@ >Qv AB< IQ@.l;1<A. BT).4):C./4?>4>3. C? -A?@)Q4AA34)Q1) 2 :;.@8H)@>CB=834)Q1) 2 b)Q/4?>4>4>@ >34)H)@>C
(SP2) / .. 108
4?) 6.1-Q@ 4?)@=8Q 2 -A?bH)@>C BQA)@)4>@ >:/4?>4>
#include <stdio.h>void swap (int *, int *);
28/04/2010 190 of 229
19
(SP2) / .. 109
void main ( )
int x = 5, y = 10;printf(wBefore swap : x = %dx, x, w, y = %d\nx, y);swap ( &x, &y);printf(wAfter swap : x = %dx, x, w, y = %d\nx, y);
4?) 6.1 (4)
(SP2) / .. 110
void swap (int *px, int *py)
int temp;temp = *px;*px = *py;*py = temp;
4?) 6.1 (4)
(SP2) / .. 111
4>@ >5/4?>4>BC?:;.H)@>C I=?:;.@8Q)3. <A. 04)B@4>@ >1B@W8Q4AA34)Q)3. 04 @=?Q=)34)4>@ >b Dereferencing Operator ( * )34)Q)3. BIJ@=?/.4 @:
(SP2) / .. 112
<@A 6.4 B8WLNDBFF7K9;WDBMW;DKN7@KGG;h7KJ;KFGyzWK6F7
xy
in main ( )
pxpy
in swap ( )
(SP2) / .. 113
6.5 JFN6A?FG;DKhK (Pointer and Arrays)
4>?>53.4 J=@W8C9A34)3.4 J=5A?@ @:C.@8@().4)()
@8QCAA?@;=? @(); 04@ C Q34)@UT@65?:;.4) 20 . 4>?>:567B(;=@@34)/4?>4>3. :C. @():A * 34)4>?>
I:C./4?>4>3. Q
(SP2) / .. 114
int table[10];@@(;A4>?>C04 table 4>?>5 int C@1); A 10 1)Q table[0], table[1], table[2], ... , table[9] C@5?:4>?>B 0 4 Q= C@9A.?B4?J(Q;)34)3A@U<.=8A.? 1
)%%)%%
28/04/2010 191 of 229
20
(SP2) / .. 115
2! 6.5 #/3*&%%&# 10 -$(
table[0] table[1] table[2] table[9]
table
(SP2) / .. 116
B:C.88AC-A?b04); ? [ ] C 4.)IT) C@ 3 34)4>?>A.? table[2] . @:C.) C@34)4>?> I:C.)<A.; 04Q/012<
'78# 1%%'78# 1%%
(SP2) / .. 117
sumThird = table[0] + table[1] + table[2];table[0] = 5;if ( a[0] > a[9] )
printf (wFirst is greater than last\nx );
4?)
(SP2) / .. 118
I4.)IT) C@9@5?:4>?>4?)4 5?:348334)3A<A.@U4>?><. Q@:C.4>?> @B@3.IT) C@:=@6d<-A?:C.Q5 int C?
(SP2) / .. 119
:;. i, j, k Q5 int
for (int k = 0; k < 9; k++) printf (wValue at %d = %d\nx, k+1, table[k]);
table[i + j] = 0;table[7 table[j]] = j;
4?)
(SP2) / .. 120
:567B< @@(;A:;.B48348334)4>?> -Q@ 4>B.4)/?? 3?-Q@ @?3.4)@8 C@34)4>?>5?:3483@U4>?><. ;@ @4.)4)IT) C@4>?>4@3483<A.89<. C table[12] )<A.04@<43.4 J=:/0134);? B(4BB@W834)Q40 ;0440:A< 4BAA<A.
#!-')($
28/04/2010 192 of 229
21
(SP2) / .. 121
4?) 6.2 :;.434)B(W 5 B(B@?>84>A Q=QA)b=:=(A8@=8@
# include <stdio.h>#define SIZE 5main ( )
int k;int table[SIZE];for (k = 0; k < SIZE; k++)
scanf (w%dx, &table[k]);for (k = SIZE-1; k >= 0; k--)
printf (w%d\nx, table[k]); (SP2) / .. 122
C@34)4>?>4B53.4 J=/012:A * @W<A. ;044B3.4 J=5 Enumeration C
#define TSIZE 10#define NAMESIZE 20#define ADDRSIZE 30enum month JAN, FEB, MAR, APR, MAY,
JUN, JUL, AUG, SEP, OCT, NOV, DEC
(SP2) / .. 123
typedef enum month Month;int age[TSIZE];float size[TSIZE+1];Month date[8];char name[NAMESIZE], address[ADDRSIZE];
(SP2) / .. 124
6.6 D~6:JFN6A?FG;DKhK
@():A * 34)4>?> I:C./4?>4>3. C? 7T)B(:;. W:@()J)3T1 4>?> a Q=/4?>4> pa A)1
int a[10];int *pa;
@(;A:;./4?>4> pa C1<?)4>?> a A.?()pa = &a[0]; /* ;04:C.() pa = a; */
pa B@W8Q4AA .34)4>?> a
(SP2) / .. 125
J 6.6 QA)C1C1<?)Q4AA .34)4>?>
a[0] a[1] a[2] a[9]
a
pa
(SP2) / .. 126
@(<:C.)B I44>?>b/4?>4><A.A)1
x = *pa;B@@(;A:;. x @8 a[0] @=04<4 C@(Q;)) * 34)4>?>b)/4?>4> I(<A.-A?@/ /4?>4>3T1 1 /04=04<?)(Q;)IA< ;04/ 3T1 N /04=04< N (Q;) ;044BB=A/04=04(Q;)=)
28/04/2010 193 of 229
22
(SP2) / .. 127
@d pa C14?J a[0] ()pa+1;
B@4.)IT)Q4AA34) a[1] ;@ pa+i @4.)IT)Q4AA a[i] ;@.4)@4.)IT)3.4 J=5?:34) C@34)4>?>(Q;) a[i] B:C. *(pa+i)
(SP2) / .. 128
J 6.7 QA)@4.)IT)(Q;):4>?>bC1
a[0] a[1] a[2] a[9]
a
pa pa+1
pa+2
(SP2) / .. 129
@):;.8@ 1 ;048@ i ;04 =8 i ; 04@=04<?) C@34)4>?>(Q;).4)@ 04)B@534)3.4 J=Q=534)4>?> C int, float, double Q=40 * 3A34)3.4 J=)@ (:;.3A34) C@5?:4>?>Q=5 3AQ@)@A.? @):;.8@;04=8A.?B(.4)@1B @=<@(;.(d(Q;).4)@:;.4A=.4) @83.4 J=Q=5-A?4-
(SP2) / .. 130
4@B@1?) I:C./4?>4>Q4>?> @4.)-A?:C. a[i] I:C. *(a+i) 04)B@9@1)4.)IT) a[i] 567B(;.Q=) *(a+i) /1@3?:JQ88:A@W:;.b==/v>:@()CA?@ Q=@4.)IT)Q4AA C &a[i] B b=@8@:C. a+i
(SP2) / .. 131
:=@6dA?@@:C.)/4?>4>@W I:C.():=@6d4>?>@W<A. C @4.)IT) *(pa+i) I3?A.? pa[i] @W<A.b=CA?@
)Q@)@34)4>?>Q=/4?>4> 04 /4?>4>Q Q4>?>< :CQ :;. a 4>?>Q= pa /4?>4> @4.)IT) pa = a ;04 pa++ B I4 </=><A. QB< I:C.() a = pa ;04 a++ <A.
(SP2) / .. 132
04 @)C0434)4>?>:;.Q@H)@>C B@)(Q;)Q4AA34) C@Q@34)4>?>:;.Q@H^)@>C A)1/ 4>:H^)@>C1BQ5/4?>4>
28/04/2010 194 of 229
23
(SP2) / .. 133
4?) 6.3 H^)@>C8/ 4>/4?>4> -A?4>@ >) 4>?>
int strlen (char *s)
int n;for ( n = 0; *s != e\0g; s++ )
n++;return n;
(SP2) / .. 134
B;W s /4?>4> :H)@>CB @B483.4 J= @8 e\0g ;04< Q= @=04(Q;)= 1 (83.4 J= ?/ 3T1=1) -A?:C. s++ @?@:C.H)@>C strlen I(<A.;=?=@6d
strlen (whello worldx); /* string constant */strlen (array); /* char array[10] */strlen (ptr); /* char *ptr; */
(SP2) / .. 135
4@B@1?)4BB@U/ 4>5?:H^)@>C strlen <A.: 2 =@6d 04 char *s char *s Q88:4?) ;044BB:C. char schar s[[ ]] @W<A. -A?<B:C.:=@6dQ@ /C?:J.<A. s Q/4?>4> Q=?) I):A34)4>?>:;.Q@H)@>C@W<A. -A?< B(.4)) C@Q@@W<A.C@
(SP2) / .. 136
f (&a[2]) ;04 f (a+2)
@)Q4AA34) C@ a[2] :;.@8H^)@>C f @@UH^)@>C f I(<A.-A?@@U
f (int arr[ ]) ......... ;04 f (int *arr) ............
4?)
(SP2) / .. 137
6.7 DLCD7NdFG;88B
:;. p /4?>4>C1<?)4>?>:A * () p++ @=04 p <?) C@IA< Q=() p += i @=04/4?>4>< i (Q;)B@(Q;)^BB98 4@B@1?) I:C.04); ? /v> (Relational Operator) C ==, !=, <, >= Q=40 * () @8/4?>4><A. :;. p Q= q C1<?) C@34)4>?>A?@
(SP2) / .. 138
p < qBB) 04 p C1< C@4?J@4;. C@ q C14?J @?8?8:=@6dB:C.<A.4 04 p Q= q C1<4>?>A?@1
4@B@1?) I:C.@=8;04@8@@8/4?>4><A.CA?@ Q))04 @(C1B.4)4?J:34833A34)4>?>1
28/04/2010 195 of 229
24
(SP2) / .. 139
4?) 6.3 H^)@>C strlen( ) 89):;.@C83T1
int strlen (char *s)
char *p = s;while (*p != e\0g)
p++;return p-s;
(SP2) / .. 140
04)B@ s C14?J(Q;) . -A? p C1< s CA?@ QB @=04 p <=;T)(Q;) B@(Q;) p C14?JB@8 e\0g 04( p 9A.? =8@8 s (Q;) .@WB<A. ?34)3.4 J=)3.
(SP2) / .. 141
6.8 JFN6A?JFN;FQ=VyzWK6F7 (Character Pointer and Function)
@()@83.4 ;04?@ ) (String) @:C.3.4 J=4@6;=? * ;044>?>34)3.4 J=5 char ;044BB:C./4?>4>C1<?)3.4 J=5 char @()@8)) (String Constant) I3?5?:04) w x
(SP2) / .. 142
wI am a stringx 04 @:C.))B @/01:;? B(@8 ?34)))8@A.? 1 04)B@=@6d@@W83.4 J=53.4 :;? B(B @4@6 null ;04 e\0g 4.? 4/04:;.J.B9A19A34)3.4 J= @B4)/01A)@=B; 04@B4)/0134)3.4 J=54>?> 4>?>34) char
4?)
(SP2) / .. 143
2! 6.8 #/3*+&'2*)! #-1.,((/3
I a m a s t r i n g \0
(SP2) / .. 144
))/8;W<A. 4<A.Q@3.4 :C.:H^)@>C printf ( ) C
printf ( wHello, world\nx );H^)@>C printf ( ) B8/ 4>
/4?>4>C1<?)Q4AA34)3.4 J=(Q;) .34)4>?> Q=(3.4 1QA)44@)49@d>QA)3.4 J= 2
28/04/2010 196 of 229
25
(SP2) / .. 145
:@3?-Q@ B I:C./4?>4>C1<)):A * @W<A. C
char *pmessage = wHello, worldx;pmessage B/4?>4>5 char
C1<4>?>34)4@6 BQ@)B@@:C.4>?><C
char amessage[ ] = wHello, worldx; (SP2) / .. 146
=@6d34)4>?>C amessage B @B4)/01:C.@84>?>3A 13 4@6 1) null =@6d34)/4?>4>C1<?))) B @B4)/01:;.@8))3A 13 4@6CA?@ QB @B4)/01:;.@8/4?>4>Q=(@C1/4?>4>1<?)/0134)))B4)4<.
(SP2) / .. 147
J 6.9 @B4)/01:;.@84>?>Q=C1C1<?)))
H e l l o , w o r l d \0
H e l l o , w o r l d \0amessage
pmessage
(SP2) / .. 148
void strcpy ( char *s, char *t )
int i=0;while ( ( s[i] = t[i] ) != e\0g )
i++;
4?) 6.5 H^)@>C strcpy ( ) (;.(3.4 B@Q;T)<?)4@Q;T)3?:=@6d4>?>
(SP2) / .. 149
void strcpy ( char *s, char *t )
while ( ( *s = *t ) != e\0g ) s++;t++;
4?) 6.6 H^)@>C strcpy ( ) 3?:=@6d/4?>4>
(SP2) / .. 150
void strcpy ( char *s, char *t )
while ( ( *s++ = *t++ ) != e\0g ) ;
4?) 6.7 H^)@>C strcpy ( ) 3?:=@6d/4?>4>Q881
28/04/2010 197 of 229
26
(SP2) / .. 151
@@UQC1 (pointer) C1<?) struct@d@)4@ >Q s t r u c t B< ; @8 s t r u c t 3A:;l 04)B@9@1))Q struct B@(Q:; 3T1 :H^)@>C 7T)B(:;.C.Q==04)/01;? B( B:C./4?>4>3. C?Q@.^l;1
-A?)Q4AA34)Q struct ?)H^)@>C7T)84@ > /4?>4> 4@ >BC1<?)Q4AA .34)Q struct BC?:;.@()W3T1Q==04);? B(.4?=) Q).4))04;@ @=?Q=)4@ >/4?>4>C14?J :Q struct ) ?)H^)@>CB=? -A?4-
(SP2) / .. 152
4?)
struct point origin, *pp;pp = &original;printf ( %origin is (%d, %d)\n+, (*pp).x, (*pp).y );
B<A.Q pp C1<?)3.4 J=Q88-).)C04 structpoint @3? *pp B@4.)IT)-).)
@4.)IT) C@ I(<A.-A?4.)@4.)IT) C@ I(<A.-A?4.) (*pp).x (*pp).x ;04;04 (*pp).y (*pp).y
(SP2) / .. 153
; ?;9 ).4))04 (*pp).x B< ; 04@8 *pp.x 04)B@04); ? . B =(A8 (lJ)@ * (B@Q= ; ? *pp.x B; 04@8@4.) *(pp.x) 7T)B(:;.@A bA/=A3T1
(SP2) / .. 154
@4.)IT) C@4B3?4@=@6d;T)-A?:C.04); ? -> p /4?>4> JQ88@:C.A)1
p->member-of-structureB IQ=)-?@:C./4?>4>
4.) C@34) struct B@4?)3.)8<A.printf ( worigin is (%d, %d)\nx, pp->x, pp->y);
(SP2) / .. 155
;@ /4?>4>C1<?) struct rect A)1struct rect r, *rp = r;
@4.)IT) C@4<1B b=@8@4.)IT) C@A?@
r.pt1.xrp->pt1.x(r.pt1).x(rp->pt1).x
4?)
(SP2) / .. 156
6.9 JFN6A? (pointer) 6A?IhFWLWB:DW (pointer to structures)
/4?>4>Q@W8Q4AA34)Q40 I:C.C1<?)3.4 J=5:A * @:C./4?>4>C1<?)-).) I(<A.A)1
28/04/2010 198 of 229
27
(SP2) / .. 157
typedef struct int day;int month;int year;
Date;
Date today;
Date *ptrdate;
@@UQ883.4 J=-).)
@@U Q3.4 J=Q88-).)
@@UQ pointer C1<
?) -).)
Q88 1
(SP2) / .. 158
struct date int day;int month;int year;
*ptrdate;
Q88 2
(SP2) / .. 159
typedef struct int day;int month;int year;
Date;
typedef Date *PtrDate;
PtrDate ptrdate;
@@UQ883.4 J=-).)
@@U5Q pointer C1<?)-).)
@@UQ pointer C1<
?) -).)
Q88 3
(SP2) / .. 160
@@UQ ptrdate 1) 3 =@6dB I:C.)<A.; 04@1); A
;@.4)@:;. ptrdate C1<?)Q-).) I(<A.A)1
ptrdate = &today;
(SP2) / .. 161
@4.)IT) C@34)-).)bQ/4?>4>ptrdate->day = 7;if ( ptrdate->day == 31 && ptrdate->month == 12 ) .....
scanf ( w%dx, &ptrdate->year );
@4.)IT) C@-).)-A?:C.04); ? ->(*ptrdate).day = 7;if ( (*ptrdate).day == 31 && (*ptrdate).month == 12 ) .....
scanf ( w%dx, &((*ptrdate).year) ); (SP2) / .. 162
#include <stdio.h>struct date /*date template */
int day;int month;int year;
;typedef struct date Date;typedef Date *PtrDate;
4?) 6.8 -Q@ 4?)@:C.C1 (pointer) C1<?)-).)
28/04/2010 199 of 229
28
(SP2) / .. 163
main ( ) Date today;PtrDate ptrdate;ptrdate = &today;ptrdate->day = 27;ptrdate->month = 9;ptrdate->year = 1985;printf ( wToday\gs date is %2d/%2d/%4d\nx,
ptrdate->day, ptrdate->month, ptrdate->year );
4?) 6.8 (4)
(SP2) / .. 164
4@B@1?) I(@@(;A .:;.@8QQ88-).) C
Date xmas = 25, 12, 1986 ;Q=;@ @@(;A .:;.@8 C@34)
-).)< 89@ ;@Q1 external ;04 static 34) C@3A<BIJ@@(;A:;. 0Q;@5 automatic B< IA<A.34) C@<B:A
(SP2) / .. 165
6.10 ;DKhK9;WLWB:DW
@:C.)-).)4@B@:C.:=@6d34)QQ=. ?) I:C.):=@6d34)4?><A.4@A.? C @@W83.4 J=34)/@) B -).):C.@W83.4 J=34)/@)Q= ;@:C.:=@6d34)Q@B I@W83.4 J=34)/@)<A./?) 1 7T)/@)1)864BB ;=?8;04;=?.4? @@W83.4 J=:=@6d1B:C.4?>3. C? C
Person staff[STAFFSIZE];
(SP2) / .. 166
@4.)-A?:C.()) *staff 4.)IT)4?>34)-).)staff[i] 4.)IT) C@ i :4?>staff[i].forename 4.)IT)C04;.34) C@ I 34)4?>staff[i].surname[j] 4.)IT)4@6 j : @9=
34) C@ i 34)4?>
(SP2) / .. 167
@:C.3.4 J= C@Q=B4.)IT)-A?@4.)b88AC; 044>?>< C H^)@>C:C.:@/ />C04 C@89 B?@:C.-A?
print_person ( staff[k] );
JQ88H^)@>C I@(;AA.?void print_person ( Person employee )
@?@:C.) C@8):4>?>34)-).)bH^)@>C
(SP2) / .. 168
;@.4)@?@:C.)H)@>C()@81)4>?> C @?@:C.)H^)@>C(@?)=(A84>?> C04;. B.4))4>?>Q=3A34)4>?><?)H^)@>C1 C
sort_forename ( staff, STAFFSIZE );JQ88H^)@>C I@(;AA.?
void sort_forename ( Person staff[ ], int size )
@?@:C.) C@9@:4>?>34)-).)bH^)@>C
28/04/2010 200 of 229
29
(SP2) / .. 169
@@(;A .:;.@84>?>34)-).) I(<A.-A?
Person staff[ ] = wBloggsx, wJoex, MALE, 21 , wSmithx, wJohnx, MALE, 30 , wBlackx, wMaryx, FEMALE, 25 ;
@@(;A .:;.@84>?>34)-).)
(SP2) / .. 170
6.11 ;DKhKGGE=DhJ (Multi-dimensional Arrays)
B@/012b 04)4>?>B=@6d34)4>?> A? Q4>?>4BB @@ 1 @W<A. C 3.4 J=Q4834)@UT@6Q=5?:C17T)Q8)Q@W8;=? B/8;@.4)@@W83.4 J=Q4834)@UT@6Q= I:C.4>?> A? A)4?)
(SP2) / .. 171
#define NUMBER_OF_PAPERS 5int student [ NUMBER_OF_PAPERS ];
/* int student[5]; */
5.6 8.5 12.6 24.1 16.0student[0] student[1] student[2] student[3] student[4]
(SP2) / .. 172
Q;@/ :;.@W83.4 J=Q4834)@UT@69@ B.4):C.4>?>;=? 3. @?3.4) 4?)C@@W83.4 J=Q4834)@UT@6 2 -A? Q4834)@481)1 5 1)
(SP2) / .. 173
J 6.10 QA)4?)@@W83.4 J=Q34) @UT@6
$0! 1 2 3 4 5
&5.6 8.5 12.6 24.1 16.0
6.0 7.2 15.0 25.0 18.0
(SP2) / .. 174
'78&'2*1%% 2 -
B 4)4>?> 2 :=@6d@48A.?QI(row) Q=4= >(column) -A?3.4 J=4.)4)Q@; ?IT) QI Q=3.4 J=IA 04 4= >
marks[row][column]
row
column
marks[0][0]marks[0][1]marks[0][2]marks[0][8]marks[1][0]marks[1][8]marks[2][0]marks[2][8]
28/04/2010 201 of 229
30
(SP2) / .. 175
B@=@6d .4)@@W83.4 J=A)@=B.4)? 4>?>/04@W83.4 J=:=@6d 2 I@U4>?>A)1
#define NUMBER_OF_PAPERS 5#define NUMBER_OF_STUDENTS 50 int
marks[NUMBER_OF_STUDENTS][NUMBER_OF_PAPERS];/* int marks[50][5]; */
(SP2) / .. 176
-Q@ @84>?> 2
#include<stdio.h>main() float score[10][3];
int i,j;printf(wPlease put score\nx);for(i=0;i<10;i++)
for(j=0;j<3;j++)scanf(w%fx,&score[i][j]);
score[0][0] score[0][1] score[0][2]
score[1][0] score[1][1] score[1][2]
score[9][0] score[9][1] score[9][2]
(SP2) / .. 177
score[0][0] score[0][1] score[0][2]
score[1][0] score[1][1] score[1][2]
score[9][0] score[9][1] score[9][2]
score[2][0] score[2][1] score[2][2]
*$6)&'2* .,((/3
200 202 204 206 208 210
210 212 214 216 218 220
220 222 224 226 228 230
[0][0] [0][1] [0][2] [1][0] [1][1] [1][2]
[2][0] [2][1] [2][2] [3][0] [3][1] [3][2]
[4][0] [4][1] [4][2] [5][0] [5][1] [5][2]
28/04/2010 202 of 229
1
Computer Algorithm :Analysis and Design
Krisana Chinnasarn, Ph.D.Assistant Professor of Computer Science
Web: http://www.cs.buu.ac.th/~krisana
Stacks and Queues
Reading: Chap.3 Weiss
2
Stacks
Stack: what is it?
Applications
Implementation(s)
3
What is a stack?
Stores a set of elements in a particular order
Stack principle: LAST IN FIRST OUT
= LIFO
It means: the last element inserted is the first one to be removed
Example
Which is the first element to pick up?
4
Last In First Out
B
A
D
C
B
A
C
B
A
D
C
B
A
E
D
C
B
Atop
top
top
toptop
A
5
Stack Applications
Real life
Pile of books
Plate trays
More applications related to computer science
Program execution stack (read more from your text)
Evaluating expressions
6
Array-based Stack Implementation
Allocate an array of some size (pre-defined)
Maximum N elements in stack
Bottom stack element stored at element 0
last index in the array is the top
Increment top when one element is pushed, decrement after pop
28/04/2010 203 of 229
2
7
Stack createS(max_stack_size) ::=
#define MAX_STACK_SIZE 100 /* maximum stack size */
typedef struct
int key;
/* other fields */
element;
element stack[MAX_STACK_SIZE];
int top = -1;
Boolean isEmpty(Stack) ::= top< 0;
Boolean isFull(Stack) ::= top >= MAX_STACK_SIZE-1;
Stack Implementation: CreateS, isEmpty, isFull
8
void push(int *top, element item)
/* add an item to the global stack */
if (*top >= MAX_STACK_SIZE-1)
stack_full( );
return;
stack[++*top] = item;
Push
9
element pop(int *top)
/* return the top element from the stack */
if (*top == -1)
return stack_empty( ); /* returns and error key */
return stack[(*top)--];
Pop
10
void push(pnode top, element item)
/* add an element to the top of the stack */
pnode temp =
(pnode) malloc (sizeof (node));
if (IS_FULL(temp))
fprintf(stderr, “ The memory is full\n”);
exit(1);
temp->item = item;
temp->next= top;
top= temp;
List-based Stack Implementation: Push
11
element pop(pnode top)
/* delete an element from the stack */
pnode temp = top;
element item;
if (IS_EMPTY(temp))
fprintf(stderr, “The stack is empty\n”);
exit(1);
item = temp->item;
top = temp->next;
free(temp);
return item;
Pop
12
Algorithm Analysis
push O(?)
pop O(?)
isEmpty O(?)
isFull O(?)
What if top is stored at the beginning of the array?
28/04/2010 204 of 229
3
13
The Towers of HanoiA Stack-based ApplicationGIVEN: three poles
a set of discs on the first pole, discs of different sizes, the
smallest discs at the top
GOAL: move all the discs from the left pole to the right one.
CONDITIONS: only one disc may be moved at a time.
A disc can be placed either on an empty pole or on top of a larger disc.
14
Towers of Hanoi
15
Towers of Hanoi
16
Towers of Hanoi
17
Towers of Hanoi
18
Towers of Hanoi
28/04/2010 205 of 229
4
19
Towers of Hanoi
20
Towers of Hanoi
21
Towers of Hanoi
22
Towers of Hanoi – Recursive Solutionvoid hanoi (int discs,
Stack fromPole,
Stack toPole,
Stack aux)
Disc d;
if( discs >= 1)
hanoi(discs-1, fromPole, aux, toPole);
d = fromPole.pop();
toPole.push(d);
hanoi(discs-1,aux, toPole, fromPole);
23
Is the End of the World Approaching?
Problem complexity 2n
64 gold discs
Given 1 move a second
24
Queue
Stores a set of elements in a particular order
Stack principle: FIRST IN FIRST OUT
= FIFO
It means: the first element inserted is the first one to be removed
Example
The first one in line is the first one to be served
28/04/2010 206 of 229
5
25
Queue Applications
Real life examples
Waiting in line
Waiting on hold for tech support
Applications related to Computer Science
Threads
Job scheduling (e.g. Round-Robin algorithm for CPU allocation)
26
A
B
A
C
B
A
D
C
B
A
D
C
Brear
front
rear
front
rear
front
rear
front
rear
front
First In First Out
27
front rear Q[0] Q[1] Q[2] Q[3] Comments
-1
-1
-1
-1
0
1
-1
0
1
2
2
2
J1
J1 J2
J1 J2 J3
J2 J3
J3
queue is empty
Job 1 is added
Job 2 is added
Job 3 is added
Job 1 is deleted
Job 2 is deleted
Applications: Job Scheduling
28
Array-based Queue Implementation
As with the array-based stack implementation, the array is of fixed size
A queue of maximum N elements
Slightly more complicated
Need to maintain track of both front and rear
Implementation 1
Implementation 2
29
Queue createQ(max_queue_size) ::=
# define MAX_QUEUE_SIZE 100/* Maximum queue size */
typedef struct
int key;
/* other fields */
element;
element queue[MAX_QUEUE_SIZE];
int rear = -1;
int front = -1;
Boolean isEmpty(queue) ::= front == rear
Boolean isFullQ(queue) ::= rear == MAX_QUEUE_SIZE-1
Implementation 1: createQ, isEmptyQ, isFullQ
30
void enqueue(int *rear, element item)
/* add an item to the queue */
if (*rear == MAX_QUEUE_SIZE_1)
queue_full( );
return;
queue [++*rear] = item;
Implementation 1:enqueue
28/04/2010 207 of 229
6
31
element dequeue(int *front, int rear)
/* remove element at the front of the queue */
if ( *front == rear)
return queue_empty( ); /* return an error key */
return queue [++ *front];
Implementation 1:dequeue
32
EMPTY QUEUE[2] [3] [2] [3]
[1] [4] [1] [4]
[0] [5] [0] [5]
front = 0 front = 0rear = 0 rear = 3
J2
J1
J3
Implementation 2:Wrapped Configuration
Can be seen as a circular queue
33
FULL QUEUE FULL QUEUE
[2] [3] [2] [3]
[1] [4][1] [4]
[0] [5] [0] [5]
front =0rear = 5
front =4rear =3
J2 J3
J1 J4
J5 J6 J5
J7
J8 J9
Leave one empty space when queue is full
Why?
How to test when queue is empty?
How to test when queue is full?34
void enqueue(int front, int *rear, element item)
/* add an item to the queue */
*rear = (*rear +1) % MAX_QUEUE_SIZE;
if (front == *rear) /* reset rear and print error */
return;
queue[*rear] = item;
Enqueue in a Circular Queue
35
element dequeue(int* front, int rear)
element item;
/* remove front element from the queue and put it in item */
if (*front == rear)
return queue_empty( );
/* queue_empty returns an error key */
*front = (*front+1) % MAX_QUEUE_SIZE;
return queue[*front];
Dequeue from Circular Queue
36
void enqueue(pnode &front, pnode rear, element item)
/* add an element to the rear of the queue */
pnode temp =
(pnode) malloc(sizeof (queue));
if (IS_FULL(temp))
fprintf(stderr, “ The memory is full\n”);
exit(1);
temp->item = item;
temp->next= NULL;
if (front) (rear) -> next= temp;
else front = temp;
rear = temp;
List-based Queue Implementation: Enqueue
28/04/2010 208 of 229
7
37
element dequeue(pnode &front)
/* delete an element from the queue */
pnode temp = front;
element item;
if (IS_EMPTY(front))
fprintf(stderr, “The queue is empty\n”);
exit(1);
item = temp->item;
front = temp->next;
free(temp);
return item;
Dequeue
38
Algorithm Analysis
enqueue O(?)
dequeue O(?)
size O(?)
isEmpty O(?)
isFull O(?)
What if I want the first element to be always at Q[0] ?
28/04/2010 209 of 229
1
1
Computer Algorithm :Analysis and Design
Krisana Chinnasarn, Ph.D.Assistant Professor of Computer Science
Web: http://www.cs.buu.ac.th/~krisana
Trees. Binary Trees.
Reading: Chap.4 (4.1-4.2) Weiss
2
The British Constitution
Crown
Church of
EnglandCabinet
House of
Commons
House of
Lords
Supreme
Court
Ministers
County
CouncilMetropolitan
police
County Borough
Council
Rural District
Council
3
More Trees Examples
Unix / Windows file structure
4
Definition of Tree
A tree is a finite set of one or more nodes such that:
There is a specially designated node called the root.
The remaining nodes are partitioned into n>=0 disjoint sets T1, ..., Tn, where each of these sets is a tree.
We call T1, ..., Tn the subtrees of the root.
5
Level and Depth
K L
E F
B
G
C
M
H I J
D
A
Level
1
2
3
4
node (13)
degree of a node
leaf (terminal)
nonterminal
parent
children
sibling
degree of a tree (3)
ancestor
level of a node
height of a tree (4)
3
2 1 3
2 0 0 1 0 0
0 0 0
1
2 2 2
3 3 3 3 3 3
4 4 4
6
Terminology
The degree of a node is the number of subtreesof the node
The degree of A is 3; the degree of C is 1.
The node with degree 0 is a leaf or terminal node.
A node that has subtrees is the parent of the roots of the subtrees.
The roots of these subtrees are the children of the node.
Children of the same parent are siblings.
The ancestors of a node are all the nodes along the path from the root to the node.
28/04/2010 210 of 229
2
7
Tree Properties
A
B C
D
G
E F
IH
Property Value
Number of nodes
Height
Root Node
Leaves
Interior nodes
Number of levels
Ancestors of H
Descendants of B
Siblings of E
Right subtree8
Representation of Trees
List Representation
( A ( B ( E ( K, L ), F ), C ( G ), D ( H ( M ), I, J ) ) )
The root comes first, followed by a list of sub-trees
data link 1 link 2 ... link n
How many link fields are
needed in such a representation?
9
A Tree Node
Every tree node:
object – useful information
children – pointers to its children nodes
O
O O
O
O
10
Left Child - Right Sibling
A
B C D
E F G H I J
K L M
data
left child right sibling
11
Tree ADT
Objects: any type of objects can be stored in a tree
Methods:
accessor methods
root() – return the root of the tree
parent(p) – return the parent of a node
children(p) – returns the children of a node
query methods
size() – returns the number of nodes in the tree
isEmpty() - returns true if the tree is empty
elements() – returns all elements
isRoot(p), isInternal(p), isExternal(p)
12
Tree Implementation
typedef struct tnode
int key;
struct tnode* lchild;
struct tnode* sibling;
*ptnode;
- Create a tree with three nodes (one root & two children)
- Insert a new node (in tree with root R, as a new child at level L)
- Delete a node (in tree with root R, the first child at level L)
28/04/2010 211 of 229
3
13
Tree Traversal
Two main methods:Preorder
Postorder
Recursive definition
PREorder: visit the root
traverse in preorder the children (subtrees)
POSTordertraverse in postorder the children (subtrees)
visit the root
14
Preorder
preorder traversal
Algorithm preOrder(v)
“visit” node v
for each child w of v do
recursively perform preOrder(w)
15
Postorder
postorder traversal
Algorithm postOrder(v)
for each child w of v do
recursively perform postOrder(w)
“visit” node v
du (disk usage) command in Unix
16
Preorder Implementation
public void preorder(ptnode t)
ptnode ptr;
display(t->key);
for(ptr = t->lchild; NULL != ptr; ptr = ptr->sibling)
preorder(ptr);
17
Postorder Implementation
public void postorder(ptnode t)
ptnode ptr;
for(ptr = t->lchild; NULL != ptr; ptr = ptr->sibling)
postorder(ptr);
display(t->key);
18
Binary Trees
A special class of trees: max degree for each node is 2
Recursive definition: A binary tree is a finite set of nodes that is either empty or consists of a root and two disjoint binary trees called the left subtree and the right subtree.
Any tree can be transformed into binary tree.
by left child-right sibling representation
28/04/2010 212 of 229
4
19
Example
J
IM
HL
A
B
C
D
E
F GK
20
ADT Binary Tree
objects: a finite set of nodes either empty or consisting of a root node, left BinaryTree, and right BinaryTree.
method:
for all bt, bt1, bt2 ∈ BinTree, item ∈ element
Bintree create()::= creates an empty binary tree
Boolean isEmpty(bt)::= if (bt==empty binary tree) return TRUE else return FALSE
21
BinTree makeBT(bt1, item, bt2)::= return a binary tree
whose left subtree is bt1, whose right subtree is bt2,
and whose root node contains the data item
Bintree leftChild(bt)::= if (IsEmpty(bt)) return error
else return the left subtree of bt
element data(bt)::= if (IsEmpty(bt)) return error
else return the data in the root node of bt
Bintree rightChild(bt)::= if (IsEmpty(bt)) return error
else return the right subtree of bt
22
Samples of Trees
A
B
A
B
A
B C
GE
I
D
H
F
Complete Binary Tree
Skewed Binary Tree
E
C
D
1
2
3
4
5
23
Maximum Number of Nodes in BT
The maximum number of nodes on level i of a binary tree is 2i-1, i>=1.
The maximum nubmer of nodes in a binary tree of depth k is 2k-1, k>=1.
Prove by induction.
2 2 11
1
i
i
kk−
=
∑ = −
24
Relations between Number ofLeaf Nodes and Nodes of Degree 2
For any nonempty binary tree, T, if n0 is the number of leaf nodes and n2 the number of nodes of degree 2, then n0=n2+1
proof:
Let n and B denote the total number of nodes &
branches in T.
Let n0, n1, n2 represent the nodes with no children,
single child, and two children respectively.
n= n0+n1+n2, B+1=n, B=n1+2n2 ==> n1+2n2+1= n,n1+2n2+1= n0+n1+n2 ==> n0=n2+1
28/04/2010 213 of 229
5
25
Full BT vs. Complete BT
A full binary tree of depth k is a binary tree of depth k having 2 -1 nodes, k>=0.
A binary tree with n nodes and depth k is complete iff its nodes correspond to the nodes numbered from 1 to n in the full binary tree of depth k.
k
A
B C
GE
I
D
H
F
A
B C
GE
K
D
J
F
IH ONML
Full binary tree of depth 4Complete binary tree26
Binary Tree Representations
If a complete binary tree with n nodes (depth =logn + 1) is represented sequentially, then forany node with index i, 1<=i<=n, we have:
parent(i) is at i/2 if i!=1. If i=1, i is at the root and has no parent.
leftChild(i) is at 2i if 2i<=n. If 2i>n, then i has noleft child.
rightChild(i) is at 2i+1 if 2i +1 <=n. If 2i +1 >n, then i has no right child.
27
Sequential Representation
A
B
--
C
--
--
--
D
--
.
E
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
.
[16]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
A
B
C
D
E
F
G
H
I
A
B
E
C
D
A
B C
GE
I
D
H
F
(1) waste space(2) insertion/deletion
problem
28
Linked Representationtypedef struct tnode *ptnode;
typedef struct tnode
int data;
ptnode left, right;
;
dataleft right
data
left right
29
Binary Tree Traversals
Let L, V, and R stand for moving left, visiting the node, and moving right.
There are six possible combinations of traversal
lRr, lrR, Rlr, Rrl, rRl, rlR
Adopt convention that we traverse left before right, only 3 traversals remain
lRr, lrR, Rlr
inorder, postorder, preorder
30
Arithmetic Expression Using BT
+
*
A
*
/
E
D
C
B
inorder traversal
A / B * C * D + E
infix expression
preorder traversal
+ * * / A B C D E
prefix expression
postorder traversal
A B / C * D * E +
postfix expression
level order traversal
+ * E * D / C A B
28/04/2010 214 of 229
6
31
Inorder Traversal (recursive version)
void inorder(ptnode ptr)
/* inorder tree traversal */
if (ptr)
inorder(ptr->left);
printf(“%d”, ptr->data);
indorder(ptr->right);
A / B * C * D + E
32
Preorder Traversal (recursive version)
void preorder(ptnode ptr)
/* preorder tree traversal */
if (ptr)
printf(“%d”, ptr->data);
preorder(ptr->left);
predorder(ptr->right);
+ * * / A B C D E
33
Postorder Traversal (recursive version)
void postorder(ptnode ptr)
/* postorder tree traversal */
if (ptr)
postorder(ptr->left);
postdorder(ptr->right);
printf(“%d”, ptr->data);
A B / C * D * E +
34
Level Order Traversal(using queue)
void levelOrder(ptnode ptr)
/* level order tree traversal */
int front = rear = 0;
ptnode queue[MAX_QUEUE_SIZE];
if (!ptr) return; /* empty queue */
enqueue(front, &rear, ptr);
for (;;)
ptr = dequeue(&front, rear);
35
if (ptr)
printf(“%d”, ptr->data);
if (ptr->left)
enqueue(front, &rear,
ptr->left);
if (ptr->right)
enqueue(front, &rear,
ptr->right);
else break;
+ * E * D / C A B
36
Euler Tour Traversal
generic traversal of a binary tree
the preorder, inorder, and postorder traversals are special cases of the Euler tour traversal
“walk around” the
tree and visit each
node three times:
on the left
from below
on the right
28/04/2010 215 of 229
7
37
Euler Tour Traversal (cont’d)
eulerTour(node v)
perform action for visiting node on the left;
if v is internal then
eulerTour(v->left);
perform action for visiting node from below;
if v is internal then
eulerTour(v->right);
perform action for visiting node on the right;
38
Euler Tour Traversal (cont’d)
preorder traversal = Euler Tour with a “visit” only on the left
inorder = ?
postorder = ?
Other applications: compute number of descendants for each node v:
counter = 0
increment counter each time node is visited on the left
#descendants = counter when node is visited on the right –
counter when node is visited on the left +
1
Running time for Euler Tour?
39
Application: Evaluation of Expressions
+
*
A
*
/
E
D
C
B
inorder traversal
A / B * C * D + E
infix expression
preorder traversal
+ * * / A B C D E
prefix expression
postorder traversal
A B / C * D * E +
postfix expression
level order traversal
+ * E * D / C A B
40
Inorder Traversal (recursive version)
void inorder(ptnode ptr)
/* inorder tree traversal */
if (ptr)
inorder(ptr->left);
printf(“%d”, ptr->data);
inorder(ptr->right);
A / B * C * D + E
41
Preorder Traversal (recursive version)
void preorder(ptnode ptr)
/* preorder tree traversal */
if (ptr)
printf(“%d”, ptr->data);
preorder(ptr->left);
preorder(ptr->right);
+ * * / A B C D E
42
Postorder Traversal (recursive version)
void postorder(ptnode ptr)
/* postorder tree traversal */
if (ptr)
postorder(ptr->left);
postorder(ptr->right);
printf(“%d”, ptr->data);
A B / C * D * E +
28/04/2010 216 of 229
8
43
Application:Propositional Calculus Expression
A variable is an expression.
If x and y are expressions, then ¬x, x∧y, x∨y are expressions.
Parentheses can be used to alter the normal
order of evaluation (¬ > ∧ > ∨).
Example: x1 ∨ (x2 ∧ ¬x3)
44
Propositional Calculus Expression
∨∨∨∨
¬¬¬¬∨∨∨∨
∧∧∧∧
X3¬¬¬¬¬¬¬¬X1
X2 X1
∧∧∧∧ X3
(x1 ∧ ¬x2) ∨ (¬ x1 ∧ x3) ∨ ¬x3
postorder traversal (postfix evaluation)
45
Node Structure
left data value right
typedef emun not, and, or, true, false logical;
typedef struct tnode *ptnode;
typedef struct node
logical data;
short int value;
ptnode right, left;
;
46
Postorder Eval
void post_order_eval(ptnode node)/* modified post order traversal to evaluate a propositional calculus tree */if (node) post_order_eval(node->left);post_order_eval(node->right);switch(node->data) case not: node->value =
!node->right->value;break;
47
Postorder Eval (cont’d)
case and: node->value =node->right->value &&node->left->value;break;
case or: node->value =node->right->value | |node->left->value;break;
case true: node->value = TRUE;break;
case false: node->value = FALSE;
28/04/2010 217 of 229
1
Computer Algorithm :Analysis and Design
Krisana Chinnasarn, Ph.D.Assistant Professor of Computer Science
Web: www.cs.buu.ac.th/~krisana
Graphs (I)
Reading: Chap.9 : Weiss, Chap.4 :Baase2
Contents
1. Definitions and Representations
2. A Minimum Spanning Tree Algorithm
3. A Shortest-Path Algorithm
4. Traversing Graphs and Digraphs
3
What is a Graph?
A graph G = (V,E) is composed of:
V: set of vertices
E: set of edges connecting the vertices in V
An edge e = (u,v) is a pair of vertices
Example:
a b
c
d e
V= a,b,c,d,e
E= (a,b),(a,c),(a,d),
(b,e),(c,d),(c,e),
(d,e)
4
Applications
electronic circuits
networks (roads, flights, communications)
CS16
LAX
JFK
LAX
DFW
STL
HNL
FTL
5
Terminology: Adjacent and Incident
If (v0, v1) is an edge in an undirected graph,
v0 and v1 are adjacent
The edge (v0, v1) is incident on vertices v0 and v1
If <v0, v1> is an edge in a directed graph
v0 is adjacent to v1, and v1 is adjacent from v0
The edge <v0, v1> is incident on v0 and v1
6
The degree of a vertex is the number of edges incident to that vertex
For directed graph, the in-degree of a vertex v is the number of edgesthat have v as the headthe out-degree of a vertex v is the number of edgesthat have v as the tailif di is the degree of a vertex i in a graph G with nvertices and e edges, the number of edges is
e di
n
=−
∑( ) /0
1
2
Terminology:Degree of a Vertex
Why? Since adjacent vertices each
count the adjoining edge, it will be
counted twice
28/04/2010 218 of 229
2
7
0
1 2
3 4 5 6
G1 G2
32
3 3
1 1 1 1
directed graph
in-degree
out-degree
0
1
2
G3
in:1, out: 1
in: 1, out: 2
in: 1, out: 0
0
1 2
3
33
3
Examples
8
Terminology:Path
path: sequence of vertices v1,v2,. . .vk such that consecutive vertices vi and vi+1 are adjacent.
3
3 3
3
2
a b
c
d e
a b
c
d e
a b e d c b e d c
9
More Terminology
simple path: no repeated vertices
cycle: simple path, except that the last vertex is the same as the first vertex
a b
c
d e
b e c
a c d a
a b
c
d e10
Even More Terminology
subgraph: subset of vertices and edges forming a graph
connected component: maximal connected subgraph. E.g., the graph
below has 3 connected components.
connected not connected
•connected graph: any two vertices are connected by some path
11
0 0
1 2 3
1 2 0
1 2
3(i) (ii) (iii) (iv)
(a) Some of the subgraph of G1
0 0
1
0
1
2
0
1
2
(i) (ii) (iii) (iv)
(b) Some of the subgraph of G3
0
1 2
3G1
0
1
2
G3
Subgraphs Examples
12
More…
tree - connected graph without cycles
forest - collection of trees
tree
for est
tree
tree
tree
28/04/2010 219 of 229
3
13
Connectivity
Let n = #vertices, and m = #edges
A complete graph: one in which all pairs of vertices are adjacent
How many total edges in a complete graph?
Each of the n vertices is incident to n-1 edges, however, we would have counted each edge twice! Therefore, intuitively, m
= n(n -1)/2.
Therefore, if a graph is not complete, m < n(n -1)/2
n = 5m = (5 ∗ 4)/2 = 10
14
More Connectivity
n = #vertices
m = #edges
For a tree m = n - 1
n = 5
m = 4
n = 5
m = 3
If m < n - 1, G is
not connected
15
Oriented (Directed) Graph
A graph where edges are directed
16
Directed vs. Undirected Graph
An undirected graph is one in which the pair of vertices in a edge is unordered, (v0, v1) = (v1,v0)
A directed graph is one in which each edge is a directed pair of vertices, <v0, v1> != <v1,v0>
tail head
17
ADT for Graph
objects: a nonempty set of vertices and a set of undirected edges, where each edge is a pair of vertices
functions: for all graph ∈ Graph, v, v1 and v2 ∈ VerticesGraph Create()::=return an empty graph
Graph InsertVertex(graph, v)::= return a graph with v inserted. v has no incident edge.
Graph InsertEdge(graph, v1,v2)::= return a graph with new edge between v1 and v2
Graph DeleteVertex(graph, v)::= return a graph in which v and all edges incident to it are removed
Graph DeleteEdge(graph, v1, v2)::=return a graph in which the edge (v1, v2) is removed
Boolean IsEmpty(graph)::= if (graph==empty graph) return TRUE
else return FALSE
List Adjacent(graph,v)::= return a list of all vertices that are adjacent to v
18
Graph Representations
Adjacency Matrix
Adjacency Lists
28/04/2010 220 of 229
4
19
Adjacency Matrix
Let G=(V,E) be a graph with n vertices.
The adjacency matrix of G is a two-dimensional n by n array, say adj_mat
If the edge (vi, vj) is in E(G), adj_mat[i][j]=1
If there is no such edge in E(G), adj_mat[i][j]=0
The adjacency matrix for an undirected graph is symmetric; the adjacency matrix for a digraph need not be symmetric
20
Examples for Adjacency Matrix
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
0
1
0
1
0
0
0
1
0
0
1
1
0
0
0
0
0
1
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
1
0
G1
G2
G4
0
1 2
3
0
1
2
1
0
2
3
4
5
6
7
symmetric
undirected: n2/2
directed: n2
21
Merits of Adjacency Matrix
From the adjacency matrix, to determine the connection of vertices is easy
The degree of a vertex is
For a digraph (= directed graph), the row sum is the out_degree, while the column sum is the in_degree
adj mat i jj
n
_ [ ][ ]=
−
∑0
1
ind vi A j ij
n
( ) [ , ]==
−
∑0
1
outd vi A i jj
n
( ) [ , ]==
−
∑0
1
22
Adjacency Lists (data structures)
#define MAX_VERTICES 50
typedef struct node *node_pointer;
typedef struct node
int vertex;
struct node *link;
;
node_pointer graph[MAX_VERTICES];
int n=0; /* vertices currently in use */
Each row in adjacency matrix is represented as an adjacency list.
23
0
1
2
3
0
1
2
0
1
2
3
4
5
6
7
1 2 3
0 2 3
0 1 3
0 1 2
G1
1
0 2
G3
1 2
0 3
0 3
1 2
5
4 6
5 7
6
G4
0
1 2
3
0
1
2
1
0
2
3
4
5
6
7
An undirected graph with n vertices and e edges ==> n head nodes and 2e list nodes 24
Some Operations
degree of a vertex in an undirected graph
–# of nodes in adjacency list
# of edges in a graph
–determined in O(n+e)
out-degree of a vertex in a directed graph
–# of nodes in its adjacency list
in-degree of a vertex in a directed graph
–traverse the whole data structure
28/04/2010 221 of 229
5
25
21
NIL41
31
32
NIL42
NIL43 NIL
1. Definitions and Representations
Representations
Adjacency Matrix
Adjacency Lists
Adjacency Multi-lists
2
1
4
3
1
2
3
4
Vertex
26
2. Min-Cost Spanning Tree
Greedy (1) Sort E in the non-decreasing order of weights
O(eloge) n2logn Why?
(2) Choose n–1 edges from the sorted list of Eas long as the current selected edge does not
form a cycle with the previously-chosen edges
O(eloge + eG(n))
Kruskal’s algorithm !!!Any Better way ?
LLLL
31
2
1
1
4
2
3
1
1
6
2G=(V, E, W)
weight
27
Why not local search ?
Observation
31
15
20
829
28
F
G
A
B
C
D
E
H
12
2
12
2
1 5
2
4
13
5
G = (V, E, W)
tree vertices = A, B, C = VT
fringe vertices = E,F,D = VF
unseen vertices = G, H = VU
CE = A,D,B,E,C,F
3
3
29
Dijkstra / Prim Algorithm
Select an arbitrary vertex to start the tree;
WHILE there are fringe vertices doselect an edge of minimum weight between a tree vertex
and a fringe vertex;
add the selected edge and the fringe vertex to the tree;
end
30
Dijkstra / Prim Algorithm
D
A C
B
E
1
4 2
3
1 5
2
7
28/04/2010 222 of 229
6
31
VT = A
VF = C, B, D
CE = A, C , A, B , A, D
4 31
D
A C
B
E
1
4 2
3
1 5
2
7
32
VT = A, C
VF = B, D, E
CE = A, D , C, B , C, E
2 73
D
A C
B
E
1
4 2
3
1 5
2
7
33
VT = A, B, C
VF = D, E
CE = B, D , B, E
1 5
D
A C
B
E
1
4 2
3
1 5
2
7
34
VT = A, B, C, D
VF = E
CE = D, E
D
A C
B
E
1
4 2
3
1 5
2
7
35
VT = A, B, C, D, E
VF = Ø
CE = Ø
D
A C
B
E
1
4 2
3
1 5
2
7
36
SI Select an arbitrary vertex to start the tree
vT = Ø, vF = Ø, CE = Ø ;
vT = vT U v ;
Update vF and CE ;
while vF≠ Ø do ;
e : = min - weight edge in CE ;
Update vT, vF, CE ;
end while
No sorting !!!
Why this algorithm works ?
28/04/2010 223 of 229
7
37
Lemma : Let G = ( V, E, W ) be a connected weighted graph
and E' ⊆ E be a subset of the edges in some minimum
spanning tree T = ( V, ET ) for G. Let V' be the vertices
incident with edges in E'. If x, y is an edge of
minimum weight such that x ∈ V' and y ∉ V', then
E' U x, y ⊆ ET.
[Proof]
x
y
vw
T' = (V', E' )T' ⊆ T
T= (V, ET)
i) x, y ∈ ET trivial
ii) x, y ∉ ET
See the figure.
38
x
y
y
y
y
e
e
39
Algorithm : Minimum spanning tree(Dijkstra/Prim)Input : G = (V,E,W), a weighted graph.Output : The edges in a minimum spanning tree.
1. Initialization
Let x be an arbitrary vertex ;
ET:= Ø; stuck := false ; VT:=x;
2. Main loop ; x has just been brought into the tree. Update fringe and candidates.
while VT ≠ V and not stuck do3. Replace some candidate edges.
for each fringe vertex y adjacent to x do
if W(xy) < W(the candidate edge e incident with y) then
xy replaces e as the candidate edge for y ;
end if
endfor
4. Find new fringe vertices and candidate edges.
for each unseen y adjacent to x do
y is now a fringe vertex and xy is a candidate ;
end for ;5. Ready to choose next edge.
if there are no candidates then stuck := true no spanning tree ;else
6. Choose next edge. Find a candidate edge e, with minimum weight ;x := the fringe vertex incident with e.Add x and e to the tree. x and e are no longer fringe and candidate.
end if end while
Update
candidate
edges
Add new fringe vertices
and edges. (candidate)
Choose new edges.
40
Time complexity
Kruskal
Dijkstra & Prim
))(log( eeGeeO +
)neO 2( +
n)neO log( +
41
[proof] ( By induction on # of edges chosen )
( m = 1 )
( m = k ) Assume that all the edges so far selected
are in a min-cost spanning tree for G.
( m = k+1) By the previous Lemma, the result follows.
Theorem : Dijkstra/Prim Algorithm correctlyconstructs a min-cost spanning tree.
min-cost edge
42
Algorithm : Minimum spanning tree (Dijkstra/Prim)
1. Initialization Let x be an arbitrary vertex ;ET:= Ø ; stuck := false ; VT:=x ;
2. Main loop ; x has just been brought into the tree.Update fringe and candidates. while VT ≠ V and not stuck do
3. Replace some candidate edges. for each fringe vertex y adjacent to x doif W(xy) < W(the candidate edge e incident with y) thenxy replaces e as the candidate edge for y ;
end if endfor
4. Find new fringe vertices and candidate edges. for each unseen y adjacent to x do
y is now a fringe vertex ;xy is now a candidate ;
end for ; 5. Ready to choose next edge.
if there are no candidates then stuck := true no spanning tree ;else
6. Choose next edge. Find a candidate edge e, with minimum weight ;x := the fringe vertex incident with e.Add x and e to the tree. x and e are no longer fringe and candidate.
end if end while
O(n)
O(|E|)
O(n2)
∴O(|E|+n2)
28/04/2010 224 of 229
8
43
2
7
3
3
A intree
B nil 2 A intree
C F 4 B fringe
D unseen
E unseen
F nil 7 A fringe
G F 3 A intree
H C 3 G fringe
I H 1 G fringe
fringeLink parent adjacencyList
fringeWgt status
Shaded entries in fringeLink are
no longer in use. fringeList = I.
[ Minimum spanning tree data structure ]
A
F
I
G
H
E D
A
G
H
B
I
F
C
B
C
2
3
4
7
1
3
6
5 1
6 4
2
2
1
24
8
(Adjacency lists
are not shown.
Nodes are
assumed to be in
alphabetical order
within each list.)
44
Lower Bound
Ω(|E|)Why ?
(1) a trivial lower bound O(|V| + |E|) = O(|E|)
(2) adversary argument
Every edge is required to be examined at least once.
Why ?
Suppose that some edge e is not examined at all.
(see below)
emust not be contained in a min-cost spanning tree.
why ?
Now, w(e) = 1 Contradiction ! why ?
∴Ω(|E|)
3 2
e12
144
5 9
1510
11127
G = (V, E)
w(f) ≥ 2 ∀f∈E/e
45
3. A shortest path algorithm
P : Given G = (V, E, W) and s,d ∈V,find a shortest path between s and d.
Does the Dijkstra/Prim algorithm also work for
solving the shortest path finding problem?
No !!!
Why ?
46
47
Dijkstra’s Algorithm
minTj∈
Step 0
initialization v1 := 0
vj := w1j, j = 2, 3, 4,···, np := 1, T := 2, 3, 4,···, n
Step 1
Designation of permanent of label find k such that vk = vj
T := T \kP := P U kif T = Ø , stop ( if k = d, stop )
Step 2 Revision of Tentative label
vj := min vj, vk + wkj ) ∀∀∀∀j ∈Tgo to step 1.
48
3
4
211
3
2
2 s ≡ 1 d ≡ 4
w12
= 1, w23
= 3, w24
= 2, w34
=2
v1
:= 0, v2
= 1, v3
= ∞, v4
= ∞P := 1, T := 2, 3, 4
minvj = minv2, v
3, v
4
∴ k=2
Is k=4 ? No !!!
T := 2,3,4/2 = 3,4
P := P U2 = 1,2
v3
= minv3, v
2+w
23 = min∞, 1+3 = 4
v4
= minv4, v
2+w
24 = min∞, 1+2 = 3
minvj = minv
3, v
4 = min4, 3 = v
4
∴ k = 4
j∈T 1 ∞ ∞
j∈T
T := 3,4/4 = 3
P := P U4 = 1,2,4
Is k=4 ? Yes !!!
28/04/2010 225 of 229
9
49
Why does Dijkstra’s Algorithm Work ?
s
e
min
xy
x'
y'
50
4. Traversing Graphs and Digraphs
8 Queen Problem
(5,4) (5,8) (5,2) (5,4) (5,3) (5,4)
(7,6)
(6,4)(6,4)
(7,6)
(4,8)(4,7)(4,2)
(3,5) (3,6)
(2,7)(2,6)(2,5)(2,4)(2,3) (2,8)
(1,1) (1,2) (1,3)(1,4) (1,5) (1,6) (1,7) (1,8)
start
Recursion
Depth First Search
Q
Q
Q
Q
Q
· · · · ···
· · · ··
· · ·
· ·
· (3,7) (3,8)
51
A
B C
C
1
1 1 2
1 2
A
B
C
1
2
1
C
1
2
1
A
B
C
1
C
1
1
2
1
2
Depth First Search Breadth First Search
52
E
HI
FG C
BA
53
1
27
4 3
56
Depth First Search
A
G I
H
C
B F
E
71
2
3
45
6DFS tree
procedure DFS (AdjList : HeaderList; v : VertexType)
vars: Stackw: VertexType
begins:= Øvisit, mark, and stack v;while s!= Ø do
while there are unmarked vertex w adjacent to Top(s) dovisit, mark, and stack w
endwhile;pop s;
endouter while
endDFS
E
HI
FG C
BA
54
1
3
7
42
5
6
Breadth First Search
A
G I
H
C
B F
E
7
1 2
3 4 5 6
BFS tree
procedure BFS(AdjList : HeaderList; v : VertexType)
varQ: Queuew: VertexType
beginQ:= Øvisit and mark v; insert v in Q;while Q≠ Ø do
x := Front(Q);for each unmarked vertex w adjacent to x do
visit and mark w;insert w in Q;
endfor;endwhile
endBFS
E
HI
FG C
BA
28/04/2010 226 of 229
10
55
Depth First Search
undirected graphs
Tree edges
Back edges
(no other types)
56
E
HI
FG C
BA
Depth First Search Tree ( Directed Graph )
A
G I
H
C
B F
E
71
2
3
45
6
Tree edges
Back edges
Cross edges
Descendant edges
(forward)
why not in
undirected graph?
Note : (1) top down
(2) left right
57
Applications: Finding a Path
Find path from source vertex s to destination vertex d
Use graph search starting at s and terminating as soon as we reach d
Need to remember edges traversed
Use depth – first search ?
Use breath – first search?
58
DFS vs. BFS
E
F
G
B
CD
A start
destination
A DFS on A A
DFS on BB
A
DFS on C
B
C
A
B Return to call on B
D Call DFS on D
A
B
D
Call DFS on GG found destination - done!
Path is implicitly stored in DFS recursion
Path is: A, B, D, G
DFS Process
59
DFS vs. BFS
E
F
G
B
CD
Astart
destination
BFS Process
A
Initial call to BFS on A
Add A to queue
B
Dequeue A
Add B
frontrear frontrear
C
Dequeue B
Add C, D
frontrear
D D
Dequeue C
Nothing to add
frontrear
G
Dequeue D
Add G
frontrear
found destination - done!
Path must be stored separately
28/04/2010 227 of 229
, Computer Algorithm: Analysis and Design,
, 2553
!"#$, #$%&'()*+,& -. C, % & $ ', 2553.
!"#$, #/0,1,, % & & ), 2552
28/04/2010 228 of 229
!" 11/2553
(") (")*)+,-.) ))
********************
! "#$" % !%"!&' ()*+,-!. / ,%/+$"%-
1. ( ./ / , ((.34) "!&!. 2. ( .7 % (8) . 3. ( .(, :+;<% ( ") . 4. ( $ ,&,88 ( !,) . 5. ( &%,? "!: ( !,) . 6. :/+( .A8! / () . 7. :/+( ./ %C,? (8) . 8. .. (< () . 9. ( (! (. () .
,-%-,-+, %-"#$"
"! ,% 5 % 2553
(( ..../8. , ,) +"!$!/"C,'
28/04/2010 229 of 229