|
|
|
รบกวนผู้รู้ช่วยผมด้วยครับคือต้องการเขียน function php คำนวณสูตรทางคณิตศาสตร์อ่ะครับ ว่ามีแนวทางแบบไหน |
|
|
|
|
|
|
|
ยังไงครับ แทนที่ค่าตัวแปร หรือว่าอะไรครับ
|
|
|
|
|
Date :
2013-07-03 12:49:35 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ในตัวอย่างที่คุณให้มา มีค่าคงที่กี่ตัว
1+2*9-2/2*(9/3)+(7*(5+3)) <<<<-----
คือคุณต้องวิเคราะห์ก่อนว่าโปรแกรมที่จะเขียนทำงานยังไง ต้องรับค่าอะไรบ้าง และรับมากี่ตัว
เช่น ผมต้องการหาพื้นที่สี่เหลี่ยมมุมฉาก ซึ่งหาได้ตามสูตร กว้าง x ยาว
เพราะฉะนั้นโปรแกรมของผมต้องรับค่าตัวแปรทั้งหมด 2 ตัว พอจะเขียน function ได้ดังนี้
Code (PHP)
function rectangle($w,$h){
$result = $w*$h;
return $result;
}
echo rectangle(5,4);
|
|
|
|
|
Date :
2013-07-03 14:26:52 |
By :
arm8957 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คือ ให้รับ ค่ามาแบบนี้ 1+2*9-2/2*(9/3)+(7*(5+3)) จากการกรอกของผู้ใช้จากนั้น ก็ให้เรามาหาค่าที่เขากรอกมาครับ สมมติ
เราจะแยก คำนวณยังไง เพราะมันมี operator มาเยอะและวงเล็บซ้อนลงเว็บอีกครับ
พอจะเข้าใจผมไหมครับ
|
|
|
|
|
Date :
2013-07-03 15:29:25 |
By :
่่่่Jack_Dev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ่านเรื่อง ลำดับความสำคัญของ operator ครับ แล้วคุณจะเข้าใจหลักการการทำงานของ operator ว่า operator ทำงานก่อนหลัง
|
|
|
|
|
Date :
2013-07-03 15:34:20 |
By :
arm8957 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตรรกะ ทางคณิตศาสตร์ มันทำให้เองครับ แค่เอาตัวแปรที่เค้าใส่ มา ให้ถูกพอ
เช่น
$input = 1+2*9-2/2*(9/3)+(7*(5+3));
echo input;
|
|
|
|
|
Date :
2013-07-03 15:37:00 |
By :
teez1232002 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอจะมีตัวอย่างโปรแกรม ที่สำเร็จ เห็นภาพไหมครับ ขอบคุณอย่างสูง
|
|
|
|
|
Date :
2013-07-03 15:44:36 |
By :
่่่่Jack_Dev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
function test($n1,$n2,$n3,$n4,$n5,$n6,$n7,$n8,$n9,$n10){
$result = $n1+$n2*$n3-$n4/$n5*($n6/$n7)+($n8*($n9+$n10));
return $result;
}
echo test(1,2,9,2,2,9,3,7,5,3);
|
|
|
|
|
Date :
2013-07-03 15:52:09 |
By :
arm8957 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
วิธีที่ 1
-ทำเป็นประโยคให้คอมพิวเตอร์รู้จัก (ถ้าเคยศึกษาเกี่ยวกับ Data Structure and Algorithm จะรู้ ผมก็จำชื่อวิธีการไม่ได้ละ)
-คำนวณ (มันจะใช้ Strack ช่วยคำนวณ)
สรุปว่า มันวุ่นวายเกินไป อย่าทำมันเลยถ้าไม่มีประสบการณ์
วิธีที่ 2
-ต้องเขียนฟังก์ชันเป็น
-เอาง่ายๆ วนลูป for เช็ค String เอา หรือวิธีอะไรก็แล้วแต่
-จับคู่ ค่าตัวเลข แล้วคำนวณ
เช่น
1+2+(3+4)
เอา 1+2 ก่อน
จะได้ 3+(3+4)
พอเจอวงเล็บ ก็ให้ทำ
3+4
จะได้ 3+7
มันยากตรงที่เราต้องจัดการกับ String
แต่ถ้าเขียนเป็นแบบ recersive น่าจะง่ายขึ้น
ผมให้ได้แค่หลักการ ไม่เขียนให้ดูนะครับ
|
|
|
|
|
Date :
2013-07-03 16:11:46 |
By :
RootElement@KMUTNB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าต้องการแค่ + - * / ตามโจทย์ข้างบน สามารถทำได้ด้วย eval() ครับ โดยใช้ return ในโค้ดที่ eval()
แนวทางคือ
ตัดตัวอักษรอื่นที่ไม่ใช่ช่องว่าง 0 - 9 และเครื่องหมาย + - * / รวมถึงวงเล็บทิ้ง
และ eval() มันครับ โดยต้องใช้ @ operator ดัก error ไว้ ไม่งั้นถ้า syntax ผิด โปรแกรมจะจบการทำงาน
เมื่อดัก error แล้ว หากโค้ดที่มาจากผู้ใช้ไม่มี syntax error จะได้ค่ากลับมาเป็นตัวเลข นอกนั้น false ครับ
Code (PHP)
<?php
$expr = '1+2*9-2/2*(9/3)+(7*(5+3))';
$expr = preg_replace('/[^\s0-9\(\)\+\-\*\/]/u', '', $expr);
$result = @eval("return $expr;");
if ($result !== false) {
echo $result;
} else {
echo 'ERROR!';
}
|
ประวัติการแก้ไข 2013-07-03 19:56:09
|
|
|
|
Date :
2013-07-03 19:55:20 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณทุกท่านที่มาให้ความรู้ครับ
|
|
|
|
|
Date :
2013-07-04 09:22:47 |
By :
Jack_Dev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|