import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.border.*;

/**
 * Title:
 * Description:
 * Copyright:    Copyright (c) 2001
 * Company:
 * @author
 * @version 1.0
 */

public class pcApp extends JApplet implements ActionListener {

double n, r;

public void actionPerformed(ActionEvent e)
{
  if(e.getSource()==btnCalculate)
  {
    double n = Double.parseDouble(jTextField1.getText());
    double r = Double.parseDouble(jTextField2.getText());
    jLabelNW.setText((int)permRep(n,r)+"");
    jLabelNE.setText((int)permNoRep(n,r)+"");
    jLabelSW.setText((int)combRep(n,r)+"");
    jLabelSE.setText((int)combNoRep(n,r)+"");
  }
}
boolean isStandalone = false;
  GridLayout gridLayout1 = new GridLayout();
  JLabel jLabel2 = new JLabel();
  JLabel jLabelNE = new JLabel();
  JLabel lblRCombs = new JLabel();
  JLabel lblNval = new JLabel();
  JLabel lblFiller = new JLabel();
  JLabel lblRepAllowed = new JLabel();
  JLabel lblRPerm = new JLabel();
  JLabel lblRepNotAllow = new JLabel();
  JButton btnCalculate = new JButton();
  TitledBorder titledBorder1;
  TitledBorder titledBorder2;
  TitledBorder titledBorder3;
  Border border1;
  Border border2;
  JLabel jLabelSW = new JLabel();
  JLabel jLabelNW = new JLabel();
  JLabel lblHold4 = new JLabel();
  JTextField jTextField1 = new JTextField();
  TitledBorder titledBorder4;
  Border border3;
  JTextField jTextField2 = new JTextField();
  JLabel jLabel4 = new JLabel();
  JLabel jLabelSE = new JLabel();
  /**Get a parameter value*/
  public String getParameter(String key, String def) {
    return isStandalone ? System.getProperty(key, def) :
      (getParameter(key) != null ? getParameter(key) : def);
  }

