Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h> // เรียก binaly stdio.h
- #include<conio.h> // เรียก binaly conio.h
- char post_fix[20]; // ประกาศตัวแปร char ชื่อ post_fix ค่าในอาเรย์ 20 ช่อง
- int input_precede(char sym) // ประกาศฟังก์ชั่น input_precede
- {
- switch(sym)
- {
- case '+' : return 1; // ถ้าตัวที่ตรวจสอบมีค่าคือ + ให้ส่งค่ากลับคือ 1
- case '-' : return 1; // ถ้าตัวที่ตรวจสอบมีค่าคือ - ให้ส่งค่ากลับคือ 1
- case '*': return 3; // ถ้าตัวที่ตรวจสอบมีค่าคือ * ให้ส่งค่ากลับคือ 3
- case '/' :return 3; // ถ้าตัวที่ตรวจสอบมีค่าคือ / ให้ส่งค่ากลับคือ 3
- case '%': return 3; // ถ้าตัวที่ตรวจสอบมีค่าคือ % ให้ส่งค่ากลับคือ 3
- case '^': return 6; // ถ้าตัวที่ตรวจสอบมีค่าคือ ^ ให้ส่งค่ากลับคือ 6
- case '$': return 6; // ถ้าตัวที่ตรวจสอบมีค่าคือ $ ให้ส่งค่ากลับคือ 6
- case '(': return 9; // ถ้าตัวที่ตรวจสอบมีค่าคือ ( ให้ส่งค่ากลับคือ 9
- case ')': return 0; // ถ้าตัวที่ตรวจสอบมีค่าคือ ) ให้ส่งค่ากลับคือ 0
- default: return 8;
- }
- }
- int stack_precede(char sym) // ประกาศตัวแปร int ชื่อ stact_precede เอาไว้เลือกตัวกระทำ
- {
- switch(sym)
- {
- case '+': return 2; // ถ้าตัวที่ตรวจสอบมีค่าคือ + ให้ส่งค่ากลับคือ 2
- case '-': return 2; // ถ้าตัวที่ตรวจสอบมีค่าคือ - ให้ส่งค่ากลับคือ 2
- case '*': return 4; // ถ้าตัวที่ตรวจสอบมีค่าคือ * ให้ส่งค่ากลับคือ 4
- case '/': return 4; // ถ้าตัวที่ตรวจสอบมีค่าคือ / ให้ส่งค่ากลับคือ 4
- case '%': return 4; // ถ้าตัวที่ตรวจสอบมีค่าคือ % ให้ส่งค่ากลับคือ 4
- case '^': return 5; // ถ้าตัวที่ตรวจสอบมีค่าคือ ^ ให้ส่งค่ากลับคือ 5
- case '$': return 5; // ถ้าตัวที่ตรวจสอบมีค่าคือ $ ให้ส่งค่ากลับคือ 5
- case '(': return 0; // ถ้าตัวที่ตรวจสอบมีค่าคือ ( ให้ส่งค่ากลับคือ 0
- case '#': return -1; // ถ้าตัวที่ตรวจสอบมีค่าคือ # ให้ส่งค่ากลับคือ -1
- default: return 8;
- }
- }
- void in_to_post(char inf[20]) // ประกาศตัวแปร char ชื่อ inf ในฟังก์ชั่น in_to_post ค่าในอาเรย์ 20 ช่อง
- {
- char st[20],s; // ประกาศตัวแปรชนิด char ชื่อ st ค่าในอาเรย์ 20 ช่องและประกาศตัวแปรชนิด char ชื่อ s
- int i,j=0,top=-1; // ประกาศตัวแปรชนิด int ชื่อ i , j กำหนดค่าเท่ากับ 0 , top กำหนดค่าเท่ากับ -1
- st[++top]='#'; // กำหนดค่าตัวแปรอาเรย์ระดับที่ top+1 ให้มีค่าเป็น #
- for(i=0;inf[i]!='\0';i++) // ใช้ loop for วนกำหนดค่าเริ่มต้นให้ i เท่ากับ 0 เงื่อนไขมีอยู่ว่า ถ้า inf[i] ไม่เท่ากับ \0 ให้ค่า i +1
- {
- s=inf[i]; // ค่า s เท่ากับ inf[i]
- while(stack_precede(st[top])>input_precede(s)) // ใช้ loop while วนถ้าใน top ที่อยู่ใน st ของฟังก์ชั่น stack_precede มากกว่าค่า s ที่อยู่ในฟังก์ชั่น >input_precede
- post_fix[j++]=st[top--]; // ให้ อาเรย์ที่ j++ ของ post_fix เท่ากับ อาเรย์ที่ top-- ของ st
- if(stack_precede(st[top])!=input_precede(s)) // ตรวจสอบ top ที่อยู่ใน st ของฟังก์ชั่น stack_precede ไม่เท่ากับค่า s ที่อยู่ในฟังก์ชั่น input_precede
- st[++top]=s; // กำหนดค่าตัวแปรอาเรย์ระดับที่ top+1 ให้มีค่าเป็นค่าเดี่ยวกันกับตัวแปร s
- else // ถ้าไม่จริง
- top--; // ให้ค่า top-1
- }
- while(st[top]!='#') // ใช้ loop while วนถ้าใน top ที่อยู่ใน array st ไม่เท่ากับ #
- {
- post_fix[j++]=st[top--]; // ให้ อาเรย์ที่ j++ ของ post_fix เท่ากับ อาเรย์ที่ top-- ของ st
- }
- post_fix[j]='\0'; // อาเรย์ที่ j ของ post_fix เท่ากับ \0
- printf("Postfix : %s\n",post_fix); // แสดงผลค่า post_fix ออกทางจอภาพ
- }
- int main() // ฟังก์ชั่นหลักของส่วนโปรแกรม
- {
- char infix[25]; // ประกาศตัวแปรชนิด char ชื่อว่า infix มีขนาดอาเรย์ 25
- printf("Infix : "); // แสดงผลรับค่าข้อมูลจาก user
- gets(infix); // ฟังก์ชันที่ใช้รับข้อความจากคีย์บอร์ด แล้วไปเก็บไว้ในตัว infix
- in_to_post(infix); // ส่งค่าของตัวแปร infix ที่รับมาเข้าไปในฟังก์ชั่น in_to_post
- getch(); // รอ user กด enter
- return 0; // รีเทิร์นค่า 0
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement