+ All Categories
Home > Documents > Final Document

Final Document

Date post: 21-Sep-2014
Category:
Upload: not-my-documents
View: 185 times
Download: 3 times
Share this document with a friend
Popular Tags:
229
1 2 . . 28/04/2010 1 of 229
Transcript
Page 1: Final Document

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

Page 2: Final Document

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

Page 3: Final Document

+$$ $- .$- #$% " -

$!#$% (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

Page 4: Final Document

% %&' $ 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

Page 5: Final Document

28/04/2010 5 of 229

Page 6: Final Document

บทท 2 องคประกอบของระบบคอมพวเตอร

เครองคอมพวเตอรเปนเครองมอทอานวยความสะดวกในการทางานใหกบมนษยหลาย ๆ ดาน การทางานของระบบคอมพวเตอรนนจะตองมองคประกอบทสาคญ 4 สวน คอ ตวเครองหรอฮารดแวร (Hardware) โปรแกรมสาหรบทางานหรอซอฟตแวร(Software) มนษย และขอมลตาง ๆ ทจะใหคอมพวเตอรประมวลผล

2.1 ความหมายของคอมพวเตอร คอมพวเตอรเปนอปกรณทางไฟฟาชนดหนงทสามารถจาขอมลตาง ๆ ได สามารถคดคานวณตวเลข สามารถตอบสนองตอการกระทาของผใชได และมความสามารถในการเชอมตอกบอปกรณตอพวงบางชนดเขากบเครองคอมพวเตอร เพอสงใหอปกรณเหลานนทางานตามคาสงได เมอกลาวถงฮารดแวรคอมพวเตอร (Computer Hardware) โดยทวไปจะหมายถงตวเครองคอมพวเตอรรวมทงอปกรณตาง ๆ ทตออยกบเครองคอมพวเตอร คอมพวเตอร (ตามพจนานกรมฉบบราชบณฑตยสถาน พ.ศ. 2525) หมายถงเครองอเลกทรอนกสแบบอตโนมต ทาหนาทเสมอนสมองกล ใชสาหรบแกปญหาตาง ๆ ทงทงายและซบซอน โดยวธทางคณตศาสตร ขนตอนการทางานของคอมพวเตอรนนประกอบดวย 3 ขนตอนใหญ ๆ คอ การรบขอมล(Input Data) การประมวลผล(Data Processing) และการแสดงผลลพธออกทางเอาตพต (Output Result) ดงรปท 2.1 การรบขอมลนนคอมพวเตอรจะรบขอมลเขามาทางอปกรณทตออย เชน คยบอรต เมาส สวนการแสดงผลลพธจะแสดงออกทางจอภาพหรอเครองพมพเปนหลก สาหรบวธการประมวลผลนนคอมพวเตอรจะอานโปรแกรมจากหนวยความจาทเกบโปรแกรมไวขนมาไวในหนวยความจาหลกเพอประมวลผลตาง ๆ ตอไป

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 6 of 229

Page 7: Final Document

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

Page 8: Final Document

หนวยประมวลผลกลาง หากกลาวถงหนวยประมวลผลกลางของคอมพวเตอร หรอ ซพย (Central Processing: CPU) บางคนเขาใจผดคดวาเปนตวเครองหรอ เคส(Case) ของคอมพวเตอร แตตามความจรงแลว ซพย เปนอปกรณทางอเลกทรอนกสตวหนงทเปนหวใจการทางานของคอมพวเตอร ภายในตวมนประกอบดวยสวนสาคญสองสวนคอ หนวยควบคม(Control Unit) ทาหนาทควบคมการทางานตาง ๆ และหนวยคานวณทางคณตศาสตรและตรรกะ ซงจะทาหนาทในการคานวณขอมลตาง ๆ เชน การบวก ลบ คณ หาร และการเปรยบเทยบทางตรรกศาสตร การทางานของซพยจะตองเขยนคาสงเพอสงงานใหซพยทางานตามทตองการ ตวซพยนถอวาเปนศนยรวมการทางานทงหมดของระบบคอมพวเตอร หรอเปรยบเหมอนเปนสมองของคอมพวเตอรนนเอง ในอดสหนวยตวซพยนจะมขนาดใหญ แตในปจจบนเมอนาสารกงตวนามาใชกทาใหซพยถกพฒนาใหมขนาดเลกลง โดยรวมวงจรตาง ๆ ไวภายในตวมนเพยงตวเดยวเรยกวา ไมโครโปรเซสเซอร (Microprocessor) ดงนนอาจกลาวไดวาคอมพวเตอรในปจจบนมไมโครโปรเซสเซอรเปนหนวยประมวลผลกลาง ในปจจบนไดมการผลตไมโครโปรเซสเซอรออกมาหลายรน โดยอนเทล (Intel) เปนบรษทใหญทผลตไมโครโปรเซสเซอรออกมามากมาย นอกจากนยงมไมโครโปรเซสเซอรของบรษทอน ๆ อกทผลตซพยใหเขากนไดกบซพยของอนเทล ทเรยกวา Intel-Compatible Processor โดยสามารถใชชดคาสงและโปรแกรมเหมอนกบของอนเทลได เชนไมโครโปรเซสเซอรของเอเอมด (AMD) ของไซรก(Cyrix) เปนตน

ตวอยางไมโครโปรเซสเซอรสาหรบคอมพวเตอร และคอมพวเตอรแบบพกพา

ตวอยางไมโครโปรเซสเซอรสาหรบเครอง workstation

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 8 of 229

Page 9: Final Document

หนวยรบเขา แมวาคอมพวเตอรจะเปนอปกรณอเลกทรอนกสทประมวลผลได แตกสามารถตดตอกบมนษยไดทาง พอรต (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

Page 10: Final Document

นอกจากนยงมคยบอรดทออกแบบมาเปนพเศษใหเหมาะกบการใชงานลกษณะตาง ๆ เชน 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

Page 11: Final Document

คยบอรดในปจจบนจะเชอมตอกบคอมพวเตอรไดหลายวธ มขวตอหลายแบบ เชน แบบพอรตอนกรม(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

Page 12: Final Document

• แสดงผลเปนขอความ (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

Page 13: Final Document

• ความละเอยดของภาพ หมายถงจานวนจดหรอพกเซลบนจอภาพ ถาหากมความละเอยดสงจะทาใหภาพคมชดมากขน ตวอยางเชนจอภาพทมความละเอยด 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

Page 14: Final Document

การดเสยงทใชกบคอมพวเตอรนนยงมขวตอสาหรบไมโครโฟน ขวตอสาหรบรบสญญาณเสยงภายนอก และสงเสยงใหกบลาโพงแบบพเศษไดอกดวย

หนวยความจาหลก หนวยความจา (Main Memory) ทาหนาทเปนตวพกขอมลทไดรบจากผใช เพอสงตอไปยงหนวยประมวลผลกลางอกทหนง ในระบบคอมพวเตอรมหนวยความอยหลายสวน โดยหนวยความจาหลกเปนหนวยความจาทคอมพวเตอรใชเกบขอมลและคาสงทตองการประมวลผลในงานนน ๆ ถาหากคอมพวเตอรตองการทางานโปรแกรมใด ๆ จะตองนาโปรแกรมมาเกบในหนวยความจาหลกเสมอ อยางเชนในฮารดดสกของคอมพวเตอรมขอมลและโปรแกรมอยมากมาย หากคอมพวเตอรตองทาโปรแกรมใดกจะตองนาโปรแกรมจากฮารดดสกขนมาเกบในหนวยความจาหลกกอนจงจะทางานได หนวยความจาหลกของระบบคอมพวเตอรจะสรางจากวงจรอเลกทรอนกสอยในรปของวงจรรวม (Integrated circuit) หรอไอซ แบงเปนสองประเภทใหญ ๆ คอ แรม(RAM) และ รอม(ROM)

หนวยความจาแรม หนวยความจาแรม (RAM) มาจากคาวา Random Access Memory) บางครงจะเรยกวาหนวยความจาแบบชวคราว เปนหนวยความจาททางานรวมกบซพย ใชพกขอมลและโปรแกรมชวคราว แตขอมลตาง ๆ จะหายไปเมอปดเครอง หนวยความจาประเภทนคอหนวยความจาทเราเหนบนเครองคอมพวเตอร และมกนกถงเมอพดถงหนวยความจาของเครองคอมพวเตอรนนเอง

กระแสไฟฟาจากการดเสยง

เปลยนเปนสญญาณแมเหลก

สนามแมเหลกเปลยนแปลง

ลาโพงสน

เกดเปนเสยงใหไดยนตอไป

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 14 of 229

Page 15: Final Document

รปท 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

Page 16: Final Document

หนวย จานวนไบตโดยประมาณ หาไดจาก 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

Page 17: Final Document

คอมพวเตอรโนตบก (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

Page 18: Final Document

เครองคอมพวเตอรเซรฟเวอร เครองคอมพวเตอร Server เปนเครองคอมพวเตอรทมขนาดใกลเคยงกบคอมพวเตอรทวไป แตจะมความสามารถสงกวามาก คอมพวเตอรประเภทนจะใชเปนเครองใหบรการกบคอมพวเตอร PC ตาง ๆทตออยในเครอขาย และยงใชเปนเครองใหบรการบนเวบอกดวย ขนาดและประสทธภาพของคอมพวเตอรเซรฟเวอรนมหลายรน ขนกบการใชงานวาจะใหบรการกบเครองคอมพวเตอรอน ๆ หลายเครองหรอไม

เครองเซรฟเวอรขนาดเลก และขนาด ใหญทใชกบระบบเครอขายขนาด

ใหญ คอมพวเตอรเมนเฟรม (Mainframe Computer) เปนคอมพวเตอรขนาดใหญ ทตองการประมวลผลขอมลจานวนมากดวยความเรวสง มหนวยความจาขนาดใหญ คอมพวเตอรประเภทนจะนยมใชในองคกรทมผใชจานวนมาก เชนระบบธนาคารขนาดใหญ ระบบธรกจขนาดใหญ ระบบการจองตวเครองบน เปนตน ในการใชงานคอมพวเตอรแบบเมนเฟรมมกจะไมใชเครองเมนเฟรมนเพยงเครองเดยว แตจะมการตอทางานรวมกบคอมพวเตอรอน ๆ ดวย โดยใหเครองเมนเฟรมเปนเครองหลกในการประมวลผล สวนคอมพวเตอรอน ๆ จะใชเปนตวปอนและแสดงขอมลทวไป

คอมพวเตอรแบบเมนเฟรมทมขนาดใหญ ใช

สาหรบประมวลผลขอมลจานวนมาก ซเปอรคอมพวเตอร (Supercomputer) เครองคอมพวเตอรประเภทนจดวาเปนคอมพวเตอรทมประสทธภาพการทางานสงทสด สามารถทางานไดมากกวาพนลานคาสงในหนงวนาท มนาหนกหลายตน สามารถเชอมตอกบคอมพวเตอร PC ทวไปไดจานวนมาก คอมพวเตอรประเภทนจะใชในงานทตองการประมวลผลกบขอมลจานวนมากดวยความเรวสง ๆ เชน งาน

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 18 of 229

Page 19: Final Document

ทางดานการพยากรณอากาศ การคานวณตาง ๆ ทมความซบซอน และงานคอมพวเตอรสาหรบการออกแบบในอตสาหกรรมเปนตน

เครองซเปอรคอมพวเตอร คอมพวเตอรฝงตว (Embedded Computer) เปนคอมพวเตอรทไดรบความนยมอยางมากในปจจบน โดยจะเปนระบบประมวลผลทฝงตวอยในอปกรณตาง ๆ เพอควบคมการทางานของอปกรณนน ๆ ซงถาหากมองภายนอกแลวจะไมพบวามคอมพวเตอรเชอมตออย ระบบประเภทนจะพบในเครองมออเลคทรอนกสสมยใหม ตเยน เครองปรบอากาศ หรอในรถยนตทควบคมการทางาน การจดระเบด ระบบเบรค ดวยระบบคอมพวเตอร

ตวอยางคอมพวเตอรฝงตวทควบคมการทางานของรถ

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 19 of 229

Page 20: Final Document

แบบฝกหดทายบท ตอนท 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

Page 21: Final Document

8. จานวนจดในแนวนอนและแนวตงของจอภาพจะบอกลกษณะใดของภาพ ก. ความละเอยดของภาพ ข. สทจะแสดงได ค. ขนาดของภาพ ง. ถกทกขอ 9. ขอใดคอสงทควบคมการทางานของซพย ก. ขอมลทรบทางอปกรณรบเขา ข. คาสง ค. ตวเลขทปอนทางคยบอรต ง. การใชเมาส 10. หนวยแสดงผลจะอยบนคอมพวเตอรประเภทใด

ก. mobile computer ข. notebook computer ค. desktop personal computer ง. ถกทกขอ

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 21 of 229

Page 22: Final Document

บทท 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

Page 23: Final Document

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

Page 24: Final Document

เมอตองการใหคอมพวเตอรทางานจะตองนาตวแปลภาษาซ หรอ ซคอมไพลเลอรมาแปลงคา

ภาษาองกฤษดานบนใหเปนเลขฐานสองทคอมพวเตอรเขาใจอกทหนง

• ภาษาระดบสงมาก (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

Page 25: Final Document

เรองไวยากรณของภาษา เพยงแคผใชพมพคาสงลงไป โดยผใชแตละคนอาจจะใชคาศพท รปประโยคทตางกน

จากนนคอมพวเตอรจะแปลความหมายและทางานตามคาสงเหลานนเอง แตถามคาสงทไมเขาใจหรอไมแนใจ ก

จะมการแจงกลบมาใหเรายนยนความถกตอง ซงการแปลความหมายของคาสงในภาษาธรรมชาตจะใช ระบบ

ฐานความร (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

Page 26: Final Document

รปท 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

Page 27: Final Document

ขอเสย : ถกพฒนาและใชในยคแรกของเครองไมโครคอมพวเตอร จงทาใหประสทธภาพของคาสงมนอยกวา

ภาษาอน ๆ และเนองจากรปแบบของการเขยนโปรแกรมจะไมเปนโครงสราง ดงนนจงไมเหมาะกบการเขยน

โปรแกรมทมการเชอมตอกบระบบฐานขอมล

ภาษาฟอรแทรน (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

Page 28: Final Document

ขอด : เปนภาษาทนยมใชในงานธรกจ ไดแก การจดเกบขอมล งานบญช การเงนและสนคาคงคลง เพราะเปน

ภาษาทมการเขยนโปรแกรมเชงโครงสราง จงสามารถประยกตใหทางานเชอมตอกบฐานขอมลได ปจจบนได

พฒนาเปนการเขยนโปรแกรมเชงวตถ (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

Page 29: Final Document

ขอด : เปนภาษาทมความยดหยนสามารถทางานบนเครองคอมพวเตอรสวนบคคล และระบบปฏบตการตาง ๆ ได

นอกจากนยงสามารถเขาถงฮารดแวรของคอมพวเตอรไดโดยตรง

ขอเสย : คาสงของภาษาจะไมเหมอนคาศพทภาษาองกฤษโดยตรง จงอาจจะจดจายากขน และวธการใชคาสงจะม

กฎเกณฑรายละเอยดจานวนมาก จงไมเหมาะกบผเรมตนเขยนโปรแกรม

ภาษาซพลสพลส (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

Page 30: Final Document

ขอด : เปนการพฒนาโปรแกรมทเหมาะกบการทางานบนระบบปฏบตการแบบ 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

Page 31: Final Document

• คณสมบตและความเหมาะสม

แตละภาษาจะมคณสมบตและความเหมาะสมกบงานเฉพาะดาน เชน งานดานธรกจ งานดานบญช งาน

ดานวทยาศาสตร และงานดานวศวกรรม ตวอยางเชน การเขยนโปรแกรมดานบญชจะนยมใชภาษา 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

Page 32: Final Document

การกาหนดและวเคราะหปญหา ขนตอนนเปนขนตอนแรกสดทนกเขยนโปรแกรมจะตองทา การใหคอมพวเตอรแกปญหาตางๆ ใหเรา

นนเราจะตองมแนวทางทแกไขปญหาทเหมาะสมใหกบคอมพวเตอร เพอใหการทางานเปนไปอยางม

ประสทธภาพ ถาหากผทเขยนโปรแกรมไมสามารถทาความเขาใจกบปญหาทตองการแกไขได การนา

คอมพวเตอรมาใชในการแกปญหาตาง ๆ กไมสามารถทาได การกาหนดและวเคราะหปญหามขนตอนยอย ๆ ดงน

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

Page 33: Final Document

นาขอมลเขา ประมวลผล นาขอมลออก

รปท 2.3 ขนตอนการทางานของระบบ

การเขยนผงงานและซโดโคด หลงจากทไดวเคราะหปญหาแลว ขนตอนตอไปจะตองใชเครองมอชวยในการออกแบบโปรแกรม ซงยง

ไมไดเขยนเปนโปรแกรมจรง ๆ แตจะชวยใหเขยนโปรแกรมไดงายขน และทาใหผอนนาโปรแกรมของเราไป

พฒนาตอไดงายขน โดยเขยนเปนลาดบขนตอนการทางานของโปรแกรมทเรยกวาอลกอรทม (Algorithm) ซงจะ

แสดงขนตอนการแกปญหา โดยใชประโยคทชดเจนไมคลมเครอ และมรายละเอยดการทางานพอสมควรเพยง

พอทจะนาไปเขยนเปนโปรแกรมใหทางานจรง โดยอลกอรทมนนอาจเขยนใหอยในรปของรหสจาลองหรอซโด

โคด (Pseudo-code) หรอเขยนเปนผงงาน (Flowchart) กได โดยซโดโคดจะเปนคาอธบายขนตอนการทางาน

ของโปรแกรม เปนคายอไมมรปแบบเฉพาะตว โดยแตละสวนจะเปนแนวทางในการเขยนโปรแกรมซงทาให

เขยนโปรแกรมเปนภาษาตาง ๆ ไดงายขน สวนผงงานจะใชสญลกษณตาง ๆ แทนการทางานและทศทางของ

โปรแกรม

การเขยนโปรแกรม หลงจากทผานขนตอนทงสองแลว ขนตอไปจะตองเขยนเปนโปรแกรมเพอใหคอมพวเตอรสามารถ

ประมวลผลได โดยเปลยนขนตอนการทางานใหอยในรปรหสภาษาคอมพวเตอร การเขยนโปรแกรมจะตองเขยน

ตามภาษาทคอมพวเตอรเขาใจโดยอาจใชภาษาระดบสง หรอระดบตาซงสามารถเลอกไดหลายภาษา การเขยน

โปรแกรมแตละภาษาจะตองทาตามหลกไวยากรณ (syntax) ทกาหนดไวในภาษานน นอกจากนการเลอกใช

ภาษาจะตองพจารณาถงความถนดของผเขยนโปรแกรมดวย

การทดสอบและแกไขโปรแกรม หลงจากเขยนโปรแกรมจะตองทดสอบความถกตองของโปรแกรมทเขยนขน หาจดผดพลาดของ

โปรแกรมวามหรอไม และตรวจสอบจนไมพบทผดอก จดผดพลาดของโปรแกรมนเรยกวาบก (Bug) สวนการ

แกไขขอผดพลาดใหถกตองเรยกวา ดบก (debug) โดยทวไปแลวขอผดพลาดจากการเขยนโปรแกรมจะมสอง

ประเภทคอ

รบขอมลตวท 1

รบขอมลตวท 2

รบขอมลตวท 3

อานคาเฉพาะทเปนเลข 3 ตว

นาตวเลขทงสามตวมารวมกน

นาผลรวมมาหารดวย 3

แสดงคาเฉลย

ทศนยมสอง

ตาแหนง

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 33 of 229

Page 34: Final Document

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

Page 35: Final Document

ค. โปรแกรมพมพรายงาน ง . โปรแกรมภาษา

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

Page 36: Final Document

……………………………………………………………………………………………….

2. จงบอกชอภาษาระดบสงทใชทวไป

……………………………………………………………………………………………….

……………………………………………………………………………………………….

3. แอสเซมเบอร (Assembler) คออะไร

…………………………………………………………………………………………………..

…………………………………………………………………………………………………..

4. การคอมไพลคออะไร

…………………………………………………………………………………………………..

…………………………………………………………………………………………………...

5. โปรแกรมตนฉบบ (Source Code) คออะไร มประโยชนอยางไร

…………………………………………………………………………………………………..

…………………………………………………………………………………………………..

6. โปรแกรมเอนกประสงคตางจากโปรแกรมระบบปฏบตการอยางไร

…………………………………………………………………………………………………..

…………………………………………………………………………………………………..

7. ซโดโคดจะชวยผพฒนาโปรแกรมไดอยางไร

…………………………………………………………………………………………………..

…………………………………………………………………………………………………...

8. การดบกคออะไร

…………………………………………………………………………………………………

…………………………………………………………………………………………………

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 36 of 229

Page 37: Final Document

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

Page 38: Final Document

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

Page 39: Final Document

$!. 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

Page 40: Final Document

$"&+,-&(6 '# G (

• / 1).$&" +! $&!/()#)# G 6/(

• + 4)./ 1)5 '#0 1+.)./ (O ("% + &%.)! ()1)))(() 2.5$&(O &)./ #()!&. ()./ 5&("% +().$& +#&&%/. .&&%)&%/.

• #3#)./ .&/(.(0/ ()%3#0 1+(3.5&#3#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

Page 41: Final Document

%/("&+,-&((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

Page 42: Final Document

(%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

Page 43: Final Document

(%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

Page 44: Final Document

(%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

Page 45: Final Document

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

Page 46: Final Document

" %&

%&

,,&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

Page 47: Final Document

#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#".&)".#3#"&( ((/)( 60 % +"!. pGOOD BYEq I !&)../&2%. LC (

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 47 of 229

Page 48: Final Document

)+ -( 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

Page 49: Final Document

(%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

Page 50: Final Document

4. 0 1+## 2 # 3 (60 123) ./(0 1+&%/.()(3 Total

(%6 3.7 5& $&#3#!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& !&,-&$&#3#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

Page 51: Final Document

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

Page 52: Final Document

-(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,-&#153(!#)

#)#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!()/."! %&#0( ($& 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

Page 53: Final Document

%&#0( ((. !# ( 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

Page 54: Final Document

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

Page 55: Final Document

8($; (Object-Oriented Programming)

#)$&.!. G 54 &%6 ().6"%/ $2!/ %$2 65!6$2/( #(/( )/( $#)!6. G %!&)$2$O)&

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 55 of 229

Page 56: Final Document

,,^_-!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

Page 57: Final Document

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 !"%&) √ &#53 "%&) × &#0(

.......1. #)"!1)10!$&52.)#)/(.)#

.......2. 5#3## '2(##().)&%!6 3. "&+,-&(3+ 4# 4( .......4. 10/."&)# .......5. ' +"% + 5%.+ 4

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 57 of 229

Page 58: Final Document

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

Page 59: Final Document

บทท 5 การเขยนอลกอรธมโปรแกรม

เมอไดทาการวเคราะหปญหาและวางแผนการแกปญหาแลว กอนทจะลงมอเขยนโปรแกรมเราจะตอง

ออกแบบขนตอนการทางานหรออลกอรทม (Algorithm) กอน โดยจะ ใชเปนเครองมอในการแสดงขนตอนการ

ทางานของระบบงานใด ๆ เพอใหการเขยนโปรแกรมเปนไปไดรว ดเรวและงายขน โดยเราอาจเขยนอลกอรทมใน

ลกษณะผงงาน (Flowchart) ตามทไดศกษามาในบทท 4 หรอเขยนเปนรหสลาลองทเรยกวาซโดโคด

(Psudocodes) กได 5.1 ความหมายของอลกอรธม อลกอรธม (Algorithm) หมายถงลาดบของขนตอนเชงคานวณทแปลขอมลดานอนพตของปญหาไปเปน

ผลลพธทตองการ ขนตอนตาง ๆ ในอลกอรธมสามารถเปลยนไปเปนคาสงทใหคอมพวเตอรทางานได ดงนนถา

หากทาตามอลกอรธมแลว ปญหาจะตองถกแกไดสาเรจและไดคาตอบทถกตองสาหรบทกกรณตามทกาหนดใน

อลกอรธม ดงนนเราจะไมยอมรบอลกอรธมทการทางานตดอยในวงวนไมสนสด หรออลกอรธมประเภทททางาน

แลวไดคาตอบถกบาง ผดบาง ดงนนจดประสงคของการออกแบบอลกอรธมสาหรบแกปญหาหนง ๆ กคอการ

ทางานทถกตอง และทางานไดอยางมประสทธภาพ นอกจากการบรรยายอลกอรธมดวยผงงานแลว ยงสามารถ

เขยนบรรยายอลกอรธมดวยคาบรรยายสน ๆ ทไดใจความได โดยการเขยนรหสลาลอง หรอซโดโคด (pseudo

code) ซงคลายกบโปรแกรมภาษาคอมพวเตอร แตจะบรรยายดวยคาทงาย ๆ

ซโดโคดเปนคาอธบายขนตอนการทางานของโปรแกรมโดยใชถอยคาผสมระหวางภาษาองกฤษและ

ภาษาการเขยนโปรแกรมแบบโครงสรางทเขาใจงายมาแสดงลาดบการทางานของโปรแกรม หรออาจใชภาษาไทย

กได โดยใหผเขยนโปรแกรมสามารถพฒนาขนตอนตาง ๆ ใหเปนโปรแกรมไดงายขน แตสวนใหญแลวคาทใช

มกเปนคาเฉพาะ (Reserve Word) ทมอยในภาษาการเขยนโปรแกรมและมกจะเขยนดวยตวอกษรตวใหญ ซโด

โคดทดจะตองมความชดเจน สน และไดใจความ ขอมลตาง ๆ ทใชจะถกเขยนอยในรปของตวแปร ซโดโคดน

บางครงจะเรยกวาอลกอรทมกได รปแบบทวไปจะเปนดงน

Algorithm < ชอของอลกอรทม >

1. ……………….

2. ……………….

……………………

……………………

END

ขบวนการทางานตาง ๆ

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 59 of 229

Page 60: Final Document

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

Page 61: Final Document

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

Page 62: Final Document

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

Page 63: Final Document

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

Page 64: Final Document

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

Page 65: Final Document

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

Page 66: Final Document

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

Page 67: Final Document

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

Page 68: Final Document

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

Page 69: Final Document

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

Page 70: Final Document

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

Page 71: Final Document

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

Page 72: Final Document

บทท 6 การเขยนโปรแกรมภาษาซ

การเขยนโปรแกรมคอมพวเตอรนนมภาษาใหเลอกอยหลายภาษา สาหรบภาษาซเปนภาษาทเหมาะ

สาหรบผเรมตนการเขยนโปรแกรมคอมพวเตอร หากเรมศกษาดวยภาษานแลวการศกษาการเขยนโปรแกรมภาษาอน ๆ จะทาไดงายขน ภาษาซเปนภาษาทมการพฒนามายาวนาน ในปจจบนไดพฒนาใหสามารถเขยนโปรแกรมเชงวตถได ซงอยในรปแบบของภาษา C++ และ C#

6.1 ขนตอนการพฒนาโปรแกรมดวยภาษาซ ขนตอนการเขยนโปรแกรมคอมพวเตอรดวยภาษาระดบสงนนโปรแกรมเมอรจะตองเขยนโปรแกรม

ตนฉบบทเรยกวาซอสซโคดขนมากอนสาหรบภาษาซโปรแกรมนจะมนามสกลเปน .c จากนนจงจะใชโปรแกรมคอมไพเลอรมาแปลภาษาใหเปนภาษาทเครองคอมพวเตอรสามารถทางานได จากนนจงทาการเชอมโยงหรอลงค

กบไฟลตาง ๆ ทเกยวของใหสามารถทางานบนเครองคอมพวเตอรทใชงานอยได ในการเขยนโปรแกรมภาษาซนนมตวแปลภาษาหรอคอมไพเลอรใหใชงานหลายตว โดยออกมาในรป

ของซอฟตแวรททาใหโปรแกรมเมอรสามารถเขยนโปรแกรมไดงาย โดยขบวนการทงสามขนตอนจะทาไดใน

ครงเดยว โดยซอฟตแวรลกษณะนไดรวมโปรแกรมพฒนางาน หรอ ไอดอ (Integrated Development Environment : IDE) เอาไวดวย สาหรบโปรแกรมทแนะนาในการศกษาภาษาซ ในทนไดแก DEV C++ ซงเปนโปรแกรมทมขนาดเลก สามารถใชเรมตนศกษาการเขยนโปรแกรมไดเปนอยางด และยงสามารถเขยนโปรแกรมแบบ C++ ไดอกดวย เมอเปดโปรแกรมขนมา หนาตาของโปรแกรมเปนดงน

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 72 of 229

Page 73: Final Document

สวนประกอบทสาคญของโปรแกรม 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

Page 74: Final Document

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

Page 75: Final Document

สวนประกาศ (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

Page 76: Final Document

#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

Page 77: Final Document

จากตวอยางทกลาวมาเมอเขยนโปรแกรมดวย 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

Page 78: Final Document

4. โปรแกรมจะบนทกไฟลเปนชอ pro1.cpp (เนองจากโปรแกรมนสามารถเขยนในลกษณะ C++ ได จงมนามสกลเปน cpp)

5. คอมไพลและรนโปรแกรมโดยเลอกเมน Execute ->Compile & Run หรอคลกทไอคอนดงรป เมอโปรแกรมคอมไพลจะแจงขอผดพลาดออกมา เนองจากการเขยนคาอธบายไมไดใสเครองหมาย */ เพอปดคาอธบาย

แสดงชอไฟลตามทตงไว

1. คลกเลอก “คอมไพลและรน”

2. โปรแกรมแจงวามขอผดพลาดในบรรทดท 1 ในสวนของการอธบายโปรแกรม

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 78 of 229

Page 79: Final Document

ใหแกไขโปรแกรมใหถกตอง แลวคลก “คอมไพลและรน” อกครงหนง โปรแกรมจะรนอยางรวดเรว ไมสามารถมองไดทน ใหทดลองเพมคาสง getch() ซงเปนสาหรบรอรบการกดคย แตคาสงนถกเกบไวใน conio.h ดงนนจะตองเรยก conio.h ขนมาในโปรแกรมดวย โดยเขยนโปรแกรมดงตอไปน

6. ทดลองคลกปม “คอมไพลและรน” อกครง จะพบวาโปรแกรมจะทาฟงกชน printf เปนพงกชนแรกแลวแสดงคาวา “COMPUTER” ออกมา จากนนทาฟงกชน getch() เพอรอการกดแปนพมพ ทาใหสามารถดผลลพธการทางานไดทน โดยโปรแกรมจะแสดงหนาตางออกมาดงน

จากตวอยางทผานมาจะพบวาการเขยนโปรแกรมดวยภาษาซนน ผเขยนโปรแกรมจะตองเขยนโปรแกรมใหถกตองตามโครงสรางของภาษา ตองทราบวาในโปรแกรมตองใชฟงกชนหรอคาสงใดบาง และฟงกชนนนอยในกลมใด ตอง include เฮดเดอรไฟลใดขนมาจงจะทางานได สาหรบรายละเอยดของฟงกชนจะกลาวตอไปเมอถงเรองทเกยวของ

พมพเพมเขาไป 2 บรรทด

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 79 of 229

Page 80: Final Document

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

Page 81: Final Document

รหส ผลทได

\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

Page 82: Final Document

ผลลพธทไดจากการทาคาสงจะเปนดงน 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

Page 83: Final Document

จะเปนการประกาศตวแปร 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

Page 84: Final Document

ในสวนของการประกาศตวแปรชอของตวแปรจะตองเปนไปตามกฎการตงชอซงจะไดกลาวตอไป ถา

หากชอตวแปรมความยาวมากกวา 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

Page 85: Final Document

ตวอยาง 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

Page 86: Final Document

คาตอบ

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

Page 87: Final Document

ขอมลชนดซมเปล ขอมลชนดซมเปลแบงไดเปนขอมลประเภทลาดบ (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

Page 88: Final Document

‘\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

Page 89: Final Document

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

Page 90: Final Document

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

Page 91: Final Document

เมอโปรแกรมทางานเรมตนจะประกาศตวแปรชอ 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

Page 92: Final Document

6.5 คาสงกาหนดเงอนไข การเขยนโปรแกรมคอมพวเตอรนนเปนการนาคาสงตาง ๆ มาตอเรยงกนใหเครองทางานตอเนองกนไป สาหรบโปรแกรมทมความซบซอนมากขนจะตองมการเปลยนทศทางการทางานของโปรแกรมบาง ซงจะตองใหโปรแกรมตดสนใจดวยวาจะเลอกทาชดคาสงทตามมาหรอไม หรออาจตองเลอกทาชดคาสงใดชดคาสงหนง

การทางานแบบเลอกทานนสามารถแบงทศทางการทางานของโปรแกรมไดดงน 1. การทางานแบบมทางเลอกเดยว (Single Selection) 2. การทางานแบบสองทางเลอก (Double Selection)

เงอนไข

ชดคาสง

เงอนไข

ชดคาสง 1ชดคาสง 2

จรงจรง เทจ

ก. การเลอกทาแบบทางเลอกเดยว ข. การเลอกทาแบบสองทางเลอก รปแสดงการทางานแบบมทางเลอก

สาหรบการทางานแบบมทางเลอกเดยวและแบบสองทางเลอกจะตองมการตรวจสอบเงอนไขเพอเปนตว

พจารณาวาจะทาโปรแกรมในทศทางใดตอไป การตรวจสอบเงอนไขนนผลลพธทไดจะเปนคาทางบลน คอมคาเปนไปได 2 กรณคอ เปนจรง (true) หรอเปนเทจ (false)

กรณการเลอกทาแบบทางเลอกเดยว ถาหากเงอนไขเปนจรง โปรแกรมจะทาชดคาสงทกาหนด แตถาหากเงอนไขเปนเทจโปรแกรมจะไมทาชดคาสง สวนการเลอกทาแบบสองทางเลอก(รป ข) ถาหากเงอนไขเปนจรง โปรแกรมจะทาชดคาสงท 1 แตถาหากเงอนไขเปนเทจโปรแกรมจะทาชดคาสงท 2

ในสวนของการตรวจสอบเงอนไขนนจะเปนการเขยนนพจนทแสดงความสมพนธระหวางตวแปรกบตว

แปร หรอระหวางตวแปรกบคาคงท โดยจะนาตวดาเนนการเปรยบเทยบและตวดาเนนการทางตรรกะมาใช

ตวดาเนนการเปรยบเทยบ ตวดาเนนการเปรยบเทยบ (Relation Operators) จะนาขอมลสองคามาเปรยบเทยบกน โดยขอมลทงสองคาจะตองเปนขอมลประเภทเดยวกน ผลลพธทไดจะเปนคาทางลอจกคอจรงหรอเทจ ตวดาเนนการเปรยบเทยบในภาษาซเปนดงตารางตอไปน

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 92 of 229

Page 93: Final Document

ตวดาเนนการ ความหมาย ตวอยาง == เทากบ (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

Page 94: Final Document

ตวอยาง ถาหากคอมพวเตอรทาคาสงตอไปน 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

Page 95: Final Document

รบคา X

X > 25

แสดงผลเปนผใหญแลว

จรง

เทจ

รปแสดงผงงานและคาอธบายโปรแกรม

ตวอยาง จงเขยนรหสเทยมการทางานจากผงงานในรปตอไปน

รปแสดงผงงานทมการเลอกทาแบบสองทางเลอกซอนกน

1. รบคาอายมาเกบในตวแปร x 2. ถา x มากกวา 25 แลว 2.1 แสดงคาวา “เปนผใหญแลว” 3. ชดคาสงตอไป

เรมตน

รบขอมล X

X > 0

พมพเปนคาบวก

X < 0

พมพคาเปนศนย

พมพเปนคาลบ

จรงเทจ

จรงเทจ

จบ

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 95 of 229

Page 96: Final Document

วธทา จากผงงานทโจทยกาหนด จะเหนวามทงหมด 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

Page 97: Final Document

ค. การเพมคาใหตวแปร ง. การลดคาตวแปรลงหนงคา 6. คาสง if – else ใชกบเงอนไขแบบใด

ก. เงอนไขแบบทางเดยว ข. เงอนไขเลอกทาสองทาง ค. เงอนไขเลอกทาหลายทาง ง. ไมมขอถก

7. ลปประเภทใดทตรวจสอบเงอนไขกอนการทาในลป ก. do..while ข. do..while และ for ค. for ง. for และ while

ตอนท 2 จงตอบคาถามตอไปน

1. เหตใดจงตองมการใชคาสงควบคม 2. รปแบบของคาสง if มกแบบ จงอธบายลกษณะการทางานแตละแบบ 3. ถาหากผเรยนตองการเขยนโปรแกรมเครองคดเลขอยางงาย โดยใหผใชกดคย ‘+’, ‘-‘, ‘*’

และ ‘%’ จากนนใหโปรแกรมไปทางานตามตองการจะมวธออกแบบโปรแกรมอยางไร

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 97 of 229

Page 98: Final Document

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

Page 99: Final Document

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

Page 100: Final Document

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

Page 101: Final Document

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

Page 102: Final Document

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

Page 103: Final Document

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

Page 104: Final Document

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

Page 105: Final Document

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

Page 106: Final Document

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

Page 107: Final Document

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

Page 108: Final Document

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

Page 109: Final Document

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

Page 110: Final Document

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

Page 111: Final Document

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

Page 112: Final Document

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

Page 113: Final Document

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

Page 114: Final Document

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

Page 115: Final Document

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

Page 116: Final Document

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

Page 117: Final Document

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

Page 118: Final Document

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

Page 119: Final Document

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

Page 120: Final Document

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

Page 121: Final Document

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

Page 122: Final Document

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

Page 123: Final Document

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

Page 124: Final Document

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

Page 125: Final Document

28

แบบฝกหดทายบท ตอนท 1 จงเลอกคาตอบทถกตองทสดเพยงหนงขอ

1. สญลกษณของผงงานในขอใด จาเปนจะตองมอยในโครงสรางผงงานแบบมทางเลอก ก. การรบขอมล ข. การตดสนใจ ค. การแสดงผลขอมล ง. ถกทกขอ

2. การอธบายการทางานของโปรแกรมทมทางเลอกจะใชคาอธบายวาอะไร ก. ถา…แลว ข. เมอ…จะ ค. ถา…ดงนน ง. ทา…ถา

3. ถาหากในซโดโคดมการใชคาวา IF แตไมมคาวา ELSE ทานคดวาเปนการเลอกทาแบบใด ก. การเลอกวาชดคาสงทตามมาจะทาหรอไม ข. การเลอกทาทมสองทางเลอก ค. การเลอกทาทมสามทางเลอก ง. ถกทกขอ

4. สญลกษณการตดสนใจทนามาใชกบการทางานแบบมทางเลอกจะมลกษณะใด ก. มลกศรชเขาสองทศทาง ชออกทางเดยว ข. มลกศรชเขาสองทศทาง ชออกสองทศทาง ค. มลกศรชเขาทศทางเดยว ชออกทศทางเดยว ง. มลกศรชเขาทศทางเดยว ชออกสองทศทาง

5. ในการเขยนซโดโคดแบบการทางานทมทางเลอก ขนตอนวธทอยตอจากคาวา IF คอขนตอนแบบใด

ก. การตรวจสอบเงอนไข ข. การคานวณ ค. การรบคาอนพต ง. การพสจน

6. ขอใดถกตองสาหรบการเขยนซโดโคดสาหรบงานทมหลายทางเลอก ก. ใชคาวา “IF” ,”THEN”,”ELSE มาซอน ๆ กน ข. คานาวา “CASE” มาใช ค. เขยน “IF”,”THEN” หลาย ๆ ครง ง. ถกทกขอ

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 125 of 229

Page 126: Final Document

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

Page 127: Final Document

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

Page 128: Final Document

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

Page 129: Final Document

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

Page 130: Final Document

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

Page 131: Final Document

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

Page 132: Final Document

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

Page 133: Final Document

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

Page 134: Final Document

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

Page 135: Final Document

7

รปแสดงตวอยางและผลลพธในการรนโปรแกรมในตวอยาง

9.3 การทาซาจนระบบมเงอนไขอยางหนงจงหยด การทาซ าในลกษณะนเปนการทาซ าทมจานวนครงในการทาไมแนนอน เมอโปรแกรมเขาสลปการทาซ าจะมการตรวจสอบเงอนไขอยดานทายของลป ถาหากตรวจสอบเงอนไขแลวเปนเทจโปรแกรมจะกลบไปทากจกรรมในลปอกครงแตถาตรวจสอบเงอนไขแลวเปนจรงโปรแกรมจะออกนอกลป ดงนนโปรแกรมจะตองทากจกรรมตาง ๆ ภายลปหนงครงเสมอ การทางานในลกษณะนจะใชคาอธบายวา “จนกระทง” และตามดวยเงอนไขของการตรวจสอบ สวนซโดโคดทใชในการเขยนการทาซ าแบบนจะใชคาวา “REPEAT…UNTIL” หรอ “DO…UNTIL” กได การทาซ าในลกษณะนเขยนเปนผงงานไดดงรปท 9.5

รปท 9.5 ลกษณะการทาซ าทตรวจสอบเงอนไขหลงการทาลป

ขอมล 10 คาทปอนเขาไป

REPEAT ……………. ……………. ชดคาสงตาง ๆ ภายในลป ……………… ……………… UNTIL (ตรวจสอบเงอนไข)

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 135 of 229

Page 136: Final Document

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

Page 137: Final Document

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

Page 138: Final Document

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

Page 139: Final Document

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

Page 140: Final Document

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

Page 141: Final Document

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

Page 142: Final Document

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

Page 143: Final Document

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

Page 144: Final Document

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

Page 145: Final Document

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

Page 146: Final Document

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

Page 147: Final Document

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

Page 148: Final Document

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

Page 149: Final Document

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

Page 150: Final Document

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

Page 151: Final Document

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

Page 152: Final Document

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

Page 153: Final Document

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

Page 154: Final Document

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

Page 155: Final Document

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

Page 156: Final Document

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

Page 157: Final Document

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

Page 158: Final Document

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

Page 159: Final Document

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

Page 160: Final Document

6

10.2 แนวคดการใชอารเรยในการประมวลผล การประมวลผลแบบอารเรยนนมทงการใชอารเรยเดยว ๆ และใชอารเรยหลาย ๆ อารเรยใหทางานสมพนธกนทเรยกวาอารเรยแบบขนาน ลองพจารณาตวอยางการใชอารเรยในการประมวลผลในลกษณะตอไปน ถาหากมรานขายสนคารานหนง ไดเกบรหสสนคาไวเปนขอมลในลกษณะอารเรย โดยเกบอยในหนวยความจาในลกษณะดงตอไปน รหสสนคา A1 B1 C2 D2 ถาหากในการขายสนคาครงหนง ๆ ผขายไดคยรหสสนคาเขามา เราอาจออกแบบระบบใหอานขอมลในอารเรยนออกมาทละเซลเพอตรวจสอบวารหสสนคานนเหมอนกบขอมลทเกบอยในอารเรยนหรอไม ถาหากไมเหมอนกบเซลใดเลยกใหระบบแจงวาปอนรหสผดได นอกจากนถาหากปอนรหสสนคาเขาไปกสามารถใหเครองแจงไดวาสนคานนเปนลาดบทเทาใด แตถาใหอารเรยประมวลผลแบบขนาน โดยมอารเรยอกตวหนงเกบชอสนคาไว ดงรปตอไปน รหสสนคา ชอสนคา A1 คอมพวเตอร B1 เครองเลนเทป C2 เครองรบวทย D2 นาฟกา ถาหากการประมวลผลทาในลกษณะของอารเรยค โดยมจานวนสมาชกเทากน และมความสมพนธกนดงรป ในอารเรยของรหสสนคาจะทาใหเราทราบลาดบของสนคาตามทผใชปอนรหสเขาไป ดงนนเราสามารถนาลาดบของสนคานไปอางในอารเรยชอสนคาได วาสนคานชออะไร ตวอยางเชน ถาหากปอนรหสสนคาเปน C2 แลวใหโปรแกรมไปคนในอารเรยรหสสนคา พบวาสนคานอยลาดบท 3 จากนนกนาคาลาดบนไปแทนคาอนเดกซเพออางไปทอารเรยชอสนคา กจะทาใหทราบไดวาสนคานชอวา “เครองรบวทย” ถาหากมอารเรยเพมขนอก เชนเกบราคา เกบสวนลด และเกบขอมลอน ๆ เราสามารถใชวธการนในการประมวลผลเพอหาขอมลตาง ๆ ทเกยวของกนได การประมวลผลในลกษณะนจะเหนวาการคนหาขอมลในอารเรยแรกซงทาโดยการเปรยบเทยบคาท

ปอนเขาไปกบคาแตละเซลของอารเรย จะทาใหไดคาลาดบออกมา แลวใชลาดบนการคนหาคาในอารเรยตาง ๆ ทเกยวของตอไป

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 160 of 229

Page 161: Final Document

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

Page 162: Final Document

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

Page 163: Final Document

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

Page 164: Final Document

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

Page 165: Final Document

11

ผงงานของโปรแกรมในตวอยางท 10.9

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 165 of 229

Page 166: Final Document

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

Page 167: Final Document

13

ผงงานของปญหาในตวอยางท 10.10

รองศาสตราจารย ธรวฒน ประกอบผล

28/04/2010 167 of 229

Page 168: Final Document

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

Page 169: Final Document

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

Page 170: Final Document

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

Page 171: Final Document

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

Page 172: Final Document

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

Page 173: Final Document

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

Page 174: Final Document

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

Page 175: Final Document

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):[email protected] 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

Page 176: Final Document

4

(SP2) / .. 19

&'2**)-$(#-

); ?IT)4@3;=? * @[email protected] 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>[email protected] : 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

Page 177: Final Document

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

Page 178: Final Document

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

Page 179: Final Document

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

Page 180: Final Document

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^)@>[email protected] 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

Page 181: Final Document

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:[email protected]) @@UH^)@>C@4B?@:C.H)@>C1 (Predefined Function)

28/04/2010 181 of 229

Page 182: Final Document

10

(SP2) / .. 55

B@4?) 4.1 B;WH)@>C main ( ) B4?J:.H^)@>C40 * @?@:C. [email protected])@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)@>[email protected]);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

Page 183: Final Document

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

Page 184: Final Document

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

Page 185: Final Document

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

Page 186: Final Document

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 .:;[email protected] 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@[email protected] 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

Page 187: Final Document

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)[email protected] 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

Page 188: Final Document

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)@ ([email protected]/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

Page 189: Final Document

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

Page 190: Final Document

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< [email protected];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

Page 191: Final Document

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

Page 192: Final Document

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>?> @[email protected]) 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

Page 193: Final Document

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

Page 194: Final Document

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

Page 195: Final Document

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

Page 196: Final Document

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<[email protected] :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

Page 197: Final Document

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

Page 198: Final Document

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

Page 199: Final Document

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

Page 200: Final Document

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 -).):[email protected] J=34)/@)Q= ;@:C.:=@6d34)Q@B [email protected] 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

Page 201: Final Document

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;@/ :;[email protected] 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

Page 202: Final Document

30

(SP2) / .. 175

B@=@6d .4)@@W83.4 J=A)@=B.4)? 4>?>/[email protected] 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

Page 203: Final Document

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

Page 204: Final Document

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

Page 205: Final Document

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

Page 206: Final Document

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

Page 207: Final Document

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

Page 208: Final Document

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

Page 209: Final Document

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

Page 210: Final Document

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

Page 211: Final Document

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

Page 212: Final Document

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

Page 213: Final Document

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

Page 214: Final Document

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

Page 215: Final Document

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

Page 216: Final Document

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

Page 217: Final Document

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

Page 218: Final Document

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

Page 219: Final Document

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

Page 220: Final Document

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

Page 221: Final Document

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

Page 222: Final Document

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

Page 223: Final Document

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

Page 224: Final Document

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

Page 225: Final Document

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

Page 226: Final Document

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

Page 227: Final Document

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

Page 228: Final Document

, Computer Algorithm: Analysis and Design,

, 2553

!"#$, #$%&'()*+,& -. C, % & $ ', 2553.

!"#$, #/0,1,, % & & ), 2552

28/04/2010 228 of 229

Page 229: Final Document

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


Recommended