PDA

View Full Version : محاسبات سینوسی



mehdi_pink_63
سه شنبه 30 آذر 1389, 18:51 عصر
سلام من دارم برای یک میکرو برنامه آماده می کنیم نیاز دارم که سینوس یک عدد تولید شده را محاسبه کنم حالا نیاز به راهنمایی دارم ورودی هم باید به گرادیان تبدیل کنم تا بشه سینوسش را حساب کنم نمی دونم از کجا شوع کنم:متفکر:

xman_1365_x
سه شنبه 30 آذر 1389, 21:03 عصر
از جستجو در فروم! (قبلا جواب داده شده)

mehdi_pink_63
سه شنبه 30 آذر 1389, 22:35 عصر
غیر از روش تیلور چیزی پیدا نکردم:متفکر:

xman_1365_x
چهارشنبه 01 دی 1389, 19:38 عصر
خوب بيشتر بگرد تا پيدا كني
masm32 هم نصب كن بعد برو به مسير C:\masm32\fpulib
موفق باشي

mehdi_pink_63
پنج شنبه 02 دی 1389, 13:42 عصر
خیلی گشتم ولی چیزی پیدا نکردم به قول شاعر می گه گشتم نبود نگرد نیست:بامزه:

xman_1365_x
پنج شنبه 02 دی 1389, 14:29 عصر
توابع آماده masm هم ديدي؟ براي بيشتر كار هاي رياضي رو داره!
منجمله سينوس كه شما نياز داري

mehdi_pink_63
جمعه 03 دی 1389, 12:06 عصر
سلام من خودم دست به کار شدم والان قسمت دریافت رشته و تبدیل به عدد را نوشتم حالا مشکلم اینکه باید عدد را به گرادیان تبدیل کنم با فرمول x*p/180 اگر اشتباه نکرده باشم کسی می تونه این فرمول را دربرنامه زیر قرار بده آخه متن را درون یک پشته میریزه ممنون

datasg segment para 'code'
msg1 db 'Enter a number Sin:',"$"
msg2 db 'The result number is:',"$"
count db 0
sign dw ?
string db 6 dup(' '),"$"
sign1 db ?
strlist label byte ;start of parameter list
max db 20
len db ?
buffer db 20 dup(' ')
dolar db '$'
datasg ends

codesg segment para 'code'
main proc far
assume ds:datasg, cs:codesg
mov ax, datasg
mov ds, ax

mov ah, 6h ;clear screen
mov al, 25 ;number of rows
mov ch, 0
mov cl, 0
mov dh, 24 ;row
mov dl, 79 ;column
mov bh, 7 ;attribute
int 10h

mov ah, 2h ;cursor move
mov dh, 10 ;row
mov dl, 30 ;column
mov bh, 0 ;page number
int 10h

lea dx, msg1 ; print message
mov ah, 9h
int 21h

mov ah, 0ah ; read string
lea dx, strlist
int 21h

lea bx, buffer
while_blank: cmp byte ptr [bx], ' ' ; skip leading blank
jne end_while_blank ; exit while
inc bx
jmp while_blank
end_while_blank:
mov sign, 1 ;default sign multiplier
cmp byte ptr [bx], '+' ;leadin + ?
je skip_sign ;if so skip over
cmp byte ptr [bx], '-' ;leading - ?
jne save_sign ;if not save default +
mov sign, -1 ;-1 for minus sign
skip_sign: inc bx ;past sign

save_sign: mov ax, 0 ;number being accumulated
mov count, 0 ;count of digits so far
while_digit: cmp byte ptr [bx], '0' ;compare next car to '0'
jl end_while_digit ;if not a digit exit
cmp byte ptr [bx], '9' ;compare to '9'
jg end_while_digit ;not a digit if bigger than '9'
mov cx, 10 ;multiplier
mul cx ;multiply old number by 10
; jo overflow ;exit if product is too large
mov cl, [bx] ;mov ascii char to bl
and cx, 000fh ;convert to single digit integer
add ax, cx ;add to sum
; jc overflow ;exit if sum too large
inc count ;increment digit count
inc bx ;increment character pointer
jmp while_digit ;go next char
end_while_digit:
; cmp count, 0 ;no digit ?
; jz overflow ;if so, set overflow error flag
imul sign

;;;;;;;;;;;;;convert number in ax to string;;;;;;;;;;;;

lea bx, string
add bx, 5
mov sign, ' '
cmp ax, 0
jge setup ; skip if not negative
mov sign1, '-'
neg ax ; now ax > 0

setup: mov cx, 10 ; divisor
divloop: mov dx, 0 ; extend number to double word
div cx ; divide by 10
add dl, 30h ; convert
mov [bx], dl
dec bx
cmp ax, 0
jne divloop
mov cl, sign1 ; insert sign to string
mov [bx], cl
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Convert number to gradeints


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ah, 2h ;cursor move
mov dh, 12 ;row
mov dl, 30 ;column
mov bh, 0 ;page number
int 10h
; print result
lea dx, msg2 ;print the message
mov ah, 9h
int 21h

lea dx, string ;print the string number
mov ah, 9h
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h
int 21h
main endp
codesg ends
end main

xman_1365_x
جمعه 03 دی 1389, 16:02 عصر
اولا گرادیان يك چيز ديگست
http://fa.wikipedia.org/wiki/%DA%AF%D8%B1%D8%A7%D8%AF%DB%8C%D8%A7%D9%86
براي محاسبه راديان و درجه
http://fa.wikipedia.org/wiki/%D8%B1%D8%A7%D8%AF%DB%8C%D8%A7%D9%86
عدد پي
http://fa.wikipedia.org/wiki/%D8%B9%D8%AF%D8%AF_%D9%BE%DB%8C
كاري نداره كه بنويس مشكل فقط اينه داري از كد هاي 16 بيتي استفاده ميكني محاسبات اعشاري هست كمي ازيت ميشي،چون در اين نوع پردازنده ثباتي براي كار با اعداد اعشاري نداريم.
http://steve.hollasch.net/cgindex/coding/ieeefloat.html

mehdi_pink_63
جمعه 03 دی 1389, 17:44 عصر
با تشکر منظورم همون رادیان بود x*3.14/180 بله شما درست می فرمایید

xman_1365_x
جمعه 03 دی 1389, 21:23 عصر
در مورد تبدیل به نماد علمی اگه نمی دونی تحقیق کن تا بتونی ذخیره کنیش
موفق باشی