การแก้ปัญหาโปรแกรม (Flowchart) อาจารย์เมธยา ราชคมน์ สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร
การแก้ปัญหาโปรแกรม ทำความเข้าใจกับปัญหา ค้นหาจุดมุ่งหมายหรือสิ่งที่โจทย์ต้องการ โดยการสำรวจองค์ประกอบของปัญหา 3 ส่วน คือ วิเคราะห์ข้อมูลนำเข้า (Input Analysis) วิเคราะห์ขั้นตอนการทำงาน (Process Analysis) วิเคราะห์ผลลัพธ์ (Output Analysis) IPO Analysis Introduction to C
IPO Analysis & IPO Chart Input โจทย์หรือผู้ใช้กำหนดให้ หรือมีอยู่แล้ว และนำมาประกอบในการแก้ปัญหาได้ (มาใช้ใน process) Process วิธีการหรือลำดับขั้นตอนที่ใช้ในการแก้ปัญหา Output ผลลัพธ์ที่ได้จากการแก้ปัญหา , สิ่งที่โจทย์ต้องการ IPO Chart แผนภาพหรือตารางคำอธิบายแสดง Input, Process, Output Introduction to C
-------------------------- ตัวอย่าง เขียนโปรแกรมอ่านเลข 3 จำนวน หาผลรวมและพิมพ์ผลลัพธ์ออกมา Input -------------- ตัวเลข # 1 ตัวเลข # 2 ตัวเลข # 3 Process -------------------------- อ่านเลข 3 ค่าเข้ามา บวกกันหาผลรวม จัดพิมพ์ออก Output ---------- ผลรวม Introduction to C
-------------------------- ตัวอย่าง เขียนโปรแกรมคำนวณหาพื้นที่ของวงกลม Input -------------- รัศมี (r) Process -------------------------- อ่านรัศมีของวงกลม(r) เข้ามา พื้นที่ = 3.14 * r * r จัดพิมพ์ออก Output ---------- พื้นที่ Introduction to C
ตัวอย่าง เขียนโปรแกรมคำนวณเงินเดือนของพนักงานโดย ตัวอย่าง เขียนโปรแกรมคำนวณเงินเดือนของพนักงานโดย ถ้าชั่วโมงการทำงานในเดือนนั้นๆ ไม่เกิน 160 ชั่วโมง เงินเดือนจะถูกคำนวณโดยใช้อัตราค่าแรงตามปกติ ถ้าชั่วโมงการทำงานเกิน 160 ชั่วโมง 160 ชั่วโมงแรกจะใช้อัตราค่าแรงปกติ ชั่วโมงที่เกินมาจะคิดค่าแรงโดยใช้อัตราของค่าล่วงเวลา (OT) ซึ่งเท่ากับ 1.5 เท่าของอัตราค่าแรงปกติ Introduction to C
ขั้นตอนที่ 1 การวิเคราะห์ปัญหา รหัสพนักงาน (ID) , จำนวนชั่วโมงการทำงาน (H) , อัตราค่าแรง (S) Input รับค่า ID , H , S ถ้า H < 160 , เงินเดือน = H * S ถ้า H > 160 , เงินเดือน = ( (H-160) * 1.5 * S ) + (160 * S) พิมพ์ค่ารหัสพนักงานและค่าเงินเดือนที่ได้ Process Output รหัสพนักงานและจำนวนเงินเดือนที่ได้รับ Introduction to C
Flowchart Symbol Meaning Graphical representation Tool for programmers to develop program logic Interchange logic between programmers Symbol Meaning Terminator Symbol ใช้แสดงตำแหน่งของจุดเริ่มต้น จุดสิ้นสุดโปรแกรม Process Symbol ใช้ในการคำนวณ Input/Output Symbol ใช้ในการรับข้อมูล การแสดงผลข้อมูล
Display /Monitor Symbol ใช้เมื่อต้องการระบุให้แสดงข้อมูลบนจอภาพ Meaning Display /Monitor Symbol ใช้เมื่อต้องการระบุให้แสดงข้อมูลบนจอภาพ Document Symbol ใช้เมื่อต้องการระบุให้แสดงข้อมูลบนเครื่องพิมพ์ Decision Symbol ใช้ในการเปรียบเทียบเงื่อนไขหรือตัดสินใจ Keyboard Symbol ใช้ในการรับข้อมูลจากแป้นพิมพ์ External Subroutine Symbol ใช้เรียกฟังก์ชันต่าง ๆ ที่ Compiler สร้างไว้แล้ว Introduction to C
Comment Symbol ใช้แสดงความเห็น คำอธิบาย หรือข้อสังเกตต่าง ๆ Meaning Comment Symbol ใช้แสดงความเห็น คำอธิบาย หรือข้อสังเกตต่าง ๆ Flowline Symbol ใช้เป็นจุดเชื่อมต่อระหว่างสัญลักษณ์ On-page Connector Symbol ใช้ในการเชื่อมโยงในหน้าเดียวกัน Off-page Connector Symbol ใช้ในการเชื่อมโยงไปหน้าอื่น Introduction to C
Examples: Terminator Symbol Process Symbol
Examples: Input/Output Symbol Display/Monitor Symbol
Examples: Document Symbol Decision Symbol
Examples: External Subroutine Symbol Internal Subroutine Symbol
Examples: Keyboard and Comment Symbol Offpage Connector Symbol
Examples: Flowline Symbol On-page Connector Symbol
ประโยชน์ของผังงาน ช่วยให้สามารถทำความเข้าใจลำดับขั้นตอนการทำงานของโปรแกรมหรือระบบใดๆ ได้อย่างรวดเร็ว แสดงลำดับขั้นตอนการทำงาน ทำให้สามารถเขียนโปรแกรมได้อย่างเป็นระบบไม่สับสน ตรวจสอบความถูกต้องของขั้นตอนการแก้ปัญหา รวมถึงความถูกต้องของโปรแกรมได้ง่าย เป็นอิสระต่อภาษาที่ใช้ในการเขียนโปรแกรม Introduction to C
ลักษณะโครงสร้างของผังงาน ผังงานโดยทั่วไปจะประกอบด้วยโครงสร้างพื้นฐาน 3 รูปแบบต่อไปนี้คือ โครงสร้างแบบลำดับ (Sequence Structure) โครงสร้างแบบทางเลือก (Selection Structure) โครงสร้างแบบทำซ้ำ (Iteration Structure) Introduction to C
โครงสร้างแบบลำดับ (Sequence Structure) เริ่มต้น “ เป็นโครงสร้างพื้นฐานของผังงาน และเป็นลักษณะขั้นตอนการทำงานที่พบมากที่สุด คือทำงานทีละขั้นตอนตามลำดับ ” รับค่ารัศมีวงกลม pi = 3.14 พื้นที่วงกลม = pi * รัศมี * รัศมี แสดงพื้นที่วงกลม Flowchart การคำนวณหาพื้นที่วงกลม จบ Introduction to C
แสดง รหัสพนักงานและเงินเดือน โครงสร้างแบบทางเลือก (Selection Structure) เริ่มต้น “ รูปแบบที่ง่ายที่สุดของโครงสร้างแบบนี้คือ การเลือกแบบมีทางออก 2 ทาง ” อ่านค่า รหัสพนักงาน ชั่วโมงการทำงาน อัตราค่าแรง เงินเดือน = ((ชั่วโมงการทำงาน-160) 1.5 อัตราค่าแรง) + (160 อัตราค่าแรง) ชั่วโมง การทำงาน > 160 ใช่ ไม่ใช่ เงินเดือน = ชั่วโมงการทำงาน * อัตราค่าแรง แสดง รหัสพนักงานและเงินเดือน จบ Introduction to C
โครงสร้างแบบทำซ้ำ (Iteration Structure) “โครงสร้างนี้จะทำงานอย่างเดียวกันซ้ำไปเรื่อยๆ ในขณะที่ยังเป็นไปตามเงื่อนไข ” เริ่มต้น J = 1 J <= 5 ไม่ใช่ ใช่ แสดงค่า J จบ J = J+1 Introduction to C
ตัวอย่างที่ 1 โปรแกรมในการรับค่าตัวเลข 2 ค่าจากคีย์บอร์ด แล้วพิมพ์ผลบวกของเลขทั้ง 2 ออกที่จอภาพ start Read a,b sum = a+b write sum stop
ตัวอย่างที่ 2 โปรแกรมรับค่าตัวเลข 2 ค่าจากคีย์บอร์ด แล้วพิมพ์ค่าที่มีค่าน้อยกว่าออกทางจอภาพ start Read a,b yes no a < b write b write a stop
ตัวอย่างที่ 3 โปรแกรมรับค่าตัวเลข 2 ค่าจากคีย์บอร์ด แล้วพิมพ์ค่าที่มีค่าน้อยกว่าออกทางจอภาพ แต่ถ้าเท่ากันก็จะพิมพ์ข้อความบอกผู้ใช้ว่ามันเท่ากัน start Read a,b a < b no no b < a yes write a yes write b write “equal” stop
ตัวอย่างที่ 4 โปรแกรมคำนวณหาผลบวกของตัวเลขตั้งแต่ 1 – 5 และแสดงผลลัพธ์ที่ได้ออกทางหน้าจอ start stop write sum i = 1 i<=5 sum=sum+i i++ yes no sum = 0
แบบฝึกหัด จงเขียน Flowchart เพื่อหาผลบวกของตัวเลข 2+3 และแสดงผลลัพธ์ที่ได้ออกทางหน้าจอ จงเขียน Flowchart เพื่อคำนวนหาพื้นที่ของรูปสามเหลี่ยมมุมฉาก (ผู้ใช้ป้อน ?) จงเขียน Flowchart เพื่อแปลงค่าปี คศ. ให้เป็นปี พศ. (ผู้ใช้ป้อน ?) จงเขียน Flowchart เพื่อรับค่าตัวเลข 1 ตัวจากคีย์บอร์ด จากนั้นโปรแกรมจะบอกผู้ใช้ว่าตัวเลขที่ผู้ใช้ป้อนเข้ามาเป็นเลขจำนวนเต็มบวกหรือเลขจำนวนเต็มลบ(สมมุติให้ผู้ใช้ไม่มีทางป้อนเลข 0) Introduction to C
แบบฝึกหัด จงเขียน Flowchart เพื่อรับค่าตัวเลขเข้ามา 3 ตัว จากนั้นจึงพิมพ์ตัวเลขที่มีค่าน้อยที่สุดออกทางหน้าจอ (สมมุติให้ตัวเลขทั้ง 3 ตัวต้องแตกต่างกัน) เขียน Flowchart เพื่อพิมพ์ตัวเลขที่ตั้งแต่ 1 ถึง 50 ออกทางหน้าจอ เขียน Flowchart เพื่อหาผลรวมของเลขคู่ที่อยู่ระหว่าง 1 ถึง 200 โดยแสดงผลลัพธ์ออกทางหน้าจอ เขียน Flowchart เพื่อหาค่าเฉลี่ยของตัวเลขที่อยู่ระหว่าง 1 ถึง 10 โดยแสดงผลลัพธ์ออกทางหน้าจอ Introduction to C
แบบฝึกหัด เขียน Flowchart เพื่อหาผลรวมของตัวเลขตั้งแต่ 1 – n และแสดงผลลัพธ์ออกทางหน้าจอ โดยให้ n เป็นตัวเลขที่ผู้ใช้ป้อนให้แก่โปรแกรม จงเขียน Flowchart สำหรับวนรอบรับค่าตัวเลข แล้วแสดงค่าตัวเลขที่รับเข้ามาออกทางจอภาพ โดยที่เมื่อรับค่าตัวเลขเป็น -999 จะสิ้นสุดการวนรอบและจบโปรแกรม จงเขียน Flowchart สำหรับวนรอบรับค่าตัวเลข และในระหว่างรับให้หาผลรวมของตัวเลขที่รับเข้ามา โปรแกรมจะหยุดรับค่าเมื่อใส่ตัวเลข -999 และจะแสดงผลรวมของตัวเลขทั้งหมดที่รับเข้ามาและหยุดทำงาน Introduction to C
โจทย์ต้องการ: แสดงผลรวมที่มีค่าน้อยกว่าหรือเท่ากับ 10 EX. หาผลรวมของตัวเลข 2 ตัว (A, B) หากผลรวม (SUM) ดังกล่าวมีค่าน้อยกว่าหรือเท่ากับ 10 ให้แสดงผลรวมนั้น แล้วออกจากการทำงาน แต่ถ้าหากมากกว่า 10 ให้ออกจากการทำงาน วิเคราะห์โจทย์ โจทย์ต้องการ: แสดงผลรวมที่มีค่าน้อยกว่าหรือเท่ากับ 10 ส่วนนำเข้า (Input): ตัวเลข 2 ตัว แทนค่าด้วย A และ B กระบวนการ (Process): ผลรวม = ตัวเลข A + ตัวเลข B [หรือ SUM = A + B] ถ้า SUM <= 10 ให้แสดง SUM แล้วออกจากการทำงาน ถ้า SUM > 10 ให้ออกจากการทำงาน ส่วนนำออก (Output): ผลรวมที่มีค่าน้อยกว่าหรือเท่ากับ 10 Introduction to C
start Read A, B Input Process SUM = A+B SUM <= 10 yes Write SUM no Output Write SUM stop Introduction to C
รับค่าข้อมูลจากคีย์บอร์ด start Read A, B รับค่าข้อมูลจากคีย์บอร์ด Read A, B SUM = A+B SUM <= 10 yes Write SUM พิมพ์ผลลัพธ์ ออกทางเครื่องพิมพ์ Write SUM Write SUM แสดงผลออกทางหน้าจอ no stop Introduction to C
Read A, B start Read A, B SUM = A+B SUM <= 10 yes Write SUM no รับค่าข้อมูลจากคีย์บอร์ด start Read A, B SUM = A+B SUM <= 10 yes Write SUM no Write SUM stop พิมพ์ผลลัพธ์ออกทางเครื่องพิมพ์ Introduction to C
พท.สามเหลี่ยม= ½ *สูง *ฐาน จงเขียน Flowchart เพื่อคำนวนหาพื้นที่ของรูปสามเหลี่ยมมุมฉาก (ผู้ใช้ป้อน?) เริ่ม อ่าน สูง, ฐาน พท.สามเหลี่ยม= ½ *สูง *ฐาน เขียน พท.สามเหลี่ยม จบ Introduction to C
เขียน Flowchart เพื่อพิมพ์ตัวเลขที่ตั้งแต่ 1 ถึง 50 ออกทางหน้าจอ start i = 1 no i<=50 yes write sum i++ stop Introduction to C
จงเขียนผังงานในการคำนวณหาพื้นที่ของรูปสี่เหลี่ยมด้านเท่าในส่วนที่แรเงาดังในรูป ซึ่งผู้ใช้จะป้อนรัศมีของวงกลมเข้ามา โดยแสดงผลลัพธ์ออกที่จอภาพ Start Read r Pi = 3.14 Result = [2(r) * 2(r)] – [Pi * r *r] Circle = Pi * r *r Square = 2(r) * 2(r) Result = Square - Circle Write Result stop Introduction to C
#include <stdio.h> #include <conio.h> void main() { } int r; double area, pi; pi = 3.14; clrscr(); printf( "Enter radius: " ); scanf( "%d", &r ); area = ((r+r)*(r+r)) + (pi*r*r); /* คำนวณพื้นที่แรเงา*/ printf("Shadow area is %f\n", area); Introduction to C
แบบฝึกหัด จงเขียน flowchart ในการคำนวณเกรดของนิสิต โดยโปรแกรมจะรับคะแนน 1 ค่าจากผู้ใช้(score) แล้วพิมพ์เกรดที่ได้ออกทางจอภาพ โดยมีกฏว่า ถ้า score >= 80 ได้เกรด A ถ้า 70 <= score < 79 ได้เกรด B ถ้า 60 <= score < 69 ได้เกรด C ถ้า 50 <= score < 59 ได้เกรด D ถ้า score <= 49 ได้เกรด F Introduction to C
start read score write A write B stop no score >= 80 yes write A yes write B stop Introduction to C
write D write F write F no no 50<= score <59 no score <= 49 yes write D Introduction to C