Programeer opdrachtenOpdracht : opdr7a_januz.txt

Terug naar de inzendingen
Opdracht 7a,Jan van den Ende
19 Dec 2009
 Hier mijn inzending in Java (succes met nakijken, Pascal wink)
 Er zitten een aantal minder efficiente methoden tussen helaas.
 1 
*****worteltrekken****
  
 2/**Wortels trekken
 3*@author Jan van den Ende
 4*19-12-2009
 5*/
 6
 7import java.util.ArrayList;
 8
 9public class OpdrachtA {
 10     ArrayList al = new ArrayList(); //slaat helaas alleen objecten op, dus ik sla de getallen op als string
 11     int priem = 2;
 12     int tmp;
 13     int voorWortel = 1;
 14     int achterWortel = 1;
 15     
 16     public static void main(String[] args){
 17     new OpdrachtA(args);
 18     }
 19     public OpdrachtA(String[] args){
 20      if(args.length != 1)
 21           System.out.println("Gebruik: java OpdrachtA ");
 22      else{
 23           if(Integer.valueOf(args[0]).intValue() > 0){
 24            delen(Integer.valueOf(args[0]).intValue());
 25            geefOplossing();
 26           }
 27           else
 28            System.out.println("Geef een getal op dat groter is dan nul");
 29      }
 30     }
 31     //post: bouwt de ArrayList om tot de uitkomst
 32     public void geefOplossing(){
 33      if (al.size() > 1){
 34           if(al.get(0).equals(al.get(1))){
 35            voorWortel = (voorWortel * Integer.parseInt((String) al.get(0)));
 36            al.remove(0);
 37            al.remove(0);
 38            geefOplossing();
 39           }
 40           else{
 41            achterWortel *= Integer.parseInt((String) al.get(0));
 42            al.remove(0);
 43            geefOplossing();
 44           }
 45      }
 46        
 47      else{
 48           if(al.size() == 1){
 49            achterWortel *= Integer.parseInt((String) al.get(0));
 50            al.remove(0);
 51            geefOplossing();
 52           }
 53           else{
 54            if(achterWortel == 1)
 55             System.out.println(voorWortel);
 56            else if(voorWortel == 1)
 57             System.out.println("sqrt("+achterWortel+")");
 58            else
 59             System.out.println(voorWortel+" * sqrt("+achterWortel+")");
 60           }
 61      }
 62     }
 63     
 64     //kijken of een getal deelbaar is door een priemgetal.
 65     //Zoniet ga naar het volgende priemgetal en probeer opnieuw.
 66     public void delen(int getal){
 67      tmp = getal;
 68      if(tmp == 1){
 69          return;
 70      }
 71      else{
 72           if(tmp % priem == 0){
 73            al.add(Integer.toString(priem));
 74            tmp = (getal / priem);
 75            delen(tmp);
 76            
 77           }
 78           else{
 79            nextPrime();
 80            delen(getal);
 81           }
 82      }
 83     }
 84     
 85     /*post:retourneert true als el een priemgetal is
 86     *retourneert true als el maar 2 delers heeft, retourneert false als dat niet zo is.*/     
 87     public boolean isPrime(int el){
 88      int count = 0;
 89      for(int divisor = 1; divisor <= el; divisor++)
 90           if (el % divisor == 0)
 91            count++;
 92           //            als er twee getallen zijn die deelbaar zijn door de
 93           //            divisor, dan is het een priemgetal
 94           return (count == 2);
 95     }
 96     
 97     //post. zoek het volgende priemgetal op
 98     public void nextPrime(){
 99      priem++;
 100      while (!isPrime(priem)){
 101           priem++;
 102      }
 103     }        
 104}
 
 
Mijn commentaar
 
 Jan, Hoewel ik aanvankelijk dacht dat je uitwerking een geporteerde versie van
 mijn variant was, heb je toch aardig wat moeten knutselen je java
 implementatie aan de gang te krijgen.
 Je geeft keurig aan hoe en waarom (documentatie) en je code is goed leesbaar.
 
 Dank voor je inzending.