📄 aplet.java
字号:
funkcije.addElement( new Funkcija("hypot", 2) ); funkcije.addElement( new Funkcija("frac", 1) ); funkcije.addElement( new Funkcija("floor", 1) ); funkcije.addElement( new Funkcija("fact", 1) ); funkcije.addElement( new Funkcija("exp2", 1) ); funkcije.addElement( new Funkcija("exp10", 1) ); funkcije.addElement( new Funkcija("exp", 1) ); funkcije.addElement( new Funkcija("deg", 1) ); funkcije.addElement( new Funkcija("cur", 1) ); funkcije.addElement( new Funkcija("csch", 1) ); funkcije.addElement( new Funkcija("csc", 1) ); funkcije.addElement( new Funkcija("count", 0) ); funkcije.addElement( new Funkcija("coth", 1) ); funkcije.addElement( new Funkcija("cot", 1) ); funkcije.addElement( new Funkcija("cosh", 1) ); funkcije.addElement( new Funkcija("cos", 1) ); funkcije.addElement( new Funkcija("combr", 2) ); funkcije.addElement( new Funkcija("comb", 2) ); funkcije.addElement( new Funkcija("ceil", 1) ); funkcije.addElement( new Funkcija("avg", 0) ); funkcije.addElement( new Funkcija("atanh", 1) ); funkcije.addElement( new Funkcija("atan2", 2) ); funkcije.addElement( new Funkcija("atan", 1) ); funkcije.addElement( new Funkcija("asinh", 1) ); funkcije.addElement( new Funkcija("asin", 1) ); funkcije.addElement( new Funkcija("asech", 1) ); funkcije.addElement( new Funkcija("asec", 1) ); funkcije.addElement( new Funkcija("acsch", 1) ); funkcije.addElement( new Funkcija("acsc", 1) ); funkcije.addElement( new Funkcija("acoth", 1) ); funkcije.addElement( new Funkcija("acot", 1) ); funkcije.addElement( new Funkcija("acosh", 1) ); funkcije.addElement( new Funkcija("acos", 1) ); funkcije.addElement( new Funkcija("abs", 1) ); Funkcija fn=null; for ( int i=funkcije.size()-1; i>=0; i-- ) { fn=(Funkcija)funkcije.elementAt( i ); all.add( new DefaultMutableTreeNode( fn.funkcija ) ); } } public void punjenje_operatora( DefaultMutableTreeNode o ) { // punjenje stabla DefaultMutableTreeNode arithmetic=null; DefaultMutableTreeNode shift=null; DefaultMutableTreeNode relational=null; DefaultMutableTreeNode logical=null; DefaultMutableTreeNode conditional=null; arithmetic = new DefaultMutableTreeNode( "Arithmetic" ); shift = new DefaultMutableTreeNode( "Shift" ); relational = new DefaultMutableTreeNode( "Relational" ); logical = new DefaultMutableTreeNode( "Logical" ); conditional = new DefaultMutableTreeNode( "Conditional" ); o.add( arithmetic ); o.add( shift ); o.add( relational ); o.add( logical ); o.add( conditional ); arithmetic.add( new DefaultMutableTreeNode( "^" ) ); arithmetic.add( new DefaultMutableTreeNode( "**" ) ); arithmetic.add( new DefaultMutableTreeNode( "*" ) ); arithmetic.add( new DefaultMutableTreeNode( "/" ) ); arithmetic.add( new DefaultMutableTreeNode( "%" ) ); arithmetic.add( new DefaultMutableTreeNode( "mod" ) ); arithmetic.add( new DefaultMutableTreeNode( "+" ) ); arithmetic.add( new DefaultMutableTreeNode( "-" ) ); shift.add( new DefaultMutableTreeNode( "<<" ) ); shift.add( new DefaultMutableTreeNode( ">>" ) ); shift.add( new DefaultMutableTreeNode( ">>>" ) ); relational.add( new DefaultMutableTreeNode( "<" ) ); relational.add( new DefaultMutableTreeNode( ">" ) ); relational.add( new DefaultMutableTreeNode( "<=" ) ); relational.add( new DefaultMutableTreeNode( ">=" ) ); relational.add( new DefaultMutableTreeNode( "==" ) ); relational.add( new DefaultMutableTreeNode( "!=" ) ); relational.add( new DefaultMutableTreeNode( "<>" ) ); logical.add( new DefaultMutableTreeNode( "and" ) ); logical.add( new DefaultMutableTreeNode( "xor" ) ); logical.add( new DefaultMutableTreeNode( "or" ) ); conditional.add( new DefaultMutableTreeNode( "&&" ) ); conditional.add( new DefaultMutableTreeNode( "||" ) ); // punjenje vektora operatori.addElement( new Operator( "||", (byte)11 ) ); operatori.addElement( new Operator( "xor", (byte)8 ) ); operatori.addElement( new Operator( "or", (byte)9 ) ); operatori.addElement( new Operator( "mod", (byte)2 ) ); operatori.addElement( new Operator( "and", (byte)7 ) ); operatori.addElement( new Operator( "^", (byte)1 ) ); operatori.addElement( new Operator( ">>>", (byte)4 ) ); operatori.addElement( new Operator( ">>", (byte)4 ) ); operatori.addElement( new Operator( ">=", (byte)5 ) ); operatori.addElement( new Operator( ">", (byte)5 ) ); operatori.addElement( new Operator( "==", (byte)6 ) ); operatori.addElement( new Operator( "<>", (byte)6 ) ); operatori.addElement( new Operator( "<=", (byte)5 ) ); operatori.addElement( new Operator( "<<", (byte)4 ) ); operatori.addElement( new Operator( "<", (byte)5 ) ); operatori.addElement( new Operator( "/", (byte)2 ) ); operatori.addElement( new Operator( "-", (byte)3 ) ); operatori.addElement( new Operator( "+", (byte)3 ) ); operatori.addElement( new Operator( "**", (byte)1 ) ); operatori.addElement( new Operator( "*", (byte)2 ) ); operatori.addElement( new Operator( "&&", (byte)10 ) ); operatori.addElement( new Operator( "%", (byte)2 ) ); operatori.addElement( new Operator( "!=", (byte)6 ) ); } public void start() { izrazi.requestFocus(); } public void stop() { } public void destroy() { } public String getAppletInfo() { return "Applet Information"; } public String[][] getParameterInfo() { return null; } static { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName() ); // UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() ); } catch(Exception e) { } } void dodjeljivanje( String varijabla, double vrijednost ) { Varijabla v; boolean varijabla_pronadena=false; int i; for ( i=0; i<varijable.size(); i++ ) { v=(Varijabla)varijable.elementAt( i ); if ( varijabla.equals( v.varijabla ) ) { varijable.setElementAt( new Varijabla( varijabla, vrijednost ), i ); varijabla_pronadena=true; break; } // ako je varijabla > v.varijabla else if ( varijabla.compareTo( v.varijabla )>0 ) { varijabla_pronadena=false; break; } } if ( !varijabla_pronadena ) { DefaultMutableTreeNode nova_varijabla=new DefaultMutableTreeNode( varijabla ); user_defined.add( nova_varijabla ); varijable.insertElementAt( new Varijabla( varijabla, vrijednost ), i ); drvo.updateUI(); // selektiraj dodanu varijablu TreePath p=new TreePath( nova_varijabla.getPath() ); drvo.scrollPathToVisible( p ); drvo.setSelectionPath( p ); } } void izrazi_keyPressed( KeyEvent e ) { if ( e.getModifiers()==2 && ( e.getKeyCode()==KeyEvent.VK_ENTER || e.getKeyCode()==KeyEvent.VK_N || e.getKeyCode()==KeyEvent.VK_P || e.getKeyCode()==KeyEvent.VK_E || e.getKeyCode()==KeyEvent.VK_R ) ) { Vector tokeni; String s; int p; Raspon r; boolean status; int duzina_varijable=0; String varijabla=new String(); s=izrazi.getText(); p=izrazi.getCaretPosition(); r=Izrazi.raspon_trenutnog_izraza( s, p ); if ( r==null ) return; s=s.substring( r.pocetak, r.kraj ); if ( e.getKeyCode()==KeyEvent.VK_ENTER ) { duzina_varijable=Izracunavanje.dodjeljivanje( s ); if ( duzina_varijable!=0 ) { varijabla=s.substring( 0, duzina_varijable ).trim(); r.pocetak=r.pocetak+s.length(); s=s.substring( duzina_varijable+1 ).trim(); r.pocetak=r.pocetak-s.length(); rezultat.setText( s ); } } rezultat.setText( "" ); status=Provjera_zagrada.zagrade_pravilne( s ); if ( status==false ) { rezultat.append( "ERROR : " + Poruke.nepravilan_raspored_zagrada ); return; } tokeni=Tokenizacija.rastavljanje_izraza ( s, varijable, operatori, funkcije ); Raspon raspon_greske=new Raspon(); StringBuffer tekst_greske=new StringBuffer(); status=Provjera_izraza.pokretanje( tokeni, raspon_greske, tekst_greske ); if ( status==false ) { rezultat.append( "ERROR : " + tekst_greske ); izrazi.setSelectionStart( r.pocetak + raspon_greske.pocetak ); izrazi.setSelectionEnd( r.pocetak + raspon_greske.kraj ); return; } if ( e.getKeyCode()==KeyEvent.VK_ENTER ) { Vector rez; if ( jRadioButtonMenuItem1.isSelected() ) drg='D'; else if ( jRadioButtonMenuItem2.isSelected() ) drg='R'; else if ( jRadioButtonMenuItem3.isSelected() ) drg='G'; rez=Izracunavanje.rezultat( tokeni ); if ( duzina_varijable==0 ) { for ( int i=0; i<rez.size(); i++ ) rezultat.append( (String)rez.elementAt(i) + "\n" ); } else { double vrijednost; String vrijednost_str; vrijednost_str=(String)(rez.elementAt( rez.size()-1 )); vrijednost_str=vrijednost_str.trim(); if ( vrijednost_str.equals( "Infinity" ) ) vrijednost=Double.POSITIVE_INFINITY; else if ( vrijednost_str.equals( "-Infinity" ) ) vrijednost=Double.NEGATIVE_INFINITY; else if ( vrijednost_str.equals( "NaN" ) ) vrijednost=Double.NaN; else vrijednost=Double.parseDouble( (String)(rez.elementAt( rez.size()-1 )) ); rezultat.append( varijabla + " = " + vrijednost ); dodjeljivanje( varijabla, vrijednost ); } } else if ( e.getKeyCode()==KeyEvent.VK_N ) { String spoj; spoj=Izracunavanje.spoj_tokena( tokeni ); rezultat.append( spoj ); } else if ( e.getKeyCode()==KeyEvent.VK_P ) { Vector rez; rez=Izracunavanje.ispis_tokena( tokeni ); for ( int i=0; i<rez.size(); i++ ) rezultat.append( (String)rez.elementAt(i) + "\n" ); } else if ( e.getKeyCode()==KeyEvent.VK_E ) { if ( jRadioButtonMenuItem1.isSelected() ) drg='D'; else if ( jRadioButtonMenuItem2.isSelected() ) drg='R'; else if ( jRadioButtonMenuItem3.isSelected() ) drg='G'; Vector rez; rez=Izracunavanje.rezultat( tokeni ); String x=((String)rez.elementAt( rez.size()-1 )).trim(); rezultat.append( x ); long l; try { l=(long)Double.parseDouble( x ); } catch ( Exception eee ) { l=Long.MIN_VALUE; } if ( Integer.MIN_VALUE<=l && l<=Integer.MAX_VALUE ) { if ( l<0 ) l=l+4294967296L; rezultat.setText( "" ); rezultat.append( "Dec = "+x+"\n"); /* if ( String.valueOf ( Double.parseDouble( x ) ).indexOf( "E" )!=-1 ) rezultat.append( "\nExp="+Double.parseDouble( x ) ); */ rezultat.append( "\nHex = "+Matematika.broj_baza( l, 16 ) ); rezultat.append( "\nOct = "+Matematika.broj_baza( l, 8 ) ); rezultat.append( "\nBin = "+Matematika.broj_baza( l, 2 ) + "\n" ); for ( int z=9; z>=3; z-- ) if ( z!=8 ) rezultat.append( "\nBase"+z+" = "+Matematika.broj_baza( l, z ) ); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -