مشکل با عملیات های ریاضی...

my friend

Member
سلام

یه مشکل برام پیش اومده... کسی میتونه راهنمایی کنه؟

یه فرم داریم که کاربر یه مقدار دلخواه ، مثلا 5+2 رو وارد میکنه...
ما اینو با php میگیریم. حالا میخواهیم اون مقدار رو محاسبه کنیم... اما اینطوری نمیشه:
PHP:
$math = $_POST['math'];
$exec_math = eval($math);
راهی برای گرفتن نتیجه هست؟
 

.:: Ali ::.

Member
اون مقادير رو جدا كنيد (1آرايه متشكل از 1 و + و 3 ) بعد به كار ببريد . البته اين يه نظريه هستش ! همچين چيزي خيلي كم پيش مياد كه كاربرد داشته باشه .
 

my friend

Member
درسته... یعنی فکر میکنم که درست باشه...
یه سوال دیگه ، اگه کاربر اینو وارد کنه فکر کنم مشکل پیش میاد:
کد:
8+5-2(2^2*2+1)-7
اگه بخواهیم با explode ، علامت های مثبت ، منفی ، ضرب ، تقسیم ، توان ، سینوس ها و ... رو برداریم و مقادیر میان این علامت ها رو توی آرایه بریزیم ، مشکل پیش میاد... یعنی دیگه نمیتونیم عدد 8 رو در عدد های داخل پرانتز ضرب کنیم و به توان برسونیم و ...
راه حلی وجود داره؟ (این رو هم بگم که کاربر میتونه بجای همه یا بعضی از اعداد ، از حرف X استفاده کنه.)
 
آخرین ویرایش:

.:: Ali ::.

Member
با ()preg_match مي تونين عبارات خاص رو جدا كنيد (مثل sin) و بقيه رو تو همون آرايه چك كنيد (foreach) اگه اون مثلا" = "+" باشه فلان كار رو انجام بده ، يا اگه ^ باشه فلان تابع رو اجرا كنه ، واسه پرانتز هم مممم به نظر يه حلقه باشه كه جداگانه تا وقتي پرانتز بسته نشده كاراكتر ها رو جدا كنه و پرانتز تو پرانتز هم شاملش مي شه .

اگه وقت و حسش رو داشته باشم حتما" تست مي كنم ؛ خيلي باس تمرين كرد روش و روش هاي ديگه رو هم امتحان كرد .

موفق باشيد .
 
آخرین ویرایش:

jhoseini

Member
شما باید اول رشته ی محاسباتی مورد نظر کاربر رو به واسطه یه تابع postfix یا prefix کنید، تا محاسبش برای کامپیوتر سادهتر باشه، و دیگه نیازی به پرانتز هم نباشه
و بعد شروع کنی به اجرای دونه دونه ی عملگر ها
مثلا
PHP:
(2+5)*3
=>
2 5 + 3 *
حالا با یه حلقه از چپ شروع کنید: وقتی به عملوند رسیدید بریزید تو پشته، وقتی به عملگر رسیدید 2تا از پشته بیرون بکشید محاسبه کنید و برگردونبد تو پشته
(بحث در این مورد یخورده پیچیدس :))
 

peyman1987

Member
الگوريتمي که jhoseini جان دادن مناسبترين راه محاسبات رياضيه. براي نوشتن ماشين حسابها هم از همين روش استفاده ميشه منتهي فکر کنم يه مقدار براي کسي که فقط وب کار کرده و تا حالا application و اصول برنامه نو يسي و ساختمان داده کار نکرده سخت باشه.
 

vop.ir

New Member
مشكل اينطوري قابل حله
PHP:
<?php
$math = "8+5-2*(2^2*2+1)-7";
$i = eval("return {$math};");
echo $i;
?>

دوستان اگه نميتونن كمك كنن به جاي گيج كردن ديگران سطح اطلاعاتيشونو بالا ببرن

نيازي به نوشتن آلگوريتم هاي پيچيده نيست
اين مسئله خيلي راحت تر از اين حرفا قابل حله
 
آخرین ویرایش:

parsmizban

Member
مشكل اينطوري قابل حله
PHP:
<?php
$math = "8+5-2*(2^2*2+1)-7";
$i = eval("return {$math};");
echo $i;
?>

دوستان اگه نميتونن كمك كنن به جاي گيج كردن ديگران سطح اطلاعاتيشونو بالا ببرن

