นิพจน์ (Expression) คือ การนำตัวดำเนินการและเครื่องหมายดำเนินการมากระทำร่วมกัน โดยสามารถซ้อนนิพจน์ในนิพจน์ได้ แต่ด้วยหลักการเขียนโปรแกรมมีความแตกต่างกับคณิตศาสตร์ ด้วยเหตุนี้ การแปลงนิพจน์จากสมการคณิตศาสตร์มาเป็นนิพจน์ในภาษาเขียนโปรแกรมจะต้องมีขั้นตอนการแปลลำดับของการคำนวณที่ถูกต้องเพื่อป้องกันไม่ให้เกิดความผิดพลาดในการคำนวณ เช่น
y = 4/x2
สามารถเขียนด้วยภาษา C++ ได้ดังนี้
float x;
float y;
y = 4/x*x;
หรือ
float x,y;
y = 4/(x*x);
แบบใดถูกต้อง
ลำดับความสำคัญ
ลำดับความสำคัญในการกระทำนิพจน์เป็นดังนี้
- ทำในเครื่องหมายวงเล็บในสุดก่อน
- ทำ * หรือ / หรือ % โดยทำจากซ้ายไปขวา
- ทำ + หรือ – โดยทำจากซ้ายไปขวา
ด้วยเหตุนี้ ถ้าให้ x = 4.5 เมื่อคำนวณสมการ y = 4/x2 จะได้คำตอบของ 4/4.52 เป็น 0.19753086419753085 แต่ถ้าทำตามนิพจน์ที่เขียนด้วยภาษา C++ ตามตัวอย่างก่อนหน้านี้จะได้โค้ดและผลลัพธ์ดังนี้
กรณีที่ 1
void setup() {
float x=4.5;
float y;
Serial.begin(115200);
y=4/x*x;
Serial.println(y);
}
void loop() {
}
กรณีที่ 2
void setup() {
float x=4.5;
float y;
Serial.begin(115200);
y=4/(x*x);
Serial.println(y);
}
void loop() {
}
จาก 2 กรณีจะพบว่า กรณีที่ 2 ให้คำตอบที่ถูกต้องใกล้เคียงกับการคำนวณจากสมการคณิตศาสตร์ และกรณีที่ 1 นั้นมีลำดับการคำนวณที่ผิดพลาด คือ นำ 4 หารด้วย x หลังจากนั้นนำผลลัพธ์จากการหารคูณด้วย x ทั้งนี้เนื่องจากเครื่องหมาย * และ / มีลำดับการทำงานที่เท่ากันจึงทำจากซ้ายไปขวา แต่กรณีที่ 2 ใช้วงเล็บบังคับให้คำนวณ x*x หรือ x2 ก่อน แล้วนำ 4 หารด้วยค่าที่ยกกำลังสองแล้วจึงเป็นการคำนวณที่ถูกลำดับตามสมการคณิตศาสตร์
กรณีใช้เครื่องหมายดำเนินการผลายแบบผสมกันจะมีลำดับความสำคัญเรียงกันดังนี้
ลำดับ | เครื่องหมาย |
---|---|
1 | ( ) |
2 | * / % |
3 | + – |
4 | == != < > <= >= |
5 | ! |
6 | && |
7 | || |
สรุป
จากบทความนี้จะพบว่าลำดับของเครื่องหมายดำเนินการมีผลต่อขั้นตอนของการคำนวณ ดังนั้น ผู้อ่านต้องฝึกฝนการเขียนลำดับให้ถูกต้อง หรืออาจจะใช้วิธีการแยกการคำนวณออกมาเพื่อลดความซับซ้อนของการดำเนินการซึ่งต้องการหน่วยความจำที่มากขึ้นในการสร้างหน่วยความจำชั่วคราว แต่อย่างไรก็ดี ไม่มีสูตรสำเร็จในการเขียนนิพจน์ จึงต้องฝึกฝนฝึกฝนและฝึกฝนเท่านั้น สุดท้ายหวังว่าจะสนุกกับเขียนโปรแกรม ครั้งหน้าเป็นเรื่องของการเขียนโปรแกรมโครงสร้างครับ
(C) 2020-2021, โดย อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ
ปรับปรุง 2021-05-25, 2021-09-20