บทท 1ความรพนฐานการเขยนโปรแกรม
เนอหาในบทนจะกลาวถงขนตอนวธการทางคอมพวเตอร (computer algorithms) เพอเปนการใหความรพนฐานกอนการเขยนโปรแกรมคอมพวเตอร รวมถงเนอหาเกยวกบโครงสรางภายในโปรแกรมซงจะประกอบดวยเนอหาเกยวกบลกษณะของโปรแกรมแบบโครงสราง และรปแบบโครงสรางภายในโปรแกรม เพอชวยใหผเขยนโปรแกรมสามารถเลอกใชคำาสงใหสอดคลองกบโครงสรางภายในโปรแกรมได ซงรายละเอยดของแตละเนอหามดงตอไปน
1.1 ขนตอนวธการทางคอมพวเตอร (computer algorithms)
กอนทเราจะเขยนโปรแกรมคอมพวเตอรภาษาใดภาษาหนงเพอแกปญหาทางคอมพวเตอร เราควรศกษาขนตอนวธการทางคอมพวเตอร เพอใหเกดความรความเขาใจทถกตองตามขนตอนวธดงน 1) การวเคราะหงาน (job analysis) 2) การเขยนผงงานโปรแกรม (program flowcharting) 3) การเขยนโปรแกรม (programming) 4) การทดสอบ และแกไขโปรแกรม (testing and editing program) 5) การจดทำาเอกสารประกอบ และการบำารงรกษาโปรแกรม (documentation and maintenance program)
1.1.1 การวเคราะหงาน (job analysis) ในการวเคราะหงานเราจะตองกำาหนดจดประสงคของการวเคราะหงาน และขนตอนวธการวเคราะหงานแตละอยางใหได ซงงานแตละอยางมรายละเอยดดงน 1.1.1.1 จดประสงคของการวเคราะหงาน ในการวเคราะหงานแตละอยางมจดประสงคของการวเคราะหงานทสำาคญดงน 1. เพอหาวตถประสงคของการเขยนโปรแกรม 2. เพอหารปแบบผลลพธทตองการ 3. เพอหาขอมลนำาเขาทตองใสเขาไปในโปรแกรม 4. เพอหาตวแปรทจำาเปนตองใชในโปรแกรม 5. เพอหาขนตอนวธการทำางานของโปรแกรม 1.1.1.2 ขนตอนวธการวเคราะหงาน ในการวเคราะหงานแตละอยางมขนตอนวธการวเคราะหงานทสำาคญดงน 1) การหาวตถประสงคของการเขยนโปรแกรมผเขยนโปรแกรมจะตองหาวตถประสงคจากงานทจะเขยนโปรแกรมวา ตองการเขยนโปรแกรมเพอแกปญหาอะไรบางซงจะทำาใหเขยนโปรแกรมไดตรงกบความตองการหรอวตถประสงคของงานนน ๆ 2) การหารปแบบผลลพธทตองการเมอผเขยนโปรแกรมหาวตถประสงคของการเขยนโปรแกรมไดแลว ขนตอนตอมาคอการกำาหนดรปแบบผลลพธทตองการจากโปรแกรม ซงรปแบบผลลพธอาจอยในลกษณะของขอความหรอตวเลข หรอตาราง หรอแผนภม หรออาจใชผสมกนระหวางตวเลขกบขอความ หรอขอความกบตวเลข และตารางกได ขนอยกบผเขยนโปรแกรมเปนผกำาหนดเอง แตโดยสวนมากนยมแสดงผลลพธของโปรแกรมใหอยในรปแบบทเขาใจงายมากกวารปแบบทซบซอน 3) การหาขอมลนำาเขาทตองใสเขาไปในโปรแกรมผเขยนโปรแกรมจะตองหาขอมลนำาเขาจากผลลพธทไดจากโปรแกรม โดยคำานงถงขนตอนวธการคำานวณ และขอมลทจำาเปนตองใสเขาไปเพอใหไดผลลพธทตองการ
ตวอยางท 1.1 ผลลพธทตองการ คอ พนทสามเหลยมมมฉากขอมลนำาเขาทตองใสเขาไปในโปรแกรมคอ 1) สตรคำานวณพนทสามเหลยมมมฉาก พนทสามเหลยมมมฉาก = ? x ฐาน x สง 2) ความยาวของฐานและความสงของรปสามเหลยม 4) การหาตวแปรทจำาเปนตองใชในโปรแกรมตวแปร หมายถง ชอทผเขยนโปรแกรมสามารถตงขนเองตามหลกการตงชอตวแปรของภาษาคอมพวเตอรทนำามาเขยนโปรแกรม (หลกเกณฑการตงชอตวแปรกลาวไวในหวขอ 2.5.3.1) เพอใชในการอางองการเกบขอมลและเรยกใชขอมลภายในตวแปร ดงนนผเขยนโปรแกรมจะตองตงชอตวแปรทใชในการเกบขอมลทงหมดภายในโปรแกรม รวมถงตวแปรบางตวทใชในการนบจำานวนรอบของการทำางานในโปรแกรมอกดวย
จากตวอยางท 1.1 สามารถแสดงการวเคราะหงานตงแตขนตอนท 1 ถง 4 ไดดงน
1) วตถประสงคของการเขยนโปรแกรม เพอคำานวณหาคาพนทสามเหลยมมมฉาก 2) รปแบบผลลพธทตองการ พมพผลลพธทตองการออกทางภาพดงน * ** output *** Base = 5 High = 4 Area = 10 3) ขอมลนำาเขา คอ ความยาวฐานและความสง 4) ตวแปรทใช B = ตวแปรทเกบความยาวของสามเหลยมมมฉาก H = ตวแปรทเกบความสงของสามเหลยมมมฉาก Area = ตวแปรทเกบผลลพธทไดจากการคำานวณตามสตร
Area = 1/2*B*H หรอ Area = 0.5*B*H
5) การหาขนตอนวธการทำางานของโปรแกรม
การหาขนตอนวธการทำางานของโปรแกรมจะขนอยกบลกษณะของการแกปญหา ดงนนนกเขยนโปรแกรมทมความชำานาญในระดบหนงแลวจะสามารถหาขนตอนวธการทำางานของโปรแกรมไดโดยไมยาก แตสำาหรบผทเรมตนศกษาการเขยนโปรแกรม ควรหาขนตอนวธการทำางานของโปรแกรมตามคำาแนะนำาโดยเรยงตามลำาดบดงน
ขนตอนวธการทำางานของโปรแกรมทแนะนำา
5.1) เรมตนทำางาน 5.2) กำาหนดคาเรมตนใหกบตวแปร 5.3) พมพหวรายงาน (ถามรายงาน) 5.4) รบขอมลเขาทละเรคอรด 5.5) ตรวจสอบขอมลวาเปนชดสดทายหรอไม 5.5.1 ถาเปนขอมลชดสดทาย ใหไปทำางานขอ 5.11 5.5.2 ถาไมใชขอมลชดสดทาย ใหทำางานขอตอมา (ขอ 5.6) 5.6) คำานวณผลลพธ 5.7) เปรยบเทยบผลลพธ (ถาม) 5.8) เพมคาตวแปรสะสม (ถาม) 5.9) พมพคาผลลพธทละเรคอรด 5.10) ยอนกลบไปทำางานขอ 5.4 5.11) พมพสรป (ถาม)
5.12) จบการทำางาน
ทงนการวเคราะหงานเพอแกปญหาแตละอยางอาจมบางขนตอนแตกตางกนไป ดงนนคำาแนะนำาขางตนจงเปนเพยงแนวทางของการหาขนตอนวธการทำางานของโปรแกรมเทานน ซงเวลาใชงานจรงผวเคราะหงานตองประยกตใหเขากบปญหาทตองการแกไขตอไป เพอความเขาใจเกยวกบขนตอนวธการวเคราะหงานมากยงขน ใหศกษาจากตวอยางการวเคราะหงานดงตอไปน
ตวอยางท 1.2 จงเขยนวเคราะหงาน เพอเขยนโปรแกรมคำานวณ พนทสเหลยมผนผา จำานวน 1 รป โดยทผใชโปรแกรม จะตองปอนความกวาง และความยาวของสเหลยมผนผา เขาไปในโปรแกรม
วธทำา ขนตอนการวเคราะหงานทง 5 ขนตอน สามารถแสดงไดดงน 1) วตถประสงคของการเขยนโปรแกรม เพอคำานวณพนทสเหลยมผนผาจำานวน 1 รป 2) รปแบบผลลพธทตองการ พมพผลลพธออกทางจอภาพ ดงน
3) ขอมลนำาเขา 3.1) สตรคำานวณพนทสเหลยมผนผา
Area = Width*Length
3.2) รบคาความกวางและความยาวของสเหลยมผนผาผานทางคยบอรด 4) ตวแปรทตงขนเพอใชในโปรแกรม Width = ตวแปรทใชเกบความกวางของสเหลยมผนผา Length = ตวแปรทใชเกบความยาวของสเหลยมผนผา Area = ตวแปรทใชเกบพนทของสเหลยมผนผา โดยคำานวณไดจากสตร Area = Width*Length 5) ขนตอนวธการทำางานของโปรแกรมมดงน 5.1) เรมตนทำางาน 5.2) รบขอมลคาความยาวและความกวางของสเหลยมผนผาผานทางคยบอรด 5.3) คำานวณพนทสเหลยมผนผาตามสตร Area = Width*Length 5.4) พมพคาความยาว ความกวาง และพนทสเหลยมผนผาออกทางจอภาพ 5.5) จบการทำางาน
1.1.2 การเขยนผงงานโปรแกรม (program flowcharting)สำาหรบหวขอการเขยนผงงานโปรแกรมจะประกอบดวยเนอหาทสำาคญดงนคอ ความหมายของผงงาน ประเภทของผงงาน
สญลกษณมาตรฐานทใชเขยนผงงานโปรแกรม หลกการเขยนผงงานโปรแกรม และขนตอนการเขยนผงงานโปรแกรม ดงรายละเอยดตอไปน
1.1.2.1 ความหมายของผงงาน “ผงงาน” (flowchart) ทางคอมพวเตอร หมายถง แผนภาพทเขยนขนโดยใชสญลกษณมาตรฐาน เพอแสดงขนตอนวธการทำางานของโปรแกรม หรอระบบงานทตองการ
1.1.2.2 ประเภทของผงงานผงงานสามารถจำาแนกออกได 2 ประเภท คอ 1) ผงงานระบบ (system flowchart) หมายถง ผงงานทแสดงถงขนตอนวธการทำางานของระบบงานใดระบบหนง ซงในผงงานระบบจะแสดงใหเหนถงสอทใชรบขอมล บนทกขอมล วธการประมวลผล ขนตอนการทำางานและความสมพนธของสวนตาง ๆ ในระบบงานอยางกวาง ๆ เพอใหเหนภาพรวมของระบบงานใดระบบงานหนง เชน
รปท 1.1 ผงงานระบบแสดงการตดเกรดทมา : กรรณการ กมลรตน, 2547.
2) ผงงานโปรแกรม (program flowchart) หมายถงผงงานทแสดงขนตอน วธการทำางานของโปรแกรมทตองการเขยนขน ภายในผงงานโปรแกรม จะแสดงใหเหนขนตอน วธการทำางาน ของโปรแกรมอยางละเอยด เพอใหคอมพวเตอร สามารถทำางานตามทเขยนไวในผงงานโปรแกรม ไดอยางถกตอง โดยเราสามารถนำาขนตอน วธการทำางานของโปรแกรมในขนการวเคราะหงาน มาเขยนเปนผงงานโปรแกรมไดทนท จากนนกสามารถนำาผงงานโปรแกรม ไปเขยนโปรแกรมตามทตองการได ดงนนในเรองของการเขยนผงงาน ทจะกลาวตอไปนจะเกยวของกบผงงานโปรแกรมทงสน เชน
รปท 1.2 ผงงานโปรแกรมแสดงรายละเอยดการทำางานของโปรแกรมสำาหรบตดเกรดทมา : เฉลมพล ทพซาย, 2530 : 29.
1.2.1.3 สญลกษณมาตรฐานทใชเขยนผงงานโปรแกรมสถาบนมาตรฐานแหงชาตของสหรฐอเมรกา (American National Standard Institute) และองคการระหวางประเทศวาดวยการมาตรฐาน (International Organization for Standardization) ไดรวมกนกำาหนดสญลกษณมาตรฐานทใชเขยนผงงานโปรแกรม โดยในเอกสารเลมนจะนำาเสนอสญลกษณทนยมนำามาใชเขยนผงงานโปรแกรม ดงตอไปน
1. สญลกษณ Process
Process
ความหมายของ Process คอ การกำาหนดคาหรอการคำานวณคา
ตวอยางท 1.3 แสดงการกำาหนดคาใหตวแปร Total
ตวอยางท 1.4 แสดงการคำานวณคาผลรวมของตวแปร Total
2. สญลกษณ Decision
ความหมายของ Decision คอ การทดสอบเงอนไขหรอเปรยบเทยบเงอนไข เพอตดสนใจทำางานอยางใดอยางหนงตามทตองการ
ตวอยางท 1.5 แสดงการเปรยบเทยบเงอนไข 1 ทางเลอก
ตวอยางท 1.6 แสดงการเปรยบเทยบเงอนไข 2 ทางเลอก
3. สญลกษณ Start/ Stop program หรอ Terminal Interrupt
ความหมายของสญลกษณ คอ การเรมตนโปรแกรม หรอการสนสดการทำางานของโปรแกรม หรอหยดการทำางานชวคราว ตวอยางท 1.7 แสดงการใชงานสญลกษณ Start/ Stop program หรอ Terminal Interrupt
4. สญลกษณ Input / Output
ความหมายของสญลกษณ คอ การรบขอมล (input) หรอการแสดงผลลพธ (output) โดยไมไดระบสอทใช
ตวอยางท 1.8 แสดงการใชงานสญลกษณ Input/ Output
5. สญลกษณ Display
ความหมายของสญลกษณ คอ การแสดงผลลพธทางจอภาพ
ตวอยางท 1.9 แสดงการใชงานสญลกษณ display
6. สญลกษณ Document
ความหมายของสญลกษณ คอ การพมพผลลพธออกทางกระดาษพมพ
ตวอยางท 1.10 แสดงการใชงานสญลกษณ Document
7. สญลกษณ Manual Input
ความหมายของสญลกษณ คอ การรบขอมลหรอคำาสงผานทางคยบอรด
ตวอยางท 1.11 แสดงการใชงานสญลกษณ Manual Input
8. สญลกษณ Manual Operation
ความหมายของสญลกษณคอการรบขอมลหรอแสดงผลลพธโดยไมระบสอ
ตวอยางท 1.12 แสดงการใชงานสญลกษณ Manual Operation
9. สญลกษณ Connector
Connector
ความหมายของสญลกษณ คอ แสดงจดเชอมตอจากทหนงไปยงอกทหนงของผงงาน โดยทจดเชอมตอนอยในหนาเดยวกน
ตวอยางท 1.13 แสดงการใชงานสญลกษณ Connector
10. สญลกษณ Off page Connector
Off page Connector
ความหมายของสญลกษณ คอ แสดงจดเชอมตอจากทหนงไปยงอกทหนงของผงงาน โดยทจดเชอมตอนอยตางหนากน
ตวอยางท 1.14 แสดงการใชงานสญลกษณ Off page Connector
คำานวณคา Avg = Total + N เสรจแลว ไปทำางานตอไปทจด B โดยทจด B อยตางหนากน
11. สญลกษณ flow line and arrowheads
ความหมายของสญลกษณ คอ แสดงทศทาง การทำางานของผงงาน โดยใชลกศร เปนตวกำาหนดทศทาง การทำางานของผงงาน ตวอยางท 1.15 แสดงการใชงานสญลกษณ flow line and arrowheads
12. สญลกษณ Punched Card
ความหมายของสญลกษณคอการรบขอมลหรอแสดงผลลพธบนบตรเจาะร ตวอยางท 1.16 แสดงการใชงานสญลกษณ Punched Card
1.1.2.4 หลกการเขยนผงงานโปรแกรมการเขยนผงงานโปรแกรม มหลกการเขยนดงน
1) เขยนผงงานจากดานบนลงดานลาง2) ใชสญลกษณใหตรงกบความหมายของผงงาน3) ใชเสน flow line และ arrowheads แสดงทศทางการทำางานของผงงาน4) ใสคำาอธบายลงในสญลกษณสน ๆ แตเขาใจงาย จะใชภาษาไทยหรอองกฤษกได5) หลกเลยงการโยงเสนทศทางของผงงานใหตดกนเพราะจะทำาใหสบสน ควรใชจดเชอมตอ (connector) หนาเดยวกนแทน จะเขาใจไดงายและเปนระเบยบ6) พยายามเขยนผงงานใหจบในหนากระดาษเดยวกน แตถาไมจบในหนาเดยวกน ควรใชจดเชอมตอตางหนากระดาษ (off page connector)
1.1.2.5 ขนตอนการเขยนผงงานโปรแกรมเพอความเขาใจเกยวกบขนตอนการเขยนผงงานโปรแกรมไดถกตองใหศกษาจากตวอยางดงตอไปน ตวอยางท 1.17 จงเขยนผงงานโปรแกรมทไดวเคราะหงานมาแลวในตวอยางท 1.2
วธทำา
จากการวเคราะหงานในตวอยางท 1.2 จะไดวา
ขนตอนวธการทำางานของโปรแกรม มดงน1) เรมตนทำางาน2) รบขอมลคาความยาว และความกวางของสเหลยมผนผาผานทางคยบอรด3) คำานวณพนทสเหลยมผนผาตามสตร Area = Width * Length4) พมพคาความยาว ความกวาง และพนทสเหลยมผนผาออกทาง จอภาพ5) จบการทำางาน
การเขยนผงงานโปรแกรม จะนำาขนตอนวธการทำางานของโปรแกรม ทไดจากการวเคราะหงาน มาเขยนผงงานไดดงน
รปท 1.3 แสดงผงงานขนตอนวธการทำางานของโปรแกรม ทมา : สมชาย รตนเลศนสรณ, 2545 : 17.
1.1.3 การเขยนโปรแกรม (programming)ในหวขอเรองการเขยนโปรแกรมจะกลาวถงเนอหา 2 สวน คอความหมายของโปรแกรมคอมพวเตอร และภาษาคอมพวเตอรดงมรายละเอยดตอไปน
1.1.3.1 ความหมายของโปรแกรมคอมพวเตอรโปรแกรมคอมพวเตอร (computer program) หมายถง ชดของคำาสงทเขยนขนเพอสงใหคอมพวเตอรทำางานตามทตองการ สวนการเขยนโปรแกรม (programming) หมายถง การเขยนชดคำาสงดวยภาษาคอมพวเตอรภาษาใดภาษาหนง เพอใหคอมพวเตอรทำางานตามโปรแกรมทเราเขยนขน
ดงนน ผเขยนโปรแกรม (programmer) จงจำาเปนตองเรยนรภาษาคอมพวเตอรภาษาใดภาษาหนงหรอหลายภาษา แลวฝกฝนทกษะการเขยนโปรแกรมดวยภาษาคอมพวเตอรทตองการใชงานใหเกดความชำานาญจงจะสามารถเขยนโปรแกรมคอมพวเตอรไดอยางมประสทธภาพ
1.1.3.2 ภาษาคอมพวเตอรภาษาคอมพวเตอร (computer language) หมายถง ภาษาทสามารถนำามาใชเขยนโปรแกรมคอมพวเตอรได ซงแตละภาษามรายละเอยดดงตอไปน
1) ภาษาเครอง (machine language) ภาษาเครองจดเปนภาษาคอมพวเตอรภาษาเดยวทสามารถตดตอกบคอมพวเตอรไดโดยตรง เพราะวาการเขยนคำาสงและขอมลในภาษาเครองใชระบบเลขฐานสอง (binary number system) คอใชตวเลข 0 และ 1 เทานน ทำาใหเครองคอมพวเตอรสามารถทำางานไดรวดเรว สวนขอเสยของภาษาเครอง คอ เครองคอมพวเตอรตางชนดกนมลกษณะการเขยนภาษาเครองทแตกตางกนไป และเกดความยงยากในการปรบปรงแกไข ทำาใหเกดความไมสะดวกในการใชงาน ดงนนภาษานจงไมเหมาะกบผเรมตนเขยนโปรแกรม
ตวอยางท 1.18 แสดงคำาสงของภาษาเครองมดงน ถาเราตองการสงใหเครองทำางานตามคำาสง 9 + 3 แสดงไดดงน
การบวกแทนดวยรหส 10101010เลข 9 เปลยนเปนเลขฐานสอง 00001001เลข 3 เปลยนเปนเลขฐานสอง 00000011ดงนน คำาสง 9 + 3 เขยนเปนภาษาเครองไดดงน
00001001 10101010 00000011
2) ภาษาแอสเซมบล (assembly language) ภาษาแอสเซมบลหรอจะเรยกชออกอยางวาภาษาระดบตำา ซงเปนภาษาคอมพวเตอรทพฒนาขนมาเพอใหผเขยนโปรแกรมสามารถเขยนโปรแกรมตดตอกบคอมพวเตอรไดงายกวาภาษาเครอง สวนการเขยนคำาสงในภาษาแอสเซมบลจะใชคำายอของภาษาองกฤษและอางถงตำาแหนงทอยภายในคอมพวเตอรเปนสวนใหญ ไดแก MOVE, DC, DS, CL10 เปนตน ผทตองใชภาษาแอสเซมบลสวนมากจะเปนวศวกรคอมพวเตอร ดงนนภาษาแอสเซมบลจงไมเหมาะกบผเรมตนเขยนโปรแกรม
ตวอยางท 1.19 แสดงคำาสงของภาษาแอสเซมบลมดงน ถาเราตองการสงใหเครองทำางานตามคำาสง 9 + 3 แสดงไดดงน MOV AX, 9 MOV BX, 3 ADD AX, BX
3) ภาษาระดบสง (high level language) ภาษาระดบสงเปนภาษาทผเขยนโปรแกรมสามารถเขาใจไดงายกวาภาษาแอสเซมบลและภาษาเครอง ทงนกเพราะการเขยนคำาสงของภาษาระดบสงมลกษณะเปนภาษาองกฤษ ซงอานแลวเขาใจไดงายกวาภาษาแอสเซมบล เชน ใชคำาวา READ, WRITE, PRINT, COMPUTE เปนตน ตวอยางของภาษาระดบสงไดแก ภาษาฟอรแทรน (FORTRAN), ภาษาโคบอล (COBOL), ภาษาเบสก (BASIC), ภาษาปาสคาล (PASCAL) และภาษาซ (C) เปนตน ซงแตละภาษามประวตพอสงเขปดงตอไปน
ภาษาฟอรแทรน (FORTRAN ยอมาจาก FORmula TRANslator) พฒนาโดยบรษท IBM ระหวางป ค.ศ.1954 ถง ค.ศ.1957 ภาษานใชสำาหรบการพฒนาโปรแกรมประยกตดานวทยาศาสตรและวศวกรรมศาสตร ทตองใชในการคำานวณสมการคณตศาสตรทซบซอน ปจจบนภาษาฟอรแทรนยงเปนทนยมใช ในการพฒนาโปรแกรมดานวทยาศาสตรและวศวกรรมศาสตร
ภาษาโคบอล (COBOL ยอมาจาก Common Business Oriented Language) พฒนาขนในป ค.ศ.1959 เปนภาษาทพฒนาขนมาเพอใชในการพฒนาโปรแกรมประยกตดานธรกจและการคา ปจจบนโปรแกรมทใชในดานธรกจจำานวนมากยงเปนโปรแกรมทพฒนามาจากภาษาโคบอล
ภาษาเบสก (BASIC ยอมาจาก Beginners All-purpose Symbolic Instructional Code) เปนภาษาทพฒนาขนโดยมจดประสงคเพอใหผเรมตนพฒนาโปรแกรมสามารถเรยนรและเขาใจการพฒนาโปรแกรมอยางงาย ภาษาเบสกเปนภาษาคอมพวเตอรภาษาแรกทใชเครองไมโครคอมพวเตอร
ภาษาคอมพวเตอรทพฒนาขนในยคแรก ยงมขอจำากดในการทจะพฒนาโปรแกรมขนาดใหญ ทงนเนองจากภาษาคอมพวเตอรเหลานนขาดโครงสรางทด ทำาใหการพฒนาโปรแกรมทมขนาดใหญและมความซบซอนเปนไปไดยาก ในชวงตนป ค.ศ.1970 จงมภาษาคอมพวเตอรทเปนภาษาเชงกระบวนการ (Procedural หรอ Structural Language) เกดขน ภาษาคอมพวเตอรประเภทนจะมความยดหยนในการพฒนาโปรแกรม ทำาใหสามารถแกไขและบำารงรกษาไดงาย เนองจากโปรแกรมถกแยกออกเปนสวน ๆ ภาษาคอมพวเตอรทเปนภาษาเชงกระบวนการทสำาคญคอ
ภาษาปาสคาล (Pascal) พฒนาโดย Niclaus Wirth ในป ค.ศ.1971 โดยมจดประสงคเพอใชในการสอนการเขยนโปรแกรมภาษาเชงกระบวนการ ในมหาวทยาลย แตเนองจากภาษาปาสคาลไมมคณลกษณะทจะสนบสนนการพฒนาโปรแกรมดานธรกจและอตสาหกรรมจงไมไดรบความนยมมากนก
ภาษาซ (C) พฒนาขนในชวงเดยวกบภาษาปาสคาล โดยนกวจยทหองปฏบตการ AT&T Bell ซงไดนำาเอาจดเดนของภาษา BCPL และภาษา B มาใชและไดเพมคณลกษณะและชนดขอมลอนเขามาดวย เดมภาษาซถอวาเปนภาษาคอมพวเตอรทสำาคญในการพฒนาโปรแกรมบนระบบปฏบตการยนกส (Unix) ซงเปนภาษาคอมพวเตอรทสามารถสรางโปรแกรมประยกตททำางานไดรวดเรวมาก เมอเทยบกบภาษาคอมพวเตอรอน ๆ
4) ภาษาระดบสงมาก (very high level language) ภาษาระดบสงมาก บางครงเรยกวา Fourth Gerneration Languages (4GLs) เปนภาษาทมลกษณะสำาคญ คอ ผเขยนโปรแกรมไมตองบอกวธการทำางานโดยละเอยด เพยงแตระบคำาสงใหทำางานสน ๆ ใหภาษาระดบสงมากเขาใจกเพยงพอ สวนวธการคำานวณหรอการทำางานภาษาระดบสงมากจะเปนผจดการเองทงสน บางครงเรยกวา non-procedure languageตวอยางภาษาระดบสงมาก ไดแก ภาษา SQL (Structured Query Langauge) ซงนยมใชกนในซอรฟแวรพฒนาระบบจดการฐานขอมล เชน ORACLE เปนตน
5) ภาษาระดบธรรมชาต (natural language) ภาษาธรรมชาตจะเกยวของกบระบบฐานความร (knowledge based system ) และกฎอางอง (inference rules) เพยงแตผใชภาษาธรรมชาตปอนคำาถามผานเขาไปในคอมพวเตอรทมภาษาธรรมชาตกจะทำาการวเคราะหคำาถามแลวไปคนหาคำาตอบจากระบบฐานความรทเกบไวตวอยางของภาษาธรรมชาต ไดแก ภาษา PROLOG และภาษา LISP (List Processing Language)
1.1.4 การทดสอบ และแกไขโปรแกรม (testing and editing program) หลงจากทเราเขยนโปรแกรมเสรจแลว ขนตอนตอไป คอ การทดสอบโปรแกรมทเขยนขนซงอาจพบความผดพลาดได 2 ชนด ดงน 1) ความผดพลาดทางไวยากรณภาษา (syntax error) เปนความผดพลาดทเกดจากการเขยนคำาสงของภาษาคอมพวเตอรผด ตวอยางเชน คำาสง printf( ) ในภาษา C ตองเขยนดวยตวอกษรตวเลก แตเขยนเปน PRINTF( ) เปนตน โดยสวนมากความผดพลาดทางไวยากรณ จะถกตรวจสอบพบเมอมการแปลโปรแกรม (compile) ใหเปนภาษาเครอง ซงเราสามารถแกไขโดยการเขยนคำาสงใหถกตองตามไวยากรณของภาษานน ๆ
2) ความผดพลาดทางตรรกะ (logical error) เปนความผดพลาดทเกดจากการลำาดบการทำางานผดหรอปอนสตรคำานวณผด ตวอยางเชน ตองการหาคา X = X + Y แตปอนสตรเปน X = X * Y อยางน เปนตน วธการตรวจหาความผดพลาดแบบน คอ ตรวจสอบการคำานวณผลลพธของโปรแกรมวาตรงกบผลลพธทคำานวณดวยมอหรอเครองคดเลขหรอไม ถาไมตรงกนแสดงวาเกดความผดพลาดทางตรรกะขน วธการแกไขกคอ การแกไขสตรใหถกตอง หรอแกไขลำาดบการทำางานใหถกตอง ดงนน จะเหนไดวาผเขยนโปรแกรมจะตองทำาการทดสอบโปรแกรมและแกไขโปรแกรมใหสามารถทำางานไดตามทตองการ
1.1.5 การจดทำาเอกสารประกอบ และการบำารงรกษาโปรแกรม (documentation and maintenance program) เมอผเขยนโปรแกรมไดทำาการทดสอบโปรแกรมและแกไขความผดพลาดทเกดขนเรยบรอยแลว ขนตอนตอไปกควรจดทำาคมอการใชโปรแกรม เพราะจะทำาใหผใชโปรแกรมสามารถใชงานไดถกตอง โดยคมอการใชโปรแกรมทดควรจดทำาในลกษณะทแสดงการทำางานเปนขนตอน ผใชโปรแกรมสามารถปฏบตตามไดจรง สวนการบำารงรกษาโปรแกรมทพฒนาขนกตองมคำาแนะนำาใหผใชโปรแกรมปฏบต ตวอยางเชน การเกบโปรแกรมตนฉบบ ควรเกบไวในกลองทมดชด ปองกนฝนได ไมควรเกบไวบนโตะทำางาน ไมควรเกบไวในรถยนตเพราะอาจถกอากาศรอนทำาใหเสยได นอกจากนตองมการสำาเนาโปรแกรมตนฉบบเอาไว อยางนอย 1 ชด แลวนำาชดทสำาเนาไปใช ไมควรใชโปรแกรมตนฉบบโดยตรง ควรเกบเอาไวสำาหรบกรณทโปรแกรมสำาเนาเกดปญหาจะไดนำาโปรแกรมตนฉบบมาทำาสำาเนาและใชงานไดทนท
1.2 โครงสรางภายในโปรแกรม เนอหาในหวขอนจะกลาวถงรปแบบโครงสรางภายในโปรแกรมทผเขยนโปรแกรมจำาเปนตองทราบ เพราะชวยใหผเขยนโปรแกรมสามารถเลอกใชคำาสงใหสอดคลองกบโครงสรางภายในโปรแกรมได ซงมเนอหา 2 สวนคอ ลกษณะของโปรแกรมแบบโครงสราง และรปแบบโครงสรางภายในโปรแกรม ดงรายละเอยดตอไปน 1.2.1 ลกษณะของโปรแกรมแบบโครงสราง การเขยนโปแกรมแบบโครงสราง (structured programming) หมายถงการเขยนโปรแกรมทมการนำาโครงสรางของคำาสงหลาย ๆ รปแบบมาใชในโปรแกรม เพอใหโปรแกรมทเขยนขนมขนตอนทแนนอน และสะดวกตอการแกไขโปรแกรม โดยหลกเลยงการใชคำาสง goto หรอใชใหนอยทสด เพราะคำาสง goto จะทำาใหโปรแกรมมการยายการทำางานจากจดหนงไปยงอกจดหนงทกำาหนดไว ซงอาจเกดความสบสนในการตรวจสอบการทำางานของโปรแกรมไดโดยทวไปแลวภาษาคอมพวเตอรทเหมาะสมสำาหรบการนำามาเขยนโปรแกรมแบบโครงสรางมหลายภาษา ตวอยางเชน ภาษาปาสคาล (PASCAL) ภาษาโคบอล (COBOL) และภาษา C เปนตน สำาหรบในเอกสารนจะกลาวถงลกษณะของโปแกรมแบบโครงสรางทเขยนดวยภาษา C เทานน
เพอความเขาใจเกยวกบลกษณะของโปรแกรมแบบโครงสรางมากยงขน ใหศกษาจากตวอยางโปรแกรมภาษา C ดงตอไปน
โปรแกรมตวอยางท 1.1 แสดงตวอยางโปรแกรมภาษา C ทเปนแบบโครงสรางอยางงาย
/* strucpro.c */#include<stdio.h>void main(void){ /* สวนท 1 ประกาศตวแปรและกำาหนดคาเรมตนใหตวแปร */ int k= 1 ; float sum=0 , avg; /* สวนท 2 คำานวณคาผลรวมของตวเลข 1+2+3+…+10 */ while ( k<=10) { sum+=k; k++; } /* คำานวณคาเฉลยของตวเลข */ avg = sum/10; /* สวนท 3 พมพผลลพธออกทางจอภาพ */ printf(“N=%d , SUM=%.2f , AVERAGE=%.2f\n” , 10,sum,avg);
}
จากตวอยางโปรแกรมภาษา C ขางตนจะเหนวาโปรแกรมนสามารถแบงสวนของการทำางานออกเปน 3 สวนทสำาคญดงน สวนท 1 คอ สวนของการประกาศตวแปรและคาเรมตนของตวแปรทจำาเปนตองใชในโปรแกรมซงกคอ คำาสง int k=1; และคำาสง float = sum=0, avg; สวนท 2 คอ สวนของการคำานวณคาผลรวม และคาเฉลยนของตวเลข ซงกคอ คำาสง while และคำาสง avg = sum/10; สวนท 3 คอ สวนของการแสดงผลลพธทางจอภาพ ซงกคอคำาสง printf( );
สำาหรบการแกไขโปรแกรมขางตนสามารถทำาไดงายและสะดวกมาก ตวอยางเชน ผเขยนโปรแกรมตองการแกไขสวนของการแสดงผลลพธกสามารถแกไขในสวนท 3 คอแกไขคำาสง printf( ); เทานน สวนท 1 และสวนท 2 ไมตองแกไข หรอทำานองเดยวกนถาตองการแกไขคาเรมตนของตวแปร k ใหมคาเปน 10 กสามารถทำาไดงายมากโดยแกไขสวนท 1 คอคำาสง int k=1; แกเปน int k=10;
ดงนนจะเหนไดวาลกษณะของโปรแกรม แบบโครงสรางจะมการทำางานเปนขนตอน ทสามารถเขาใจการทำางานของโปรแกรมไดงาย และสะดวกในการแกไขโปรแกรมภายหลง
1.2.2 รปแบบโครงสรางภายในโปรแกรม
รปแบบโครงสรางภายในโปรแกรมทควรรจกมดงน 1.2.2.1 โครงสรางแบบเรยงลำาดบ
รปท 1.4 แสดงโครงสรางแบบเรยงลำาดบ ทมา : สมชาย รตนเลศนสรณ, 2545 : 29.
การทำางานของโครงสรางแบบเรยงลำาดบ คอจะทำางานตามคำาสงท 1, คำาสงท 2, …, คำาสงท n ตามลำาดบ
1.2.2.2 โครงสรางแบบทดสอบเงอนไขโครงสรางแบบทดสอบเงอนไข หมายถง โครงสรางของคำาสง ทมการทดสอบเงอนไขกอน ทจะทำางานอยางใดอยางหนง ซงสามารถแบงออกเปน 3 ชนด ดงน
1) โครงสรางแบบทดสอบเงอนไข 1 ทาง
รปท 1.5 แสดงโครงสรางแบบทดสอบเงอนไข 1 ทางทมา : สมชาย รตนเลศนสรณ, 2545 : 29.
การทำางานของโครงสรางแบบทดสองเงอนไข 1 ทาง คอทำาการทดสอบเงอนไขวาเปนจรงหรอเทจ ถาเงอนไขเปนจรง ใหทำางานตามคำาสงทกำาหนดไวแลวออกจากการทำางาน แตถาเงอนไขเปนเทจ ใหออกจากการทำางาน
2) โครงสรางแบบทดสอบเงอนไข 2 ทาง
รปท 1.6 แสดงโครงสรางแบบทดสอบเงอนไข 2 ทางทมา : สมชาย รตนเลศนสรณ, 2545 : 30.
การทำางานของโครงสรางแบบทดสอบเงอนไข 2 ทาง คอทำาการทดสอบเงอนไขวาเปนจรงหรอเทจ ถาเงอนไขเปนจรง ใหทำางานตามคำาสง A ทกำาหนดไวแลวออกจากการทำางาน แตถาเงอนไขเปนเทจ ใหทำางานตามคำาสง B ทกำาหนดไวแลวออกจากการทำางาน
3) โครงสรางแบบทดสอบเงอนไขมากกวา 2 ทางขนไป
รปท 1.7 แสดงโครงสรางแบบทดสอบเงอนไขมากกวา 2 ทางขนไปทมา : สมชาย รตนเลศนสรณ, 2545 : 30.
การทำางานของโครงสรางแบบทดสอบเงอนไขมากกวา 2 ทางขนไป มลกษณะดงตอไปน 1. ทำาการทดสอบเงอนไขท 1 วาเปนจรงหรอเทจ ถาเงอนไขเปนจรง ใหทำางานตามคำาสง A ทกำาหนดไวแลวออกจากการทำางาน แตถาเงอนไขเปนเทจ ใหทำางานในขอ 2.2. ทำาการทดสอบเงอนไขท 2 วาเปนจรงหรอเทจ ถาเงอนไขเปนจรง ใหทำางานตามคำาสง B ทกำาหนดไวแลวออกจากการทำางาน แตถาเงอนไขเปนเทจ ใหทำางานในขอ 3.3. ทำาการทดสอบเงอนไขใหมอก โดยทำาซำาเชนนไปเรอย ๆ จนกวาจะถงเงอนไขสดทาย (เงอนไขท n) ถาเงอนไขเปนจรง ใหทำางานตามคำาสง N ทกำาหนดไวแลวออกจากการทำางาน แตถาเงอนไขเปนเทจ ใหออกจากการทำางาน
1.2.2.3 โครงสรางแบบทำางานวนลป
โครงสรางแบบทำางานวนลป หมายถง โครงสรางของคำาสงทมการทำางานซำา ๆ เปนวงจรปด จนกวาเงอนไขททดสอบจะตรงกบคาจรงหรอเทจตามโครงสรางทใช จงสามารถออกจากการทำางานได ซงสามารถแบงออกเปน 2 ชนด ดงน
1) โครงสรางแบบ DO UNTIL
รปท 1.8 แสดงโครงสรางแบบ DO UNTILทมา : สมชาย รตนเลศนสรณ, 2545 : 31.
การทำางานของโครงสรางแบบ DO UNTIL คอเรมตนดวยการทำางานตามคำาสงทตองการภายในลปจนหมดคำาสงไป 1 รอบ จากนนจงทำาการทดสอบเงอนไขวาเปนจรงหรอเทจ ถาเงอนไขเปนเทจ ใหกลบไปทำางานตามคำาสงภายในลปอก ทำางานซำา ๆ เชนนจนกวาเงอนไขเปนจรง จงออกจากการทำางานแบบนได ลกษณะของโครงสรางแบบ DO UNTIL นจะตรงกบคำาสง REPEAT UNTIL ในภาษาปาสคาล
2) โครงสรางแบบ DO WHILE
รปท 1.9 แสดงโครงสรางแบบ DO WHILEทมา : สมชาย รตนเลศนสรณ, 2545 : 32.
การทำางานของโครงสรางแบบ DO WHILE คอเรมตนดวยการทดสอบเงอนไขวาเปนจรงหรอเทจ ถาเงอนเปนจรง ใหทำางานตามคำาสงทตองการภายในลปจนหมดคำาสง จากนนจงยอนกลบไปทำาการทดสอบเงอนไขอกครงวาเปนจรงหรอเทจ ถาเงอนไขเปนจรง ใหทำางานตามคำาสงภายในลปอก ทำางานซำา ๆ เชนนจนกวาเงอนไขเปนเทจ จงออกจากการทำางานแบบนได ลกษณะของโครงสราง DO WHILE นจำาตรงกบคำาสง while ในภาษา C
ขอควรระวงของโครงสรางแบบทำางานวนลป คอการทำาสอบเงอนไขจะตองมทง 2 กรณ คอเปนจรง และเปนเทจ ตวอยางเชน โครงสรางแบบ DO UNTIL ถาเงอนไขททดสอบไมมกรณทเปนจรง จะทำาใหการทำางานของโปรแกรมทำางานซำา ๆ แบบไมมทางออกได ในทำานองเดยวกนโครงสรางแบบ DO WHILE ถาเงอนไขททดสอบไมมกรณทเปนเทจ จะทำาใหการทำางานของโปรแกรมวนทำางานซำา ๆ แบบไมมทางออกได
1.3 สรปทายบท
ความรพนฐานในการเขยนโปแกรม มเนอหาเพอใหผเขยนโปรแกรม ทราบขนตอนวธการกอนทจะเขยนโปรแกรมคอมพวเตอรภาษาใดภาษาหนง เพอแกปญหาทางคอมพวเตอร ผเขยนโปรแกรมควรศกษาขนตอนวธการทางคอมพวเตอร เพอใหเกดความรความเขาใจทถกตองตามขนตอนวธดงน
1. การวเคราะหงาน (job analysis) จะตองกำาหนดจดประสงคของการวเคราะหงาน และขนตอนวธการวเคราะหงานแตละอยางใหได
2. การเขยนผงงานโปรแกรม (program flowcharting) เปนการเขยนแผนภาพโดยใชสญลกษณมาตรฐานทางคอมพวเตอร เพอแสดงขนตอนวธการทำางานของโปรแกรมหรอระบบงานตามทเราไดวเคราะหงานไว
3. การเขยนโปรแกรม (programming) เปนการเขยนชดคำาสงภาษาใดภาษาหนงเพอสงใหคอมพวเตอรทำางานตามทเราตองการ ตามแผนผงทเราไดเขยนไว
4. การทดสอบ และแกไขโปรแกรม (testing and editing program) ภายหลงจากทเราไดเขยนโปรแกรมแลวจะตองมการทดสอบโปรแกรมทเขยนขนวามความผดพลาดทางไวยากรณภาษา หรอมความผดพลาดทางตรรกะหรอไมอยางไร แลวแกไขโปรแกรมทผดใหไดโปรแกรมทถกตองสมบรณ
5. การจดทำาเอกสารประกอบ และการบำารงรกษาโปรแกรม (documentation and maintenance program) ภายหลงจากไดทำาการทดสอบโปรแกรมและแกไขความผดพลาดทเกดขนเรยบรอยแลว ขนตอนตอไปกควรจดทำาคมอการใชโปรแกรม เพราะจะทำาใหผใชโปรแกรมสามารถใชงานไดถกตอง โดยคมอการใชโปรแกรมทดควรจดทำาในลกษณะทแสดงการทำางานเปนขนตอน ผใชโปรแกรมสามารถปฏบตตามไดจรง สวนการบำารงรกษาโปรแกรมทพฒนาขนกตองมคำาแนะนำาใหผใชโปรแกรมปฏบตได
สำาหรบเนอหาสวนทายในบทนตองการใหทราบถงโครงสรางภายในโปรแกรม เพราะจะชวยใหผเขยนโปรแกรม สามารถเลอกใชคำาสงใหสอดคลองกบโครงสรางภายในโปรแกรมได และใหทราบถงลกษณะการเขยนโปรแกรมแบบโครงสราง ทมการนำาโครงสรางของคำาสงหลาย ๆ รปแบบมาใชในการเขยนโปรแกรม เพอใหโปรแกรมทเขยนขนมขนตอนทแนนอน และสะดวกตอการแกไขโปรแกรม