1 / 14

โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures

โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures. Warattapop Chainate. Outline. เพื่อควบคุมลำดับการทำงานของโปรแกรมให้ตรงตามที่โปรแกรมเมอร์ต้องการ สำหรับกลุ่มภาษาเชิงคำสั่ง (imperative) และภาษาเชิงวัตถุ (object oriented) โครงสร้างควบคุมจะประกอบด้วยโครงสร้างของ...

demont
Download Presentation

โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. โครงสร้างการควบคุมการทำงานของโปรแกรมProgram control structures WarattapopChainate

  2. Outline • เพื่อควบคุมลำดับการทำงานของโปรแกรมให้ตรงตามที่โปรแกรมเมอร์ต้องการ • สำหรับกลุ่มภาษาเชิงคำสั่ง (imperative) และภาษาเชิงวัตถุ (object oriented) โครงสร้างควบคุมจะประกอบด้วยโครงสร้างของ... • คำสั่งกำหนดค่า • คำสั่งรวมกลุ่มการทำงาน • คำสั่งแบบมีเงื่อนไข • คำสั่งทำซ้ำ • นอกจากนี้ ภาษาคอมพิวเตอร์รุ่นใหม่ๆ มักจะมีโครงสร้างเพื่อการทำโปรแกรมย่อย และโครงสร้างเพื่อการจัดการกรณียกเว้น • ทั้งหมด เพื่อให้โปรแกรมมีโครงสร้างที่ดี และเชื่อถือได้ในด้านความทนทานต่อข้อบกพร่อง

  3. นิพจน์ (Expression) • นิพจน์ เป็นส่วนประกอบพื้นฐานของคำสั่งแทบทุกคำสั่ง • เป็นส่วนผลิตค่าให้กับคำสั่ง • Literal • Operator • Monadic or unary • Dyadic or binary • รูปแบบการเขียนนิพจน์ แบ่งได้เป็น • Infix notation • Prefix notation • Postfix notation

  4. รูปแบบอินฟิกซ์ • เขียนโอเปอเรเตอร์อยู่ตรงกลางระหว่างโอเปอแรนด์ทางซ้าย และทางขวา • ในกรณีที่นิพจน์มีมากกว่าหนึ่งโอเปอเรเตอร์ และโอเปอเรเตอร์เหล่านั้นมีคสามสำคัญเท่าเทียมกัน • เช่น x+y+z, 1+3-2+x, a=b=c=3 • ผู้ออกแบบภาษาจะต้องกำหนดทิศทางการคำนวณว่า จะทำจากซ้ายไปขวา หรือจากขวาไปซ้าย เราจะเรียกทิศทางในการคำนวณนี้ว่า associative • Left-associative • Right-associative

  5. Infix • ในกรณีที่นิพจน์มีโอเปอเรเตอร์ที่ความสำคัญไม่เท่ากัน เช่น x+p*q • ผู้ออกแบบภาษาจะต้องกำหนดลำดับความสำคัญก่อนหลังเรียกว่า precedence ** right associative

  6. รูปแบบพรีฟิกซ์ และโพสฟิกซ์ • รูปแบบพรีฟิกซ์ บางครั้งเรียกว่า รูปแบบโพลิช (Polish notation) • ถูกสร้างขึ้นเพื่อให้การเขียนนิพจน์คณิตศาสตร์ไม่จำเป็นต้องใช้วงเล็บ เพื่อระบุลำดับก่อนหลังของการคำนวณ • รูปแบบพรีฟิกซ์นี้ จะเขียนโอเปอเรเตอร์ไว้ก่อนหน้าโอเปอแรนด์ • เช่น 4+(5*6) เขียนให้อยู่ในรูปนิพจน์พรีฟิกซ์ได้ +4*56และ (4+5)*6 เขียนให้อยู่ในรูปนิพจน์โพสต์ฟิกซ์ได้ *+456 • รูปแบบโพสฟิกซ์ มีลักษณะตรงข้าม กับพรีฟิกซ์ บางครั้งจึงเรียกว่า รูปแบบโพลิชสลับลำดับ (reverse Polish notation) • รูปแบบโพสฟิกซ์จะเขียนโอเปอเรเตอร์ไว้หลังโอเปอแรนด์

  7. Infix, Prefix and Postfix notations • ในทางคณิตศาสตร์ การเขียนนิพจน์ส่วนใหญ่ จะใช้รูปแบบอินฟิกซ์ • แต่มีการดำเนินการบางอย่างที่ใช้รูปแบบพรีฟิกซ์ และรูปแบบโพสฟิกซ์ • ในทางคอมพิวเตอร์ ส่วนใหญ่ก็จะใช้รูปแบบอินฟิกซ์ แต่ก็มีบางการดำเนินการที่ใช้รูปแบบพรีฟิกซ์ และโพสฟิกซ์

  8. การคำนวณผลลัพธ์ของนิพจน์การคำนวณผลลัพธ์ของนิพจน์ • Operator overloading: การใช้เครื่องหมายโอเปอเรเตอร์เดียวทำงานมากกว่าหนึ่งแบบ ซึ่งมักจะเกิดขึ้นบ่อยมากในภาษาคอมพิวเตอร์ • มีข้อดีคือ ลดการมีเครื่องหมายโอเปอเรเตอร์ให้ใช้มากชนิดเกินไป • การคำนวณผลลัพธ์แบบอินฟิกซ์ จะต้องใช้ข้อมูลเกี่ยวกับ precedence และ association ประกอบการพิจารณาลำดับการคำนวณ เช่น นิพจน์ในภาษา Pascal a = b < c((FALSE = FALSE) < FALSE) => (TRUE < FALSE) => FALSE หากเป็นนิพจน์ในภาษา C a == b < c((0 == 0) < 0) => (1 < 0) => 0

  9. การคำนวณผลลัพธ์ของนิพจน์ (cont) • การกำหนดค่าของนิพจน์ให้ตัวแปร • ภาษา Pascal ใช้เครื่องหมาย :=แทนการกำหนดค่าเช่น x := 3 • ภาษา C ใช้เครื่องหมาย =เช่น x = 3 • เครื่องหมาย = จัดเป็นโอเปอเรเตอร์ที่มีลำดับการทำงานจากขวาไปซ้าย ผลลัพธ์ของนิพจน์จะเป็นค่าของโอเปอแรนด์ที่อยู่ทางซ้ายมือของ = • ดังนั้น a = b = c = 0; จะหมายความว่า (a = (b = (c = 0))) • ลองอธิบายคำสั่งต่อไปนี้while ((*p++=*q++)!=0) {} • Side effect?

  10. การคำนวณผลลัพธ์ของนิพจน์ (cont) • การเขียนนิพจน์ในภาษา C แล้ว นอกจากจะใช้เครื่องหมาย = แล้ว ยังสามารถใช้เครื่องหมาย ?: ที่เป็นโอเปอเรเตอร์ หมายถึงการทำงานแบบมีเงื่อนไข if… then… else… • เช่น x!=0 ? 1/x : 0; • หากผลลัพธ์ที่ได้จากโอเปอเรเตอร์ ?: เป็นค่า (value) นิพจน์นี้สามารถอยู่ทางขวาของเครื่องหมาย = ได้ • q = (x!=0) ? 1/x : 0; • หากเป็นตำแหน่ง (address) สามารถปรากฏทางซ้ายของเครื่องหมาย = • (p>r) ? *p : *r = 0;

  11. การคำนวณผลลัพธ์ของนิพจน์(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 ;

  12. คำสั่งกำหนดค่า (Assignment statement) • เป็นคำสั่งที่ใช้ในการสร้าง หรือเปลี่ยนแปลงค่าให้กับตัวแปร เช่นคำสั่งในภาษา C i = (x+y)/2; • จะเกิดการคำนวณผลลัพธ์ของนิพจน์ (x+y)/2 (source)และค่าที่ได้จะถูกกำหนดให้กับตัวแปร i (target or destination) ของการกำหนดค่า • r-value : ค่าที่เก็บอยู่ในหน่วยความจำตำแหน่งต่างๆ • l-value: ตำแหน่งหรือแอดเดรสของหน่วยความจำ

  13. Assignment statement (cont) • จากตัวอย่างเดิม ถ้ามีคำสั่งเพิ่มเติมดังนี้x = y*i ; • ในเรื่องนี้ หลักทางคณิตศาสตร์ และทางคอมพิวเตอร์ ต่างกันอย่างไร (ร่วมอภิปราย)

  14. คำสั่งเป็นกลุ่ม (Compound statement) • เป็นคำสั่งที่ส่งผลให้การทำงานของคอมพิวเตอร์เกิดการเปลี่ยนสถานะ (state) • Sequence: • คำสั่งต่อเนื่องเหล่านี้ สามารถถูกจัดให้เป็นชุดเดียวกันโดยใช้

More Related