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 ) ;
}
}
