Infix to Postfix มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Bansomdej Chaopraya Rajabhat University
Advertisements

โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
บทที่ 2 รหัสควบคุมและการคำนวณ
บทที่ 2 รหัสควบคุมและการคำนวณ
รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
ไวยากรณ์ของภาษาการทำโปรแกรม (2) (Syntax of programming languages)
Department of Computer Business
สถาปัตยกรรมแบบ stack และ การผลิตโค๊ด
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
Stack.
Stack Holidays/seasonal content.
ชนิดของข้อมูลและตัวดำเนินการ
Data structure & Algorithms
ลักษณะการทำงานของ Stack
บทที่ 2 Operator and Expression
Surachai Wachirahatthapong
บทที่ 11 การเขียนโปรแกรมภาษาซี
ตัวดำเนินการ(Operator)
String Class มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
pyramid มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
เซกเมนต์ (Segment) โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
อินเทอร์รัพท์ (Interrupt)
อาร์เรย์ หรือแถวลำดับ (Array)
input from keyboard มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 15 มิถุนายน 2550 Structure Programming มหาวิทยาลัยเนชั่น.
Language Evaluation Criteria
Visual Basic Language มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
แอพเพล็ตเบื้องต้น (Applet)
Algorithm มหาวิทยาลัยเนชั่น Java Pre-Test 49 (Series 1, 2 )
GW-Basic Language มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
ผังงาน (Flowchart) มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 3 มิถุนายน 2550 Method of Class มหาวิทยาลัยเนชั่น.
Page: 1 การพัฒนาโปรแกรมประยุกต์บนเว็บ อ. บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 28 มิถุนายน 2550 Get, Post, Session, Cookies มหาวิทยาลัยโยนก.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 7 มิถุนายน 2556 Text File Processing มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 22 มิถุนายน 2550 ความผิดพลาดที่พบ บ่อย มหาวิทยาลัยเนชั่น.
Page: 1 การพัฒนาโปรแกรมประยุกต์บนเว็บ อ. บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 23 มิถุนายน 2550 Data Selecting by ASP มหาวิทยาลัยโยนก.
Page: 1 การพัฒนาโปรแกรมประยุกต์บนเว็บ อ. บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 3 กรกฎาคม 2550 File Uploading & Shell มหาวิทยาลัยโยนก.
Page: 1 การพัฒนาโปรแกรมประยุกต์บนเว็บ อ. บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 23 มิถุนายน 2550 ASP Structure Programming มหาวิทยาลัยโยนก.
Page: 1 การพัฒนาโปรแกรมประยุกต์บนเว็บ อ. บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 23 มิถุนายน 2550 echo และ print มหาวิทยาลัยโยนก จังหวัด.
Page: 1 การพัฒนาโปรแกรมประยุกต์บนเว็บ อ. บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 23 มิถุนายน 2550 Data Updating by ASP มหาวิทยาลัยโยนก.
Page: 1 โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้ inkey.com มหาวิทยาลัยเนชั่น จังหวัดลำปาง ผศ. บุรินทร์
1 หลักการภาษาชุดคำสั่ง อ. บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 9 มิถุนายน 2556 Transition & Parse Tree มหาวิทยาลัยเนชั่น.
Copy by Batch File โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
Page: 1 การพัฒนาโปรแกรมประยุกต์บนเว็บ อ. บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 3 กรกฎาคม 2550 แฟ้มข้อความ (Text File) #2 มหาวิทยาลัยโยนก.
โครงสร้างข้อมูลแบบคิว
สแตค(stack) โครงสร้างข้อมูลแบบ Stack - การสร้าง Stack
นิพจน์และตัวดำเนินการ
เครื่องหมายและการดำเนินการ ในภาษา C
ทบทวน กันก่อน .....กระบวนการแปลโปรแกรม
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
ตัวดำเนินการ และนิพจน์คณิตศาสตร์
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ
การเขียนซูโดโค้ด และการเขียนโฟลชาร์ต
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
หลักการเขียนโปรแกรม ( )
บทที่ 5 รหัสควบคุมและ การคำนวณ C Programming C-Programming.
ตัวแปร และชนิดข้อมูล.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การรับและแสดงผลข้อมูล (Input/Output)
โครงสร้างข้อมูลแบบ สแตก (stack)
CHAPTER 2 Operators.
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
Stack Sanchai Yeewiyom
2 โครงสร้างข้อมูลแบบสแตก (STACK).
ใบสำเนางานนำเสนอ:

Infix to Postfix มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง First version of slide on 04-July-2007 มหาวิทยาลัยเนชั่น http://www.nation.ac.th อ.บุรินทร์ รุจจน พันธุ์ . ปรับปรุง 9 มิถุนายน 2556

