PDA

برای دیدن نسخه كامل اینجا را كلیك كنید : تجزیه عدد به عامل های اول



raha1312
2011/1/12, 02:14 PM
سلام برای نوشتن برنامه تجزیه یک عدد به عاملهای اول کمک میخواستم،
مثلا عدد 12 را به آن میدهیم و عبارت زیر را نشان دهد:
2^2*3
در قسمت برنامه های نوشته شده به زبان اسمبلی نتوانستم این برنامه را پیدا کنم.
مرسی

sayyad84
2011/1/13, 01:45 PM
با سلام،
قرار نیست که همه چی اونجا پیدا بشه!!!
حالا راهنمایی می خواید یا مثل سایرین برنامه ی حاضر و آماده!

raha1312
2011/1/14, 12:02 AM
من جدیدا وارد این فروم شدم و آشنایی زیادی نداشتم باهاش

تقریبا میدونم باید چیکار کرد اما اصلن نمیتونم بنویسمش

Sarp
2011/1/14, 12:50 AM
من جدیدا وارد این فروم شدم و آشنایی زیادی نداشتم باهاش

تقریبا میدونم باید چیکار کرد اما اصلن نمیتونم بنویسمش
شما هرچی بلدین بذارین اینجا تا جناب sayyad84 هم کمک کنه
حتی اگه به فارسی هم شده بنویس اینجا

sayyad84
2011/1/14, 09:50 AM
من جدیدا وارد این فروم شدم و آشنایی زیادی نداشتم باهاش

تقریبا میدونم باید چیکار کرد اما اصلن نمیتونم بنویسمش

با سلام،
باید بتونید رشته ی ورودی رو به عدد تبدیل کنید، زیربرنامه ای برای تشخیص اعداد اول داشته باشید، اعداد خروجی رو به رشته تبدیل و چاپ کنید!
الگوریتم: ساده ترین راه اینه که مقسوم علیه های عدد رو پیدا کنید. برای این کار از 2 شروع کنید اگه عدد بر 2 بخشپذیر بود 2 رو تو خونه ی اول آرایه ی "اول ها" بذارید و شمارنده ی آرایه رو زیاد کنید. حالا از 3 شروع کنید و 2 تا 2 تا پیش برید و بخشپذیری و اول بودن رو چک کنید و آرایه رو پر کنید. این بخش اول!
در بخش دوم هم باید از خونه ی اول آرایه ی "اول ها" شروع کنید. عدد رو باید تا جایی که بر این عدد اول بخشپذیر است تقسیم کنید و تعداد تقسیم ها رو در آرایه ی دیگری بنویسید. باقی مونده ی تقسیمات رو به همین ترتیب بر سایر "اول ها" تقسیم کنید.
در بخش سوم هم باید نتایج رو چاپ کنید. اعداد اول در آرایه ی "اول ها" و توان هاشون هم تو آرایه ی دومه!
من دوست دارم که برنامه نویسی رو یاد بگیرید و الا نوشتنش خیلی سخت نیست! سعی خودتون رو بکنید و سؤال هاتون رو بپرسید!

raha1312
2011/1/14, 04:39 PM
ممنون واقعا،خیلی کمکم کرد،فقط نمیدونم دارم درست پیش میرم یا نه،تا الان اینا رو نوشتم:

.data
Input: .asciiz "\n\n Please Input a Value:"
str: .space 32
.text
main: li $v0,4
la $a0,Input #print "Please Input a Value"
syscall
la $a0,str #reading & printing the string which includes the number
la $a1,32
li $v0,8
syscall
li $a1,2 #diving the number to 2
div $a0,$a1 #LO = $a0/$a1 , Hi = $a0 mod $a1
mfhi $s1 #s1=Hi
mflo $s2 #s2=Lo
beq $s1,$zero,yes1
bne $s1,$zero,No1
yes1: li $a2, 2 #putting 2 in an array which includes prime divisors
mov ST,OFFSET x
mov [ST],$a2
add ST,1
No1: li $a1,3 #diving the number to 3
Div $a0,$a1 #LO = $a0/$a1 , Hi = $a0 mod $a1
Mfhi $s1 # s1=Hi
Mflo $s3 #s3=Lo
Beq $s1,$zero,yes2
yes2: li $a2, 3 #putting 3 in an array which includes prime divisors
mov [ST + 2],$a2
add ST,1


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

sayyad84
2011/1/14, 07:04 PM
با سلام،
خواهش می کنم!
ولی این کدی که نوشتید رو با چی اسمبل می کنید؟ من این دستورات رو ندیده بودم تا حالا!

behnam5670
2011/1/14, 07:09 PM
راستی اینجا با کدوم زبون می نویسن؟
ما 68000 موتورلا خوندیم

sayyad84
2011/1/14, 07:12 PM
راستی اینجا با کدوم زبون می نویسن؟
ما 68000 موتورلا خوندیم

با سلام،
همش که اسمبلیه! اما قابل استفاده در پردازنده های اینتل 8086 به بعد!

raha1312
2011/1/14, 07:16 PM
با سلام،
خواهش می کنم!
ولی این کدی که نوشتید رو با چی اسمبل می کنید؟ من این دستورات رو ندیده بودم تا حالا!

ba pcspim

raha1312
2011/1/14, 07:25 PM
برای اینکه بتونیم ورودی یه عدد 19 رقمی در مبنای 10 بگیریم چیکار باید کنیم؟

آقای sayyad84 خواهش میکنم کمکم کنید من خیلی به کمکتون احتیاج دارم

behnam5670
2011/1/14, 07:25 PM
با سلام،
همش که اسمبلیه! اما قابل استفاده در پردازنده های اینتل 8086 به بعد!

ببخشید همش که اسمبلی هست رو متوجه نشدم؛ دستورای موتورلا خوب فرق دارن با اینتل؛ آها پس فقط اینتل... ولی دستورای موتورلا اسمبلی تره :D آدم بیشتر طرز کار برنامه ها رو یاد می گیره

sayyad84
2011/1/14, 08:05 PM
دستوراتی که نوشتید مربوط به یه پردازنده ی دیگه اس و اون نرم افزار هم یه شبیه سازه! من دستوراتش رو بلد نیستم، بنابراین نمی تونم خیلی کمکتون کنم! تنها کاری که می تونم بکنم اینه که کد برنامه رو به زبان C براتون بذارم. امیدوارم کمکتون کنه!



int primes[10],pow[10];
int no,i,j,k,count;
i=0;
if((no%2)==0)
primes[i++]=2;
j=3;
while(j<=no/2)
{
if(((no%j)==0) && (isPrime(j)))
primes[i++]=j;
j=j+2;
}


k=0;
while(k<i)
{
count=0;
while((no%primes[k])==0)
{
count++;
no=no/primes[k];
}
pow[k++]=count;
}
isPrime(int n)
{
int i;
if((n%2)==0)
return 0;
i=3;
while(i<=n/2)
{
if((n%i)==0)
return 0;
i=i+2;
}
return 1;
}

یه چیز دیگه! فکر کنم برنامه تون کامل نیست چون خیلی کوتاهه!!! مگر اینکه این دستورات خارق العاده باشن!
اگه بتونید برنامه تون رو بخش بخش توضیح بدید شاید بشه یه کارایی کرد!

sayyad84
2011/1/14, 08:09 PM
ببخشید همش که اسمبلی هست رو متوجه نشدم؛ دستورای موتورلا خوب فرق دارن با اینتل؛ آها پس فقط اینتل... ولی دستورای موتورلا اسمبلی تره :D آدم بیشتر طرز کار برنامه ها رو یاد می گیره

دستوراتشون فرق داره ولی همه تحت عنوان اسمبلی هستن دیگه!

sayyad84
2011/1/14, 08:19 PM
برای اینکه بتونیم ورودی یه عدد 19 رقمی در مبنای 10 بگیریم چیکار باید کنیم؟

آقای sayyad84 خواهش میکنم کمکم کنید من خیلی به کمکتون احتیاج دارم

نوع داده ای بتونه این عدد رو ذخیره کنه فکر نمی کنم باشه! پس باید از یه آرایه استفاده کنید که هر رقم این عدد تو یکی از خونه هاش قرار می گیره!

raha1312
2011/1/14, 09:23 PM
دستوراتی که نوشتید مربوط به یه پردازنده ی دیگه اس و اون نرم افزار هم یه شبیه سازه! من دستوراتش رو بلد نیستم، بنابراین نمی تونم خیلی کمکتون کنم! تنها کاری که می تونم بکنم اینه که کد برنامه رو به زبان C براتون بذارم. امیدوارم کمکتون کنه!



int primes[10],pow[10];
int no,i,j,k,count;
i=0;
if((no%2)==0)
primes[i++]=2;
j=3;
while(j<=no/2)
{
if(((no%j)==0) && (isPrime(j)))
primes[i++]=j;
j=j+2;
}


k=0;
while(k<i)
{
count=0;
while((no%primes[k])==0)
{
count++;
no=no/primes[k];
}
pow[k++]=count;
}
isPrime(int n)
{
int i;
if((n%2)==0)
return 0;
i=3;
while(i<=n/2)
{
if((n%i)==0)
return 0;
i=i+2;
}
return 1;
}

یه چیز دیگه! فکر کنم برنامه تون کامل نیست چون خیلی کوتاهه!!! مگر اینکه این دستورات فوق العاده باشن!
اگه بتونید برنامه تون رو بخش بخش توضیح بدید شاید بشه یه کارایی کرد!


نه،کامل نیست.
مرسی