نيازي به نوشتن آلگوريتم هاي پيچيده نيست
اين مسئله خيلي راحت تر از اين حرفا قابل حله
واقعا که پست سومت به همه توهین میکنی
جواب اونها میشه -12 ولی اسکریپت شما -8 بدست میاره
پس به جای حرف الکی درستش کن
 

vop.ir

New Member
عزيزم من به كسي توهين نكردم
در ضمن اون كد مشكل نداره مشكل از وروديه چرا كه ^ علامت توان نيست در PHP بلكه يه عملگر بيتيه

كد درست ميشه اين

PHP:
<?php
$math = "8+5-2*(pow(2,2)*2+1)-7";
$i = eval("return {$math};");
echo $i;
?>
 

.:: Ali ::.

Member
مشكل اينطوري قابل حله

دوستان اگه نميتونن كمك كنن به جاي گيج كردن ديگران سطح اطلاعاتيشونو بالا ببرن

نيازي به نوشتن آلگوريتم هاي پيچيده نيست
اين مسئله خيلي راحت تر از اين حرفا قابل حله

دوست من ، شما اگه علامه دهر هم كه باشي (كه نيستي) هيچ حقي نداري اينطور صحبت كني ، ياد بگير كه هميشه با ديگران با احترام صحبت كني .

تنها كاري كه بهتره انجام بدي اينه فقط كه نظر خودتو در مورد موضوع بحث دخيل بدي .
هيچ كدوم از دوستان من در انجمن PHP با وجود تجربه ي زياد ؛ هيچ ادعائي ندارند .

با تشكر .
 

vop.ir

New Member
بهتره مسیر انجمن رو منحرف نکنید وگرنه برخورد میشه

ویرایش توسط siavashmusic
 
آخرین ویرایش توسط مدیر:

tabib_m

Member

هیچ کس حق توهین به هیچ فردی نداره. (در اینجا قضاوت نمیکنم!!!)
اگر کسی فکر کرد بهش توهین شده، به جای جواب دادن، باید پست رو گزارش کنه.

گزارش شد...
 

siavashmusic

Active Member
دوستان قدیمی یه مقدار خونسرد باشند مسلما اینطوری هیچ نتیجه ای حاصل نمیشه
جناب vop.ir شما هم سعی کن از لغات زیبا تری برای بیان احساسات استفاده کنی
اینجا هرکی هست توی یه مقامی قرار داره وقتی میگم مقام یعنی جای معتبر
پس فکر نکنید کسی که میاد جواب تاپیک رو میده یه تازه دوران رسیده هست . . .
امیدوارم درست توضیح داده باشم
ضمنا به انجمن مجید آنلاین خوش آمدید
 

my friend

Member
از مدیران درخواست میکنم که پست های اضافی رو حذف کنن و پست های شماره 7 و 8 رو ویرایش کنن...
من که جوابم رو گرفتم ، اما ممکنه بعدا فرد دیگه ای با یه جستجو این تاپیک رو ببینه و با اینکه به جواب رسیده ، اما با خوندن تاپیک دلسرد میشه و ازش خارج میشه...

از همکاری همگی متشکرم:)
 

my friend

Member
شما باید اول رشته ی محاسباتی مورد نظر کاربر رو به واسطه یه تابع postfix یا prefix کنید، تا محاسبش برای کامپیوتر سادهتر باشه، و دیگه نیازی به پرانتز هم نباشه
و بعد شروع کنی به اجرای دونه دونه ی عملگر ها
مثلا
PHP:
(2+5)*3
=>
2 5 + 3 *
حالا با یه حلقه از چپ شروع کنید: وقتی به عملوند رسیدید بریزید تو پشته، وقتی به عملگر رسیدید 2تا از پشته بیرون بکشید محاسبه کنید و برگردونبد تو پشته
(بحث در این مورد یخورده پیچیدس :))

ممنون ، اما برای محاسبات پیچیده کنترل برنامه خیلی سخت میشه... اما راه حلی که vop.ir ارائه کرد خیلی ساده تره... و نیاز به کدنویسی کمتری داره... فقط باید توابعی که باعث حمله هکر ها میشه رو غیر فعال کرد و چند تا تابع تعریف کرد تا کاربر در صورت لزوم ازش استفاده کنه (مثل توان)
راستی ، پشته یعنی چی؟

باز هم متشکرم.
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا