PDA

View Full Version : سوال: الگوریتم تقسیم



Arcsinos
پنج شنبه 19 فروردین 1389, 12:37 عصر
سلام دوستان
مگه ما نمیگیم کامپیوتر چهار تا عمل اصلیه And,If,Or,not داره
and: برای ضرب
or:جمع
not :منفی یا همون کم کردن
میخواستم ببینم کامپیوتر چه جوری با استفاده از این چهار عما عملیات تقسیم رو انجام میده ممنون .

aminfarajian
پنج شنبه 19 فروردین 1389, 13:16 عصر
سلام دوست عزیز.
کام‍پیوتر برای انجام تقسیم از روش تفریق های متوالی استفاده میکنه.
روش کار به صورت نرم افزاری این جوریه که وقتی میخوای عدد a رو بر b تقسیم کنی (a/b) یه شمارنده (مثلا i) در نظر میگیری، مقدار اولیه اون رو صفر میکنی، بعد تا زمانی که a از b برزگتره، b رو از a کم میکنی و یک واحد به شمارنده i اضافه میکنی. به این ترتیب در انتهای کار، i حاصل تقسیم رو نشون میده و مقدار نهایی a هم باقیمونده تقسیم رو مشخص میکنه.
الگوریتمش هم اینه:


int i=0;
while(a>=b)
{
a=a-b;
i++;
}
print("a/b=",i )
print("remainder is: ",a)

یه مثال:
تقسیم ۱۱ به ۳:
a=11
b=3
i=0
مرحله ۱
is a greater than b? (yes)
a=11-3=8
i=i+1=1

مرحله ۲
is a greater than b? (yes)
a=8-3=5
i=i+1=2

مرحله ۳
is a greater than b? (yes)
a=5-3=2
i=i+1=3
is a greater than b? (No)

پس عملیات تمومه و حاصل تقسیم میشه ۳ و باقیمانده هم برابره با ۲

برای ضرب یه ذره روش کار فرق میکنه. فکر کن ببین خودت میتونی یه راهی براش پیدا کنی؟ (راهنمایی: به جای اینکه از a کم کنی باید از b کم کنی)

به صورت سخت افزاری هم همین جوری عمل میشه. میان با استفاده از یه NOT Gate عدد b رو منفی میکنن. بعد با استفاده از یک جمع کننده یا Adder، اون رو با a جمع میکنن (که میشه همون تفریق) و کار رو انجام میدن.
امیدوارم که مطالب براتون مفید بوده باشه.

Arcsinos
پنج شنبه 19 فروردین 1389, 14:04 عصر
پاسخت برای تقسیم صحیح به صحیح کاملا درسته ولی اگه ما بخواهیم اعداد اعشاری رو بر هم تقسیم کنیم مثلا 3.5/2.5 جواب یه عدد اعشاریه و کوچکتر از یکه یعنی با الگوریتم شما جواب صفره ولی جواب باید بیاد 0.71428571428571428571428571428571 . این رو چه جوری میتونی الگوریتمشو بنویسیم .

SAASTN
پنج شنبه 19 فروردین 1389, 20:11 عصر
مگه ما نمیگیم کامپیوتر چهار تا عمل اصلیه And,If,Or,not داره
البته در alu های امروزی حتی برای انجام محاسباتی مثل لگاریتم طبیعی اعداد و محاسبه سینوس و کسینوس و ... هم مداراتی وجود داره و این اعمال هم بصورت سخت افزاری و در پائین ترین سطح انجام میشن. اما برای طراحی این مدارات از همین روشهایی که در بالا بیان شد استفاده می شه.