บทที่ 1 ทบทวนการออกแบบโปรแกรม
Objective (จุดประสงค์)
1. บอกขั้นตอนการพัฒนาโปรแกรมได้
2. เข้าใจหลักการพื้นฐานด้านกรรมวิธีการออกแบบโปรแกรมในรูปแบบต่างๆ
3. บอกความแตกต่างระหว่างการเขียนโปรแกรมแบบ Procedural (วิธีการดำเนินการ) และ Object-Oriented (มุ่งเน้น วัตถุ) ได้
4. ทราบวัตถุประสงค์ของเทคนิคการออกแบบโปรแกรมเชิงโครงสร้างฆ
5. บอกความหมายของอัลกอลิทึ่ม และซูโดโค้ดได้
6. เข้าใจหลักปฏิบัติการพื้นฐาน 6 ประการของคอมพิวเตอร์ เพื่อนำไปสู่การเขียนซูโดโค้ดได้อย่างถูกหลักวิธี
Contents (เนื้อหา)
- Steps in Program Development (ขั้นตอนการพัฒนาโปรแกรม)
- Program Design Methodology (วิธีการออกแบบโปรแกรม)
- การเขียนโปรแกรมแบบ Procedural (วิธีการดำเนินการ) และ Object-Oriented (มุ่งเน้นวัตถุ)
- Objective of Structured Program Design Techniques (วัตถุประสงค์ของการใช้เทคนิคการออกแบบ
โปรแกรมโครงสร้าง)
โปรแกรมโครงสร้าง)
- Introduction to Algorithm and Pseudo Code (ความรู้เบื้องต้นเกี่ยวกับอัลกอริทึมและซูโดโค้ด)
- Six Basic Computer Operations (การใช้งานคอมพิวเตอร์ขั้นพื้นฐาน 6 ประการ)
- The Three Basic Control Structures (การควบคุมโครงสร้างพื้นฐาน 3 วิธี)
Steps in Progarm Development (ขั้นตอนการพัฒนาโปรแกรม)
Define the Problem (การกำหนดปัญหา) ประกอบด้วย
- Inputs (การนำเข้า)
- Outputs (การแสดงผล)
- Processing (การประมวลผล)
Outline the Solution (การร่างรายละเอียดแนวทางการแก้ไขปัญหา)
- แตกงานให้เป็นชิ้นงานย่อยๆ หรือเป็นขั้นตอน (หลังจากกำหนดปัญหา)
- การร่างรายละเอียดแนวทางการแก้ไขปัญหาต่างๆ ประกอบด้วย
* ขั้นตอนการประมวลผลส่วนหลักๆ
* ส่วนหลักของงานที่มีการแตกย่อย (Subtask)
* ส่วนความสัมพันธ์กับผู้ใช้งาน
* โครงสร้างที่ใช้ควบคุม เช่น การวนซ้ำ หรือการกำหนดทางเลือก
* ตัวแปรและโครงสร้างของเรคอร์ด
* ตรรกะโปรแกรม (Logic)
Develop and Algorithm การพัฒนาอัลกอริทึม
- ขั้นตอนที่ใช้อธิบายลำดับการทำงาน และหากได้ปฏิบัติตามขั้นตอนของอัลกอริทึมที่ออกมา
- ซูโดโค้ด (Pseudo Code) เป็นตัวแทนอัลกอริทึมเพื่อใช้แก้ไขปัญหาทางคอมพิวเตอร์
Test the Algorithm for Correctness (การตรวจสอบความถูกต้องของอัลกอริทึม)
- เป็นขั้นตอนที่สำคัญที่สุด
- ตรวจสอบทั้งตรรกะของอัลกอริทึม ตัวแปรหลัก และการนำข้อมูลทดสอบเข้าไปประมวลผลในแต่ละขั้นตอน
Programming การเขียนโปรแกรม
- นำอังกอริทึมที่ได้รับการออกแบบ อย่างสมบูรณ์ มาพัฒนาโปรแกรม(ชุดคำสั่ง)
- เลือกใช้ภาษาระดับสูง(High Language) เพื่อเขียนโปรแกรม เช่น C,PASCAL เป็นต้น
Testing
- นำข้อมูลเข้าไปเพื่อทดสอบบนเครื่องกับโปรแกรมที่เขียนขึ้นว่าถูต้องหรือไม่
- การตรวจสอบ
* รูปแบบชุดคำสั่ง
* โปรแกรม
- ข้อมูลทดสอบต้องมีความแต่ต่างกันออกไปตามแต่ลพสถานการณ์
คุณสมบัติของอัลกอริทึมที่ดีใครการแก้ไขปัญหา
1. อัลกอริทึมอ่านแล้วเข้าใจง่าย
2. อัลกอริทึมต้องมีความถูกต้องในผลลัพธ์ที่ใช้แก้ปัญหาในกรณีต่างๆ
3. กระบวนการหรือขั้นตอนที่ระบุไว้ในอัลกอริทึมต้องมีความเรียบง่าย
4. อัลกอริทึมต้องมีจุดสิ้นสุด
คอมพิวเตอร์สามารถคำนวณได้
- สัญลักษณ์ที่ใช้ในการคำนวณ
Testing
- นำข้อมูลเข้าไปเพื่อทดสอบบนเครื่องกับโปรแกรมที่เขียนขึ้นว่าถูต้องหรือไม่
- การตรวจสอบ
* รูปแบบชุดคำสั่ง
* โปรแกรม
- ข้อมูลทดสอบต้องมีความแต่ต่างกันออกไปตามแต่ลพสถานการณ์
คุณสมบัติของอัลกอริทึมที่ดีใครการแก้ไขปัญหา
1. อัลกอริทึมอ่านแล้วเข้าใจง่าย
2. อัลกอริทึมต้องมีความถูกต้องในผลลัพธ์ที่ใช้แก้ปัญหาในกรณีต่างๆ
3. กระบวนการหรือขั้นตอนที่ระบุไว้ในอัลกอริทึมต้องมีความเรียบง่าย
4. อัลกอริทึมต้องมีจุดสิ้นสุด
คอมพิวเตอร์สามารถคำนวณได้
- สัญลักษณ์ที่ใช้ในการคำนวณ
* สัญลักษณ์ + ใช้แทนการบวก (add)
* สัญลักษณ์ - ใช้แทนการลบ (subtract)
* สัญลักษณ์ * ใช้แทนการคูณ (multiply)
* สัญลักษณ์ / ใช้แทนการหาร (divide)
* สัญลักษณ์ ( ) ใช้แทนวงเล็บ เปิด ปิด
- คำกริยาที่ใช้ในการคำนวณ ใช้คำว่า pompute และ calculate
คอมพิวเตอร์สามารถกำหนดตัวแปรได้
ทำได้ 3 รูปแบบ คือ
1. ใช้คำกริยา initialize หรื่อคำว่า set เพื่อกำหนดค่าเริ่มต้นให้ตัวแปร
2. ใช้สัญลักษณ์เครื่องหมาย = หรือเครื่องหมาย < เพื่อกำหนดค่าให้กับตัวแปร
3. ใช้คำกริยา store ในการจัดเก็บข้อมูลให้กับตัวแปร
ความหมายของลูป(loop)
ลูป(loop)ในที่นี้มีความหมายว่า การวนซ้ำซึ่งการวนซ้ำในทางภาษาคอมพิวเตอร์ คือ การทำคำสั่งหรือชุดคำสั่งนั้นซ้ำกันหลายๆครั้ง
รูปแบบของลูป
ในการตรวจสอบว่าจะให้ลูปนั้นจบการทำงานเมื่อไรนั้น จะมีรูปแบบของการตรวจสอบเงือนไขอยู่ 2 แบบ
1.Pretest Loop ลูปประเภทนี้จะทำการตรวจสอบเงื่อนไขก่อนว่าเป็นจริง หรือเป็นเท็จถ้าเป็นจริงก็ให้เข้าไปทำคำสั่งหรือชุดคำส่งต่อไป และเมื่อทำคำสั่งหรือชุดคำสั่งเสร็จแล้วก็จะกลับมาทำการตรวจสอบเงื่อนไขอีกครั้ง แลดะจะทำเช่นนี้ไปเรื่อยๆจนกว่าเงื่อนไขจะเป็นเท็จ ก็จบการทำงานของลูป
2.post-Test loop ลูปประเภทนี้จะทำคำสั่งหรือชุดคำสั่งก่อน เมื่อเสร็จแล้วถึงจะมาตรวจสอบเงื่อนไขว่าเป็นจริงหรือเป็นเท็จ ถ้าเป็นจริงก็จะกลับไปทำคำสั่งหรือชุดคำสั่งเดิมอีกครั้งแลดะจะทำจนกว่าเงื่อนไขจะเป็นเท็จเช่นเดียวกัน
การกำหนดและปรับปรุง
ในการใช้ลูป จะมีการกระทำที่สำคัญอยู่ 2 อย่าง ที่จะขาดไม่ได้เลยซึ่งถ้าขาดไปจะทำให้ลูปนั้นไม่ทำงาน หรือลูปทำงานแบบไม่มีวันจบ
1.การกำหนดค่า ก่อนที่เริ่มใช้ลูปจะต้องมีการกำหนดค่าที่นะใช้เป็นตัวควบคุมลูปก่อนซึ่งตัวควบคุมนี้จะทำหน้าที่ในการตรวจอบว่าลูปนั้นได้ทำงานจนจบ
2.การปรับปรุง หลังจากที่ทำคำสั่งหรือชุดคำสั่งไปแล้วไม่มีการปับปรุงค่าของตัวควบคุมลูปก็จะทำให้ลูปนั้นกลายเป็นลูปไม่มีวันจบได้เพราะฉะนั้นจะต้องทำการปรับปรุงค่าของตัวควบคุมลูปทุกครั้งเพื่อจะได้นำค่าของตัวควบคุมไปตรวจสอบกับเงื่อนไขเพื่อจบการทำงานของลูป
n คือ จำนวนของการวนซ้ำ
คำสั่งวนลูปในภาษา C
คำสั่งลูปในภาษา C นั้นจะมีอยู่ 3 คำสั่ง คือ คำสั่ง While คำสั่ง for และคำสั่ง do…while ซึ่งสองคำสั่งแรกเป็นลูปแบบ Pretest loop ส่วนคำสั่งสุดท้ายจะเป็นแบบ Post-test loop
For loop
คำสั่ง For นั้นจะเป็นลูปแบบ pretest loop ที่ใช้นิพจน์ 3 นิพจน์ นิพจน์แรกเป็นการกำหนดค่า นิพจน์ที่ 2 เป็นเงื่อนไขในการตรวจสอบตัวควบคุมลูป และส่วนที่ 3 เป็นการปรับปรุงค่าของตัวควบคุมลูป
จะพบว่าในตัวของคำสั่ง for สามารถมีคำสั่งได้เพียงหนึ่งคำสั่งเท่านั้นจะต้องใช้ชุดคำสั่งแบบ compound statement และจะพบอีกว่าคำสั่ง for นั่นมีการทำงานเหมือน while แต่คำสั่ง for นั้นจะรวมการกระทำทั้งสามอย่างไว้ในบรรทัดเดียวกันเลย
การเปรียบเทียบการเขียนโปรแกรมโดยใช้คำสั่ง for และคำสั่ง while โดยโจทย์มีอยู่ว่าให้รับตัวเลขทางคีย์บอร์ด 20 ตัว แล้วนำตัวเลขทั้งหมาดมารวมกัน ซึ่งจากโปรแกรมข้างต้นด้านล่างจะเห็นได้ว่า คำสั่ง for จะช่วยให้ผู้ใช้เขียนโปรแกรมได้สั้นลง
* สัญลักษณ์ - ใช้แทนการลบ (subtract)
* สัญลักษณ์ * ใช้แทนการคูณ (multiply)
* สัญลักษณ์ / ใช้แทนการหาร (divide)
* สัญลักษณ์ ( ) ใช้แทนวงเล็บ เปิด ปิด
- คำกริยาที่ใช้ในการคำนวณ ใช้คำว่า pompute และ calculate
คอมพิวเตอร์สามารถกำหนดตัวแปรได้
ทำได้ 3 รูปแบบ คือ
1. ใช้คำกริยา initialize หรื่อคำว่า set เพื่อกำหนดค่าเริ่มต้นให้ตัวแปร
2. ใช้สัญลักษณ์เครื่องหมาย = หรือเครื่องหมาย < เพื่อกำหนดค่าให้กับตัวแปร
3. ใช้คำกริยา store ในการจัดเก็บข้อมูลให้กับตัวแปร
คำสั่งวนลูป
ลูป(loop)ในที่นี้มีความหมายว่า การวนซ้ำซึ่งการวนซ้ำในทางภาษาคอมพิวเตอร์ คือ การทำคำสั่งหรือชุดคำสั่งนั้นซ้ำกันหลายๆครั้ง
รูปแบบของลูป
ในการตรวจสอบว่าจะให้ลูปนั้นจบการทำงานเมื่อไรนั้น จะมีรูปแบบของการตรวจสอบเงือนไขอยู่ 2 แบบ
1.Pretest Loop ลูปประเภทนี้จะทำการตรวจสอบเงื่อนไขก่อนว่าเป็นจริง หรือเป็นเท็จถ้าเป็นจริงก็ให้เข้าไปทำคำสั่งหรือชุดคำส่งต่อไป และเมื่อทำคำสั่งหรือชุดคำสั่งเสร็จแล้วก็จะกลับมาทำการตรวจสอบเงื่อนไขอีกครั้ง แลดะจะทำเช่นนี้ไปเรื่อยๆจนกว่าเงื่อนไขจะเป็นเท็จ ก็จบการทำงานของลูป
2.post-Test loop ลูปประเภทนี้จะทำคำสั่งหรือชุดคำสั่งก่อน เมื่อเสร็จแล้วถึงจะมาตรวจสอบเงื่อนไขว่าเป็นจริงหรือเป็นเท็จ ถ้าเป็นจริงก็จะกลับไปทำคำสั่งหรือชุดคำสั่งเดิมอีกครั้งแลดะจะทำจนกว่าเงื่อนไขจะเป็นเท็จเช่นเดียวกัน
การกำหนดและปรับปรุง
ในการใช้ลูป จะมีการกระทำที่สำคัญอยู่ 2 อย่าง ที่จะขาดไม่ได้เลยซึ่งถ้าขาดไปจะทำให้ลูปนั้นไม่ทำงาน หรือลูปทำงานแบบไม่มีวันจบ
1.การกำหนดค่า ก่อนที่เริ่มใช้ลูปจะต้องมีการกำหนดค่าที่นะใช้เป็นตัวควบคุมลูปก่อนซึ่งตัวควบคุมนี้จะทำหน้าที่ในการตรวจอบว่าลูปนั้นได้ทำงานจนจบ
2.การปรับปรุง หลังจากที่ทำคำสั่งหรือชุดคำสั่งไปแล้วไม่มีการปับปรุงค่าของตัวควบคุมลูปก็จะทำให้ลูปนั้นกลายเป็นลูปไม่มีวันจบได้เพราะฉะนั้นจะต้องทำการปรับปรุงค่าของตัวควบคุมลูปทุกครั้งเพื่อจะได้นำค่าของตัวควบคุมไปตรวจสอบกับเงื่อนไขเพื่อจบการทำงานของลูป
แสดงการกำหนดค่าและการปรับปรุง
ความแตกต่างระหว่าง Pretest Loop และ Post – Test Loop
ความแตกต่างระหว่าง Pretest Loop และ Post – Test Loop
Pretest Loop | Post-Test loop |
การกระทำ การกำหนดค่า 1 จำนวนครั้งในการตรวจสอบ n+1 จำนวนครั้งในการทำคำสั่ง n จำนวนครั้งในการปรับปรุง n จำนวนครั้งที่น้อยที่สุดในการวน 0 | การกระทำ การกำหนดค่า 1 จำนวนครั้งในการตรวจสอบ n จำนวนครั้งในการทำคำสั่ง n จำนวนครั้งในการปรับปรุง n จำนวนครั้งที่น้อยที่สุดในการวน 1 |
n คือ จำนวนของการวนซ้ำ
คำสั่งวนลูปในภาษา C
คำสั่งลูปในภาษา C นั้นจะมีอยู่ 3 คำสั่ง คือ คำสั่ง While คำสั่ง for และคำสั่ง do…while ซึ่งสองคำสั่งแรกเป็นลูปแบบ Pretest loop ส่วนคำสั่งสุดท้ายจะเป็นแบบ Post-test loop
แสดงคำสั่งวนลูปในภาษา C
While loop
คำสั่ง While จะใช้เงื่อนไขเป็นตัวควบคุมลูป ซึ่งลูป while นี้จะเป็นลูปแบบ pretest loop ซึ่งจะทำการตรวจสอบเงื่อนไขก่อนที่จะเข้าไปทำคำสั่งในลูป ผังการทำงานและชุดคำสั่งเบื้องต้นของ while ได้แสดงในรูป
แสดงผังการทำงานและชุดคำสั่งเบื้องต้นของคำสั่ง while
ชุดคำสั่งเบื้องต้นที่แสดงใน ข จะเห็นได้ว่าในตัวลูปที่มีคำสั่งได้เพียงคำสั่งเดียวซึ่งถ้าต้องการให้มีหลายคำสั่ง ก็สามารถทำได้โดยเขียนชุดคำสั่งแบบ compound statement
ชุดคำสั่งเบื้องต้นที่แสดงใน ข จะเห็นได้ว่าในตัวลูปที่มีคำสั่งได้เพียงคำสั่งเดียวซึ่งถ้าต้องการให้มีหลายคำสั่ง ก็สามารถทำได้โดยเขียนชุดคำสั่งแบบ compound statement
For loop
คำสั่ง For นั้นจะเป็นลูปแบบ pretest loop ที่ใช้นิพจน์ 3 นิพจน์ นิพจน์แรกเป็นการกำหนดค่า นิพจน์ที่ 2 เป็นเงื่อนไขในการตรวจสอบตัวควบคุมลูป และส่วนที่ 3 เป็นการปรับปรุงค่าของตัวควบคุมลูป
จะพบว่าในตัวของคำสั่ง for สามารถมีคำสั่งได้เพียงหนึ่งคำสั่งเท่านั้นจะต้องใช้ชุดคำสั่งแบบ compound statement และจะพบอีกว่าคำสั่ง for นั่นมีการทำงานเหมือน while แต่คำสั่ง for นั้นจะรวมการกระทำทั้งสามอย่างไว้ในบรรทัดเดียวกันเลย
การเปรียบเทียบการเขียนโปรแกรมโดยใช้คำสั่ง for และคำสั่ง while โดยโจทย์มีอยู่ว่าให้รับตัวเลขทางคีย์บอร์ด 20 ตัว แล้วนำตัวเลขทั้งหมาดมารวมกัน ซึ่งจากโปรแกรมข้างต้นด้านล่างจะเห็นได้ว่า คำสั่ง for จะช่วยให้ผู้ใช้เขียนโปรแกรมได้สั้นลง
I = 1; Sum = 0; While(I<=20) { scanf(“%d”,&a); Sum+=a; I++; }/*while*/ Do…while loopคำสั่ง do…while เป็นลูปแบบ Post-Test Loop ดังทีได้กล่าวไปแล้วในข้างต้น ว่าลูปแบบนี้จะมีคำสั่งก่อนทีจะไปทำการตรวจสอบตัวควบคุมลูป ซึ่งผังการทำงานและชุดคำสั่งเบื้องต้นได้แสดงใน ซึ่งในตัวของคำสั่ง do….while นั้นจะมีคำสั่งได้เพียงคำสั่งเดียว ซึ่งถ้าต้องการเขียนเป็นชุดคำสั่งจะต้องเขียนชุดคำสั่งแบบ Compound Statement แสดงผังการทำงานและชุดคำสั่งเบื้องต้นของคำ สั่ง do….while จากรูปจะเห็นได้วาคำสั่ง do…while นั้นจะมีการทำคำสั่งในลูปอย่างน้อยหนึ่งครั้ง ถึงแม้จะตรวจสอบตัวควบคุมลูปแล้วเป็นเท็จก็ตาม คำสั่ง do…while นี้จะเหมาะสำหรับงานที่ต้องมีการทำคำสั่งอย่างน้อยหนึ่งครั้ง เป็นการใช้คำสั่ง do…while ในการรับค่าตัวเลขแล้ว เมื่อต้องการจะหยุดให้กดปุ่ม Ctrl + Z จากนั้นนำตัวเลขทั้งหมาดมารวมกัน โปรแกรมบวกตัวเลข โดยใช้คำสั่ง do…while ---------------------- จบ ---------------------- | Sum= 0; For (I = 1;I<=20;I++) { scanf(“%d”,&a); Sum +=a; } |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น