ورود

View Full Version : ضرب و تقسیم دو عدد اعشاری در مبنای n (چگونه؟؟؟))



اباقاسم
چهارشنبه 29 فروردین 1397, 02:15 صبح
سلام
من نیاز به برنامه ای دارم که دو عدد اعشاری رو دریافت میکنه در مبنای n (مثلا مبنای 70) و بعد چهار عمل اصلی رو، روی دو عدد اعمال میکنه و نتیجه رو میده.
اونچه که به ذهن بنده رسید این هست که این برنامه به دو شکل قابل پیاده سازی هست.
شکل اول اینه که ابتدا اعداد رو به مبنای ده ببرم و محاسبه انجام بشه و مجدد به مبنای n تبدیل بشه.
شکل دوم اینه که بدون تغییر مبنا برنامه عملیات رو انجام بده.

در دو شکل پیاده سازی جمع و تفریق کار سختی نیست و من تونستم کد رو بنویسمز

مشكل اصلي بنده در پیاده سازی ضرب و تقسیم هست در دو شکل خصوصا شکل دوم.

آیا در متلب امکانش هست بشه دو عدد اعشاری در مبنای n رو در هم ضرب یا تقسیم کرد یا نه؟؟
ممنون میشم راهنمایی بکنید.

mb1372
چهارشنبه 29 فروردین 1397, 11:36 صبح
سلام

تا جایی که میدونم، عملیات اصلی توی متلب در مبنای 10 انجام میشه. البته الزامی برای استفاده از روش دوم وجود نداره و خروجی هر دو روش یکی هست. اگه نیاز دارید تا این عملیات رو در مبنای دیگه (و الزاماً با روش دوم) انجام بدید، باید خودتون کدش رو بنویسید.

نکته دیگه اینکه با توابع آماده‌ی متلب فقط میتونید تبدیل مبنا رو در مبناهای 2 تا 36 انجام بدید. اگه نیاز به مبنای بالاتر از 36 دارین، نیاز به کدنویسی دارید.

اباقاسم
پنج شنبه 30 فروردین 1397, 22:38 عصر
با سلام خدمت mb1372

علت اینکه میخوام محاسبه بدون تغییر مبنا انجام بشه این هست که در صورت تغییر مبنا به ده محاسبه تقریبی انجام میشه برای همین خطا رخ میده و من میخوام محاسبه کاملا دقیق انجام بشه.
من تست کردم در صورتی که ابتدا به مبنای 10 ببرم و بعد محاسبه انجام بدم و به مبنا دلخواه مجددا تبدیل کنم، تا چند رقم اول اعشار محاسبات صحیح انجام میشه اما از یه جا به بعد محاسبات غلط انجام میشه.مثلا:
این عدد در مبنای 70 رو در نظر بگیرید:
123.456 سه رقم اعشار به ترتیب ضرب می شوند در:
70 به توان -1
70 به توان -2
70 به توان -3

و چون محاسبه تقریبی انجام میشه نه دقیق عدد به دست آمده دهدهی با عدد اصلی متفاوت خواهد بود و اگر دو عدد رو به این شکل بخوام ضرب کنم مقدار خطا بیشتر میشه.

شما راه حلی پیشنهاد نمیکنید که از اون طریق بشه ضرب و تقسیم عادی رو که روی برگه انجام میشه رو پیاده سازی کرد برای یک مبنا خاص؟ (یعنی همون روش دوم)
یا روشی که که تغییر مبنا به ده انجام بشه اما جلوی خطا گرفته بشه؟

mb1372
چهارشنبه 05 اردیبهشت 1397, 22:43 عصر
سلام مجدد

برای نوشتن کد، باید کار با رشته ها (متغیرهای متنی) رو خوب یاد بگیرید.

احتمالا اولین مشکلی که میخورید، پیدا کردن 70 کاراکتر متمایز برای نمایش اعداد باشه.

برای ضرب دو عدد در مبنای دیگه میتونید قدم به قدم همون عملیاتی رو که روی کاغذ انجام میدینو به صورت کد در بیارید.

پیشنهاد میکنم یک کد برای مبنای ساده تر بنویسید (مثلا مبنای 2) و گسترشش بدید به مبنای مورد نیازتون.

کد نویسی رو شروع کنین و مشکلتون رو دقیق تر بپرسید.