ที่มาที่ไป เมื่อมีนิพจน์ (Expression) ซึ่งเป็นคำสั่ง กำหนดค่าให้กับข้อมูล ในภาษาคอมพิวเตอร์ ย่อมมี ความจำเป็นต้องแปลความหมาย และแปลงให้ คอมพิวเตอร์เข้าใจได้โดยง่าย ตามหลักโครงสร้าง ข้อมูล (Data Structure) คือการแปลงจาก infix เป็น postfix Stack มีการทำงานแบบ LIFO ถูกนำมาอธิบาย การทำงานของการแปลงจาก infix เป็น postfix อยู่ เสมอ โดยพิจารณาน้ำหนักของเครื่องหมายในนิพจน์ และเครื่องหมายที่ถูกกระทำก่อนไปหลังคือ 1. วงเล็บ Parenthesis () 2. ยกกำลัง Exponentiation ^ (Left to Right) 3. คูณและหาร Multiplication *, Division / (Left to Right) 4. บวกและลบ Addition +, Subtraction - (Left to Right)

ความหมายของสแตก สแตก คือ ลิเนียร์ลิสต์ (Linear List) เมื่อเพิ่มข้อมูลหรือ ลบข้อมูลในสแตกจะ กระทำทีปลายเพียงข้างเดียวกัน ปลายข้างนั้นเรียกว่า ท๊อปของสแตก (Top Of Stack) มีคุณสมบัติเป็น ไลโฟลิสต์ (LIFO List) คือสมาชิกที่เข้าลิสต์หลังสุดจะออกจากลิสต์ก่อน การนำข้อมูลเข้าในสแตกเรียกว่าพูชชิ่ง (pushing) การนำข้อมูลออกจากสแตกเรียกว่า ป๊อปปิ้ง (poping)

ความหมายของ infix และ postfix 1 infix: a + b + c 1 postfix: a b + c + 2 infix: a + b * c - d 2 postfix: a b c * + d - 3 infix: a + b * (c - d) 3 postfix: a b c d - * +

ตัวอย่างการแปลง 1 Expression: a + b + c infix Stack postfix 1 a a 3 b + ab 4 + + ab+ 5 c + ab+c 6 ab+c+ Source Code : http://www.java2s.com/Code/JavaScript/Development/PostfixtoInfixConversion.htm

ตัวอย่างการแปลง 2 Expression: a + b * c - d infix Stack postfix 1 a a 3 b + ab 4 * +* ab 5 c + abc* 6 - - abc*+ 7 d - abc*+d 8 abc*+d-

ตัวอย่างการแปลง 3 Expression: a + b * (c - d) infix Stack postfix 1 a a 2 + + a 3 b + ab 4 * +* ab 5 ( +*( ab 6 c +*( abc 7 - +*(- abc 8 d +*(- abcd 9 ) +* abcd- 10 abcd-*+

กฎเกี่ยวกับการแปลง 1. ถ้าข้อมูลเข้า (input) เป็นตัวถูกดำเนินการ (operand) ให้นำออกไปเป็นผลลัพธ์ (output) 2. ถ้าข้อมูลเข้าเป็นตัวดำเนินการ (operator) ให้ดำเนินการดังนี้ 2.1 ถ้าสแตคว่าง ให้ push operator ลงในสแตค 2.2 ถ้าสแตคไม่ว่าง ให้เปรียบเทียบ operator ที่เข้ามากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตค 2.2.1 ถ้า operator ที่เข้ามาสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตคให้ push ลงสแตค 2.2.2 ถ้า operator ที่เข้ามามีความสำคัญน้อยกว่าหรือเท่ากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตค ให้ pop สแตคออกไปเป็นผลลัพธ์ แล้วทำการเปรียบเทียบ operator ที่เข้ามากับ operator ที่ตำแหน่ง TOP ต่อไป จะหยุดจนกว่า operator ที่เข้ามาจะมีความสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตค แล้วจึง push operator ที่เข้ามานั้นลงสแตค 3. ถ้าข้อมูลเข้าเป็นวงเล็บเปิด ให้ push ลงสแตค 4. ถ้าข้อมูลเข้าเป็นวงเล็บปิด ให้ pop ข้อมูลออกจากสแตคไปเป็นผลลัพธ์จนกว่าจะถึงวงเล็บ เปิด จากนั้นทิ้งวงเล็บเปิดและปิดทิ้งไป 5. ถ้าข้อมูลเข้าหมด ให้ pop ข้อมูลออกจากสแตคไปเป็นผลลัพธ์จนกว่าสแตคจะว่าง

Algorithm in j2sdk 1.5 boolean opGreaterEqual(char a, char b){ return (a=='*' || a=='/') >= (b=='*' || b=='/'); } apstring infixToPostfix(apstring s){ int len=s.length(); char temp; apstring ans=""; apstack<char> stack; for(int i=0; i<len; i++){ if (s[i]=='+' || s[i]=='-' || s[i]=='*' || s[i]=='/'){ while( !stack.isEmpty() && stack.top()!='(' ){ if ( opGreaterEqual(stack.top(), s[i]) ) { stack.pop(temp); ans+=temp; } else break; stack.push(s[i]); } else if ( s[i]=='(' ) { stack.push('('); } else if ( s[i]==')' ) { while ( !stack.isEmpty() && stack.top()!='(' ) { if ( !stack.isEmpty() ) stack.pop(); } else if ( s[i]>='A' && s[i]<='Z' ) { ans+=s[i]; while ( !stack.isEmpty() ){ return ans; ข้อมูล http://everything2.com/index.pl?node_id=1293134