Автор
Сообщение
19 августа 2018 09:04
<title id="tit"></title>
<input id="inp" style="width:400;font-size:30" onKeyUp="F()"><p>
<code id="res" style="font-size:30"></code><p>
<code id="more"></code>
<script>
var g=[],gc,s=inp.value,type,k,i; var rad=90/Math.asin(1),pi=360/rad/2; var
pp=String.fromCharCode(13);
function T(ch){var e, l,ll, m1="qwertyuiopasdfghjklzxcvbnm", m2="+-*/()", m3=
["sin","cos","tan","asin","acos","atan","pi"];
if(ch*1==ch || ch=="."){e=1};
ll=0; for(l=0;l<m1.length;l++){if(ch==m1[l]){ll=1};}; if(ll==1){e=2};
ll=0; for(l=0;l<m2.length;l++){if(ch==m2[l]){ll=1};}; if(ll==1){e=3};
ll=0; for(l=0;l<m3.length;l++){if(ch==m3[l]){ll=1};}; if(ll==1){e=4};
return e;};function H(){var b=-1,bb,jj=0,n,u=[];
for(gc=0;gc<g.length;gc++){if(g[gc]=="("){ if(T(g[gc+1])==1 || T(g[gc+1])==4){b=gc; };};};
if(b>=0){for(gc=b;gc<g.length;gc++){if(g[gc]==")"){bb=gc; gc=g.length;};};
for(n=b+1;n<bb;n++){u[jj]=g[n]; jj++}; n--; more.innerText=more.innerText+u;};
if(b==-1){u=g; more.innerText=more.innerText+u;};
for(gc=0;gc<u.length;gc++){
if(u[gc]=="sin" && T(u[gc+1])==1){u[gc]=Math.sin(u[gc+1]/rad); u.splice(gc+1,1); gc--};
if(u[gc]=="cos" && T(u[gc+1])==1){u[gc]=Math.cos(u[gc+1]/rad); u.splice(gc+1,1); gc--};
if(u[gc]=="tan" && T(u[gc+1])==1){u[gc]=Math.tan(u[gc+1]/rad); u.splice(gc+1,1); gc--};
if(u[gc]=="asin" && T(u[gc+1])==1){u[gc]=(Math.asin(u[gc+1])*rad); u.splice(gc+1,1); gc--};
if(u[gc]=="acos" && T(u[gc+1])==1){u[gc]=(Math.acos(u[gc+1])*rad); u.splice(gc+1,1); gc--};
if(u[gc]=="atan" && T(u[gc+1])==1){u[gc]=(Math.atan(u[gc+1])*rad); u.splice(gc+1,1); gc--};};
for(gc=0;gc<u.length;gc++){
if(T(u[gc])==1 && u[gc+1]=="**" && T(u[gc+2])==1){u[gc]=u[gc]**u[gc+2]; u.splice(gc+1,2); gc--};
if(T(u[gc])==1 && u[gc+1]=="ссылка && T(u[gc+2])==1){u[gc]=u[gc]**(1/u[gc+2]); u.splice(gc+1,2);
gc--}};
for(gc=0;gc<u.length;gc++){
if(T(u[gc])==1 && u[gc+1]=="*" && T(u[gc+2])==1){u[gc]=u[gc]*u[gc+2]; u.splice(gc+1,2); gc--};
if(T(u[gc])==1 && u[gc+1]=="/" && T(u[gc+2])==1){u[gc]=u[gc]/u[gc+2]; u.splice(gc+1,2); gc--}};
for(gc=0;gc<u.length;gc++){if(T(u[gc])==1 && u[gc+1]=="+" && T(u[gc+2])==1){u[gc]=u[gc]*1+u[gc+2]*1; u.splice(gc+1,2);gc--};
if(T(u[gc])==1 && u[gc+1]*1<0){u[gc]=u[gc]*1+u[gc+1]; u.splice(gc+1,1); gc--};
if(u[gc]<0 && T(u[gc+1])==1){u[gc]=u[gc]*1+u[gc+1]; u.splice(gc+1,1); gc--};
if(T(u[gc])==1 && u[gc+1]=="-" && T(u[gc+2])==1){u[gc]=u[gc]*1-u[gc+2]*1; u.splice(gc+1,2); gc--};
};if(u.length==1){if(b>=0 && bb>b){more.innerText=more.innerText+" = "+u+pp; g[b]=u[0]; g.splice(b+1,bb-b);};
res.innerText=g;};if(b==-1){more.innerText=more.innerText+" = "+u;};};
function F(){s=inp.value; more.innerText=""; res.innerText="";
if(s.length>0){g.splice(0,g.length-1);type=-1; gc=-1;for(i=0;i<s.length;i++){k=T(s[i]);
if(k*1==k){if(type!=k || type==3){type=k; gc++; g[gc]=""; g[gc]=s[i];}else{g[gc]=g[gc]+s[i];};
};};
for(gc=0;gc<g.length;gc++){if(g[gc]=="-" && T(g[gc+1])==1){g[gc]=0-g[gc+1]; g.splice(gc+1,1)}};
for(gc=0;gc<g.length;gc++){if(g[gc]=="*" && g[gc+1]=="*"){g[gc]="**"; g.splice(gc+1,1)}};
for(gc=0;gc<g.length;gc++){if(g[gc]=="/" && g[gc+1]=="/"){g[gc]="ссылка g.splice(gc+1,1)}};
for(gc=0;gc<g.length;gc++){if(g[gc]=="pi"){g[gc]=pi;}};
var cc; for(cc=0;cc<10;cc++){H(); if(g.length==1){cc=10}};
};};res.innerText=g;</script>
0 +0 -0
19 августа 2018 09:12
можно полностью задать функцию в строчку, использовать скобки, вложенные скобки
операторы:
sin cos tan asin acos atan pi * / + - ** //
например sin30 или sin(30) - без разницы
возвести в любую степень: 3**5
взять корень любой степени: 3// 7
синтаксис схож с javascript
0 +0 -0
19 августа 2018 09:17
например, посчитать сопротивление резисторов при параллельном соединении:
1/(1/200+1/500+1/1000) =125
площадь круга:
pi*10**2 =314.1592653589793
2 в квадрате в квадрате в квадрате в квадрате:
2**2**2**2**2 =65536
корень 12 степени из 2:
2// 12 =1.0594630943592953
(sin30+cos60)+(atan1)*8 =361
(((((sin90)*2)*3)*5)*6)**2 =32400
0 +0 -0
19 августа 2018 09:30
Блинская фигня: слово "ссылка" заменить на
// ";
и пробел после косых убрать
0 +0 -0
наверх