2013-10-26 46 views
0

我想提出一個工具,其中向用戶顯示整個過程中這個三角形:在本地批處理函數和平方根?

:draw 
echo ^|\ 
echo ^|a\ 
echo ^| \ 
echo ^| \ 
echo ^| \ C 
echo A^|  \ 
echo ^|  \ 
echo ^|  \ 
echo ^|c  b\ 
echo ^|---------\ 
echo  B 
GOTO:EOF 

凡任何字母,還存在變數。首先,用戶選擇他們擁有的角度值。然後他們選擇一個邊值。在那之後,所有的值都會被自動填充。在我的源代碼中,我只有sin(a)或類似的佔位符,直到我可以在本地批處理中找到trig函數(sin,cos,tan)和squareroot。

代碼:http://pastebin.com/bDfY84Vr

+0

那麼究竟什麼是你的問題? –

+0

有沒有人有我可以使用的腳本或函數,可以是正弦,餘弦,正切或平方根。批量。 –

回答

5

您可以使用一個表(陣列真的)映射的輸入值(度)成乘以一個共同因素值的罪,所以你可能會達到這樣的aritmethic操作中間結果。例如:

@echo off 
setlocal EnableDelayedExpansion 

call :DefineSinTable 

set st= 
For /L %%i in (1,1,52) do set st=#!st! 

For /L %%x in (0,4,90) do (
    set /a "int_sinx_result=(SIN[%%x]*52)>>16" 
    call set st_=%%st:~0,-!int_sinx_result!%% 
    echo/!st_! 
) 

For /L %%x in (90,-4,0) do ( 
    set /a "int_sinx_result=(SIN[%%x]*52)>>16" 
    call set st_=%%st:~0,-!int_sinx_result!%% 
    echo/!st_! 
) 
goto :EOF 


:DefineSinTable 

rem Definition of SIN table values (SIN(x)*65535) for 0-360 degrees 
rem Antonio Perez Ayala 

set Quad1=0 
for %%a in (1144 2287 3430 4572 5712 6850 7987 9121 10252 11380 12505 13626 14742 15855 16962 
      18064 19161 20252 21336 22415 23486 24550 25607 26656 27697 28729 29753 30767 31772 32768 
      33754 34729 35693 36647 37590 38521 39441 40348 41243 42126 42995 43852 44695 45525 46341 
      47143 47930 48703 49461 50203 50931 51643 52339 53020 53684 54332 54963 55578 56175 56756 
      57319 57865 58393 58903 59396 59870 60326 60764 61183 61584 61966 62328 62672 62997 63303 
      63589 63856 64104 64332 64540 64729 64898 65048 65177 65287 65376 65446 65496 65526 65535 
      ) do (
    set /A Quad1+=1, Quad2=180-Quad1, Quad3=180+Quad1, Quad4=360-Quad1 
    set SIN[!Quad1!]=%%a 
    set SIN[!Quad2!]=%%a 
    set SIN[!Quad3!]=-%%a 
    set SIN[!Quad4!]=-%%a 
) 
for %%a in (0 180 360) do set SIN[%%a]=0 
exit /B 

您可以用同樣的方法來得到任何其他函數的結果,或者您可以使用迭代方法來計算平方根。

編輯:添加了平方根函數。

@echo off 

:SquareRoot number 

set /A number=%1, last=2, sqrt=number/last 
:nextIter 
    set /A last=(last+sqrt)/2, sqrt=number/last 
if %sqrt% lss %last% goto nextIter 
echo %last% 

例如:

> SquareRoot.bat 214358881 
14641 

> SquareRoot.bat 14641 
121 

> SquareRoot.bat 121 
11 
+0

+1,很好! – Endoro