320 likes | 627 Views
บทที่ 3 โครงสร้างควบคุม. โครงสร้างแบบทางเลือก if-else, switch-case โครงสร้างแบบทำซ้ำ for, while, do while. โครงสร้างควบคุม. เป็นการกำหนดการทำงานของโปรแกรมให้เป็นไปในทิศทางที่ต้องการ เรียกว่า flow control คำสั่งที่ใช้ในการควบคุมแบ่งได้เป็น 2 ประเภทคือ โครงสร้างแบบทางเลือก
E N D
บทที่ 3 โครงสร้างควบคุม โครงสร้างแบบทางเลือกif-else, switch-case โครงสร้างแบบทำซ้ำfor, while, do while
โครงสร้างควบคุม • เป็นการกำหนดการทำงานของโปรแกรมให้เป็นไปในทิศทางที่ต้องการ เรียกว่า flow control • คำสั่งที่ใช้ในการควบคุมแบ่งได้เป็น 2 ประเภทคือ • โครงสร้างแบบทางเลือก • โครงสร้างแบบทำซ้ำ โครงสร้างควบคุม
โครงสร้างแบบทางเลือก คำสั่งเงื่อนไขที่ใช้ในควบคุมการเลือกได้แก่ • if, if-else • switch-case • ทิศทางการทำงานของโปรแกรม จะพิจารณาจากเงื่อนไขที่กำหนด (conditionstatement) โครงสร้างควบคุม
เงื่อนไข จริง เท็จ คำสั่ง คำสั่งเงื่อนไข if • จะเลือกทำคำสั่ง (หรือกลุ่มคำสั่ง) ก็ต่อเมื่อ ตรวจสอบเงื่อนไขแล้วเป็นจริง ตัวอย่าง Flowchart ของโครงสร้างแบบทางเลือก if โครงสร้างควบคุม
ถ้าเงื่อนไขเป็นจริง คำสั่งนี้จะถูกทำงาน • ถ้าเงื่อนไขเป็นเท็จ โปรแกรมจะไม่ทำคำสั่งนี้ รูปแบบของโครงสร้างแบบทางเลือก if if (เงื่อนไขที่ต้องการตรวจสอบ) คำสั่ง; เงื่อนไขในการตรวจสอบจะเป็นชนิด boolean คือ จริง (true) หรือ เท็จ (false) ifเป็นคำสงวน โครงสร้างควบคุม
คำสั่งเงื่อนไข if • ตัวอย่างของการใช้คำสั่ง if • if (x > 0) • total = total * x; • System.out.println(“The total is ”+total); • โปรแกรมจะตรวจสอบว่าค่าของ xมากกว่า 0 หรือไม่ • หากมากกว่า(จริง) ตัวแปรtotalจะคูณกับx • หากน้อยกว่า(เท็จ) คำสั่งในการคำนวณ total จะถูกข้าม • หลังจากการทำงานของคำสั่ง ifในส่วนของ println ก็จะถูก เรียกใช้งาน Score.java โครงสร้างควบคุม
เครื่องหมายเปรียบเทียบเครื่องหมายเปรียบเทียบ • เครื่องหมายที่ใช้ในการเปรียบเทียบ (relational operators)และให้ผลลัพธ์เป็น boolean ได้แก่ > มากกว่าหรือไม่ < น้อยกว่าหรือไม่ >= มากกว่าหรือเท่ากันหรือไม่ <= น้อยกว่าหรือเท่ากันหรือไม่ != ไม่เท่ากันหรือไม่ == เท่ากันหรือไม่ • เครื่องหมาย = นั้นเป็นการกำหนดค่าแต่ == นั้น เป็นการเปรียบเทียบค่า โครงสร้างควบคุม
เงื่อนไข จริง เท็จ คำสั่งที่ 2 คำสั่งที่ 1 คำสั่งที่ 3 คำสั่งเงื่อนไขif-else • elseสามารถถูกเพิ่มใน คำสั่งเงื่อนไขของ ifได้ โดยจะเรียกว่าเป็นคำสั่ง if-else ตัวอย่าง Flowchart ของโครงสร้างแบบทางเลือก if-else โครงสร้างควบคุม
รูปแบบของโครงสร้างแบบทางเลือก if-else if (เงื่อนไขที่ต้องการตรวจสอบ) คำสั่งที่ 1; else คำสั่งที่ 2; • หากเงื่อนไขเป็น “จริง” โปรแกรมจะทำงานใน คำสั่งที่ 1 • หากเงื่อนไขเป็น “เท็จ” โปรแกรมจะทำงานใน คำสั่งที่ 2 Score1.java โครงสร้างควบคุม
กลุ่มคำสั่ง (Block Statements) • คำสั่งที่อยู่ภายใต้คำสั่ง if-else สามารถมีได้มากกว่า 1 คำสั่ง เรียกว่า กลุ่มคำสั่ง หรือ Block Statements • กลุ่มคำสั่งจะอยู่ภายในเครื่องหมาย {……} TestBlock.java โครงสร้างควบคุม
เท็จ เท็จ เท็จ เงื่อนไขที่ 3 เงื่อนไขที่ 1 เงื่อนไขที่ 2 จริง จริง จริง คำสั่งที่ 1 คำสั่งที่ 2 คำสั่งที่ 3 คำสั่งที่ 4 คำสั่งที่ 5 คำสั่งเงื่อนไขif-else-if-else (Nested if) ตัวอย่าง Flowchart ของโครงสร้างแบบทางเลือก nested if โครงสร้างควบคุม
รูปแบบของโครงสร้างของif-else-if-elseรูปแบบของโครงสร้างของif-else-if-else if (เงื่อนไขที่ 1) คำสั่งที่ 1; else if (เงื่อนไขที่ 2) คำสั่งที่ 2; else if (เงื่อนไขที่ 3) คำสั่งที่ 3; else คำสั่งที่ 4; TestGrade.java โครงสร้างควบคุม
การเปรียบเทียบ Strings • การเปรียบเทียบสตริงจะใช้เมธอด compareTo และequals • ตัวอย่าง การใช้เมธอด compareTo และ equals • String s1="abc",s2="xyz",s3="abc"; • if(s1.compareTo(s2)<0) System.out.println(“s1<s2"); • if(s1.compareTo(s3)==0) System.out.println(“s1==s3"); • if(s1.equals(s3)) • System.out.println(“s1 equals s3"); • เมธอด compareTo จะนำค่า unicode ของสตริงมาเปรียบเทียบ • เมธอด equals จะให้ค่าเป็นจริง ก็ต่อเมื่อ สตริงทั้งสองเหมือนกัน โครงสร้างควบคุม
การเปรียบเทียบจำนวนทศนิยมการเปรียบเทียบจำนวนทศนิยม • การเปรียบเทียบจำนวนทศนิยม(float,double) จะต้องมีความระมัดระวังในการเปรียบเทียบความเท่ากัน • ในการเขียนโปรแกรมจะหลีกเลี่ยงการใช้เครื่องหมาย == และใช้การเปรียบเทียบในลักษณะมากกว่าหรือน้อยกว่าแทน • ตัวอย่างเช่น • if(Math.abs(x-y) > 0.0001) โครงสร้างควบคุม
ตรวจสอบ 1 2 3 คำสั่งที่ 2 คำสั่งที่ 1 คำสั่งที่ 3 คำสั่งเงื่อนไขswitch-case • ใช้ควบคุมให้โปรแกรมเลือกดำเนินการไปในเส้นทางใดเส้นทางหนึ่ง(case) จากทางเลือกหลายๆทาง • นิพจน์ที่อยู่ในคำสั่ง switch จะถูกประมวลว่าตรงกับ case ใด โปรแกรมก็จะทำงานตามคำสั่งที่อยู่ใน case นั้นๆ • โดยค่าที่ใช้ตรวจสอบ จะต้องเป็นจำนวนเต็มที่เล็กว่าหรือเทียบเท่า int รวมไปถึง char โครงสร้างควบคุม
โครงสร้างแบบทางเลือก switch-case switch(นิพจน์ที่ต้องการตรวจสอบ) { caseค่าที่ 1 : คำสั่งที่ 1; caseค่าที่ 2 : คำสั่งที่ 2; caseค่าที่ 3 : คำสั่งที่ 3; case … … } switchและ caseคือคำสงวน โครงสร้างควบคุม
คำสั่งเงื่อนไขswitch-case • บ่อยครั้งที่จะใช้คำสั่ง break เป็นคำสั่งสุดท้ายในแต่ละ case • เมื่อโปรแกรมพบคำสั่ง break จะทำให้โปรแกรมออกจากคำสั่ง switch • หากไม่มีคำสั่ง break โปรแกรมจะทำงานใน case ถัดๆไป switch(นิพจน์ที่ต้องการตรวจสอบ) { caseค่าที่ 1 : คำสั่งที่ 1; break; case ค่าที่ 2 : คำสั่งที่ 2; break; caseค่าที่ 3 : คำสั่งที่ 3; break; case … … break; } TestSwitch.java โครงสร้างควบคุม
คำสั่งเงื่อนไขswitch-case • default เป็นอีกกรณีหนึ่งในคำสั่ง switch-case • ในกรณีที่ตรวจสอบแล้วพบว่า นิพจน์ มีค่าไม่ตรงกับ caseใดๆเลย โปรแกรมจะเข้าไปทำงานในส่วนของ default • default เป็นคำสงวน TestSwitch.java โครงสร้างควบคุม
ตัวดำเนินการทางตรรกะ (Logical Operators) • เป็นการดำเนินการเชิงเหตุและผลให้ผลลัพธ์ออกมาเป็น ค่าจริง และ ค่าเท็จ เท่านั้น • ! นิเสธ (NOT) • && และ (AND) • || หรือ (OR) if((x > 10) && (x < 20)) โครงสร้างควบคุม
! นิเสธ (NOT) • ตัวดำเนินการนี้ จะต้องการตัวถูกดำเนินการเพียงตัวเดียว • ผลลัพธ์ที่ได้มาจะเป็นค่าตรงกันข้ามกับ ค่าทางตรรกเดิม โครงสร้างควบคุม
a true true false false b true false true false a && b true false false false a || b true true true false && และ (AND) , || หรือ (OR) • a && b จะมีค่าเป็นจริง เพียงกรณีเดียวคือ ค่าทั้งสองของนิพจน์ เป็นจริง • a || b จะมีค่าเป็นเท็จ เพียงกรณีเดียวคือค่าทั้งสองของนิพจน์ เป็นเท็จ โครงสร้างควบคุม
โครงสร้างแบบทำซ้ำ • เป็นการสั่งให้โปรแกรมทำงานอย่างใดอย่างหนึ่งซ้ำๆกัน ตามจำนวนรอบที่ต้องการ หรือ ตามเงื่อนไขที่กำหนด • การวนรอบบางครั้งจะเรียกว่า loop • กลุ่มคำสั่งการทำซ้ำจะได้แก่ whileloop และ for loop โครงสร้างควบคุม
คำสั่งการทำซ้ำ while • รูปแบบของ whileloop คือ while (เงื่อนไข) คำสั่ง; while เป็นคำสงวน หากเงื่อนไขเป็นจริง โปรแกรมจะทำงานตามคำสั่งซ้ำ จนกระทั่งเงื่อนไขเป็นเท็จ โครงสร้างควบคุม
ตรวจสอบเงื่อนไข การทำซ้ำ เท็จ คำสั่ง จริง คำสั่ง while โครงสร้างควบคุม
คำสั่ง while • หากเงื่อนไขเป็น เท็จ ตั้งแต่ครั้งแรก คำสั่งด้านล่างจะไม่ถูกทำงานเลย • Star.java • Average.java • ข้อควรระวัง!หากเงื่อนไขในการตรวจสอบมีค่าเป็น จริง เสมอ จะทำให้โปรแกรมวนรอบไม่รู้จบ • Forever.java โครงสร้างควบคุม
การซ้อนกันของการวนloop (nested loops) • สามารถใช้คำสั่งการวน loop ซ้อนกันได้ • ในการทำงานแต่ละครั้งของ loop ภายนอก จะต้องรอในการทำงานของloop ภายในเสร็จก่อน • TestLoop.java โครงสร้างควบคุม
คำสั่งการทำซ้ำ for รูปแบบของ forloop คือ for(การกำหนดค่าเริ่มต้นตัวแปร ;เงื่อนไข ; ปรับค่าตัวแปร) คำสั่ง; • หากเงื่อนไขเป็นจริง loop ก็จะยังคงทำงานต่อไป จนกระทั่งเงื่อนไขเป็นเท็จ • การปรับค่าตัวแปร (ลด/เพิ่ม) อาจจะส่งผลให้มีเกิดทำงานไม่รู้จบของ loop ได้ (infinite loop) Star1.java โครงสร้างควบคุม
ตรวจสอบเงื่อนไข การกำหนดค่าเริ่มต้นตัวแปร ปรับค่าตัวแปร คำสั่ง Flow chart การทำงาน คำสั่งการทำซ้ำ for จริง เท็จ โครงสร้างควบคุม
เปรียบเทียบโครงสร้างของ forloop กับ while loop forloop for(การกำหนดค่าเริ่มต้นตัวแปร ;เงื่อนไข ; ปรับค่าตัวแปร) คำสั่ง; whileloop การกำหนดค่าเริ่มต้นตัวแปร; while(เงื่อนไข){ คำสั่ง; ปรับค่าตัวแปร; } โครงสร้างควบคุม
การพัฒนาโปรแกรม (Program Development) • เข้าใจในปัญหา • อะไรบ้างที่จะต้องทำ, ทำอย่างไร... • ออกแบบส่วนประกอบต่างๆของโปรแกรม • คลาส,ออบเจ็ค,เมธอด • เขียนโปรแกรม • นำสิ่งที่ได้ออกแบบไว้ มาเขียนเป็น source code • ทดสอบโปรแกรม • ควรจะทดสอบโปรแกรมด้วย input ที่หลากหลายเพื่อค้นหาข้อผิดพลาดของโปรแกรม • Debugging คือกระบวนการค้นหาสาเหตุและแก้ไขปัญหาที่เกิดขึ้น โครงสร้างควบคุม
ตัวอย่าง • ปัญหา : • เขียนโปรแกรมคำนวณหา จำนวนของนักเรียน, ค่าเฉลี่ย ค่าสูงสุดและค่าต่ำสุด จากคะแนนของนักศึกษาที่รับมาจากผู้ใช้ • ออกแบบ : • ส่วนของการรับคะแนนจากผู้ใช้ • ส่วนของการวน loop เพื่อคำนวณหาผลรวมของคะแนนจำนวนของนักเรียน • ส่วนของการเปรียบเทียบเงื่อนไข เพื่อหาค่าสูงสุด-ต่ำสุด ของคะแนน • ส่วนของการแสดงผลลัพธ์ทั้งหมด Exam.java โครงสร้างควบคุม
การวาดรูป • การมีเงื่อนไขและการวน loop จะเพิ่มความสามารถในการควบคุมการวาดรูปได้มากขึ้น • Bullseye.java • Barheights.java โครงสร้างควบคุม