PDA

View Full Version : سوال: دریافت تابع f(x) از کاربر



Ehsan_seif
یک شنبه 05 دی 1389, 04:14 صبح
دوستان سلام به همگی
من تو C++ یه برنامه می خام بنویسم واسه انتگرال گیری
به این صورت که یه کاربر بتونه یه f(x) دلخواه بهش بده و پس از مشخص کردن حدود انتگرال برنامه انتگرال رو حساب کنه
حالا مشکل من اینه که نمی دونم چجوری تابع f(x) رو از کاربر بگیرم که برنامه متغیر x رو از فرمول وارد شده تشخیص بده
کسی می تونه منو راهنمایی کنه؟

Pouri_sb
یک شنبه 05 دی 1389, 16:19 عصر
یه راهش اینه که برای هر نمادی قرارداد تعیین کنی بعدش به کاربر بگی ، مثلا برای توان از نماد ^ برای سینوس از sin بعدشم هر جمله رو تو یهیه پرانتز بزاره، با این شرطا تجزیه رشته راحت میشه، و اگه یک متغیرست حتما از x استفاده کنه، بعد با استفاده از ساختارهای تصمیم می تونی تابع رو بگیری

Ehsan_seif
یک شنبه 05 دی 1389, 21:26 عصر
خوب این راهی که میگید درسته ها ولی یه خورده کار می بره اگه آدم بخواد همه ی نشانه ها رو بهش معرفی کنه مشکله
سوالی که واسم پیش اومده اینه که آیا نمی شه رشته ورودی رو جوری ذخیره کرد که خود کامپایلر اونرو به صورت یک فرمول در نظر بگیره
مثلا وقتی کد زیر رو وارد کنیم تو کد برنامه خودش تشخیص میده که یه فرموله

#define f(x) x * x
چجوری می تونیم رشته ورودی رو به این شکل ذخیره کنیم؟
ممنون ازجوابت پوری جان

Arcsinos
یک شنبه 05 دی 1389, 22:22 عصر
میتونی این کار رو انجام بدی ، بعد از اینکه رشته رو گرفتی به برنامه بگو که بعد از کلمه ی مثلا "define" یا "tarif"، تا قبل از رسیدن به علامت مثلا ";" یا " ' " یا " = " هر چیزی بود رو به عنوان نام متغیر در یه آرایه ذخیره کنه و اگه اون علامت " =" بود تا قبل از رسیدن به ";" یا " ' " هر مقداری که بود رو به عنوان مقدار متغیر در یه سطر دیگه از اون آرایه نگهداری کنه .
حالا وقتی تو برنامه نوشتی مثلا x + y بیاد ببینه x و y تو اون آرایه هستن ، بعد ببینه مقدار دهی شدن ، اگه جواب مثبت بود مقدارش رو جمع کنه و نمایش بده ،
به همین سادگی یه کامپایلر ساختی ، اسمشو بذار Amghezi دور کلاش ghermezi

Ehsan_seif
دوشنبه 06 دی 1389, 01:53 صبح
معذرت می خام جناب آرک سینوس ولی درست متوجه منظورتون نشدم
یعنی میگید رشته ای که از کاربر میگیرم با فرمت خاصی باشه و define داشته باشه؟
می شه یه مثال بزنید از منظور مورد نظرتون؟
ببخشید من یه خورده تازه کارم تو C++

Arcsinos
دوشنبه 06 دی 1389, 11:20 صبح
نه دوست عزیز فکر کن الان برنامه اجرا شده :
ورودی :

#variable xxx=123;حالا میای به برنامه میگی بعد از کلمه ی "#variable" هر چی بود تا قبل از رسیدن به ";" یا "=" رو به عنوان متغییر در یه آرایه قرار بده که اینجا "xxx" هست رو در اولین خونه از آرایه قرار میده (آرایه ام دو سطر داره و تعدادی که میخوای ستون ) بعد میگی اگه اون علامت "=" تا قبل از رسیدن به ";"هر چی بود رو به مقدار عدد تبدیل کن و در سطر دوم و در زیر متغیر "xxx" قرار بده . که در اینجا "123" هست .("#variable" به عنوان کلمه ی ذخیره شده ی تو هست مثل کلمه ی define تو c++ ولی "#variable" تو زبان Amghezi هست)
حالا میخوای با این متغیر هر کاری کنی به راحتی میتونی انجام بدی من میخوام یه f(x بگیره و اونو جمع کنه و تو میخوای بگیره و انتگرال بده بیرون .
حالا میای به برنامه میگی :

chap kon>> xxx+xxx;اینجا "chap kon" میشه کلمه ی تعریف شده ی تو مثل cout تو C++ (حالا اگه میخوای انتگرال بگیری بگو integral x; رو محاسبه کن که این مونده خودت چطوری تابع انتگرال رو تعریف کنی ) بعد به برنامه میگی بعد از این کلمه هرچی بود تا زمانی که به یه عملگر یا ";" نرسیدی رو به عنوان یه عملوند یه جا نگهداری کنه و بعد بیاد ببینه این عملوند تو آرایه ی متغیر های تو هست یا نه اگه بود که میاد عملگر و عملوند بعد رو هم تشخیص میده و خلاصه اونو محاسبه میکنه ، اگه هم نه مثل خود C++ بنویس "yyy undefined variaber" و از برنامه خارج شو یه سر بری اینجا (http://barnamenevis.org/showthread.php?150444-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B4%D8%AF%D9%87-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-C-%D9%88-C/page17) شاید گفته هام و راحت تر درک کنی .

Ehsan_seif
سه شنبه 07 دی 1389, 00:49 صبح
ممنون از راهنماییت دوست خوبم
حالا سعی خودمو می کنم تا بتونم درستش کنم
اگه درست شد کدشو می زارم اینجا واسه استفاده دوستان