/* ************************************************************************
 * Applet para calcular los factores primos de un número entero. Usa la
 * clase TeorNum.
 * 
 * Rodolfo Valeiras Reina, 5 de enero de 2001.
 * ************************************************************************
 * 
 * <applet code="Factores" width=400 height=160>
 * </applet>
 */
import java.applet.*;
import java.awt.*;
public class Factores extends Applet {
    Label L_Mensajes;
    TextField T_Numero;
    public void init() {
        Color C = new Color(0xCFC8FF);
        setBackground(C);
        setLayout(null);
        setFont(new Font("Helvetica", Font.PLAIN, 14));
        Dimension d = size();
        Label L_Numero = new Label("Número: ", Label.RIGHT);
        T_Numero = new TextField(8);
        T_Numero.setBackground(Color.white);
        Button B_Primo = new Button("¿Es primo?");
        Button B_Factores = new Button("Factores");
        add(L_Numero);
        add(T_Numero);
        add(B_Primo);
        add(B_Factores);
        int Espacio = 20, w1 = d.width / 3;
        L_Numero   . reshape( 0, d.height / 3, w1, 30);
        T_Numero   . reshape(w1, d.height / 3, w1, 30);
        B_Primo    . reshape(  (d.width-90)/3 , d.height / 3 + 30 + Espacio, 90, 30);
        B_Factores . reshape(2*(d.width-90)/3 , d.height / 3 + 30 + Espacio, 90, 30);
        L_Mensajes = new Label("Escribe un número entero mayor que 1", Label.CENTER);
        add(L_Mensajes);
        L_Mensajes.reshape(0, 10, 400, 30);
    }
    public boolean action(Event e, Object o) {
        double dNum;
        int iNum, Fact[];
        Double N;
        try {
            N = Double.valueOf(T_Numero.getText());
        }
        catch (NumberFormatException ex) {
            L_Mensajes.setText("Debes escribir un número entero mayor que 1");
            return false;
        }
        dNum = N.doubleValue();
        if ((dNum > 1) && (dNum - Math.floor(dNum) == 0) && (dNum <= Integer.MAX_VALUE)) {
            iNum = (int) dNum;
        }
        else {
            if (dNum > Integer.MAX_VALUE) {
                L_Mensajes.setText("El número es demasiado grande");
            }
            else {
                L_Mensajes.setText("Debes escribir un número entero mayor que 1");
            }
            return false;
        }
        if (("Factores").equals(o)) {
            String str = "";
            char ch;
            Fact = TeorNum.Factores(iNum);
            for (int i = 0; i < Fact.length; i += 2) {
                if (i < Fact.length - 2) {ch = '·';} else {ch = ' ';}
                if (Fact[i+1] == 1) {
                    str += ("" + Fact[i] + ch);
                }
                else {
                    str += ("" + Fact[i] + "^" + Fact[i+1] + ch);
                }
            }
            L_Mensajes.setText(iNum + " = " + str);
        }
        else {
            if (TeorNum.EsPrimo(iNum)) {
                L_Mensajes.setText("El número " + iNum + " es primo");
            }
            else {
                L_Mensajes.setText("El número " + iNum + " no es primo");
            }
        }
        return false;
    }
}
