import java.applet.*; import java.awt.*; import java.awt.event.*; public class fraction extends Applet implements Runnable{ Thread th = null; Image os; Graphics og; int td[][] = {{0,0,0,0,-1},{0,0,0,0,0},{-1,-1,-1,-1,-1},{1,2,3,4,-1},{5,6,7,8,9}}; int fd[] = new int[8]; int bs,bb; Font f; FontMetrics fm; int fg,sw,ef; int px,py,mx,my; int dd,df; public void init(){ os = createImage(360,210); og = os.getGraphics(); setBackground(Color.white); f = new Font("",Font.PLAIN,30); fm = getFontMetrics(f); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ py = (e.getY() - 30) / 30; if((py == 0) || (py == 3)){ px = (e.getX() - 45) / 30; }else{ px = (e.getX() - 30) / 30; } if(df == 0){ if(td[py][px] > 0){ dd = td[py][px]; td[py][px] = 0; df = 1; } }else{ if(td[py][px] > 0){ sw = td[py][px]; td[py][px] = dd; dd = sw; }else{ if(td[py][px] == 0){ td[py][px] = dd; dd = 0; df = 0; } } } repaint(); } } ); addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ mx = e.getX()-10; my = e.getY()+5; repaint(); } } ); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,360,210); og.setFont(f); og.setColor(Color.black); for(int p1 = 0;p1 < 5;p1 ++){ for(int p2 = 0;p2 < 5;p2 ++){ if(td[p2][p1] == 0){ og.setColor(Color.lightGray); if(p2 < 2){ if((p2 == 0) || (p2 == 3)){ og.fillRect(30*p1+45,30*p2+34,28,28); }else{ og.fillRect(30*p1+30,30*p2+36,28,28); } } }else if(td[p2][p1] == -1){ }else{ og.setColor(Color.black); if((p2 == 0) || (p2 == 3)){ og.drawString(""+td[p2][p1],30*p1+52,30*p2+60); }else{ og.drawString(""+td[p2][p1],30*p1+37,30*p2+60); } } } } og.setColor(Color.black); og.drawLine(30,64,180,64); og.drawString("=",195,75); fg = 1; for(int c1 = 0;c1 < 5;c1 ++){ for(int c2 = 0;c2 < 2;c2 ++){ fg = fg * td[c2][c1]; } } if(fg != 0){ bs = 1000*td[0][0]+100*td[0][1]+10*td[0][2]+td[0][3]; bb = 10000*td[1][0]+1000*td[1][1]+100*td[1][2]+10*td[1][3]+td[1][4]; do{ ef = 0; for(int ch = bs;ch > 1;ch --){ if((bs % ch == 0) && (bb % ch == 0)){ bs = bs / ch; bb = bb / ch; ef = 1; } } }while(ef == 1); if(bs == 1)fd[bb-2] = 1; og.drawString(""+bs,225+fm.stringWidth(Integer.toString(bb))/2-fm.stringWidth(Integer.toString(bs))/2,60); og.drawString(""+bb,225,90); og.drawLine(220,64,230+fm.stringWidth(Integer.toString(bb)),64); } og.setColor(Color.black); if(df == 1)og.drawString(""+dd,mx,my); og.setFont(new Font("",Font.BOLD,20)); for(int p1 = 0;p1 < 8;p1 ++){ if(fd[p1] == 0){ og.setColor(Color.gray); }else{ og.setColor(Color.blue); } og.drawString(""+(p1+2),35*p1+225-140*(p1/4),140+40*(p1/4)); og.drawString("1",35*p1+210-140*(p1/4),130+40*(p1/4)); og.drawLine(35*p1+215-140*(p1/4),140+40*(p1/4),35*p1+225-140*(p1/4),120+40*(p1/4)); } g.drawImage(os,0,0,this); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void stop(){ th = null; } public void run(){ while(th != null){ try{ Thread.sleep(100); } catch (InterruptedException e){ } } } public void update( Graphics g ){ paint( g ) ; } }