PDA

View Full Version : جذر يك عدد



linelove666
چهارشنبه 02 تیر 1389, 12:03 عصر
سلام به دوستان برنامه اي ميخام كه جزر يك عدد رو بده..
قسمت اعشاريش نباشه مهم نيست...
ممنون...

tdkhakpur
چهارشنبه 02 تیر 1389, 13:56 عصر
در مودرش چقدر فکر کردید و الان تا چه حد درباره اش میدانید؟

linelove666
چهارشنبه 02 تیر 1389, 15:34 عصر
من يك الگوريتم طولاني در موردش پيدا كردم ولي نمي دونم ميشه تو اسمبلي نوشت يا نه!!!؟
مثلا اگه بخواد جزر 53 رو حساب بكنه: 1*1=1 و 2*2=4 و 3*3=9 و .... رو حساب بكنه تا وقتي به 8*8=64 برسه چون 64 بزرگتر از 53 هستش در اين صورت 1 واحد از 53 كم كنه و همين رويه در مورد 52 ادامه پيدا كنه تا عدد53 تبديل بشه به 49. اونوقت وقتي به 7*7=49 برسه عدد 7 رو برگردوونه. اين برنامه ميتونه جزر هر عددي رو بدون اعشارش بدست بياره. البته با كمي تغيير ميتونه اعشارو بده....
حالا اگه كسي ميتونه تو اسبلي پيادش كنه... ممنون ميشم

tdkhakpur
چهارشنبه 02 تیر 1389, 18:02 عصر
راههای زیادی در این مورد موجود هست و روش شما هم نتیجه خواهد داد ولی اگر مسئله سرعت در میان باشد الگوریتم شما کمترین سرعت را دارد بهترین راه استفاده از shr برای این کار هست یعنی عدد را به راست شیفت داده و نتیجه را در خودش ضرب و با عدد برسی شود کد زیر نحوه پیاده سازی این الگوریتم هست.


.model small
.stack
.data
.code
org 100h
start:
jmp begin
num dw 53
Jazr_Num dw 0
str db 20 dup(?)
begin proc near
push cs
pop ds
;--------------------------------------------------
CLRSCR 15, 0
mov bx, num
l1:;------------------------;
shr bx,1 ;
mov Jazr_Num, bx ;
;
mov dx,0 ;
mov ax,bx ;
mul ax ;
;
cmp ax,num ;
jg l1 ;--------------------;
je exit
l2: ;-----------------------;
mov dx,0 ;
mov ax,bx ;
mul ax ;
;
cmp ax,num ;
jl l4 ;
jg l3 ;
mov Jazr_Num, bx ;
l3:
jmp exit
l4:
mov Jazr_Num, bx ;
inc bx ;
jmp l2 ;-------------------;
exit:
;--------------------------------------------------
int 20h
begin endp
end start


نتیجه داخل Jazr_Num قرار خواهد گرفت

linelove666
پنج شنبه 03 تیر 1389, 11:42 صبح
آره دوست عزيز درسته پيچيدگي زمانيش بالاست ولي جزر هر عددي رو كه بهش بدي حساب ميكنه...
اگه امكانش باشه كه تو اسمبلي پياده بشه خوبه...
كسي باشه اين كارو بكنه ممنون ميشم...

linelove666
یک شنبه 06 تیر 1389, 11:28 صبح
اينم يك برناهم ديگه اما من تو تريس كردنش مشكل دارم. نميدونم درست كار ميكنه با نه؟!!!؟
لطفا مشاهده كنيد...
الگوريتم به زبان ساده تر
X=عددي را كه ميخواهيم جزرش را محاسبه كنيم
r=1
for i=1 to 100
r=(r+(x/r))/2


به زبان اسبلي
mov ax,1
mov bx,0
next: cmp ax,num
jg next3
inc bx
mov cx,n ; n forjeh
mov ax,1
next2: mul bx
loop next2
jmp next
next3 dec bx