35
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
การเลือกทาแบบหลายเส้นทาง จะพิจารณาเงื่อนไขต่างๆที่เกิดขึ้นถ้าเท่ากับทางเลือกใดจะให้
ไปทางานตามทางเลือกนั้นผังงานแบบเลือกหลายทางสามารถเขียนได้ดังรูป
รูปแสดงผังโปรแกรมแบบทางเลือกหลายทาง
การเลือกทาแบบหลายเส้นทางนี้ยังสามารถนาการเลือกทาแบบทางเดียวและแบบสองทิศทางมา
ประกอบกันเป็นโครงสร้างใหม่ได้อีกด้วย
3. ผังโปรแกรมทาซ้าถ้าเงื่อนไขเป็นจริง จะใช้ในงานที่มีการตรวจสอบเงื่อนไขก่อนการทางานทุกครั้ง
โดยเขียนได้ดังรูป
รูปแสดงผังงานการทาซ้าแบบตรวจสอบเงื่อนไขก่อน
ตัวแปร x
ชุดคาสั่ง 1 ชุดคาสั่ง 2 ชุดคาสั่ง 3 ชุดคาสั่ง 4
X = 1 X = 2 X = 3 X = 4
ตรวจสอบเงื่อนไข ออกจากทาซ้า
จริง
ชุดคาสั่งที่ต้องทางานซ้า
เท็จ
39.
36
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
4. ผังโปรแกรมแบบทาซ้าจนกระทั่งเงื่อนไขเป็นจริง จะใช้ในระบบที่ต้องทางานก่อนการตรวจสอบ
เงื่อนไขและทางานซ้าจนกระทั่งเงื่อนไขเป็นจริง สามารถเขียนได้ดังรูป
รูปผังโปรแกรมแบบทาซ้าจนกระทั่งเงื่อนไขเป็นจริง
5.ผังโปรแกรมแบบทาซ้าตามจานวนที่ระบุ ใช้ในระบบที่ติองทางานตามจานวนรอบที่กาหนด โดยเริ่ม
จากรอบเริ่มต้นไปยังรอบสุดท้าย ตามปกติแล้วค่าการนับรอบจะเพิ่มขึ้นครั้งละหนึ่งค่า โดยเขียนได้ดังรูป
รูปผังงานการทาซ้ารอบตามจานวนที่ระบุ
ชุดคาสั่งที่ต้องทางานซ้า
ตรวจสอบเงื่อนไข ออกจากทาซ้า
จริง
เท็จ
FOR i = 1 TO N
ชุดคาสั่งที่ต้องทาซ้า
40.
37
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
ตัวอย่างที่ 11 ถ้าหากต้องการนาคะแนน(จานวนเต็ม)ของนักเรียนหนึ่งคนมาตัดเกรดตามเงื่อนไขต่อไปนี้
คะแนน 80 - 100 ได้เกรด A
คะแนน 70 - 79 ได้เกรด B
คะแนน 60 - 69 ได้เกรด C
คะแนน 50 - 59 ได้เกรด D
คะแนนต่ากว่า 50 ได้เกรด F
จากคะแนนดังกล่าวสามารถเขียนผังงานได้ดังรูป
รูปแสดงผังงานของการตัดเกรดนักเรียน
รับคะแนน
X > 79
X > 69
X > 59
X > 49
เกรด F
จบ
เริ่มต้น
เกรด A
เกรด B
เกรด C
เกรด D
จริง
จริง
จริง
จริง
41.
38
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
ตัวอย่างที่ 12 จงเขียนผังงานให้รับข้อมูลตัวเลขหนึ่งตัว เก็บในตัวแปร x จากนั้นให้พิมพ์ตามเงื่อนไขต่อไปนี้
ถ้า X > 0 แสดงผล “เป็นเลขบวก
ถ้า X < 0 แสดงผล “เป็นเลขลบ”
ถ้า X = 0 แสดงผล “ค่าเป็นศูนย์”
รูปแสดงผังงานของการรับค่าตัวเลขและแสดงผล
เริ่มต้น
รับข้อมูล x
X > 0
X < 0
พิมพ์เป็นค่ำบวก
พิมพ์ค่าเป็นศูนย์ พิมพ์ค่ำเป็นลบ
จบ
เท็จ
เท็จ
จริง
จริง
44
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
การใช้สัญลักษณ์เชื่อมประโยคคาสั่งเงื่อนไข
การเขียนคาสั่งกาหนดเงื่อนไขการทางานในลักษณะเชื่อมประโยคเงื่อนไข 2 ประโยค ต้องใช้สัญลักษณ์
คาสั่งเพิ่มเติม เพื่อให้ได้ข้อสรุปของการทางานว่าเป็นค่าจริง(True) หรือ ค่าเป็นเท็จ(False) ดังนี้
สมมติให้ผลลัพธ์การเปรียบเทียบในประโยคเงื่อนไขที่ 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 นาหน้าประโยคเงื่อนไขนั้น จะให้ผลลัพธ์สรุปในทางตรงกันข้าม
ตัวอย่างที่ 14 การเขียนนิพจน์ใช้เงื่อนไขแบบ 2 ประโยค โดยใช้สัญลักษณ์ AND
ถ้า (X > 10) AND (X < = 15) แล้ว (เงื่อนไขเป็นจริง)
คาสั่งชุดที่ 1
(เงื่อนไขเป็นเท็จ)
คาสั่งชุดที่ 2
46
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
หรือ
INPUT VAR1, VAR2 …..
หมายความว่ารับข้อมูลเข้ามาเก็บในตัวแปรตัวที่ 1,2.....โดย VAR มาจากคาว่า Variable หมายถึงตัวแปร
ตัวอย่าง
READ X,Y หมายความว่า รับข้อมูลมาเก็บในตัวแปร X และ Y ตามลาดับ
ตัวอย่าง
Read student name อ่านค่ามาเก็บในตัวแปรชื่อ student_name
Get system_date อ่านค่ามาเก็บในตัวแปรชื่อ system_date
Input number_1, number_2 อ่านค่าสองค่ามาเก็บในตัวแปร number_1 ,number_2
สาหรับการแสดงข้อมูลมีรูปแบบดังนี้
PRINT VAR1,VAR 2,………
หรือ WRITE VAR1,VAR 2,………
หมายความว่าให้แสดงข้อมูลที่ถูกเก็บในตัวที่ 1,2 .........
ตัวอย่าง
WRITE DATA1 แสดงข้อมูลที่อยู่ในตัวแปร DATA1
PRINT A, B แสดงข้อมูลที่อยู่ในตัวแปร A และตัวแปร B
การคานวณ
การประมวลผลแบบคานวณจะขึ้นต้นด้วยคาว่า Compute หรือ Calculate แล้วตามด้วยตัวแปร
ที่ต้องการเก็บค่าจากการคานวณ เครื่องหมายเท่ากับและนิพจน์การคานวณซึ่งประกอบไปด้วยเครื่องหมายการ
กระทาทางคณิตศาสตร์
ตัวอย่าง
Compute ARRAT = (X * Y)/2
หมายความว่าให้ตัวแปร ARRAT มีค่าเท่ากับการนาตัวแปร X คูณกับตัวแปร Y แล้วหารด้วยสอง
50.
47
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
ตัวอย่าง
Compute Profit = Price – Cost
หมายความว่ากาไรคานวณได้จากตัวแปรที่เก็บราคาลบด้วยต้นทุน
การกาหนดค่า
การกาหนดค่าเริ่มต้นให้กับตัวแปรจะใช้คาว่า init และ set ถ้าหากเป็นการประกาศตัวแปร
จะต้องระบุด้วยว่าเป็นตัวแปรประเภทใด และถ้าเป็นการประกาศค่าคงที่จะใช้เครื่องหมายเท่ากับในการ
กาหนดค่า
ตัวอย่าง
INIT A,B : INTEGER ;ให้ตัวแปร A และ B เป็นตัวแปรที่เก็บเลขจานวนเต็ม
INIT Y : REAL ; ให้ตัวแปร Y เป็นตัวแปรที่เก็บเลขทศนิยม
SET A = 8 ; กาหนดให้ตัวแปร A มีค่าเท่ากับ 8
ตัวอย่างที่ 15 การเขียนซูโดโค้ดคานวณราคาเครื่องคอมพิวเตอร์รวมกับภาษี 7 %
Compute Total
init total, price, vat : real ** ประกาศตัวแปร total , price , vat
Set vat = 0.07 ** ประกาศ vat เป็นค่าคงที่ 0.07
read price ** รับราคาจากการป้อนข้อมูล
compute total = price + (price x 0.07) ** คานวณราคาบวก vat
print price, total ** แสดงผลราคา และราคารวม
End ** จบโปรแกรม
การเขียนซูโดโค้ดสาหรับตัดสินใจและทดสอบทางเลือก
การเขียนโปรแกรมที่ต้องมีการเลือกทิศทางการทางานนั้นในโปรแกรม จะต้องมีการเปรียบเทียบหรือ
ตัดสินใจเกิดขึ้นในโปรแกรมวิธีการตัดสินใจของโปรแกรมจะต้องมีการเปรียบเทียบเงื่อนไขเกิดขึ้น โดยผลลัพธ์
ที่ได้จะเป็นจริงหรือเท็จอย่างใดอย่างหนึ่งเท่านั้น
51.
48
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
IF number > 0 THEN
PRINT “POSITIVE NUMBER”
ELSE
PRINT “NEGATIVE NUMBER”
ENDIF
CASE num OF
1 : PRINT 11111
2 : PRINT 22222
3 : PRINT 33333
ENDCASE
การตัดสินใจเพื่อเลือกทาระหว่างทางสองทางจะใช้คาว่า IF หรือ IF-THEN-ELSE และ ENDIF โดยจะ
เปรียบเทียบเงื่อนไข ถาเงื่อนไขเป็นจริงจะทากลุ่มคาสั่ง(Statement)กลุ่มหนึ่ง ถ้าเป็นเท็จจะทากลุ่มคาสั่งอีกกลุ่ม
หนึ่ง โดยมีรูปแบบดังนี้
IF ตรวจสอบเงื่อนไข THEN ;เริ่มต้น
กลุ่มคาสั่ง 1 ;ถ้าเป็นจริงทากลุ่มคาสั่งนี้
Else
กลุ่มคาสั่ง 2 ;ถ้าเป็นเท็จทากลุ่มคาสั่งนี้
ENDIF ;จบการทางาน
ตัวอย่างที่16 ตัวอย่างนี้จะนาตัวเลขในตัวแปร number มาทดสอบถามากกว่า 0 ให้แสดงว่าเป็นเลขบวก แต่
ถ้าไม่มากกว่า 0 ให้แสดงว่าเป็นเลขลบ
จากตัวอย่างหมายความว่าถ้าค่า number มีค่ามากกว่า 0 ให้คอมพิวเตอร์พิมพ์คาว่า POSITIVE NUMBER
ถ้าไม่มากกว่าจะพิมพ์คาว่า NEGATIVE NUMBER
สาหรับกรณีที่มีทางเลือกมากกว่าสองทางจะใช้คาว่า CASE ,OF และ ENDCASE โดยจะตรวจสอบว่า
ตัวแปรที่อยู่หลัง CASE มีค่าเท่ากับค่าคงที่ตัวใด ก็จะทากลุ่มคาสั่งที่อยู่หลังค่าคงที่ตัวนั้น ตัวอย่าง เช่น
จากตัวอย่างถ้าค่าในตัวแปร num เป็น 1 จะให้พิมพ์ตัวเลข 11111 ถ้าตัวแปร num มีค่าเป็น 2 จะให้
พิมพ์ตัวเลข 22222 ถ้าตัวแปร num มีค่าเป็น 3 จะให้พิมพ์ตัวเลข 33333
52.
49
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
การเขียนซูโดโค้ดแบบวนซ้า
ในการทาซ้าหมายความว่าให้ระบบทางานซ้า ๆ ตามเงื่อนไขที่กาหนด โดยจะมีการเปรียบเทียบเงื่อนไข
ในการทาซ้า แบ่งออกได้สามรูปแบบดังนี้
1. การทาซ้าที่ทราบจานวนครั้งในการทาซ้า การทาซ้าแบบนี้จะมีการตั้งจานวนการทาซ้าไว้และมีการ
เพิ่มค่าในแต่ละรอบ จะใช้คาว่า FOR , DO และ ENDFOR โดยมีคาว่า IN STEPOF เป็นการบอกค่าที่เพิ่มใน
แต่ละรอบ ถ้าไม่มีคาว่า IN STEPOF หมายความว่าเพิ่มค่ารอบหนึ่ง โดยมีรูปแบบดังนี้
FOR กาหนดรอบการทาซ้า
Statement
ENDFOR
2. การทาซ้าจนระบบมีเงื่อนไขอย่างหนึ่งจึงหยุดทา จะใช้คาว่า REPEAT - UNTIL ดังรูปแบบต่อไปนี้
REPEAT
Statement_1
……………
UNTIL (Condition)
3. ถ้าเงื่อนไขเป็นจริงจะทาคาสั่งภายใน จะใช้คาสั่งว่า WHILE – ENDWHILE โดยจะตรวจสอบเงื่อนไข
ก่อนที่จะทาชุดคาสั่งภายใน ดังรูปแบบต่อไปนี้
WHILE (Condition)
Statement_1
……………
ENDWHILE
53.
50
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
ตัวอย่าง 17 จงเขียนซูโดโค้ดให้มีการพิมพ์ตัวเลขตั้งแต่ 1-10 โดยใช้ repeat-until
Print number 1 to 10
init num: integer /**ประกาศตัวแปร num เป็นตัวเลข
set num = 1 /**ให้ค่า num เริ่มต้นเท่ากับ 1
repeat /**การทางานวนซ้า (จนกว่า num = 10)
print num /**พิมพ์ค่าของ num จากค่าเริ่มต้น 1-10
num = num + 1 /**เพิ่มค่า num ขึ้น 1 เพื่อลดการวนซ้า
untii num > 10 /**เมื่อ num มากกว่า 10 จบการทางานแบบวนซ้า
ตัวอย่างที่ 18 จงเขียนซูโดโค้ดให้มีการพิมพ์ตัวเลขตั้งแต่ 1-10 โดยใช้ WHILE
Print number 1 to 10
init num : integer /**ประกาศตัวแปร num เป็นตัวเลข
set num = 1 /**กาหนดให้ค่า num เริ่มต้นเท่ากับ 1
while (num < = 10) /**ถ้า num น้อยกว่า 10 ให้ทาคาสั่งวนซ้า
print num /**พิมพ์ค่า num จากค่าเริ่มต้น 1-10
num = num + 1 /**เพิ่มค่า num ขึ้น 1 ค่า เพื่อลดการวนซ้า
endwhile /**จบการทางานแบบวนซ้า
ตัวอย่างที่19 จงเขียนซูโดโค้ดสาหรับบวกเลข 1+ 2 + 3 +......+ 100 แล้วพิมพ์ผลลัพธ์ออกมา
วิธีทา ตัวอย่างนี้สามารถนารูปแบบของ while มาใช้ได้ โดยให้โปรแกรมกาหนดค่าเริ่มต้นให้กับตัวนับเป็น 1
และเพิ่มค่าขึ้นครั้งละหนึ่ง จนกว่ามีการตรวจสอบว่าค่าตัวนับมีค่าน้อยกว่าหรือเท่ากับ 100 มีค่าเป็นเท็จ
จึงหยุดนับโดยสามารถเขียนซูโดโค้ดได้ดังนี้
Sum_number_1_100
init i, sum : integer /**ประกาศตัวแปร i และ sum เป็นจานวนเต็ม
set i = 0 /**กาหนดค่าเริ่มต้นให้ i มีค่าเป็น 0
set sum = 0
while (i < = 100) /**ทาซ้าเมื่อ i น้อยกว่า หรือ เท่ากับ 100
compute sum = sum + i /**นาค่า I มาบวกกับ sum แล้วเก็บใน sum
54.
51
กระบวนการแก้ปัญหาด้วยคอมพิวเตอร์ . .โดยอานาจ พรหมใจรักษ์
compute i = i + 1 /**เพิ่มค่าในตัวแปร i ขึ้นหนึ่งค่า
endwhile
print sum /**แสดงค่าผลรวมที่เก็บอยู่ในตัวแปร sum
ตัวอย่างที่ 20 จงเขียนซูโดโค้ดให้มีการพิมพ์ตัวเลขตั้งแต่ 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 /**จบการทางานแบบวนซ้า
การเขียนซูโดโค้ดเพื่อเรียกโปรแกรมย่อยและกระโดดข้าม ม
สาหรับการเรียกโปรแกรมย่อยหรือโพซีเยอร์จะใช้คาว่า CALL แล้วตามด้วยชื่อโปรแกรมย่อย
หรือโพซีเยอร์ มีรูปแบบดังนี้
CALL ชื่อโปรแกรมย่อย
การกระโดดข้ามไปทาชุดคาสั่งใดๆจะใช้คาว่า LABEL กาหนดตาแหน่งที่จะกระโดดมา และใช้คาว่า
GOTO ในตาแหน่งที่จะกระโดด ตัวอย่างเช่น
START :
Statement_1
………………
AB1 : ………………
……………..
GOTO AB1
END
การเขียนโปรแกรมแบบกระโดดข้ามมีในภาษายุคเก่าๆ เช่น ภาษา BASIC สาหรับการเขียนโปรแกรม
โดยทั่วไปแล้วการกระโดดข้ามมักจะไม่ค่อยใช้มากนัก