Advertisement
nontawat1996

Untitled

Oct 7th, 2011
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.64 KB | None | 0 0
  1. #include<stdio.h> // เรียก binaly stdio.h
  2. #include<conio.h> // เรียก binaly conio.h
  3.  
  4. char post_fix[20]; // ประกาศตัวแปร char ชื่อ post_fix ค่าในอาเรย์ 20 ช่อง
  5. int input_precede(char sym) // ประกาศฟังก์ชั่น input_precede
  6. {
  7. switch(sym)
  8. {
  9. case '+' : return 1; // ถ้าตัวที่ตรวจสอบมีค่าคือ + ให้ส่งค่ากลับคือ 1
  10. case '-' : return 1; // ถ้าตัวที่ตรวจสอบมีค่าคือ - ให้ส่งค่ากลับคือ 1
  11.  
  12. case '*': return 3; // ถ้าตัวที่ตรวจสอบมีค่าคือ * ให้ส่งค่ากลับคือ 3
  13. case '/' :return 3; // ถ้าตัวที่ตรวจสอบมีค่าคือ / ให้ส่งค่ากลับคือ 3
  14. case '%': return 3; // ถ้าตัวที่ตรวจสอบมีค่าคือ % ให้ส่งค่ากลับคือ 3
  15.  
  16. case '^': return 6; // ถ้าตัวที่ตรวจสอบมีค่าคือ ^ ให้ส่งค่ากลับคือ 6
  17. case '$': return 6; // ถ้าตัวที่ตรวจสอบมีค่าคือ $ ให้ส่งค่ากลับคือ 6
  18.  
  19. case '(': return 9; // ถ้าตัวที่ตรวจสอบมีค่าคือ ( ให้ส่งค่ากลับคือ 9
  20. case ')': return 0; // ถ้าตัวที่ตรวจสอบมีค่าคือ ) ให้ส่งค่ากลับคือ 0
  21.  
  22. default: return 8;
  23. }
  24. }
  25.  
  26. int stack_precede(char sym) // ประกาศตัวแปร int ชื่อ stact_precede เอาไว้เลือกตัวกระทำ
  27. {
  28. switch(sym)
  29. {
  30. case '+': return 2; // ถ้าตัวที่ตรวจสอบมีค่าคือ + ให้ส่งค่ากลับคือ 2
  31. case '-': return 2; // ถ้าตัวที่ตรวจสอบมีค่าคือ - ให้ส่งค่ากลับคือ 2
  32.  
  33. case '*': return 4; // ถ้าตัวที่ตรวจสอบมีค่าคือ * ให้ส่งค่ากลับคือ 4
  34. case '/': return 4; // ถ้าตัวที่ตรวจสอบมีค่าคือ / ให้ส่งค่ากลับคือ 4
  35. case '%': return 4; // ถ้าตัวที่ตรวจสอบมีค่าคือ % ให้ส่งค่ากลับคือ 4
  36.  
  37. case '^': return 5; // ถ้าตัวที่ตรวจสอบมีค่าคือ ^ ให้ส่งค่ากลับคือ 5
  38. case '$': return 5; // ถ้าตัวที่ตรวจสอบมีค่าคือ $ ให้ส่งค่ากลับคือ 5
  39.  
  40. case '(': return 0; // ถ้าตัวที่ตรวจสอบมีค่าคือ ( ให้ส่งค่ากลับคือ 0
  41. case '#': return -1; // ถ้าตัวที่ตรวจสอบมีค่าคือ # ให้ส่งค่ากลับคือ -1
  42. default: return 8;
  43. }
  44. }
  45.  
  46. void in_to_post(char inf[20]) // ประกาศตัวแปร char ชื่อ inf ในฟังก์ชั่น in_to_post ค่าในอาเรย์ 20 ช่อง
  47. {
  48. char st[20],s; // ประกาศตัวแปรชนิด char ชื่อ st ค่าในอาเรย์ 20 ช่องและประกาศตัวแปรชนิด char ชื่อ s
  49. int i,j=0,top=-1; // ประกาศตัวแปรชนิด int ชื่อ i , j กำหนดค่าเท่ากับ 0 , top กำหนดค่าเท่ากับ -1
  50.  
  51. st[++top]='#'; // กำหนดค่าตัวแปรอาเรย์ระดับที่ top+1 ให้มีค่าเป็น #
  52.  
  53. for(i=0;inf[i]!='\0';i++) // ใช้ loop for วนกำหนดค่าเริ่มต้นให้ i เท่ากับ 0 เงื่อนไขมีอยู่ว่า ถ้า inf[i] ไม่เท่ากับ \0 ให้ค่า i +1
  54. {
  55. s=inf[i]; // ค่า s เท่ากับ inf[i]
  56.  
  57.  
  58. while(stack_precede(st[top])>input_precede(s)) // ใช้ loop while วนถ้าใน top ที่อยู่ใน st ของฟังก์ชั่น stack_precede มากกว่าค่า s ที่อยู่ในฟังก์ชั่น >input_precede
  59. post_fix[j++]=st[top--]; // ให้ อาเรย์ที่ j++ ของ post_fix เท่ากับ อาเรย์ที่ top-- ของ st
  60.  
  61.  
  62.  
  63. if(stack_precede(st[top])!=input_precede(s)) // ตรวจสอบ top ที่อยู่ใน st ของฟังก์ชั่น stack_precede ไม่เท่ากับค่า s ที่อยู่ในฟังก์ชั่น input_precede
  64. st[++top]=s; // กำหนดค่าตัวแปรอาเรย์ระดับที่ top+1 ให้มีค่าเป็นค่าเดี่ยวกันกับตัวแปร s
  65. else // ถ้าไม่จริง
  66. top--; // ให้ค่า top-1
  67. }
  68.  
  69. while(st[top]!='#') // ใช้ loop while วนถ้าใน top ที่อยู่ใน array st ไม่เท่ากับ #
  70. {
  71. post_fix[j++]=st[top--]; // ให้ อาเรย์ที่ j++ ของ post_fix เท่ากับ อาเรย์ที่ top-- ของ st
  72. }
  73.  
  74. post_fix[j]='\0'; // อาเรย์ที่ j ของ post_fix เท่ากับ \0
  75.  
  76. printf("Postfix : %s\n",post_fix); // แสดงผลค่า post_fix ออกทางจอภาพ
  77. }
  78.  
  79. int main() // ฟังก์ชั่นหลักของส่วนโปรแกรม
  80. {
  81. char infix[25]; // ประกาศตัวแปรชนิด char ชื่อว่า infix มีขนาดอาเรย์ 25
  82. printf("Infix : "); // แสดงผลรับค่าข้อมูลจาก user
  83. gets(infix); // ฟังก์ชันที่ใช้รับข้อความจากคีย์บอร์ด แล้วไปเก็บไว้ในตัว infix
  84.  
  85. in_to_post(infix); // ส่งค่าของตัวแปร infix ที่รับมาเข้าไปในฟังก์ชั่น in_to_post
  86. getch(); // รอ user กด enter
  87. return 0; // รีเทิร์นค่า 0
  88. }
  89.  
  90.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement