//Copyright F.Beukers 2001 import java.awt.*; import java.awt.event.*; import java.applet.*; import java.lang.*; import java.math.*; public class bigCollatz extends Applet { static BigInteger mindrie = new BigInteger("-3"); static BigInteger mineen = new BigInteger("-1"); static BigInteger nul = new BigInteger("0"); static BigInteger een = new BigInteger("1"); static BigInteger drie = new BigInteger("3"); static BigInteger vijf = new BigInteger("5"); int fontsize=18; TextField text = new TextField("0",30); TextField vanaf = new TextField("0",4); TextField totaan = new TextField("100",4); TextArea bord = new TextArea(); Choice method = new Choice(); Choice mode = new Choice(); Choice digits = new Choice(); Button go = new Button("Go"); Font myFont = new Font("Dialog",Font.PLAIN,fontsize); public void init() { go.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dotheloop();} }); setLayout(new BorderLayout()); Panel p1 = new Panel(); Panel p2 = new Panel(); p1.setBackground(Color.pink); p2.setBackground(Color.pink); p1.setFont(myFont); text.setFont(myFont); vanaf.setFont(myFont); totaan.setFont(myFont); // bord.setFont(myFont); method.add("3n+1"); method.add("3n-1"); method.add("3n+3"); method.add("3n+5"); method.add("5n-3"); method.add("5n-1"); method.add("5n+1"); method.add("5n+3"); mode.add("long"); mode.add("short"); digits.add("decimal"); digits.add("binary"); p1.add(new Label("N =")); p1.add(text); p1.add(go); p2.add(new Label("Method:")); p2.add(method); p2.add(mode); p2.add(new Label(" Show from")); p2.add(vanaf); p2.add(new Label("to")); p2.add(totaan); p2.add(digits); bord.setSize(500,300); add("North",p1); add("South",p2); add("Center",bord); repaint(); } public void dotheloop() { BigInteger m, a=drie, b=een; int k, from=0, to=100, c=1, algo=1, radix=10; try {from = Integer.parseInt(vanaf.getText().trim());} catch(NumberFormatException err) { from=0; text.setText("0"); bord.append("Invalid start encountered\n");return;} try {to = Integer.parseInt(totaan.getText().trim());} catch(NumberFormatException err) { to=0; text.setText("100"); bord.append("Invalid end encountered\n");return;} try {m = new BigInteger(text.getText().trim());} catch(NumberFormatException err) { m=nul; text.setText("0"); bord.append("Invalid N encountered\n");return;} if(from<0) {bord.append("start must be >=0!\n"); return;} if(to<=from) {bord.append("end must be larger than start!\n"); return;} if(m.signum()<=0) {bord.append("N must be positive!\n"); return;} bord.selectAll(); bord.replaceRange("", bord.getSelectionStart(),bord.getSelectionEnd()); algo = method.getSelectedIndex(); switch(algo) { case 0: a=drie;b=een;break; case 1: a=drie;b=mineen;break; case 2: a=drie;b=drie;break; case 3: a=drie;b=vijf;break; case 4: a=vijf;b=mindrie;break; case 5: a=vijf;b=mineen;break; case 6: a=vijf;b=een;break; case 7: a=vijf;b=drie;break; } algo = mode.getSelectedIndex(); switch(algo) { case 0: c=0; break; case 1: c=1; break; } algo = digits.getSelectedIndex(); switch(algo) { case 0: radix=10;break; case 1: radix=2;break; } for (k=0;k<=to;k++) { if (k>=from) { bord.append(Integer.toString(k)+" :\t"); bord.append(m.toString(radix)+"\n"); } if(m.testBit(0)==true) { m=m.multiply(a); m=m.add(b); if(c>0) m=m.shiftRight(1); } else m=m.shiftRight(1); } } }