From fb69aebb2dace8b09b0baac95490836deb227b0d Mon Sep 17 00:00:00 2001 From: MightyPork Date: Sun, 29 Sep 2013 22:06:29 +0200 Subject: [PATCH] Some refactoring, improved help --- .~lock.rcalc-doc.odt# | 1 + rcalc-doc.odt | Bin 15366 -> 15320 bytes .../CalculatorBatch.java | 4 +-- .../CalculatorInteractive.java | 20 +++++++++---- .../{semestralka => calculator}/Main.java | 2 +- .../{semestralka => calculator}/Tests.java | 28 +++++++++--------- src/net/mightypork/rcalc/Tokenizer.java | 5 ++-- .../mightypork/rcalc/numbers/Fraction.java | 27 ++++++++++++----- 8 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 .~lock.rcalc-doc.odt# rename src/net/mightypork/{semestralka => calculator}/CalculatorBatch.java (97%) rename src/net/mightypork/{semestralka => calculator}/CalculatorInteractive.java (93%) rename src/net/mightypork/{semestralka => calculator}/Main.java (93%) rename src/net/mightypork/{semestralka => calculator}/Tests.java (63%) diff --git a/.~lock.rcalc-doc.odt# b/.~lock.rcalc-doc.odt# new file mode 100644 index 0000000..7f0f6da --- /dev/null +++ b/.~lock.rcalc-doc.odt# @@ -0,0 +1 @@ +,ondra,Penguin,29.09.2013 21:06,file:///home/ondra/.config/libreoffice/4; \ No newline at end of file diff --git a/rcalc-doc.odt b/rcalc-doc.odt index 55ee14af719ce1dcc104b36b4ceea0f43e96519d..a8bfb43796730ac1312bc530b89b737327f3fdd3 100644 GIT binary patch delta 13337 zcmZ8|18`u?(sr_OHnweNV{f#vZEb8jC${ZmlZ~~pZQHhO|NGwW-v7f?SIwNBuIW=V zRWn^r_Y>^4s82QLZsPp63sj7MiMp#?p9!-|-G{SYQ=fF^ZT zaAsDaWz&hlTNUO7WB+C%zS#l!MTSB{*|4{Lv-xldGkj1rGye;Y@gk!T@E|4KJ+XY;|*egr{lhe%3|mcGO8K=2*iB9g2%Y z?XX!TkZEDP;c`9wnheSWC(Io?*8)o{f_{WlZ-KbB0;)-J2EV_oiFXIc{ z(pl;62ZQUdvvt<8w`Q@;s{@{4AWO$4)biI8sl|L!s8`qIJ$7ZHf}pj|^KV4i_f!PL z8dfXDenh#IyQ0Hc_85ki$%@)4Nw-+yrLGXh_DW;_Ns7;d@!Q3ix?5tS!}`#|mctND zfV}5n;Bx2BX-P4z?mF7J0qd)}HRF&~1(z<@20;qs@MKmucQYD?-F81SbfB6IzDQ$4 zPvAbh*tyE019GN~Jj#G?4TxIK*QQ6yWB^oN3JThXEv8@`6a-`m3++awJGE zihc`sp)I+KK^BFLwrwKe6yMNG3-ytU3m-DD0+!kryxyH=xut-ra(Ak1o3?@l`&wnq z3e`*1dRHpU0?GVos^!*JF>kb6JNweIyW_=5r0f1TcVeALXI1)?(}FwT(y(<%?N^CM zg$|y}s;!PK{%?Rm7(Om+y#Jv_V+7V6a$-7;#I>oL20@}Va#$*5*#Ye8r*CMW<;0wkDlY!Z zuEnf-2Xqq4e^wgg1$;0~=9|^q4Zb^^(Km7K16anh{GKY)$QoDieGiSq!mSRgw zH?MM$;tzf_mUY1j=8+m5OJz$g%U4Q6R&uG=<^~ZBxJXE=fUpY^Ig)C<8Ld-@Evotr zK`(AC8Nz{rL9eKrp_NfCqggf7tu0Gvk9dYXb&rAm#U+Qc2aL)ZLLv*^Ea};=VL#K0 zpKaBXKmgqnm%M9FJSK0aO9)?G_$9cfbJZZup$N~y6#T-jE0v6puh+>rZ@AcHc7z{F zc@=Y(m#19F&Z%a#XP~@bpB&%>#UW(re#S|+ViqDU^@5kkjzTAmPrff&c}|?0aAsO3 z%yXlj6et5cWUASCRwbjooWc5NFWhm1kIG#EGC&D+h79Wfsq(LqKer(h1mkE69(`$u zQhT6hy=z?Tw>sUiPz;Xc8R8Q6uA{6O3JNaF;i;T?8InbP5Nv{ui2MBG*%d_GXxBvq zu;(P6~zQUv(TmkT= z6La|DO86!-vgGlyg3*yMDTzlZA~Qp%VD`_iQ_O}BU4OKz7I4&_;gkj+5(&HqK#G>U zh6YOL!7WA`2hR`DsFdMnZn-GG5e z$e4YhY(0?PdX-Xo5Bd(%E>B~f{t6_by!4o}gk>sWf~X#0)v;h5K~sI_$3ys(wN%#m5+B?R`g{Vm*jmb%XeZW&0Cm=w3N<~e360=x<2{QhoznBsLhr8hw}he z2-4gH|Byq@(stEAN7L+goXicQcpZa^9-PqrZ$wl}hrM38Sn;9Uy=Meag5lO8je+4$e zy(rZn zZSBQ7+3G`LhBejuKMt+8{oDy7vfO|;rWiHz8t|69yB#@0&eto*#j?il3jx2dKI%JgBp-I)AM zXDKLw3>y4bL5)-3pJ#zjF_v!+0t6(U;{QGi37*ijKs=RVLkGpe99gy%FDfO2mc8}< zw|Ve%lE9dOFYuCk)Pv1WtduF14P*I;41^EKG|&3s09ohHoJL#_P#@4(dSgZeiMAsj zft<&Dt>=@Nl#an*l5l)%UJGXz7cFV<*Zx0QxD4LJLm6;F>41AP!g!Pb; zL4)TH{r&wD{TtDd6DwKy`S}e#=`2?JP6jCMK>A3-N)KwC#@fZ1(+YM4BU;rc;WUN@ zEJ`P3-b(3qIHLv|LH7JZ==L(sygC@c`~$pJ%E zKz5R)_DfkJWQ!~=+NzaDJgo!yzu0;ng+>6D zNwHqF!g%zYfx-QyYOD\^}}%hsqe0KtG=9M_PTsXM{RD48$PkWR^$eq$<<5CVI- zP8V&>Ux6LbS2b4?k9zfRoa+xp>bSb}y}LcD#!NA9qaLGilv1soO@FT@E&H}2RqV?< z_l#_7B?d6fA|7-Hw?^l9ax2s`d!El(2mC$ z?tKW}Fl)}-W%c8bXX8lWRKSgDR{$+^46)+jK!s3jrh54+LEl*k+}=tM=Fv>QhJm@w zDAiQjslw^$DMxKg_nl5y7hRJ##g`*OCNw=xd+j`Ed}Gk!*NK8ZWmumF$8u**Xs}>* zXJ{{aqi?V)=wIk=4yCk2x@jOo0A2?tXqBs{oG%PJSLj~jIpwOkXHk`UVYf8sKV}Z~ z{CiapRQmHIEA`g7fg< zd1BvRC5&C$m%CIl%e*h%OT24*ylzvz;}aJ;FTDnnCy%AR!n3TgTMV_Pu$FolFWj!_ z{O&2Y;cq!Jf3>o=rgFSqZpy@dzs!lcb;zdBy~1^KF4?zlf4JWOqBBa-LhCO)i(y$j zGC7SXWgH_pn=rDJY-A!u3ZO&}G)D7Ne;4@y<5U3dXaj3_w{OpgvbKH^))5I#4^X6E zx#o{)Y*np_^k%&Wtkb~brbDhzMLC?vkT*ryh|cyIsc!GtNUf7HP)Au)|WyacKEY>hPLZycq5nQ9Ge!SSv&0u zzl@6|&YAS>{glvOCh|=#1GD;rCRC3QJNC_^mMy#K%W^J%n!J2d`E$9%KY|_%URr>k zC=uuC57o3d7uM?mvl?EBQ%hn>eLJ0~$YXLeDF7?&vMip5R~>bIMLdR1PW_OPBdGGKar=VMZFqz9LK8^)Op%APwco?~ zhao3|ZOHIQzub7_HCN*n>TDRM^d`WP;%T#UeX7P#)w}+8&tv@fJn1KvT@}7%%z2cp zF?S$!_!iGfso};}4)%akhs) zxkWTn$rY-N<#?xhqe(v)^2Z8SrjoZE2kLaDcf{~baFRmLrZ5~)7Cf#S&M^1{R2wa$ zzSMfZ59G_a&8Dc@y$^T=UkPJ3=hJ&Z(jf%VFEwL{v*W@4#uu0BM6I3r`m<+<+n&fM zX!F8vdkM9H)@woP3WxcL!5EOQ`F=-+>p6pY@lKBcc+f%-VURJfJCKe15gBF5qQV~M zM{|1?F8#{%Mfbj*m7QWf9!IDqi7`xLM%R#?1YgL8*S5AVD9_3ZZ#RNogDxRE5{2m( zE4rgGQ!;_}KE9L*A$~bc+fsj{cr+ApNEc7}3bJJWqBFs@c67BX9{{*<$+GQzqe69jO#AwbXmcvB!go z^4zHR5%)@{+o;bXmkn^)_&YCXl*{fBR5YLldT89a?0QSUmpMC+8GX_Q56Lgu4)l;r z=gu?Xz_RmWs?S5}3rSY)B2xs{jP_X4{1G82`AzGO+?oRUvcUTTDPJRSO%Kf#-w}>i z1B`sUCiELq<8+s2MM7*V`R;(PH9vUKHI@9D=>D#d?)T=qMpi&|j6ZowsP!0Yt+lHR zjVw?K8BVmF)C_xc2*sIhVO__vI!EZ^c!Tycwus;F;>jq_fW~Z<-y1?*LY*omq}fV(wUF{W4xyLwl|_N- z(hof3s-;=bA6Ebz5>8K0(l9m>hgv9DZ^-PUo$Wz6D<$ro`c5|u;%X=g1% z=8tbjE@RB)9kp3U1=P?%@8E4B6Lty>A{GSnKL)_W`|ejV=DVU(01TC6r8T%?6{#sueru% zU(Nb!y9aS2m=YSoZq@m-LG0V@DJCdH>nF<#k^+iF6ExqF$-$xD7`CVo9CQy^`6)wO zu-U>K&eUZwVE2=8vV;kYsNS{=Bv#C=T+rrNND4dOr~(-B6kq}+RcGPExaFs3M*T#% zvv@*YkLe*=q`}7E@e)tPw-&27{gH#WZ3xVhLId3>GfJ03NO+vDZ1oQ5&<^z*e7kZs z4gjRgf}eFbX)&*mg#V%xxr_FeWNgL^jlpO0;m)LOpQ7PPel`x zi#x#jo4p(YXAKVS>dZWVRIoZohpoajq4yLkkoqs=u^c$%q~;hVMmOclJj;2zChbF zBo$GXuh=th!4I2W0-iHVQiPL}Nt7Z7${QBf-^FAj+RQ4QS3?-w1@bb;!$PAbR{~|a zSf6+7g?^JvX=*}U!gnlqU31fagBv3WIj*?gfn8Kdhv?^8R6kc)eAbf zmXmqQP<5CAH^l`$x9;+!E7?imT0p8Se13JYY=l@vf_rCjLxXAwiax6`c6bw{JU=E) zm?TU?OAaX5o#iokI{&n<`THWHg`R9^TA29C=3t9?|RyNcrQ4c|KS*_`W+>>!%fyj@lG7G zv#PD9&0RYE@+j4h>KVLeqjV8E(n5O>-IY9goS+-%;p!0`3YCgFgHxnN$$m$c3n2s z1>89x(d6^)OhUJtb+_DL1aJ!&zz#c7rj4@wF$7gIOD~O?c1;re1?Ul;{Jm}{`Xi7- zBOq=>D#CFP^8&#$Ex?`KX&s3GeJyJyb`CqDc*x-5V)+_c{tHC+-6GRY@0u;CeKHZT zsNV$h?MM;lZPuW>X4=UDSJu^if?cYx$iLUfSdgS$~ibG!YcJ8GOI3t!)CS}4L~&6}(d{8sXU?Y2H57FbgB zanczOzGtdIi&(+sF)PH^vb$Sq7_riaCot32q|sd?XB5(Tvn*CBb2|zpYlBSlC8R{1 z_s=YLoKtDsrDP`ywuOL=oiuY{O0B4-dB9IUT0bjSV!BZ_Ol$so>;kGr z(&5Q+HGwpR(f0mw@Ruv8Eg#dy;E2zHCMu+2n#rm-J_yF7}kOnqag$Tv-K z(Pyf_7b4@S{$qCp(E}B~N6p&s{ZtyNTAijJ0-q)}OQxF`pSB~EpHTlGV=kJ_Z-hH2 zAb;`u|3G8^&XWnpyX(v0B7%V6CRE}I0SG%1B7(|pndfWn+DfJ!gV(6>u@GdwM9@Q( zxw*1kG(@>u!Rq1YCt2ME3me?db9oJ_^xV4EMGHLP&TV;0<<4gvW=Y-AJnCzrNZ{y6 z-U{E5e!`P+aeQSOx(S$&s)pZuB$OC(pKx^8DH;~ey;4s$25IT`+&~2JnV*7^ubrbN z0tNmKe7<@Qef!ustWVSMq^2IxnOe!p`;(dtlB0nA_N7!)o%%|HRYYSYSEKToEHtbp*Xr7J4s;@!C9H(JGr#7C zB=;RZrC;_^3!iqa3sY=o?~D(k05>IgLmLHr7LOKMj#>4~X?q-KLtY^QYRge09*2D) zbI38%1}WRp?^QJ) z_uI3N{CojY@6Hc#uVv}i@a?9%T6m+mO9q=VS+vTbO}>c_Ie{vzgr}1OAThLHbF*68 z$<1`UrFXdpcw-@5S@br>$-u^sb8DY-et)d;dK`JBJ&4SV@8IWWSsAo8<~G`D{yBYq z`BCRGBGfpdL>x~^>9sppLLc(*dDAmS&yPPqXq(k}d+ILuHW5?Bl+R8{n9e*zR(Hz9 zgUEkdX!i;J=sL4XamG{&`10y$Xc6vBdwNZKOTKg<&I9nw97U0CjP0yNij^KW7MFNY z>)u;i+f8Wm1Hq-iEuJtMrCPF}yS+XDsdjrv)I(6wn@7pX%#Q2Kv?(?P?W>_~es)HE zeu+mybwF0quM^D@d6#VYWfwEP0EPiacv z34ylbMarm;XEC+qhGKMDbu7%kb&&B8p{#`pE&@waX*qWz&bEhDz)*6wvM8mb1Lx$B z>Su-&?MV*j$Zj5xnIJ_Gf@daR5Y<-lELh=TX}nP3zk;wUb!u#Q{ubj9ahiw%#usc| zN>iq^x%+Mq`F!&Xm5_G;K9?<3aq2O#n%2yA4h1yvkoIK^8e@q%+ql>yc_=v>xaUWf z;R7xg>M9#^&)kn*P7tKq{P{o;!pqrfN)u60|KeO@B|U)6-rHhjn|Ro zx#+?8dFtxP@?HQ|S)i+f{qdZ_v(bJv@OhDQAAj_kz+-Hm5JJ~hzM+5))muxqfz~l> z_XM23anIBfGfX|))5_sd7?%u|Mx(wo(~XXrE8EKG;oo7*8ni`p&m^y!)2`_{6-z=J z?-VXGwg9CaVw0>_=k5WB18V?Yi)+Q746a4+D*YA2iRRRzPJVWu_sr#0Lsy-dNC_Qw z<+`)5T@1y;)!k`5?R_8O6{)wo59gLe)6LF63MV&QSrbw%TN}4`;qm*9D$PrnwB~|) zlOp`j^DvoT=Qgg{e6gVRfLU5=|; z>@nrTOk63l6WEv^KhYmT_P;R%Tt9yGXARL;G=IuNwsyX+v{PPfq`lAn-1qN zS@X@K=LS3Xn?hR`aNivuhG@jDYjQqOzQSZ*W9(x5eXge)Tfpjd#b{Dh53IVGt8?ea zPRUFrKo>j;Js% zpX;rH4FB=_>_^lqv|~d;ylnZLBwF=(t>88Zxnf(+zTv(Zz(rNxW$wLYXY^WTBL^G< zzmwR>g2qMD3?F};ES5WiNs@1v$yF&x`*oRpaj4%`Gq!^4V^t{H&%zaVb=;DElh0sl zi;9!M^d1UfC_-QW-&o1}qqgrV#zpN%SqK7n%$jAq(Mw#t&tV@3VQHC zO*1bo?c+hk4bH{+T3crMi~<+La#T!Uz*3?SOala$3}VF1ZHQPPnpaCvkHf}T#HIJy zA0ydm%8*-1?jcx*GW5y=?z`ap2yZ65e9VoPDJ9iaVCX*WH@{$6W6Xt`&NzSR#?wPK z@;3-uS+~>pTU7IaNKzDb%)+0_=}j@J^eRv6+n-IppJgIN#TZMgDBkXxUuaBB+ZF%N z3AOL0L%>Ik)oEnRH6EH5KC`M09Ets)YUW0R%Fp*UJA#30{ea;NVKf64@Uq2=TNFAsq zdIRyWi{w_K#KnM)R|xTF=S`Pkd6v9_J7sIjo>R3`byc8w8?I|S3tOMYl1;7$$S&tt z9l&d8@xCkl91tw!ql?wXW<(p@zUr~U_=0@J$%)I1i3dtsx zX`bcg4F50SuKQcC@H*WdN5#2}s3anF&Zs$E2dNVd+uT6+ucNKynK1UAR&=1!CgA3N z^qW*V-x(d>dUKRR;r^fp-RKSdpht74BkGt=-y;D#F1$$+?EJ++=s49N_V+qM zeUKw$oEr2Qlun*^Fe|oaPXUSxCVK7UcKFJQ1-f=-mu0d~x7lmk8{Jh;S}q>kWFMmx zPL8n+_2Q$F{TJJDhJ~hvt?kZOZq0ruy}+QTUrR zTSIi;GWlJIQhHg3umOY+o}u1@RcmrblJpZz_WDX?G<57??BO?9VAHSVmW6x$B!HCB zLW2Rkfew)(YC-pv(Nn@R-*}l>g1f|;G3-P%(7?+Y+vG(gxMH$onA4K&xjrrr;VVLY zNje8^4F1We!Y((SckX4WoOjL*HlJrvJ8&wz$D~WsoOaH;z;IZ(3tj#4Svtnk?y8o4=yi(v zT6GJQ|Ew`tn2@IWrhq6_Qc>qR#i(S#kHzMSewsBtbDuNlJU98GZ^>Z09>4uGc-^e_ zlQEEAc2u6GKxE{{a*}`bXJv*`JL;r5=os8qc*F=Nx!+KaR zz-Ixf z^bem9Z+~7vU6K^HO1;^{~ZwlKs>949a{C*U1Qp0TrI^5_V`QBd6nRb?v36wSZ@ju=i45cN z;Ua>hG0MA|v+C@cF+FHm@-T6^by!+!$vaYnDQPzrwCnIXYE4{Bi}0*NWL4X8m0VxK z;j_FL&6*4idTPE%%*5?v$G`2${E4ekmj)d|W*|zXy+W57_E*sBbM#wWHZeslZV7ZyDj(xbhp7W2ne5A(Zw<6#=sm zVb81E8w5W$9Y~m6ml6WbVDcm??314pA-$%-IfcB6^evj3xt%UYZea!?c55(xvhjZR zbJ^wd@HwwEmMzLi9a(5NIb*?5z>p;NX|RCnU_N4IN6SS)`D?GZ8O0o5!;O8C0Ahbr!si{CgjS| zO(@^pM~F|sf+USl^#X57hTksSjMZ+yb*j_Ut47c7ko<#sw;7?0qdSNHa~D_y_CG&N zBf9CZD(w*@AsJD$NJJv?iN5)9){;DO@=-jUXXO02bcJC5;POB`xj^6OJ>~kY))85d zddLrYiA0GLC-(D=1yTfQFRtv@6Z%kc>tyE^;-K=7MlgY}5Mgd~7}e-xCvUUYWjAjB z5&cHAPkHis`{CQ0Gn8UFqz+e z#mC><>^VZ}%azI@N_=e$7VP(t+?_WImutgl)o$_q+Wv5PO(lliQx)J#BD$89K}jsS zB4ui3(8;Am_!3BN1F<;mAGk|f|6{l0pSnAh!in+%!SXh{@@Q0kh5~C$vi!_Rc<7d1 z&auz3_%zF=K`%d#NBKy5Y~7@ z6Ln;IcIUfULprV>Q|W+jm^cZ&=sp^G#s~%n=>9M5hVKw|eWg@N)`gx}w7-*(CGoo8 zX#<6HI+xg5<2^4~3%YWHwKY_1b^SzdP#ObIU@CpdWia+oWAmG0JtFhGbn@8X$b}He zw^i2jZS*q8{vMbi@NLenY+z@By*%kABqAM*0kXTJ}c^y#-LTY{##Sf<}F+(pV@|7G+RS+h0wV&cfj*oI!CF z6NTzgEHs>ua>+>RpTHD!6WvLqYI9*p>?AokmTsGH)t`c?{q$qYWOC=S#G+yv@C!hU z*%4j<)=#zkWe5Pb!LKahdo+v4jr=-~I@W-vv?w(@elm-8e_fC)c)^lrT=TZ(w@O~& zZUhu4{m?uiD(Re7`=RBATCPYZuRGEKQL1H}(Wn+7MSeFcBUfRtbJr~e>Kz&UCQO?0 zYbumdR<-e|-$45%lO%rCg$@Gb$?EhJqhuxTqOtt={3LLFcStVf%3mD~Q4c4$7#A=C zo3zhpn6;mAO`f2rQ}!Jcsb9uU0_5tCN0=E$=faPveZk66Fp)+x%IF|M%7(did7i?) zXt^v*3yPFA zYMMH>3K#}FNay=TO|p?oTOR9Wd64M%q6{eUo#`)zQ39-=aU3p$Bb~a`N;Dn1;$wcJ`vy@e;@-2-|sx26t2WEUgI}zgol4u*7cE= zN(#Wj-C>5SAxY&o)Y_pM@Z^W&KlR_=Pcc=Z%Q{8q(3_c*G~qXd-nVyk;YpD7BP#qX z>f$aC_upxfN0c4Bv)1I6TmUHme^9ekHW>&}6t7tcDjf>KZ=DL25zlIQ;Uoo_{mYRzDL zL{YGJU%A5akCIMV)pMH09V}73k-LUNqk=i?z#X3X)F1d}b?F79qTg9R-%BQnig=fv zJxm0qp7BWgL!!_=2Y!T4GR^e+NuIN=W}N_kOD0@Wq4>k@O+zXKUZW}mJn2pa#>NiQ zu6aq{lL}%9r98UC=tp}q>twq^6u0v`k}}t-a}=LNZjWL5p=jN2a%Xy>HlVc2oEWLc z@0X0UgU-BlW&-X}8F_6~1Y)J^L86oQ4eYF(GkSRjYzUPbnLXQM&pl<&bsn^HdGvwF zK5%Blp6Q5duM_RCVI5GYIYZV-d~uyPwN%+(P?jBB#byUO&S$AZaa*~F4fLfvrnqX4 z@UNJ{Fx-*cAZllYj~8e%zLWCa;-SC6T%AKyWX@gg8A@i9q1&r27^=NTMWu*NOSQaX zx3wC26)P&B)FKrd`puix(pFig)V2UCU4c}#= zjxYPnl%V@tj89v`(Ch<;KOgw#WM3^(;=XYbO~KjlR^b*uk6iV#)nrN*EgJT&G4cY> zQ7ez%Mfr3&2e;%FAqD9WFwgPrW6agjHUAyg)hKhB(D01rb@@DBlw}e3yKcp^o9?=OS2`ICeRs2co*C4FwGKiXbq&=Ole5j=WTlkieL_FhN<)da z>jL;|vz*tt&*dzaK|KVOd~hV{eZZfQxk#z#&^6D&i)Y?Gy#hB|ATYB^9KlD)<_go~ zsN>lQrjWferx**o!BsGcp>V2Omn~xn(YcpAIKk4VAGO(4lnqg{gh!N6Y8T+}(@&hk z6r)nHO@M@e#5KtbK-D^BofLmCg;#oKv}1Jfc4;VD=j2dBRfCw=`VfLAc_daxF4dZ2 zXUZy@e}J$#Y=u#yHGyi0rgTcqc>-cTP6Yk|G$9 zR)UKK=AXdzUqpw5ATD~sf4=@_ed|BuhW~Ez3DaD-|FZc9>HiPV|MkBO{*G)CzH;OI z%jW+>{(oVAtp8;bmLS4S`LEE~h8y?G3Qa-;H;(2%uInDnW+47DE&~2CF8;S`c3Kb+ zYXci|6Jtjw28W*}@=~B*&_Mn_59fa|G6?^dGiSPlZaPx<|1$sg79=q8;C`v0OZcFp rrv1-K|KWE0&wcwRivRBhlaR}U{jc9{B1%I36KUcDg3;-WD1jGmm?7tw z2rfdupeyEt=X+Hv=Wg2_PBpf%tc=Fu-e2%S%w6Jz$?3y-+ z?9pIynz0n;jUR6=IhTW@=Yxg1+QpHS&G_nbtmb|h`^A@K(N{7PMC7I2)fR^}Oeu|) zo(s6ccN862)hkZ`k;+}8mqylNsCa`+L=qJ;kuyA#)2nwSo3x9FMXA)?sNWemZ>b`c zc0trzA3%9faF4uld{kIwh~TUlsK>@h~_V*yiJT z@E+NSiL4EpI&k=TBv>=DCtv8AkNI4Gd_dStQ^+juZq0tdM|F<}Zjzo(#Fn*^YntL< z9oK3NAyF62{A-O5U3jsLM~~C<_+(8k%GWSkG%SPWgPbWhzJLl@EWUc#C%a{3XZUI{ zp5%C4V2*sV<&pU8J=pBnDj16IUk1_fq&?N4SNHr`UJ4dYE^s1m1RM-(2@(wK|4ca? z9Na%s9-6kGSw%KG$4%6Wj0=lF=q zTdkK8u-xR(zQ;G_lyvmVB)dm|q4w0LVv)YA-wFt{>m1U)6|K~*-ecj@-E@Eg-@|dj zk{%O0<47TO(C@LdNEP5C=ABMzR=)HFC#dB!)F!lk=P|f)r-D!y{7qbb3RQO@Z$5Nq zk9q;kEv2HVc<&(-KME~-Ex)akaFSU5YJ#i`NWRrNq%M|xDkhNCrCcZrZ*2?`3zqDg z(<_WQVzY=;NIEM&9<-RC`VfhrFfwOf#G(pk&F9lH%;O%47e7t99q>4}v#M-D&6ZQ0 zeX&1c*2^E$_55aP=3#+A;DsotHWNrdJK6l$*g(+Qaij`DMqwt3E<6epVU`(sWzUfW z-gJ&t^R7Gz7`^Q-pr6~1>!>f=5aI1(u#lx0mZkmt%CV3Swt4xV*qIf#Y#y2db-$@q z(O`4Ny2O~(o$|GVeXv6jl?;-l{en)M6|)d`X)s?G-iMmKxJ12c5;?MKJfCfxQ!2qm zmL`j63N7d1UQ!GWwnyk@ymcl;z9{ttVAB=R*$6Eof=h&yeikEV@}|L8+{UmFV+}zr zojDXQjk!WY5;c$2$dZ!JZxGH}Ns5BHsSLKktZ4|*vFGN}+NfL=?v0?Qi$eHa70j?f zhP+c0%F=B(GS5ib_2y5Gp`ma=(zW2jb=<>AjUU zJQ#4e*}Te8$vS@6@eO^TxdU5C0&-s&t3N!Uc8VI$tOnCmX+5|sn#S3@z*}k6b1q8xi ztqn5WlrmG8)s;i8LR%FoPW4$rD2!ze2`x_^V0I_zwbIkkeZw z+5}xPhxA&QG^aJXj`GoNuq;V-*n%5&+)_vH@@vqZtJyHZPvZ}<&|gQeFuag!Wu4>n zq|dwj+n>}nSo2+z^#nCDG-KAFn5L1?`RriZy~_&_dD{Hpm0I;UWI-olguMir2u(iO zv+-=F}bwgs`gi*3}GLnbj4|bcQ8WZNh$DK{rwVCzm zBFSJMxrJBae-;5nJa?9TXfUu?ivPU`fOE%t!qEYFRFbvimIg91+rxb<_S?0Xi>mZW zGC9;jk7fu{IU-pOtKo8<4lO1lJkOigKW$3mkc%G0uBGnX+rUvavB8FCPRU6^o7y%e z58ebu_1@ll9+u=qYQFjpR-WI>hKK%%YediBvw3s6wto42_p$@LNZ!9hkw;mXlXt=? zufzdM`Rt`(eStCAJ>D`p_jbJEtF8p@M3HJpoXn^W*(XfdVlv_y}6Yr9*yO zR>dm@zMzN+*Y@e11>j14po}H?uCX!G{Tc z`#B|aGLwT|At0(2tk3&EXbBOw4P0+ENg+q+cxPcz&DJ#g*U^iX(QCRXe@(ms6~c8b zI>&(KzS`7+dzlMUsyxK&<}$){N^2*TItz%o_giYS=uf(l>U zlqXlKw$1E7{~|u-gK}^x+B$FXnPF=F_j#m-C+Wmvd0#*uJM(W*lwQllfk~RQT6;dQe7d(K%<<~uR>khdr zty@3}jpt(Dv`{;kXS)~`85RWjD&Sr8KEqbtiJq}M({+CSn#i1yn@_fc6e}uPK+x>1 z`-gypkhCM;;DnE7sYWx9^6BRpG#*;*pBor(mkUMTjv4%6d=J}p11#0+2tnu zMSyjs5^yz5=C7#r%`Ij4v!(M%9`;9i>r{Rl#wMG7ecR24%&#JfLtR>I_JmC-vu91} zht{-p;8DL=E3xLg3?zJ2qGL5}w{=0qc|+X!xOX8__TmUo$$oHScW|lS1)uGjD%2Lt zTfR{)ge)^F@QZsqw@IPj>Ee6nwT`X^JboGs+NwF$Stu+rk&3v!8J?4pYpkf+CAEil z=WM{F<=#lLgdFE5-rKI`)wQ)4!8+p`!%wewdkPF_tJV)9dOv=2LN9Q~|J!^@BC_VQ$Ii%ji_lew~1Q)C7>7gGirI_A^6rVaUD+`AbRt8=X{y0l$E+=`jZB%H1cI; z4P+Q%>FndR252tVm+&o)c0vkTc7CS1VC>ajfSfd?F5}xD?emtZ$e9XxvQUcr~>-@mGBA4l*Qaj8fWH2lJ){ zx`Sp%L!z5f!i9`HhF?L0Aj)ndhJ8rR-7t-wblIi(lcV6Jod^~PT5sq8AI0a@Zxm?y2Cyt(`#!^d89pjQkEI*zOA$R$sK}-d|;r1n9)I33kOXv_q4A zaw#yUdDC59w<%-mL$x1EIao=Tk+TLEVd|mP6?F6wh;Rk0x~=~V{VWQ4# zWhBXhe)`ga(@5#>$C3;`O_{R#gl?#;qpc$XIu>fA@Q%AlJK56FX;TA`R>hM@$xuu$ zQLckoVELx-Rcxe_fBm*JPhN+^nv}+bC5RG^n4p+AjdanS;4zc3RuajASBo_l)X#|1 z?jh3cAm2!h8R~kw?rQn?*#eyoxL?oNqo3AI7|g?Xb`D4jF)sTdxf1}x zC^*N*XX@%?xCwYagu4e!A=;J&e!vYobM*8~IcvDcKqn26Bsz&Q8a&K!Y@`Ll34Q+@ z^AbK&Wf7-tQ}0QYc}m1z~L0-oDf;5 zTsQk=WG4+4p!elMUhWb>W)DN>?9EJ~d?FL|w&B62nyL$%(+W{LY#OoZb3C?O0J9ML zbVVq6obVK;;oa6J*?`Uq{G#{GA<wrkH{QLfIzW6qPpFIpT_^Ny)o+2U% z27K5yx$lcD)AOd;>&_4US!Ae~$1H>^{dZJtX&NE?CtrL>OEb%_M54*`4;wfy1FRlPZ`|sw4+MEmbqc#2saZfbt=>!+_pXV{G`e0ZEIcgnxN};)D=`Kk}3UOLKE*lnjKEJ zOvOjd&f@wkmu|Hh4;j@yFwp39M;vt|%OoYHl67Osw=1_R)QJSuJ|!$_MNq=tq3ljx zMdGIzHVNkY%n_CL$PgE`&;mgYjkK^Hy(u^4RyYrE;^Fr3GWK!AUwnBqObmcK!J&i1 z`=x|j2r7v}Tu9MZd!TjC7ndwkfX)t?aSo^PZ#NoZWn}TXM34zR7cbF=A*0bDJ|ydN z_6)JmgUyL=^d{NbdTFo7v7)1I3C!W*3@M(<^mi%Pu1Ry3AWb@$nY_yxD%#=toi8LqU}Oqw zD0Z8Whif5aNJdt=IHI_JSW$gHMT8NgS&p~4Mvl0{D-B=suCZAyKDdosDW}fs3KUxb ztSbOhIdJqA%oAqo2-t6x{CL@5P|-Z)`~;qU?Ud2vW431q^##l@{4QR=wW^MN;uNuX zGX%2gP^mkS5q)-bWwF4OW_a75oLUe&&8Db4^YHGN_< zNh)viy~9=cxWWV<+Z#*hID-I1-Ds*h^yvsU<*d|;082#mN34!Ci!$+?StsVC=~Do$ zhobC&_Xx7u=|*rFb&gw6@xAw^*u7&mqAm!!r}yL*BrZy+Y3arCgHOD}<|iI79D&a? zhfkzQcZN-iMz%VP7on^hn!(v=*90mjn5ZK;3wkWsJP!yen@|@KMREit*Nea?<@u!n z#IJl~gnu0cUQrR_kdB2RA&h0)J*POZ;=Fzq{)&y8B>Vf>FY_v~+gjoK5;)luygo_A%_QR zL5TPf^CQ-!kLj0EPKXfFh%N_$m?@u%dh0$>p)F%TIv2>Z&L%Jks~F%;jKF{>#z8K5 zDB&*H8g-UdAnKbFcL|^XU739idJbgcix&3q)S+QzyKoWEKCJm|;}=U#o^LXY0dBe~ zNEW7S(^$pIb49 zb!r|;O+1#%KD>Of-x`2qNt=#(G0r*o6A=ggABhqn%D~|MVf*exmZ)}Ve^eG^5tZUu#HNgb7>g1I3 z_SvyARwwpa-T>;^?&{{7wFnXR$1Bml zQ@<~i*_Y!X&9suzK4|kgEbNRK(Y5m&$z%ASJ_72!qaWI<7#zxp7mGt#LMf7?JVC~xOO&!u*noWdpbT6LZdFoy! zSw!c8@XRGBbp4d-?ensC;T)vO{T!#fk93qte)hS9&S0{g*Vtt%Vw`BEL-xeEd6VSm zc8Y^SneI*nkp=NvyT4}7RrzAnjBNxsJ|8r_H^_v+*Z`>NFv=sR5a!V6mW-b_ySJB4 zr{9C<^olh|q(Ckg!iB1qCf)vwJucmv_kyB~IQq2W&Z4ukJ7MlNkiB6n^eOuY6;xPl z+cXt!yFA72ikk$}-y?iZW6*3Bp$c30S(#*pzv&5Ox!}bF6waiaKO36aSvGoJeMD>2 z|5^IT(jDlxLKOxrXABIl$Hzx5b(F=Ndd8K*Tt<;MN@M-m>4e|P1LnEc;PJA~hBxcI z9KO`H@I&KV)3aa1Gt9b9jKRv4y+_<%$7D279aHI&!p5TiUNAv#d473vTCd^iNP`qQl=mjA0ZVl zs!1<>3WGHf-|5i;0>1{D8DakfPz8z?IOp{u{uo})DYFTk_Ank6!RjIduYx9p*0ZEk zBA@D(*;;@z%^dpKS#?Y^){H72U+#niZh^f=mT;`Q#%9NYmmz1-r;$^P^WDj=)RSjW z6Ma9h`26_sR~~_d^Rk0oy+Q*6!_oTBpR)f^$b=__DAIY6!N7RqbMS=#WGD#{L1nj$ zvsHKPIcK85s|`j-mR?q0har;SFI2kzX=uTDB~;WDW`Sv?N5>W8u z&8iEkTILpJMASIzq#+O^Oaz~Ba-bZ>85!#w!H^(*BD|@VFMZy@S#Dn5J8xc&MpGI1 zQKGczO~HtM-P9w4WtkrWkW`2NHv{m0*E|*Q|8w+{Uc_+`T~CqgLlvDd1S}ydfp5Fc zM_Q&(o$)`1X*(1unM6fUyaFYH5SvOITCwDW@zx1MMjQVi< zQP!S7H-ez4Z}RBdLdM5?t?6vKKQYr!_Twr(CgNHG&SA0lkucX&&y;v*cSzm4C?Jzk;rufU-=d5BP+VR5j#cnbl6ijenDj~|00 zey3t(ub@V3M9rTy=`5_fF3`WXdpTjrV9rjCRk8<2n-S}X7tduw2OM;kPHEw>oS zScm8Q>S8oKp&$#q8;`F@+^`h|F?`Sunq2u2vRWdAxMhE&pq_A3(db+m&<=+oM!)h6 z8lJhbbY(v2?w)p|S5?XkMR>2X9OD^&_X2IFZ@jzT1wdyd^2=em{ji+iJZVTWRc*&M zi$sq1aR%62;-f8mteenWtlIhzKqCt;hfu!N~NYSw=9>Qfl150 zT+dhTaCEUZq4!Kn&$%xU`x-O5A{ah6%Ou4Ln0^wf$tuqL`)!h*T9;p0vt3uAQKMKo z&Ph-%^ctrb8oKa!{Hr~V>+Y4@nb|Lv=&Nl7jT-Ovn_$LXnA!vR;22T~ zZ@g-;eGKd0O#pf;`xy8Q#2?)g5vA({09)^OHSCa2WeMqJA|O%L<15a=dsuTKUCQFq z=R-&{6R1TkJG#i8cbv z`+lJDV{bLD3t%(E`)EVwCJTlj#G+b+mG&rLd=Brk&XroQfm_k%*(@Z~6Lb3x5a2Dk zZWX%7#ka1~KCi8ncc^*IahZ-Ve_+fP-BQWLQ=Ronh7)v2cd*XfKp&L#q3lnQ75676 zMjvWKXmK`8b~bZA2)k78^QK%nBxJwf2R<2`acT`7WHWqM$It%la$oW7DqC9~v8~m? zKxCAOr>X31%h_cln#UJA4>mI#Ahdo||M*3e_jiEs5_2B-vaw?IZCwZD3tCFWwiX?w z9g7+1Y1|DfczO1oYdy&I`=?X|Hw<4^#yLBb--j=<$gtd5X-bSoCp@|8-p_) z)Q~r8Jol@kyOjd@e1HA#kXPU|J@l}@ltEy@+*LJebhA`p zYI)pl(F`mekn6Bsdv+o#=_IJl=pSyHDJ!V2)7d#Suo^XFYdVNE7-s4^&nTEr@ocQG zIZ@w~P7U*=jYe0jXtO?8Z=71wMolcgQo2SG({0~6uu87kAIyK@_M>AuFR(k}neU}* z%x&QWlD8ol*~ncF|X@Y>OOqXkIU%k|B7#V3SvqSg5LW?x%RFv;HCx)!U( zJAVWvB|Se>QNC#>ZTzWYO)RkXxr_H;r`&)B_$2UeOvb7~K1*IHk+G1JcS%cnPw{%N z>_mH!MwyeWGYm&{UcDGn9mU@F(aH4p-P@N4yE5Yr{cS(u=laHbd&WEmIR2`#t#RS- zk?S9LYF>2yKXEy4S(=)3^s(_*hA><2(VEk=zO$DySk=j_y-`5lVUoQ*GApXAqZ|=v@5XU%TSNobP#PMBL%8 z`sDpMFUJN+D|??tT=4+{L`0#R!cWS_vaypcK1ilFRdu~Z5&1uo#4E6QgnWJr@%3bt zds!-+(^U>l&=0jLDD-w}$fsoMu!(R2r&UhPnW2e1cV-3~uXVUETQ|k?Mr%*wRV51) zRFAJKmQ{0!_o?f04&^zmpkBqMb!(>@v7~DDU1HogF#wZyM3sB!#X6|rixWo z`I)g)!XoLPd$9}&$Zt|hUt(9sTV1BTrsVs%L^t?OZ$6h1_o{n6wqMWU+%XOS7C%;_ zJa8W(?ULF{1;?bf9o6%r+-TXxROsCL&<4JcY7Z<_a^Mi235!Nst`58Y(RkLbR5G!D zV=NlC$Vg>F+QZw^xNJ)zOPvuQg$5 znwaU|zIhB}rzuWyD0!EI|I)*f25}mn+;7e}YB+TMwB^=)iws-Oe@QM9rwG1&ARb#E z$E|UQ9h@ipklx|Y@_56lqi>7uim~QP(@M_vdL49PN#;HXYX)3J@4SC-eMZQrkYdoT zs!zqLF-vGc@=7oz-e>WWH$zJYFrxY3VE|hX~*@Ru=kCxgIe4+j%sV}+gCkx z`Obr&LzB*fQVSIs#L~C?m$oU2_PGDbyxJQBqe^;4@>#BG7RzGvma3=c7P*so*^kK8 zrnkAa2mF@a&p^dpS~PT%7uF|#3}Q;CvI{y5`nmNMuD7y&OWO!0r8RgnPmV))!jn2t z$``XvPm>F|pj^jxX$|SS)XYU#T5R-BwVKm=_}a+jGi6EhL7L9ndajrVms!lS8%1^e zNPZvqhFm7c%qtKmv8F2MyF(Tl&&UgvQ5u1i@;vCLM7&>ION2_{pWEwvyo>0 zxdW%MwxilcRvw#pBkNde{;-OayN$DpA4@GL)^thVIdPxjMAx8vC$FW zrJpo=3BUXyABEZVX+Iv9%Ur0eN0It0x3;+?k%sqDx1E?aH4LQXcf|{6t1G3(s_yTs)CPBsmkejYq%zB*~CieMj!qfR7$grme&-SxeD)ng_>X`8 zb@amGyJ>klnymw;VK9=9nfLT};(-XW7hIJ+@@bRV>j3ni?))%@V;KaaY^8__po#Tc zht1`7t?%i0&8eDD;Q{^P6J6%cdg8|JYw*JC^CtHT9JB`M;sL>pqYg~jPRt^9R)ptC zrcwt)`wROuPm;LLHzwkdozDqhl`Ls9GZ06N%PjMgh=M$d>zv=T9L{ck^X;-?v)hi? zJ;lp)lMfHYyd05&VtfW_(<*ii)U~32+WaWQq+obyPB+Q0z~{8h<9MPI8&c54=XIn6 z#aojmI_*>^dmVeI6Vt^jFkO{NWq-w@<}d4f>uJoY^;yA)R46+sl|B*IyJJ;YYh!!% z{A)2MyzVE#SMc~88gh8pC0SSvt#om-_z4=Ue>O+PAJAz06W0mT@__%F@r#b@-?)oT z8TeZu4EA5wr@!}(PVQF5j`VKUR%cpk4lB)=ofk@G&9mzYXwvlViw8H{wQjE&+FN)i2-)JvR*t?J2xTnlQpqr6>A& zP;A?OnSKs}LJdbKRHrkl*XNu#EeIU#n9@o`?O2*RN&{tnyUHiv(zs&V&)d7qWUb@o z-Zx`$s@;Z`UOR%v=Xz3*=l|)`H$xyX6So~3clth{C6&rR5kC%?u&j>_L{w9B-`(Ab zDAD@;bruGWd2Rde-5BNLePlSW=%eWdp+O_XZaT5Gq&fzCICx~!QL6pD7QaP#Dm-#R z7ebI55yw}RFX)J>)-_HiWMZ`+4tFiCkwTukTx~72Hjkz{Fl-^qLgKwHnGl<}vzb&w z%P4SQ=eL7qkNSbW*E2iY`&wI$*c9&5Y2ACc=@OxgLY*9NJw|XOVty)?hE;9CR@c3! zfSn9`4fr?&WO-j%^_E4=qWX;vjQQFsHv-q%UmSJt&3HJi9|D*AwAHAb544-Dg-iZEt~t<1=>u*?-Aca-T_sdCuGDMOzT6g+v5)6R&e;|qr{b$>x?uNYPRBmQ-_*(*9p?$8x11)-lO!oxj-7%;Rd$N=?_PcHfPj+{uYBh5sEI`gMI|9Y{w_c}8BP}$s38xH%0Zrif9t-4Sn>4CsMR9sV`m3>zmpDF-4E*QfItIu_iV9G4Dy0j9c-K$1((#o@YkAO)jEZep| zE{r)vC>=4Fm_3?Ny#TJ!#T_Y%!qy8vh%ay_n`nOBy~ogbXRn&ng2}L{^vEb{Ih7n3 zJ{e1j><;5OXk4<+y4uZ$nuqGxYT@pD3p2C0jn@iVJA~#2zv(xGW_U#< zJTnr@$YBXuNL-4!oiywjU#*(NUD@Q!{Oxd}q7X!k>p3Y=j!el66(}oq}P#^ic9>NM56XiCGj)2O%B+4 z3mUHGb^Yu@1?{>~L@^Mu(3{SjPmdebee_0);QaAFA^GA2`Oo#QeI*Bt(?xUb{k>DsB-r9^G z>6es`clC=|CE5GVED)tfc7B0fS6t7Ay2KW)Wb2YrDPeJ&p$>4$v4(W>$8`GLs_Wjg ztLENRuJCPk&MOOVQfWp{0|CA^$J1-BHeI=*i#@i<;%V(hZ}2_TqZ43%lMYBX2f#`WGVOcOp)PX_i;3mWSYA=AvcW! z+0u!>OyuzdXkcEa|Gi(n9V;K{4|&^Bhn6V%QgJn(y~qrct8=i5thMVMeW}Pu@Vc67 z@)F;E9(jy2sIqhDP_waLv8oal{Rj2R=8~SxxHaD99w(5l#$eJ=RJ1dy_A^=Mk-pGa zKS;j3@McQjtk?0&%vQJ%7ml32TBdkg!hYfp2{)GlQwD^i%UamOu&Ex6XnyW7YzBmV zceiPOM;UW)Yq-g%+t)x6Z+G{3e+krvL;$*bEV9`Si}FVviDh-tNmCu zn7$AQtS8~&o>BV?>h7B20{1QBK#xpZuZuB-q58$Hiuzj);ua_tsfgjzG04qhIult( z64FA71NN9=xS!t;?K8iDhL9@sVsvhP*k*EvS5JyE;95#bC1=%X;UiH0=h%A@VL7zN zPXHJ@oM37qKeiNW$a*75;JUDbx5s*b7YACQ>qlutEZ|!kkGyBtHhx|3bh+dz(JSWX zIBCs@W7)r*$g8|^W>25YA6FmD6T((VkZz!5;8TV*=By3u{b}PtY)2|uK#VA|60h)) z#uZv&Yq*$5)8~JHuU@*4W9(+{W}@QY$Y7 z4uJuN0ro$@!vC$EeEwf8t>f1?@reIH|9@4Kze) THzbGT|W!zLST%7;3`F{YTgI(MJ diff --git a/src/net/mightypork/semestralka/CalculatorBatch.java b/src/net/mightypork/calculator/CalculatorBatch.java similarity index 97% rename from src/net/mightypork/semestralka/CalculatorBatch.java rename to src/net/mightypork/calculator/CalculatorBatch.java index 9e32f9d..0b1f756 100644 --- a/src/net/mightypork/semestralka/CalculatorBatch.java +++ b/src/net/mightypork/calculator/CalculatorBatch.java @@ -1,4 +1,4 @@ -package net.mightypork.semestralka; +package net.mightypork.calculator; import java.io.File; @@ -19,7 +19,7 @@ import net.mightypork.rcalc.numbers.Fraction; */ public class CalculatorBatch implements Runnable { - /** Rcalc Session used by the calculator */ + /** RCalc Session used by the calculator */ private RCalcSession session = new RCalcSession(); /** File to load the expressions from */ diff --git a/src/net/mightypork/semestralka/CalculatorInteractive.java b/src/net/mightypork/calculator/CalculatorInteractive.java similarity index 93% rename from src/net/mightypork/semestralka/CalculatorInteractive.java rename to src/net/mightypork/calculator/CalculatorInteractive.java index 6bd82c8..4c74cf9 100644 --- a/src/net/mightypork/semestralka/CalculatorInteractive.java +++ b/src/net/mightypork/calculator/CalculatorInteractive.java @@ -1,4 +1,4 @@ -package net.mightypork.semestralka; +package net.mightypork.calculator; import java.io.File; @@ -17,7 +17,7 @@ import net.mightypork.rcalc.numbers.Fraction; */ public class CalculatorInteractive implements Runnable { - /** Rcalc Session used by the calculator */ + /** RCalc Session used by the calculator */ private RCalcSession session = new RCalcSession(); /** Show results as fractions */ @@ -42,17 +42,18 @@ public class CalculatorInteractive implements Runnable { + "Commands:\n" + "\thelp - show this help\n" + "\texit - quit the calculator\n" - + "\tdebug - toggle debug mode (default off)\n" + "\tdecimal - toggle decimal/fractional output\n" + "\tvars - print a list of variables\n" + + "\tdebug - toggle debug mode (default off)\n" + + "\tutest - perform RCalc unit tests\n" + "\tload filename - execute commands from a file\n" + "\t\t(Expressions from the file can use/change variables)\n" + "\n" + "Mathematical operations, syntax\n" + "\tSupported: + - * / % ^ ! ( )\n" + "\tMultiplication sign can be omitted where it makes sense.\n" - + "\tAlong with fractions, decimal-point format works too.\n" + "\tUse 'a/b' syntax to express a fraction.\n" + + "\tDecimal-point numbers are supported, too.\n" + "\n" + "Variables\n" + "\tAssign a variable:\n" @@ -91,7 +92,7 @@ public class CalculatorInteractive implements Runnable { while (!sc.hasNextLine()) {} String expr = sc.nextLine().toLowerCase().trim(); - + if (expr.equals("%")) { // repeat last expression if (history.size() > 0) { expr = history.get(history.size() - 1); @@ -101,7 +102,10 @@ public class CalculatorInteractive implements Runnable { continue; } } - + + + // can't use a switch on strings because of java 6 :( + if (expr.equals("exit")) { // quit System.out.println("Exit."); return; @@ -109,6 +113,10 @@ public class CalculatorInteractive implements Runnable { } else if (expr.equals("help")) { // show help System.out.println(helpMessage); + } else if (expr.equals("utest")) { // show help + Runnable r = new Tests(); + r.run(); + } else if (expr.equals("debug")) { // toggle debug mode if (session.isDebug()) { diff --git a/src/net/mightypork/semestralka/Main.java b/src/net/mightypork/calculator/Main.java similarity index 93% rename from src/net/mightypork/semestralka/Main.java rename to src/net/mightypork/calculator/Main.java index b5069be..7dd5967 100644 --- a/src/net/mightypork/semestralka/Main.java +++ b/src/net/mightypork/calculator/Main.java @@ -1,4 +1,4 @@ -package net.mightypork.semestralka; +package net.mightypork.calculator; import java.io.File; diff --git a/src/net/mightypork/semestralka/Tests.java b/src/net/mightypork/calculator/Tests.java similarity index 63% rename from src/net/mightypork/semestralka/Tests.java rename to src/net/mightypork/calculator/Tests.java index b852435..2080c36 100644 --- a/src/net/mightypork/semestralka/Tests.java +++ b/src/net/mightypork/calculator/Tests.java @@ -1,4 +1,4 @@ -package net.mightypork.semestralka; +package net.mightypork.calculator; import net.mightypork.rcalc.RCalc; @@ -9,13 +9,15 @@ import net.mightypork.rcalc.RCalc; * * @author Ondrej Hruska */ -public class Tests { +public class Tests implements Runnable { /** * Run the tests */ - public static void run() { + @Override + public void run() { + System.out.println("--- RCalc Unit Tests ---"); RCalc rc = new RCalc(); rc.setDebug(true); @@ -27,22 +29,18 @@ public class Tests { "(1-1)(1--1)(1---1)(1----1)(1--+-+-+++--+-+1)(1--+-+-+-+-----1)(5*-1)", // minus, plus "-(15/2)+(72*43-2)-(12+1)", // minus with parentheses "+34-(--8+2*+13)", // + at beginning of scope - // misc - "23%(6/5)", - "53/(5-4-1)", - "100!", - "24/4/3", - "(10+1)(15-3)", - "13(55-3/12)^2", - "(1/2)^-2", - "13^(1/2)", // should fail - "(1/2)*(3/4)", + "1000!", // big factorial + "24/4/3", // chained division must go LTR + "5-4-1", // subtraction must go LTR + "5(10+1)(4!3)", // implicit multiplication + "(1/2)^-2", // inverting a fraction "(1/2)/(3/4)", // compound fraction + "(1/2)*(3/4)", // fraction multiplication }; //@formatter:on for (String expr : testCases) { - System.out.println("\n\n###### test case begin ######"); + System.out.println("\n\n# Test Case #"); try { System.out.println("IN: " + expr); @@ -52,5 +50,7 @@ public class Tests { } } + System.out.println("--- Unit Tests End ---"); + } } diff --git a/src/net/mightypork/rcalc/Tokenizer.java b/src/net/mightypork/rcalc/Tokenizer.java index bc1d69d..17646ce 100644 --- a/src/net/mightypork/rcalc/Tokenizer.java +++ b/src/net/mightypork/rcalc/Tokenizer.java @@ -1,7 +1,6 @@ package net.mightypork.rcalc; -import java.math.BigInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -109,11 +108,11 @@ public class Tokenizer implements IDebugable { if (debug && deepDebug) System.out.println("\nNormalize sequences of '+' and '-'\n" + input); // turn '-' to '+-' between numbers - input = input.replaceAll("(?<=[0-9)!])-(?=[0-9])", "+-"); + input = input.replaceAll("(?<=[0-9)!])-(?=[0-9.])", "+-"); if (debug && deepDebug) System.out.println("\n'-' to '+-' between numbers\n" + input); // convert '-' to '+-1*' in front of non-numbers - input = input.replaceAll("-(?=[^0-9])", "+-1*"); + input = input.replaceAll("-(?=[^0-9.])", "+-1*"); if (debug && deepDebug) System.out.println("\n'-' to '+-1*' in front of non-numbers\n" + input); // discard useless + signs diff --git a/src/net/mightypork/rcalc/numbers/Fraction.java b/src/net/mightypork/rcalc/numbers/Fraction.java index 9c53326..68d10bb 100644 --- a/src/net/mightypork/rcalc/numbers/Fraction.java +++ b/src/net/mightypork/rcalc/numbers/Fraction.java @@ -94,16 +94,29 @@ public class Fraction implements IEvaluableToken { } + /** + * Create a fraction with numerator parsed from a string, and 1 as + * denominator. + * + * @param number numerator as string + */ public Fraction(String number) { - if(number.contains(".")) { + + if (number.matches("[.][0-9]+")) { + number = "0" + number; + } + + if (number.matches("-[.][0-9]+")) { + number = "-0" + number.substring(1); + } + + if (number.matches("-?[0-9]+[.][0-9]+")) { String[] parts = number.split("[.]"); - try{ - if(parts.length != 2) throw new ParseError(""); // for the catch - this.numerator = new BigInteger(parts[0]+parts[1]); + try { + this.numerator = new BigInteger(parts[0] + parts[1]); this.denominator = BigInteger.valueOf(10).pow(parts[1].length()); this.simplify_ip(); - }catch(Exception e) { - e.printStackTrace(); + } catch (Exception e) { throw new ParseError("Invalid number format."); } } else { @@ -270,13 +283,13 @@ public class Fraction implements IEvaluableToken { return new Fraction(numerator.divide(gcd), denominator.divide(gcd)); } - /** * Simplify the fraction (in place) */ private void simplify_ip() { + BigInteger gcd = numerator.gcd(denominator); numerator = numerator.divide(gcd);