140 likes | 268 Views
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures. Warattapop Chainate. Outline. เพื่อควบคุมลำดับการทำงานของโปรแกรมให้ตรงตามที่โปรแกรมเมอร์ต้องการ สำหรับกลุ่มภาษาเชิงคำสั่ง (imperative) และภาษาเชิงวัตถุ (object oriented) โครงสร้างควบคุมจะประกอบด้วยโครงสร้างของ...
E N D
โครงสร้างการควบคุมการทำงานของโปรแกรมProgram control structures WarattapopChainate
Outline • เพื่อควบคุมลำดับการทำงานของโปรแกรมให้ตรงตามที่โปรแกรมเมอร์ต้องการ • สำหรับกลุ่มภาษาเชิงคำสั่ง (imperative) และภาษาเชิงวัตถุ (object oriented) โครงสร้างควบคุมจะประกอบด้วยโครงสร้างของ... • คำสั่งกำหนดค่า • คำสั่งรวมกลุ่มการทำงาน • คำสั่งแบบมีเงื่อนไข • คำสั่งทำซ้ำ • นอกจากนี้ ภาษาคอมพิวเตอร์รุ่นใหม่ๆ มักจะมีโครงสร้างเพื่อการทำโปรแกรมย่อย และโครงสร้างเพื่อการจัดการกรณียกเว้น • ทั้งหมด เพื่อให้โปรแกรมมีโครงสร้างที่ดี และเชื่อถือได้ในด้านความทนทานต่อข้อบกพร่อง
นิพจน์ (Expression) • นิพจน์ เป็นส่วนประกอบพื้นฐานของคำสั่งแทบทุกคำสั่ง • เป็นส่วนผลิตค่าให้กับคำสั่ง • Literal • Operator • Monadic or unary • Dyadic or binary • รูปแบบการเขียนนิพจน์ แบ่งได้เป็น • Infix notation • Prefix notation • Postfix notation
รูปแบบอินฟิกซ์ • เขียนโอเปอเรเตอร์อยู่ตรงกลางระหว่างโอเปอแรนด์ทางซ้าย และทางขวา • ในกรณีที่นิพจน์มีมากกว่าหนึ่งโอเปอเรเตอร์ และโอเปอเรเตอร์เหล่านั้นมีคสามสำคัญเท่าเทียมกัน • เช่น x+y+z, 1+3-2+x, a=b=c=3 • ผู้ออกแบบภาษาจะต้องกำหนดทิศทางการคำนวณว่า จะทำจากซ้ายไปขวา หรือจากขวาไปซ้าย เราจะเรียกทิศทางในการคำนวณนี้ว่า associative • Left-associative • Right-associative
Infix • ในกรณีที่นิพจน์มีโอเปอเรเตอร์ที่ความสำคัญไม่เท่ากัน เช่น x+p*q • ผู้ออกแบบภาษาจะต้องกำหนดลำดับความสำคัญก่อนหลังเรียกว่า precedence ** right associative
รูปแบบพรีฟิกซ์ และโพสฟิกซ์ • รูปแบบพรีฟิกซ์ บางครั้งเรียกว่า รูปแบบโพลิช (Polish notation) • ถูกสร้างขึ้นเพื่อให้การเขียนนิพจน์คณิตศาสตร์ไม่จำเป็นต้องใช้วงเล็บ เพื่อระบุลำดับก่อนหลังของการคำนวณ • รูปแบบพรีฟิกซ์นี้ จะเขียนโอเปอเรเตอร์ไว้ก่อนหน้าโอเปอแรนด์ • เช่น 4+(5*6) เขียนให้อยู่ในรูปนิพจน์พรีฟิกซ์ได้ +4*56และ (4+5)*6 เขียนให้อยู่ในรูปนิพจน์โพสต์ฟิกซ์ได้ *+456 • รูปแบบโพสฟิกซ์ มีลักษณะตรงข้าม กับพรีฟิกซ์ บางครั้งจึงเรียกว่า รูปแบบโพลิชสลับลำดับ (reverse Polish notation) • รูปแบบโพสฟิกซ์จะเขียนโอเปอเรเตอร์ไว้หลังโอเปอแรนด์
Infix, Prefix and Postfix notations • ในทางคณิตศาสตร์ การเขียนนิพจน์ส่วนใหญ่ จะใช้รูปแบบอินฟิกซ์ • แต่มีการดำเนินการบางอย่างที่ใช้รูปแบบพรีฟิกซ์ และรูปแบบโพสฟิกซ์ • ในทางคอมพิวเตอร์ ส่วนใหญ่ก็จะใช้รูปแบบอินฟิกซ์ แต่ก็มีบางการดำเนินการที่ใช้รูปแบบพรีฟิกซ์ และโพสฟิกซ์
การคำนวณผลลัพธ์ของนิพจน์การคำนวณผลลัพธ์ของนิพจน์ • Operator overloading: การใช้เครื่องหมายโอเปอเรเตอร์เดียวทำงานมากกว่าหนึ่งแบบ ซึ่งมักจะเกิดขึ้นบ่อยมากในภาษาคอมพิวเตอร์ • มีข้อดีคือ ลดการมีเครื่องหมายโอเปอเรเตอร์ให้ใช้มากชนิดเกินไป • การคำนวณผลลัพธ์แบบอินฟิกซ์ จะต้องใช้ข้อมูลเกี่ยวกับ precedence และ association ประกอบการพิจารณาลำดับการคำนวณ เช่น นิพจน์ในภาษา Pascal a = b < c((FALSE = FALSE) < FALSE) => (TRUE < FALSE) => FALSE หากเป็นนิพจน์ในภาษา C a == b < c((0 == 0) < 0) => (1 < 0) => 0
การคำนวณผลลัพธ์ของนิพจน์ (cont) • การกำหนดค่าของนิพจน์ให้ตัวแปร • ภาษา Pascal ใช้เครื่องหมาย :=แทนการกำหนดค่าเช่น x := 3 • ภาษา C ใช้เครื่องหมาย =เช่น x = 3 • เครื่องหมาย = จัดเป็นโอเปอเรเตอร์ที่มีลำดับการทำงานจากขวาไปซ้าย ผลลัพธ์ของนิพจน์จะเป็นค่าของโอเปอแรนด์ที่อยู่ทางซ้ายมือของ = • ดังนั้น a = b = c = 0; จะหมายความว่า (a = (b = (c = 0))) • ลองอธิบายคำสั่งต่อไปนี้while ((*p++=*q++)!=0) {} • Side effect?
การคำนวณผลลัพธ์ของนิพจน์ (cont) • การเขียนนิพจน์ในภาษา C แล้ว นอกจากจะใช้เครื่องหมาย = แล้ว ยังสามารถใช้เครื่องหมาย ?: ที่เป็นโอเปอเรเตอร์ หมายถึงการทำงานแบบมีเงื่อนไข if… then… else… • เช่น x!=0 ? 1/x : 0; • หากผลลัพธ์ที่ได้จากโอเปอเรเตอร์ ?: เป็นค่า (value) นิพจน์นี้สามารถอยู่ทางขวาของเครื่องหมาย = ได้ • q = (x!=0) ? 1/x : 0; • หากเป็นตำแหน่ง (address) สามารถปรากฏทางซ้ายของเครื่องหมาย = • (p>r) ? *p : *r = 0;
การคำนวณผลลัพธ์ของนิพจน์(cont)การคำนวณผลลัพธ์ของนิพจน์(cont) • ข้อความสั่งบางประเภทมีการใช้นิพจน์ย่อยหลายนิพจน์ การคำรวณผลลัพธ์ของนิพจน์ย่อยเหล่านั้น ไม่จำเป็นจะต้องกระทำทั้งหมดในคราวเดียว • ถ้าในโปรแกรมมีการประกาศอาร์เรย์ a[1..10] และมีการเรียกใช้คำสั่ง ต่อไปนี้IF (i<=10) AND (a[i]>0) THEN … • นิพจน์ย่อยในคำสั่งนี้คือ (i<=10) และ (a[i]>0) • Lazy evaluation ใช้มากในการทำโปรแกรมเชิงหน้าที่ เพื่อเพิ่มความเร็วในการประมวลผลโปรแกรม • ในภาษา C มีการกำหนดวิธีการทำงานของบางโอเปอเรเตอร์ เช่น &&, II สำหรับการทำงานแบบเกียจคร้าน เรียกโอเปอเรเตอร์เหล่านี้ว่า short-cut operators หรือ short-circuit operators • ภาษา Ada, if (I<=10) and then (A[I]>0) then … end if ;
คำสั่งกำหนดค่า (Assignment statement) • เป็นคำสั่งที่ใช้ในการสร้าง หรือเปลี่ยนแปลงค่าให้กับตัวแปร เช่นคำสั่งในภาษา C i = (x+y)/2; • จะเกิดการคำนวณผลลัพธ์ของนิพจน์ (x+y)/2 (source)และค่าที่ได้จะถูกกำหนดให้กับตัวแปร i (target or destination) ของการกำหนดค่า • r-value : ค่าที่เก็บอยู่ในหน่วยความจำตำแหน่งต่างๆ • l-value: ตำแหน่งหรือแอดเดรสของหน่วยความจำ
Assignment statement (cont) • จากตัวอย่างเดิม ถ้ามีคำสั่งเพิ่มเติมดังนี้x = y*i ; • ในเรื่องนี้ หลักทางคณิตศาสตร์ และทางคอมพิวเตอร์ ต่างกันอย่างไร (ร่วมอภิปราย)
คำสั่งเป็นกลุ่ม (Compound statement) • เป็นคำสั่งที่ส่งผลให้การทำงานของคอมพิวเตอร์เกิดการเปลี่ยนสถานะ (state) • Sequence: • คำสั่งต่อเนื่องเหล่านี้ สามารถถูกจัดให้เป็นชุดเดียวกันโดยใช้