310 likes | 520 Views
โครงสร้างควบคุม Control Structure. ภาษาโปรแกรมจะประกอบด้วยคำสั่ง (statement) ที่สั่งให้คอมพิวเตอร์ทำงาน การทำงานของแต่ละคำสั่งจะต้องมีลำดับการทำงานที่ชัดเจน จึงต้องมีโครงสร้างควบคุม เพื่อควบคุมลำดับการทำงานของโปรแกรม ภาษาโปรแกรมชั้นสูงแบ่งการควบคุมเป็น 2 ระดับ คือ
E N D
โครงสร้างควบคุม Control Structure • ภาษาโปรแกรมจะประกอบด้วยคำสั่ง (statement) ที่สั่งให้คอมพิวเตอร์ทำงาน • การทำงานของแต่ละคำสั่งจะต้องมีลำดับการทำงานที่ชัดเจน • จึงต้องมีโครงสร้างควบคุม เพื่อควบคุมลำดับการทำงานของโปรแกรม • ภาษาโปรแกรมชั้นสูงแบ่งการควบคุมเป็น 2 ระดับ คือ • การควบคุมระดับคำสั่ง (statement level) • การควบคุมระดับกลุ่มของคำสั่ง (Unit level)
การควบคุมระดับคำสั่ง Statement level • โครงสร้างควบคุมที่ใช้จัดลำดับการทำงานของคำสั่งในโปรแกรม • โดยทั่วไปจะมี 3 รูปแบบ คือ • โครงสร้างแบบเรียงลำดับ (Sequencing structure) • โครงสร้างแบบมีเงื่อนไข (Selection structure) • โครงสร้างแบบวนซ้ำ (Iteration structure)
ตามลำดับ • Program test; • Var x : integer; • Begin • Readln; • Writeln; End.
โครงสร้างแบบเรียงลำดับโครงสร้างแบบเรียงลำดับ • PascalIf a > b thenbegin a := a + 1; writeln(a);end; • CIf (a > b) { a++; printf(“%d”,a);} A B C
แบบมีทางเลือก selection if (num<50) then writeln('E') else if(num<60) then writeln('D') else if(num<70) then writeln('C') else if(num<80) then writeln('B') else writeln('A');
true (จริง) expression statements Simple condition • มีเงื่อนไขที่ต้องตรวจสอบเพียงเงื่อนไขเดียว โดยตรวจสอบว่าต้องทำงานตามคำสั่งที่กำหนดหรือไม่ • รูปแบบ if <boolean expression> then <block of statements> • ตัวอย่าง if i>0 then i:=i+1;
Two-alternative condition • โครงสร้างควบคุมแบบมีเงื่อนไขให้มีทางเลือกในการทำงาน 2 ทาง • รูปแบบ if <boolean expression> then <block of statements>else<block of statements> • ตัวอย่าง if i = 0 then i:=j else i:=i+1; true (จริง) false (เท็จ) expression statements statements
t Boolean expression f ประโยค คำสั่ง เงื่อนไขเป็น เท็จ ประโยคคำสั่ง เงื่อนไขเป็น จริง
If (n<30) then writeln(‘n<30’) • Else writeln(n>= 30); • If (condition) then statement • Else if(condition) then statement • Else if(condition) then statement • Else statement;
ให้เขียนโปรแกรม คำนวณ ภาษีรายได้ อัตราก้าวหน้า • ถ้า นอ้ย กว่า 5000 คำนวณ 5% • 5000-7000 คำนวณ 10% • 7000-15000 คำนวณ 50% • > 15000 คำนวณ 70% • แล้วหักออก จากเงินเดือน และรับจริงเท่าใหร่
ให้เขียนโปรแกรม ตรวจสอบค่า x (ที่รับมาจาก keyboard) • ว่า X มีค่าเท่าใหร่ ระหว่าง • 0-100 • 101-200 • 201-300 • >300 • แล้ว แสดงข้อความ ว่า x อยู่ในช่วง เท่าใหร่
โครงสร้างแบบวนซ้ำ (Iteration structure) • เป็นโครงสร้างควบคุมให้ทำงานที่ต้องการซ้ำกันหลาย ๆ ครั้ง ทำให้เขียนโปรแกรมได้ง่ายขึ้น และโปรแกรมมีขนาดสั้นลง • รูปแบบโครงสร้างการทำซ้ำ แบ่งได้เป็น • Nonterminating iteration • Pretest iteration • Posttest iteration • Fixed count iteration
Nonterminating iteration • รูปแบบที่ง่ายที่สุดของโครงสร้างการทำซ้ำ คือ การทำซ้ำแบบไม่มีจุดสิ้นสุด (indefinite repetition) • ตัวอย่างการนำไปใช้งาน เช่น โปรแกรมด้านการสื่อสารที่จำเป็นต้องมีการตรวจสอบตลอดเวลาว่ามีการส่งข้อมูลเข้ามาหรือไม่ • ผู้ฝึกเขียนโปรแกรมควรหลีกเลี่ยงโครงสร้างแบบนี้ เพราะจะมีผลให้โปรแกรมทำงานตลอดเวลา ไม่หยุด
Pretest iteration • โครงสร้างนี้จะมีการกำหนดให้มีการตรวจสอบเงื่อนไขก่อนการทำซ้ำ (loop) • ถ้าผลการตรวจสอบเงื่อนไขเป็นจริงจะทำงานตามคำสั่งที่กำหนด ถ้าเป็นเท็จจะหยุดทำงานนั้น • จำนวนครั้งของการทำซ้ำขึ้นกับเงื่อนที่กำหนด While <condition> do Begin statement; statement; End;
iteration Boolean expression t ประโยคคำสั่ง เงื่อนไขเป็น จริง f
Posttest iteration • โครงสร้างนี้จะมีการทำซ้ำ (loop) ก่อนการกำหนดให้มีการตรวจสอบเงื่อนไข • ถ้าผลการตรวจสอบเงื่อนไขเป็นจริงจะหยุดทำงาน แต่ถ้าเป็นเท็จ จะทำงานตามคำสั่งที่อยู่ใน loop • โครงสร้างนี้ จะทำงานตามคำสั่งใน loop อย่างน้อย 1 ครั้งเสมอ Repeat statement; statement; Until <condition>;
iteration ประโยคคำสั่ง เงื่อนไขเป็น จริง Boolean expression f t
Fixed count iteration • โครงสร้างนี้จะมีการทำซ้ำ (loop) โดยกำหนดจำนวนครั้งที่แน่นอนของการทำซ้ำ • จะใช้ Iterator Control Variable (ICV) เป็นตัวแปรสำหรับกำหนดหรือนับจำนวนครั้งของการทำซ้ำ For <icv> := <initial> to <final> step <increment> do Begin statement; statement; End;
iteration Boolean expression t ประโยคคำสั่ง เงื่อนไขเป็น จริง f
โครงสร้างควบคุมแบบไม่มีเงื่อนไขโครงสร้างควบคุมแบบไม่มีเงื่อนไข • Unconstrained Control Statement • โครงสร้างควบคุมแบบนี้ ยอมให้ผู้เขียนโปรแกรมเขียนคำสั่งเพื่อให้คอมพิวเตอร์ข้ามไปทำงานในส่วนของโปรแกรมที่ต้องการได้ โดยไม่ต้องกำหนดเงื่อนไขใด ๆ • ข้อเสีย คือ ทำให้โปรแกรมอ่านยาก และต้องระวังเรื่องขอบเขตของการกระโดดข้ามไปทำงานของคำสั่ง จึงไม่นิยมใช้ • ตัวอย่างเช่น คำสั่ง GOTO ใน Pascal
ปฏิบัติ • While/do • For/do • Repeat/until
Pre-Test Loop: While-Do var i : integer; i: = 1; while (i <= 5) do begin writeln('i = ', i); i := i + 1; end; (* while *)
First For Loop Example begin var i : integer; var total : integer; total := 0; for i := 1 to 5 do begin total := total + i; writeln('i=', i, ‘ total=', total); end; (* for *) end.
Repeat-Until: An Example (2) var guess : integer; var answer : integer; var choice : char; repeat answer := random(10) + 1; write('Enter your guess: '); readln(guess); if (guess = answer) then writeln('You guessed correctly!') else writeln('You guessed incorrectly'); writeln('Number was ', answer, ', your guess was ', guess); write('Play again? Enter “n” to quit or anything else to continue'); write('Choice: '); readln(choice); writeln; until (choice = 'N') OR (choice = 'n');
การควบคุมระดับกลุ่มของคำสั่ง (Unit level) • โดยทั่วไป ภาษาโปรแกรมจะกำหนดให้มีการรวบรวมคำสั่งที่ต้องการใช้ซ้ำกันหลายครั้งเป็นโปรแกรมย่อย • วัตถุประสงค์ของการเขียนให้มีโปรแกรมย่อย • มีส่วนของโปรแกรมซ้ำกันหลายแห่ง • สร้างคำสั่งใหม่เพื่อเก็บไว้ใช้ต่อไป • ช่วยในการเขียนโปรแกรมแบบบนลงล่าง (Top-Down Design) • แต่ละภาษาอาจเรียกชื่อต่างกันไป เช่น Subprogram, Procedure, Function, Sub
โปรแกรมย่อย : Pascal Procedure • การกำหนดโปรแกรมย่อย (Procedure definition) • ความหมายโปรแกรมย่อย (Procedure semantic) • การส่งผ่านค่า (Parameter passing machanism)
Procedure definition • โครงสร้างของ Procedure ประกอบด้วยส่วนหัว ส่วนประกาศ และส่วนคำสั่ง เช่นเดียวกับโปรแกรม • แต่ละโปรแกรมย่อยเป็นอิสระจากกัน • ประเภทของตัวแปรแบ่งเป็น • Global variable เป็นตัวแปรที่กำหนดไว้ในส่วนประกาศของโปรแกรมหลัก และนำไปใช้ได้ทั้งในโปรแกรมหลัก และโปรแกรมย่อย • Local variable เป็นตัวแปรที่กำหนดไว้ในส่วนประกาศของโปรแกรมย่อย จะใช้ตัวแปรนี้ได้เฉพาะในโปรแกรมย่อยหรือโปรแกรมย่อยภายใน
Procedure semantic • เมื่อ procedure ถูกเรียกใช้ จะมีผลทำให้คอมพิวเตอร์ทำงานตามคำสั่งที่อยู่ภายใน procedure นั้น • จึงต้องมีการเก็บรวบรวมข้อมูลหรือรายละเอียดตัวแปร ค่าคงที่ พารามิเตอร์ ฯลฯ ของ procedure อย่างเป็นระบบ • ข้อมูลเหล่านี้จะเก็บไว้ใน Activation Record ซึ่งประกอบด้วย • Local Environment ข้อมูลแบบ local ทั้งหมดของ procedure • Parameter Environment ข้อมูลของพารามิเตอร์ทั้งหมด • Global Environment Pointer ชี้ไปยัง AR ของ procedure ที่เรียกใช้
x a P Parameter passing machanism • เมื่อถูกเรียกใช้ procedure จะสร้าง AR ของ procedure นั้นขึ้น • AR ใหม่นี้จะถูก push ลงใน Runtime stack • เมื่อ procedure ทำงานเสร็จ AR นี้จึงจะถูก pop ออกจาก stack Program Test; var i : integer; Procedure P(a : integer); var x:integer; begin … end; Begin P(i); End. Top of stack i Test