  /**Construct the applet*/
  public pcApp() {
  }
  /**Initialize the applet*/
  public void init() {



    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  /**Component initialization*/
  private void jbInit() throws Exception {
    titledBorder1 = new TitledBorder("");
    titledBorder2 = new TitledBorder("");
    titledBorder3 = new TitledBorder("");
    border1 = BorderFactory.createMatteBorder(1,1,1,1,SystemColor.control);
    border2 = BorderFactory.createMatteBorder(1,1,1,1,Color.lightGray);
    titledBorder4 = new TitledBorder("");
    border3 = BorderFactory.createCompoundBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.white,Color.white,new Color(178, 178, 178),new Color(124, 124, 124)),BorderFactory.createEmptyBorder(1,1,1,1));
    lblRepNotAllow.setBackground(new Color(156, 207, 255));
    lblRepNotAllow.setFont(new java.awt.Font("SansSerif", 1, 12));
    lblRepNotAllow.setForeground(Color.black);
    lblRepNotAllow.setBorder(BorderFactory.createLineBorder(Color.black));
    lblRepNotAllow.setOpaque(true);
    lblRepNotAllow.setHorizontalAlignment(SwingConstants.CENTER);
    lblRepNotAllow.setText("Repetition Not Allowed");
    lblRPerm.setBackground(new Color(156, 207, 255));
    lblRPerm.setFont(new java.awt.Font("SansSerif", 1, 12));
    lblRPerm.setForeground(Color.black);
    lblRPerm.setBorder(BorderFactory.createLineBorder(Color.black));
    lblRPerm.setOpaque(true);
    lblRPerm.setHorizontalAlignment(SwingConstants.CENTER);
    lblRPerm.setText("r-permutations");
    lblRepAllowed.setBackground(new Color(156, 207, 255));
    lblRepAllowed.setFont(new java.awt.Font("SansSerif", 1, 12));
    lblRepAllowed.setForeground(Color.black);
    lblRepAllowed.setBorder(BorderFactory.createLineBorder(Color.black));
    lblRepAllowed.setOpaque(true);
    lblRepAllowed.setHorizontalAlignment(SwingConstants.CENTER);
    lblRepAllowed.setText("Repetition Allowed");
    lblFiller.setBackground(SystemColor.control);
    lblFiller.setFont(new java.awt.Font("SansSerif", 1, 12));
    lblFiller.setBorder(BorderFactory.createLineBorder(Color.black));
    lblFiller.setOpaque(true);
    lblFiller.setHorizontalAlignment(SwingConstants.CENTER);
    lblFiller.setText("n = " + (int)n + ", r = " + (int)r);
    lblNval.setFont(new java.awt.Font("Dialog", 1, 11));
    lblNval.setForeground(Color.gray);
    lblNval.setHorizontalAlignment(SwingConstants.RIGHT);
    lblNval.setText("Enter a value for n:");
    lblRCombs.setBackground(new Color(156, 207, 255));
    lblRCombs.setFont(new java.awt.Font("SansSerif", 1, 12));
    lblRCombs.setForeground(Color.black);
    lblRCombs.setBorder(BorderFactory.createLineBorder(Color.black));
    lblRCombs.setOpaque(true);
    lblRCombs.setHorizontalAlignment(SwingConstants.CENTER);
    lblRCombs.setText("r-combinations");
    jLabelNE.setBackground(new Color(204, 204, 204));
    jLabelNE.setBorder(border1);
    jLabelNE.setHorizontalAlignment(SwingConstants.CENTER);
    jLabelNE.setText("");
    gridLayout1.setRows(5);
    gridLayout1.setColumns(3);
    gridLayout1.setHgap(3);
    gridLayout1.setVgap(3);
    this.getContentPane().setBackground(Color.white);
    this.setSize(new Dimension(455, 165));
    this.getContentPane().setLayout(gridLayout1);
    btnCalculate.setBorder(BorderFactory.createEtchedBorder());
    btnCalculate.setText("Calculate!");
    btnCalculate.addActionListener(this);
    jLabelSW.setBorder(border1);
    jLabelSW.setHorizontalAlignment(SwingConstants.CENTER);
    jLabelSW.setText("");
    jLabelNW.setBorder(border1);
    jLabelNW.setHorizontalAlignment(SwingConstants.CENTER);
    jLabelNW.setText("");
    jTextField1.setFont(new java.awt.Font("DialogInput", 1, 12));
    jTextField1.setBorder(border3);
    jTextField1.setText("");
    jTextField2.setFont(new java.awt.Font("DialogInput", 1, 12));
    jTextField2.setBorder(border3);
    jTextField2.setText("");
    jLabel4.setFont(new java.awt.Font("SansSerif", 1, 11));
    jLabel4.setForeground(Color.gray);
    jLabel4.setHorizontalAlignment(SwingConstants.RIGHT);
    jLabel4.setText("Enter a value for r:");

    jLabelSE.setBorder(border1);
    jLabelSE.setHorizontalAlignment(SwingConstants.CENTER);
    jLabelSE.setText("");
    this.getContentPane().add(lblFiller, null);
    this.getContentPane().add(lblRepAllowed, null);
    this.getContentPane().add(lblRepNotAllow, null);
    this.getContentPane().add(lblRCombs, null);
    this.getContentPane().add(jLabelNW, null);
    this.getContentPane().add(jLabelNE, null);
    this.getContentPane().add(lblRPerm, null);
    this.getContentPane().add(jLabelSW, null);
    this.getContentPane().add(jLabelSE, null);
    this.getContentPane().add(btnCalculate, null);
    this.getContentPane().add(lblNval, null);
    this.getContentPane().add(jTextField1, null);
    this.getContentPane().add(lblHold4, null);
    this.getContentPane().add(jLabel4, null);
    this.getContentPane().add(jTextField2, null);
  }
  /**Get Applet information*/
  public String getAppletInfo() {
    return "Applet Information";
  }
  /**Get parameter info*/
  public String[][] getParameterInfo() {
    return null;
  }

  //static initializer for setting look & feel
  static {
    try {
      //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
    }
    catch(Exception e) {
    }
  }

  public double fac( double x )
  {
    if( x == 1)
      return x;
    else
    {
      return x*fac(x-1);
    }
  }

  public double permRep( double n, double r )
  {
    return Math.pow(n, r);
  }

  public double permNoRep( double n, double r )
  {
    return (fac(n)/fac(n-r));
  }

  public double combRep( double n, double r )
  {
    return (fac(n+r-1)/(fac(r)*fac(n-1)));
  }

  public double combNoRep( double n, double r )
  {
    return (fac(n)/(fac(r)*fac(n-r)));
  }

}
