PDA

View Full Version : سوال: نحوه نوشتن فرمول قابل تغییر



ji ming u
پنج شنبه 04 مرداد 1397, 12:11 عصر
با سلام خدمت دوستان
من یک فرمول راجب نحوه محاسبه عیار چغندر دارم این فرمول هر سال تغییر میکنه
چجوری چجوری فرمولی بنویسم که کاربر خودش فرمول را تعریف کند و سیستم اون فرمول را فراخوانی نماید

shahryari
پنج شنبه 04 مرداد 1397, 13:02 عصر
سلام
خود فرمول تغیر میکنه؟ یا اعداد و ضرایبش؟

Arioun
پنج شنبه 04 مرداد 1397, 16:23 عصر
سلام.
طبق چیزی که من توی مقالات متعدد دیدم، در هر زمان‌ معین معمولا سه فرمول دارید(اگه اشتباه گفتم لطفا اصلاح کنید). یکی برای عیار ده تا پانزده (شامل خود پانزده نیست)، یکی دیگه برای عیار پانزده تا بیست و آخری برای عیار 20 و بالاتر از 20.
اگر عیار رو با متغیر c نشون بدیم و قیمت پایه رو با b، به ترتیب خواهیم داشت:
(((c * p1) - p2) / p3) * b)))
((c * p1) + p2) * b))
(p1 * b)
توجه: pxها عددهای ثابت هر فرمول هستند که گویا سالانه (یا طی دوره مشخصی) اپدیت میشن.
خب، قیمت پایه که مسلما تغییر می‌کنه. یا خود کاربر می‌تونه دستی وارد کنه (بصورت متغیر‌ ورودی تعریف بشه) یا از طریق یه رابط web اپدیت میشه که البته نیاز به اتصال دائم به اینترنت داره.
pxها هم چنانچه تغییر می‌کنن، از همین روش‌ها میتونن اپدیت بشن.
عیار هم که مشخصا در هر بار متفاوته و باید جزو متغیرهایی باشه که کاربر میده به برنامه (ورودی).
شما بالاخره باید سه فرمول بالا رو تعریف کنید. چون که مثلا عیار 20 و بالاتر فقط باید با فرمول سوم بدست بیاد (که البته عیار شاملش نیست. از بیست به بالا در یک ثابت خاص ضرب میشه و عیار تاثیر مستقیم نداره).
حالا چی تغییر می‌کنه؟
اگر pxها یا b مد نظر شماست، نیازی به تعریف مجدد فرمول نیست. فقط مقادیر اپدیت خواهند شد.
ولی اگر ساختار این فرمول‌ها هم قراره تغییر کنه (مثلا خود عیار هم در سومی وارد بشه)،‌ اونوقت میشه در GUI برنامه چند ورودی اختصاصی تعبیه کنید که چیدمانش در اصل برای طولانی‌ترین فرموله. با همون تعداد پرانتز و بلاک. حالا اگر کسی بخواد اون فرمول سوم رو در این قالب طولانی جا بده، کافیه که یه دونه از پرانتزها رو تکمیل کنه (هر متغیر یا ثابت یه دونه text input داره) و بقیه رو در حالت پیشفرض رها کنه. وقتی پرانتزهای بعدی (بلاک‌های مادر که داخلی‌ترین بلاک رو احاطه کردن) در حالت پیشفرص رها بشن، باید صرفا عملیات «ضربدر یک» انجام بشه تا فرمول بشه همونی که ازش انتظار میره:

(((p1 * b) *1 ) *1) =
(p1 * b)

برای انتخاب اعمال ریاضی یا اعدادی که حدودشون مشخصه (مثل عیار) می‌تونید از listهای بازشو استفاده کنید که از تداخل encoding سیستم کاربر با encoding بکار رفته توی برنامه جلوگیری بشه‌. سایر اعداد هم که integer هستن.
امیدوارم توضیحاتم مفهوم بوده باشه.

ji ming u
پنج شنبه 04 مرداد 1397, 16:45 عصر
سلام
خود فرمول تغیر میکنه؟ یا اعداد و ضرایبش؟
هم ممکنه خود فرمول تغییر هم ضریب
ممکنه هر حالتی پیش بیاد

Mahmoud Zaad
جمعه 05 مرداد 1397, 17:00 عصر
سلام
شما یه نمونه از فرمول و مواردی که تغییر میکنن یا ثابتن و کلاً یه مثال بزنید تا بشه راهنمایی کرد.

ji ming u
چهارشنبه 10 مرداد 1397, 19:39 عصر
سلام
شما یه نمونه از فرمول و مواردی که تغییر میکنن یا ثابتن و کلاً یه مثال بزنید تا بشه راهنمایی کرد.
فرض کن میخاهیم یه فرمول جدید بنویسیم

محمد آشتیانی
پنج شنبه 11 مرداد 1397, 09:51 صبح
سلام
شما اعدادت رو در فرمول جایگذاری کن و نهایتا یک فرمول در قالب String رو با استفاده از دیتاتیبل محاسبه کن.
روش جایگذاری و تعریف فرمول به عهده خودتون که خیلی هم سادست.

من یک مثال خیلی کوچیک میزنم تا منظورم واضح بشه

var a = 2;
var b = 7;
var c = 0.5;


var dt = new DataTable();
var result = dt.Compute($"({a} * {b}) - {c}", null);