تجزیه عدد به عامل های اول

raha1312

عضو جدید
سلام برای نوشتن برنامه تجزیه یک عدد به عاملهای اول کمک میخواستم،
مثلا عدد 12 را به آن میدهیم و عبارت زیر را نشان دهد:
2^2*3
در قسمت برنامه های نوشته شده به زبان اسمبلی نتوانستم این برنامه را پیدا کنم.
مرسی
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
قرار نیست که همه چی اونجا پیدا بشه!!!
حالا راهنمایی می خواید یا مثل سایرین برنامه ی حاضر و آماده!
 

raha1312

عضو جدید
من جدیدا وارد این فروم شدم و آشنایی زیادی نداشتم باهاش

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

Sarp

مدیر بازنشسته
من جدیدا وارد این فروم شدم و آشنایی زیادی نداشتم باهاش

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

sayyad84

متخصص زبان Assembly
کاربر ممتاز
من جدیدا وارد این فروم شدم و آشنایی زیادی نداشتم باهاش

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

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

raha1312

عضو جدید
ممنون واقعا،خیلی کمکم کرد،فقط نمیدونم دارم درست پیش میرم یا نه،تا الان اینا رو نوشتم:
.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

متخصص زبان Assembly
کاربر ممتاز
با سلام،
خواهش می کنم!
ولی این کدی که نوشتید رو با چی اسمبل می کنید؟ من این دستورات رو ندیده بودم تا حالا!
 

behnam5670

عضو جدید
کاربر ممتاز
راستی اینجا با کدوم زبون می نویسن؟
ما 68000 موتورلا خوندیم
 

raha1312

عضو جدید
برای اینکه بتونیم ورودی یه عدد 19 رقمی در مبنای 10 بگیریم چیکار باید کنیم؟

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

behnam5670

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

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

sayyad84

متخصص زبان Assembly
کاربر ممتاز
دستوراتی که نوشتید مربوط به یه پردازنده ی دیگه اس و اون نرم افزار هم یه شبیه سازه! من دستوراتش رو بلد نیستم، بنابراین نمی تونم خیلی کمکتون کنم! تنها کاری که می تونم بکنم اینه که کد برنامه رو به زبان C براتون بذارم. امیدوارم کمکتون کنه!
کد:
[LEFT]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;
}[/LEFT]
 
[LEFT]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;
}[/LEFT]
یه چیز دیگه! فکر کنم برنامه تون کامل نیست چون خیلی کوتاهه!!! مگر اینکه این دستورات خارق العاده باشن!
اگه بتونید برنامه تون رو بخش بخش توضیح بدید شاید بشه یه کارایی کرد!
 
آخرین ویرایش:

sayyad84

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

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

sayyad84

متخصص زبان Assembly
کاربر ممتاز
برای اینکه بتونیم ورودی یه عدد 19 رقمی در مبنای 10 بگیریم چیکار باید کنیم؟

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

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

raha1312

عضو جدید
دستوراتی که نوشتید مربوط به یه پردازنده ی دیگه اس و اون نرم افزار هم یه شبیه سازه! من دستوراتش رو بلد نیستم، بنابراین نمی تونم خیلی کمکتون کنم! تنها کاری که می تونم بکنم اینه که کد برنامه رو به زبان C براتون بذارم. امیدوارم کمکتون کنه!
کد:
[LEFT]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;
}[/LEFT]
 
[LEFT]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;
}[/LEFT]
یه چیز دیگه! فکر کنم برنامه تون کامل نیست چون خیلی کوتاهه!!! مگر اینکه این دستورات فوق العاده باشن!
اگه بتونید برنامه تون رو بخش بخش توضیح بدید شاید بشه یه کارایی کرد!


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

Similar threads

بالا