stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Advertisements

บทที่ 5 การควบคุมทิศทางการทำงานของโปรแกรม
การใช้งานโปรแกรม SPSS
วิทยาลัยเทคโนโลยีบริหารธุรกิจอยุธยา
LAB ตัวแปร : Variables ในการเขียนโปรแกรมเราต้องการให้โปรแกรม จดจำค่าต่างๆ ไว้ เช่นเมื่อรับค่าข้อมูลจาก ผู้ใช้ หรือค่าที่ได้จากการคำนวณใดๆ ค่า.
ชนิดของข้อมูล และการคำนวณทางคณิตศาสตร์
หน่วยการเรียนรู้ที่ 2 หลักการแก้ปัญหาด้วยคอมพิวเตอร์
Pushdown Automata : PDA
กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
หน่วยที่ 5 การเวียนเกิด
กระบวนการของการอธิบาย
ซอฟต์แวร์และการเลือกใช้
ตัวแปร และชนิด ข้อมูล. ตัวแปร การกำหนดตัวแปรเป็นการใช้ ชื่อตัวแปรแทน ตำแหน่งบนหน่วยความจำ สำหรับเก็บ ข้อมูลระหว่างการ ประมวลผล ซึ่งอาจเป็นข้อมูลนำเข้า.
ครั้งที่ 7 รีจิสเตอร์ (REGISTER). รีจิสเตอร์ (Register) รีจิสเตอร์เป็นวงจรความจำที่ใช้ในการเก็บค่า ทางไบนารี่ ใช้ในการเก็บค่าในระหว่างการ ประมวลผลโดยใช้ฟลิป.
โปรแกรมคำนวณคะแนน สหกรณ์ ตามเกณฑ์ดีเด่นแห่งชาติ กรมส่งเสริม สหกรณ์ กองพัฒนาสหกรณ์ด้านการเงิน และร้านค้า วิธีการใ ช้
CSIT-URU อ. กฤษณ์ ชัยวัณณคุปต์ Mathematics and Computer Program, URU บทที่ 1 ความรู้ทั่วไปเกี่ยวกับ เทคโนโลยีสารสนเทศ Introduction to Information.
INTRODUCE SUBJECT สาขางานคอมพิวเตอร์ธุรกิจอาจารย์จิรา ภรณ์ เขตกุฎี
เทคนิคการใช้ Microsoft Excel. 1. การตีตารางในรูปแบบต่าง ๆ 2. การแทรกภาพในตาราง 3. การตกแต่งข้อมูลด้วย Format Cells 4. การคำนวณ บวก ลบ คูณ หาร 5. การย่อ.
วิธีการใ ช้ โปรแกรมคำนวณคะแนน กลุ่มเกษตรกรดีเด่น กองพัฒนาสหกรณ์ด้าน การเงินและร้านค้า กรมส่งเสริม สหกรณ์
LOGO ภาษาซี 1.1 อ. กฤติเดช จินดาภัทร์. LOGO ตัวอย่างโค้ดภาษาซี
งานวิชา เทคโนโลยี สารสนเทศ 4/3 เรื่อง INPUT และ OUTPUT จัดทำโดย นาย ชาญชัย ศรีน้อย เลขที่ 3 นาย ณัฐดนัย จันทมาศ เลขที่ 4 นาย อุดมศักดิ์ เกื้อนะ เลขที่
ALLPPT.com _ Free PowerPoint Templates, Diagrams and Charts.
เรื่อง กระบวนการเทคโนโลยีสารสนเทศ
เกม คณิตคิดเร็ว.
รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 1 สถาปัตยกรรมของระบบฐานข้อมูล (Database Architecture)
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
BC320 Introduction to Computer Programming
โครงสร้างภาษา C Arduino
บทที่ 1 ความรู้ทั่วไปเกี่ยวกับคอมพิวเตอร์
การบัญชีต้นทุนช่วง (Process Costing).
QUEUE คิวจะมีโครงสร้างแบบเชิงเส้นเหมือน stack แต่แตกต่างตรงที่ queue มีตัวชี้ 2 ตัวคือ หัว(Head) และหาง(Tail) โดยการใส่ข้อมูลเข้าและนำข้อมูลออก จะมีลักษณะ.
บทที่ 7 การเขียนโปรแกรม แบบวนรอบทำซ้ำ (Loop)
ประเภทแผ่นโปร่งใส (แผ่นใส) รายวิชา ออปแอมป์และลิเนียร์ไอซี
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 1 ระบบสารสนเทศ (Information System)
บทที่ 8 การควบคุมระบบสารสนเทศทางการบัญชี : การควบคุมเฉพาะระบบงาน
ความรู้เบื้องต้นเกี่ยวกับคอมพิวเตอร์และเทคโนโลยีสารสนเทศ
ขั้นตอนการออกแบบ ผังงาน (Flow Chart)
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
Object-Oriented Programming Paradigm
บทที่ 3 ซอฟต์แวร์ประยุกต์
Data storage II Introduction to Computer Science ( )
บริษัท พัฒนาวิชาการ (2535) จำกัด
บทที่ 9 การทำซ้ำ (Loop).
SMS News Distribute Service
โครงสร้างข้อมูลแบบสแตก (stack)
ผู้ช่วยศาสตราจารย์จุฑาวุฒิ จันทรมาลี
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Data storage II Introduction to Computer Science ( )
หน่วยที่ 6 อะเรย์ของอักขระ
บทที่ 9 การเรียงลำดับข้อมูล (Sorting)
บทที่ 7 การประมวลผลอาร์เรย์
บทที่ 8 การแก้ไขข้อผิดพลาดโปรแกรม(Debugging)
OPERATOR ภาษาปาสคาล (Pascal)
ค่ารูรับแสง - F/Stop ค่ารูรับแสงที่มีค่าตัวเลขต่ำใกล้เคียง 1 มากเท่าไหร่ ค่าของรูรับแสงนั้นก็ยิ่งมีความกว้างมาก เพราะเราเปรียบเทียบค่าความสว่างที่ 1:1.
บทที่ 10 การแบ่งปัญหาใหญ่ออกเป็นปัญหาย่อยและการสร้างลำดับขั้นตอนย่อย
2 โครงสร้างข้อมูลแบบสแตก (STACK).
กิจกรรมที่ 7 นายปรีชา ขอวางกลาง
3 โครงสร้างข้อมูลแบบคิว (QUEUE).
Chapter 3 : Array.
Array: One Dimension Programming I 9.
ฟังก์ชันของโปรแกรม Computer Game Programming
การเติบโตของฟังก์ชัน (Growth of Functions)
การเขียนโปรแกรมด้วยภาษาไพทอน การเขียนโปรแกรมแบบทางเลือก
โครงการถ่ายทอดเทคโนโลยีถนนรีไซเคิลเพื่อลดขยะพลาสติกใน 4 ภูมิภาค
Decision: Single and Double Selection (if and if-else statement)
กระดาษทำการ (หลักการและภาคปฏิบัติ)
ใบสำเนางานนำเสนอ:

stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong

หัวข้อวันนี้ Application of stack การใช้สแตกช่วยในการ compile program การใช้สแตกช่วยแปลงนิพจน์คณิตศาสตร์ การใช้สแตกช่วยประมวลผลนิพจน์ postfix การใช้สแตกช่วยในการเรียกใช้ฟังก์ชัน

Application of stack สแตกเป็นโครงสร้างข้อมูลที่มีประโยชน์ ส่วนใหญ่จะอยู่ในซอฟแวร์ระบบ (System software) ใช้ใน compiler การเรียกใช้ function, recursive การแปลงนิพจน์ และการคำนวณนิพจน์ ฯลฯ ผู้ใช้ทั่วไปอาจไม่ทราบ เพราะถูกซ่อนเอาไว้

สแตกช่วยจัดการด้านโปรแกรมมิ่งอย่างไร ? สิ่งหนึ่งที่สำคัญในการคอมไพล์โปรแกรม คือ การตรวจเช็คในเรื่องของเครื่องหมายวงเล็บ ( ) [ ] { } ถ้าขาดสัญลักษณ์ข้างซ้ายหรือขวาไป -> โปรแกรมนั้นมี syntax error { ( ) [ ( ) ] { } [ { } [ ] ] [ ] ( [ ] ) [ ] ( { } [ { ( ) ] } [ ] ) สามารถใช้ stack ช่วยในการตรวจสอบได้   

input : (({})[]) ( ( { } ) [ ] ) ( ( { { ( ( ( ( ( ( [ [ ( ( เมื่ออ่านเจอวงเล็บเปิด ให้ push ลงสแตก เมื่ออ่านเจอวงเล็บปิด ให้ตรวจสอบ top of stack ว่ามีวงเล็บเปิดชนิดเดียวกันหรือไม่ ถ้ามีให้ pop ออกมา แต่ถ้าไม่มี ให้แสดง error เมื่ออ่านหมดแล้วถ้ามีวงเล็บเหลือในสแตก ให้แสดง error input : (({})[]) init ( ( { } ) [ ] ) ( ( { { ( ( ( ( ( ( [ [ ( (

การใช้สแตกช่วยแปลงนิพจน์คณิตศาสตร์ นิพจน์ INFIX (INFIX Notation) - ประโยคนิพจน์ทางคณิตศาสตร์ทั่วไปที่นิยมเขียนในรูปของนิพจน์ที่มีตัวดำเนินการ (Operator) อยู่ระหว่างตัวกระทำ (Operands) เช่น A+B นิพจน์ POSTFIX (POSTFIX Notation) - ประโยคนิพจน์ทางคณิตศาสตร์ที่เขียนอยู่ในรูปของนิพจน์ที่มีตัวดำเนินการ (Operator) อยู่หลังตัวกระทำ (Operands) เช่น AB+

ความสำคัญของตัวดำเนินการ เครื่องหมาย ความสำคัญเมื่ออยู่ในStack ความสำคัญเมื่ออยู่ที่อินพุต ** (ยกกำลัง) 3 4 * , / 2 + , - 1 (

ลักษณะที่สำคัญของนิพจน์ POSTFIX คือ ตัวดำเนินการทุกตัวจะต้องอยู่หลังตัวกระทำสองตัวเสมอ ตัวดำเนินการทุกตัวจะถูกวางให้อยู่ในลำดับที่ถูกต้องในการคำนวณ ไม่มีเครื่องหมายวงเล็บ () Ex. INFIX : A + B – C * D / E POSTFIX : A B + C D * E / – Ex. INFIX : A + ( B – C * D + E / F ) / G POSTFIX : A B C D * – E F / + G / +

หลักการใช้ stack แปลงนิพจน์ ทำการอ่านนิพจน์ infix เข้าสู่โปรแกรมทีละ 1 ตัวอักษร 1) ถ้าข้อมูลที่อ่านเข้ามาเป็น operand ให้นำไปเป็น output 2) ถ้าข้อมูลที่อ่านเข้ามาเป็น ( ให้ทำการ push ( ลง stack 3) ถ้าข้อมูลที่อ่านเข้ามาเป็น ) ให้ทำการ pop ข้อมูลออกจาก stack ไปเป็นผลลัพธ์ โดยทำการ pop ข้อมูลออกไปจนกว่าข้อมูลที่ pop ออกมาเป็น ( แล้วทิ้งวงเล็บปิด,เปิด ไป

4) ถ้าข้อมูลที่อ่านเข้ามาเป็น operator ให้ตรวจสอบว่า ถ้า stack ว่าง ให้ทำการ push operator ตัวนั้นลง stack ถ้า stack ไม่ว่าง นำไปเปรียบเทียบกับ operator ที่ top of stack ถ้าที่อ่านเข้ามามี priority น้อยกว่าหรือเท่ากันกับ top pop operator ใน stack ไปที่ผลลัพธ์ ย้อนกลับไปทำ 1 อีกครั้ง ถ้าที่อ่านเข้ามามี priority มากกว่า top หรือเจอ ( push operator ที่อ่านเข้ามาลง stack ถ้าหมดข้อมูล ให้ pop สิ่งที่เหลือในสแตกออกไปที่ผลลัพธ์

INFIX : A + B * ( C – D / E ) / F Input (infix) operator stack output (postfix) A - + B A B * + * ( + * ( C A B C + * ( - D A B C D

INFIX : A + B * ( C – D / E ) / F POSTFIX : A B C D E / – * F / + Input (prefix) operator stack output (postfix) / + * ( - / A B C D E A B C D E ) + * A B C D E / - + / A B C D E / - * F A B C D E / - * F - A B C D E / - * F / + POSTFIX : A B C D E / – * F / +

การใช้สแตกช่วยประมวลผลนิพจน์ postfix หลักการ ถ้าเป็น operand ให้ push ลง stack ถ้าเป็น operator ให้ pop ค่า 2 ค่า จากสแตก แล้วทำการคำนวณโดยใช้ operator ตัวนั้น (ให้ใช้ค่าแรกที่ได้จากสแตกเป็น operand ตัวที่ 2) จากนั้น push ผลลัพธ์ลงสแตก เมื่อทำงานจนหมดนิพจน์ ค่าสุดท้ายที่อยู่ในสแตกคือคำตอบ

init 1 6 infix : 1 + 6 / 3 * 4 – 7 postfix : 1 6 3 / 4 * + 7 – 2 1 6 1 3 / 4 * pop 3 pop 6 6 / 3 = 2 push 2 pop 4 pop 2 2 * 4 = 8 push 8 1 6 3 1 6 3 1 4 1 2 1 2 4 1 2 8 + 7 - pop 8 pop 1 1 + 8 = 9 push 9 pop 7 pop 9 9 - 7 = 2 push 2 1 8 9 9 7 7 9 2

จากตัวอย่างการใช้งานสแตก จะเห็นได้ว่าในการเขียนโปรแกรมจริง ควรมีอีก operation หนึ่งที่จำเป็นในการ access สแตก คือ operation ในการเรียกดูข้อมูลที่อยู่ ณ top of stack โดยที่ยังไม่ต้องการ pop ข้อมูลออกมา int call_top ( STACK *s ) { return s->data[s->index]; }

การใช้สแตกช่วยในการเรียกใช้ฟังก์ชัน เมื่อมีการเรียกใช้ฟังก์ชัน A จากโปรแกรมหลัก ระบบจะมีการบันทึก (push) ตัวแปร local และ address ของโปรแกรมหลักที่จะทำงานต่อหลังจบฟังก์ชันแล้วเก็บลงสแตก ถ้าในฟังก์ชัน A มีการเรียกใช้ฟังก์ชัน B อีก ระบบจะทำการบันทึก (push) ตัวแปร local และ address ของฟังก์ชัน A ลงสแตกเหมือนกับตอนที่โปรแกรมหลักเรียกใช้ฟังก์ชัน A

เมื่อสิ้นสุดการทำงานของฟังก์ชัน B ระบบจะทำการย้อนกลับไปทำงานที่ฟังก์ชัน A โดยดึงข้อมูลต่างๆ จาก สแตก (pop) และสามารถทำงานที่ค้างอยู่จนเสร็จได้ เมื่อสิ้นสุดการทำงานของฟังก์ชัน A ระบบจะทำการย้อนกลับไปทำงานที่โปรแกรมหลัก โดยดึงข้อมูลต่างๆ จากสแตก (pop) เช่นกัน

Main program (M) return pop (M) call A push (M) Function A (M) (A) (M) return pop (A) call B push (A) Function B

การบ้าน ให้แสดงวิธีการใช้สแตก เพื่อแปลงนิพจน์ต่อไปนี้ ให้เป็นนิพจน์แบบ postfix INFIX : A + ( ( B – C ) / E + F ) – G * H / I POSTFIX : A B C – E / F + + G H * I / – INFIX : A – ( B + ( C + D * E ) * F ) POSTFIX : A B C D E * + F * + – INFIX : 1 / ( 2 * 3 – ( 4 + 5 ) ) – 6 POSTFIX : 1 2 3 * 4 5 + – / 6 –