PDA

View Full Version : حرفه ای: برنامه ی ترکیب هوشمند چند ماده



h.soltani1333
جمعه 02 فروردین 1392, 11:29 صبح
به نام خدا
با سلام سال نو رو به تمام برنامه نویسای عزیز تبریک میگم.
اول بگم که خیلی دوست داشتم عنوان رو بنویسم حل یک الگوریتم پیچیده چون این برنامه هیچ چیز خاصی نداره فقط یک الگوریتم خیلی پیچیده(البته از نظر من)داره که به مشکل خوردم و هر چقدر جستجو کردم نتونستم جایی پیدا کنم و تصمیم گرفتم اینجا مطرح کنم این برنامه اول چند ماده رو از کاربر دریافت می کنه که شامل نام ماده،فورمول شیمیایی ماده،نام عنصر اول(مثلا S ) و مقدار عنصر اول(مثلا 18.4)،نام عنصر دوم(مثلا (Kو مقدار عنصر دوم(مثلا 44.9) بعد از این مرحله کاربر از عنصر هایی که به برنامه معرفی کرده(مثل KوS) چند مقدار را درخواست میکنه مثلا درخواست میکنه که s برابر بشه با 64 و k برابر بشه با 360 حالا برنامه باید آنالیز کنه که چه مقدار از هر ماده باید برداشته بشه تا به اعداد خواسته شده توسط کاربر برسیم و یک نکته هست که ممکنه دو ماده معرفی شده توسط کاربر هر دو از یک عنصر داشته باشند.
مثلا به صورت زیر میشه:
پوتاسیم سولفات (k2so4) K=44.9 و S=18.4
پوتاسیم نیترات (KNO3) K=38.7 و N = 13.8
سدیم سولفات(NA2SO4) S=22.6(فقط یک عنصر داره)
خواسته ها : N=200 و K=360 و S=64
از اینکه یک مقداری پیچیده و طولانی شد عذر خواهی می کنم اگه راه حلی داره ممنون میشم کمکم کنید.

با تشکر

veniz2008
جمعه 02 فروردین 1392, 11:46 صبح
سلام.
به برنامه نویس خوش اومدی دوست من.
آخ جان شیمی!
شما قاعدتا باید یک جدول داشته باشید (کد ماده، نام ماده، مقدار اولیه و مقدار موجود (در دسترس) ). زمانیکه از یک ماده به مقدار بیشتری نیاز دارید باید یه select به جدول بزنی و مقدار در دسترس از ماده رو بخونی و بعد چک کنی که ایا این مقدار مناسب با درخواست هست یا نه (ممکنه 300 گرم موجود باشه ولی درخواست 350 گرم باشه). اگر مقدار موجود کافی بود، مقدار درخواستی رو به مقدار فعلی اضافه می کنید و همچنین مقدار در دسترس رو هم آپدیت می کنید.
راستی این ماده چرا یک عنصر داره؟ اینکه 3 عنصر داره!( Na (با کد 11 )، گوگرد (با کد 16) و اکسیژن هم که فکر کنم 8 بود).

سدیم سولفات(NA2SO4) S=22.6(فقط یک عنصر داره)
اگر منظورت چیز دیگه ای هست بیشتر توضیح بده.

h.soltani1333
جمعه 02 فروردین 1392, 12:05 عصر
با تشکر از پاسختون
من خودمم درست نمی دونم ولی طبق یک جدولی که به من داده شده و مربوط به ترکیبات هوگلند هست فقط مقدار S داده شده.
اگر ممکنه در مورد مقدار در دسترس بیشتر توضیح بدید و اینکه خب وقتی که از یک ماده اضافه می کنیم یکی از عنصر های دیگه هم اضافه میشه که ممکنه به اون نیاز نباشه.
باز هم تشکر

veniz2008
جمعه 02 فروردین 1392, 12:37 عصر
چند تا نکته وجود داره :
1. در هر ترکیب شیمیایی مواد شرکت کننده در ترکیب به نسبت خاصی با هم ترکیب میشن. بنابراین هر عددی رو که کاربر درخواست میکنه لزوما نباید همون مقدار هم لحاظ بشه. (البته اگر قصد نوشتن یک برنامه استاندارد رو دارید).
2. منظور از مقدار اولیه و مقدار در دسترس به اینصورت هست که شما در ابتدا باید تمام موادی رو که در اختیار دارید در یک جدول ذخیره کنید. مثلا ممکنه 5 گرم فسفر داشته باشید. بار اول که در جدول ثبتش میکنید مقدار اولیه و مقدار در دسترس با هم یکسان هستن (چون هنوز ازش استفاده ای نکردید). حالا فرض کنید در H2PO3 (اسید فسفرو) مثلا 1 گرم از این ماده رو مصرف کنید. در اینصورت مقدار موجود از اون ماده باید اپدیت بشه و از 5 گرم به 4 گرم برسه. پس مقدار در دسترس به شما کمک میکنه تا بفهمید چه مقدار از یک ماده برای استفاده در دسترس شماست.
3. اگر فرض رو بر استاندارد بودن بگیریم باید هر ترکیب شیمیایی، نسبت ترکیب موادش مشخص باشه. پس برای هر ترکیب شیمیایی ( هر فرمول) مقدار استفاده هر ماده رو هم باید داشته باشید. برای اینکار نیاز به دو جدول دیگه دارید (کد ترکیب، فرمول شیمیایی، نام ترکیب شیمیایی) و جدول دوم که وابسته به جدول قبلی هست (کد ترکیب،کد ماده و مقدار مورد استفاده هر ماده در ترکیب شیمیایی). این دو جدول رو میشه با هم ادغام کرد و در یک جدول واحد آورد ولی افزونگی ایجاد میکنه پس بهتره که از هم جدا باشند.
حالا زمانیکه در یک ترکیب شیمیایی مقدار یک ماده عوض میشه(مثلا از 10 گرم میشه 15 گرم) باید نسبت بقیه مواد رو نسبت به این ماده بدست بیارید (با تقسیم مقدارهایی که در جدول برای هر ماده قرار دادید).
شما قصد داری به چه صورت پیاده سازی کنی؟. روش پیاده سازی شما باید مشخص باشه. شاید روش دیگه ای در نظر گرفته باشید.

h.soltani1333
جمعه 02 فروردین 1392, 13:08 عصر
دقیقا به همین روشی که شما در قسمت 2 گفتید می خوام پیاده سازی کنم.
مشکل من روی همین جمله هست که چطوری نسبت بقیه ی مواد رو نسبت به یک ماده به دست بیارم اگه میشه کمی در مورد جمله ی زیر توضیح بدید :
"حالا زمانیکه در یک ترکیب شیمیایی مقدار یک ماده عوض میشه(مثلا از 10 گرم میشه 15 گرم) باید نسبت بقیه مواد رو نسبت به این ماده بدست بیارید (با تقسیم مقدارهایی که در جدول برای هر ماده قرار دادید)."
با تشکر فراوان

veniz2008
جمعه 02 فروردین 1392, 13:26 عصر
بهترین راه مثال زدن هست و خوشبختانه منم عاشق مثال زدنم.
فرمول شیمیایی فرضی KLM رو در نظر بگبرید که در جدول ذکر شده اینطور ذخیره شده :
مقدارماده در ترکیب/ ماده شرکت کننده در ترکیب/ فرمول شیمیایی
20 / KLM /K
10/ KLM /L
5/ KLM /M
این یعنی مقدار ماده K ، دو برابر مقدار L (تقسیم K بر L ) و چهار برابر مقدار M هست (K/M).
وقتی شما در برنامه مقدار K رو تغییر میدید. خیلی راحت اول نسبت این ماده رو به بقیه مواد حساب می کنید و بعد حساب می کنید که ماده K چقدر تغییر کرده (مثلا بار اول K مقدارش 20 گرم بوده و L هم 10 گرم بوده و حالا K شده 30 گرم یعنی 1.5 برابر شده پس مقدار ماده L هم باید 1.5 برابر مقدار فعلیش بشه (یعنی 10 * 1.5 که میشه 15 گرم و طبق مقادیر ذخیره شده در جدول هم کاملا درسته). پس جدول به شما کمک میکنه که مقادیر وارد شده رو چک کنید که به نسبت تعیین شده وارد بشن.

h.soltani1333
جمعه 02 فروردین 1392, 13:49 عصر
مثالتون فوق العاده بود خیلی ممنون روی برنامه کار می کنم اگه باز مشکلی داشتم مزاحمتون میشم.
روزهاتون بهاری
خیلی ممنون