Monday, December 26, 2016

Bab 6. Soal & Penyelesaian Java


6
Metode






Metode adalah suatu runtun deklarasi dan statemen yang dapat dieksekusi dan dibungkus bersama menjadi program-mini sederhana. Dalam beberapa bahasa pemrograman lain, metode dikenal dengan fungsi, prosedur, subrutin, atau subprogram.

Soal dan Penyelesaian
1.       Tulislah sebuah program yang menghitung pangkat tiga atas suatu angka.

Penyelesaian

public class MetodeKubik {
    public static void main(String[] args) {
        for (int i = 0; i < 6; i++)
            System.out.println ( i + "\t" + kubik(i));
    }

    static int kubik(int n) {
        return n*n*n;
    }
}

Keluaran Program

0      0
1      1
2      8
3      27
4      64
5      125

2.       Tulislah sebuah program yang menguji sebuah metode min yang menghasilkan integer minimum dari kedua argumen integernya.

Penyelesaian

import java.util.Random;
public class MetodeMin {
    public static void main(String[] args) {
        Random acak = new Random();
   
        for (int i = 0; i < 5; i++) {
            float x = acak.nextFloat();
            int m = Math.round(100*x);
            x = acak.nextFloat();
            int n = Math.round(100*x);
            int y = min(m, n);
            System.out.println("min("+ m + ", "+ n + " ) = "  + y);
        }
    }

    static int min(int x, int y) {
        if (x < y) return x;
        else return y;
    }
}

Keluaran Program

min(34, 96 ) = 34
min(56, 33 ) = 33
min(68, 65 ) = 65
min(99, 79 ) = 79
min(20, 84 ) = 20

3.       Tulislah sebuah program yang memiliki sebuah metode bernama f dan mengimplementasikan fungsi faktorial. Metode tersebut juga memiliki satu variabel lokal f bertipe long.

Penyelesaian

public class Metodef {
    public static void main(String[] args) {
        for (int i = 0; i < 9; i++)
            System.out.println("f("+ i + ") = " + f(i));
    }

    static long f(int n) {
        long f = 1;
        while (n > 1)
            f *= n--;
        return f;
    }
}

Keluaran Program

f(0) = 1
f(1) = 1
f(2) = 2
f(3) = 6
f(4) = 24
f(5) = 120
f(6) = 720
f(7) = 5040
f(8) = 40320

4.       Tulislah suatu program untuk menghitung permutasi.



Penyelesaian

public class MetodePermutasi {
    public static void main(String[ ] args) {
        for (int i = 0; i < 9 ; i++) {
            for (int j = 0; j <= i; j++)
                System.out.print(p(i,j) + "\t");
            System.out.println();
        }
    }
   
    static long p(int n, int k) {
        long p = 1;
        for (int i = 0; i < k; i++)
            p *= n--;
        return p;
    }
}

Keluaran Program

1     
1      1     
1      2      2     
1      3      6      6     
1      4      12     24     24    
1      5      20     60     120    120   
1      6      30     120    360    720    720   
1      7      42     210    840    2520   5040   5040  
1      8      56     336    1680   6720   20160  40320  40320

5.       Tulis-ulanglah program pada soal no. 4, dimana di dalamnya terdapat suatu metode yang memanggil metode lain.

Penyelesaian

public class MetodePanggilMetodeLain {
    public static void main(String[] args) {
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j <= i; j++)
                System.out.print(p(i, j) + "\t");
            System.out.println();
        }
    }

    static long p(int n, int k) {
        return f (n)/ f (n-k);
    }

    static long f (int n) {
        long f = 1;
        while (n > 1)
            f *= n--;
        return f;
    }
}

Keluaran Program
1     
1      1     
1      2      2     
1      3      6      6     
1      4      12     24     24    
1      5      20     60     120    120   
1      6      30     120    360    720    720   
1      7      42     210    840    2520   5040   5040  
1      8      56     336    1680   6720   20160  40320  40320 

6.       Tulislah suatu program untuk menghitung kombinasi.


Penyelesaian

public class MetodeKombinasi {
    public static void main(String[] args) {
        for (int i = 0; i < 9 ; i++) {
            for (int j = 0; j <= i; j++)
                System.out.print(c(i,j) + "\t");
            System.out.println();
        }
    }
   
    static long c(int n, int k) {
        return p(n, k)/f(k) ;
    }
   
    static long f(int n) {
        long f = 1;
   
        while (n > 1)
            f *= n--;
        return f;
    }
   
    static long p(int n, int k) {
        long p = 1;

        for (int i = 0; i < k; i++)
            p *= n--;
        return p;
    }
}

Keluaran Program

1     
1      1     
1      2      1     
1      3      3      1     
1      4      6      4      1     
1      5      10     10     5      1     
1      6      15     20     15     6      1     
1      7      21     35     35     21     7      1     
1      8      28     56     70     56     28     8      1     

7.       Tulislah sebuah program yang memuat suatu metode yang memanggil dirinya sendiri (rekursif).

Penyelesaian

public class MetodeFaktorial {
    public static void main(String[] args) {
        for (int i = 0; i < 9; i++)
            System.out.println ("faktorial(" + i + ") =" + faktorial(i));

        try {System.in.read();}
        catch (Exception e) {}
    }

    static long faktorial(int n) {
        if (n < 2) return 1;
        return n*faktorial(n-1) ;
    }
}

Keluaran Program

faktorial(0) =1
faktorial(1) =1
faktorial(2) =2
faktorial(3) =6
faktorial(4) =24
faktorial(5) =120
faktorial(6) =720
faktorial(7) =5040
faktorial(8) =40320

8.       Metode boolean merupakan suatu metode yang menghasilkan nilai balik bertipe boolean. Metode seperti ini biasanya dipanggil sebagai ekspresi boolean yang dipakai untuk mengendalikan loop. Tulislah sebuah program yang mengilustrasikan penggunaan metode boolean.

Penyelesaian

public class MetodeBooleanPrima {
    public static void main(String[] args) {
        for (int i = 0; i < 80; i++)
            if (apaPrima(i)) System.out.print(i + " " ) ;
    }
   
    static boolean apaPrima(int n) {
        if (n < 2) return false;
        if (n == 2) return true;
        if (n%2 == 0) return false;

        for (int d = 3; d < Math.sqrt(n); d += 2)
            if (n%d == 0) return false;
        return true;
    }
}

Keluaran Program

2 3 5 7 9 11 13 17 19 23 25 29 31 37 41 43 47 49 53 59 61 67 71 73 79

9.       Metode void merupakan suatu metode yang menghasilkan tipe nilai balik void. Ini berarti bahwa metode ini tidak menghasilkan nilai balik apapun. Tulislah sebuah program yang mengilustrasikan penggunaan metode ini.

Penyelesaian

public class MetodeVoidTahun {
    public static void main(String[] args) {
        uji(1492);
        uji(1592);
        uji(1600);
        uji(1700);
        uji(1776);
        uji(1992);
        uji(1999);
        uji( 2000);
    }
   
    static boolean apaTahunLeap(int n) {
        if (n < 1582) return false;
        if (n%400 == 0) return true;
        if (n%100 == 0) return false;
        if (n%4 == 0) return true;
        return false;
    }
   
    static void uji(int n){
        if (apaTahunLeap(n)) System.out.println(n + " adalah tahun leap.");
        else System.out.println(n + " bukan tahun leap.");
    }
}

Keluaran Program

1492 bukan tahun leap.
1592 adalah tahun leap.
1600 adalah tahun leap.
1700 bukan tahun leap.
1776 adalah tahun leap.
1992 adalah tahun leap.
1999 bukan tahun leap.
2000 adalah tahun leap.

10.    Anda dapat menggunakan nama sama untuk metode-metode yang berbeda sepanjang metode-metode tersebut memiliki daftar tipe parameter yang berbeda. Teknik ini disebut dengan overload. Tulislah suatu program untuk mengilustrasikan penggunaan pengoverloadan metode ini.

Penyelesaian

import java.util.Random;
public class MetodeOverload {
    public static void main(String[] args){
        Random acak = new Random();
   
        for (int i = 0; i < 5; i++) {
            float x = acak.nextFloat();
            int a = Math.round(100*x);
            x = acak.nextFloat();
            int b = Math.round(100*x);
            x = acak.nextFloat();
            int c = Math.round(100*x);
            System.out.println("maks("+ a + ", " + b + ", " + c
                                + ")= " + maks(a, b, c));
        }
    }
   
    static int maks(int m, int n) {
        if (m > n) return m;
        return n;
    }
   
    static int maks(int n1, int n2, int n3) {
        return maks(maks(n1, n2), n3);
    }
}

Keluaran Program

maks(21, 69, 4)= 69
maks(40, 96, 59)= 96
maks(58, 32, 40)= 58
maks(42, 65, 48)= 65
maks(75, 13, 0)= 75

11.    Tulislah dan ujilah sebuah metode yang mengimplementasikan fungsi Babbage .

Penyelesaian

public class MetodeBabbage {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++)
            System.out.println(i + "\t" + babbage(i));
    }

    static int babbage(int x) {
        return x*x + x + 41;
    }
}

Keluaran Program

0      41
1      43
2      47
3      53
4      61
5      71
6      83
7      97
8      113
9      131

12.    Tulislah dan ujilah sebuah metode yang menghasilkan maksimum dari dua integer yang diberikan.

Penyelesaian

import java.util.Random;
public class MetodeMaksimum {
    public static void main(String[] args) {
        Random random = new Random();
   
        for (int i = 0; i < 5; i++) {
            float x = random.nextFloat();
            int m = Math.round(100*x);
            x = random.nextFloat();
            int n = Math.round(100*x);
            int y = maks(m, n);
            System.out.println("maks(" + m + ", " + n + ") = " + y);
        }
    }
   
    static int maks(int x, int y) {
        if (x < y) return x;
        else return y;
    }
}

Keluaran Program

maks(68, 29) = 29
maks(22, 84) = 22
maks(13, 69) = 13
maks(84, 95) = 84
maks(31, 58) = 31

13.    Tulislah dan ujilah sebuah metode yang menghasilkan maksimum dari tiga integer yang diberikan.

Penyelesaian

import java.util.Random;
public class MetodeMaksTigaInteger {
    public static void main(String[] args) {
        Random acak = new Random();
   
        for (int i = 0; i < 5; i++) {
            float x = acak.nextFloat();
            int n1 = Math.round(100*x);
            x = acak.nextFloat();
            int n2 = Math.round(100*x);
            x = acak.nextFloat();
            int n3 = Math.round(100*x);
            int y = maks(n1, n2, n3);
            System.out.println("maks(" + n1 + ", " + n2 + ", " + n3 + ") = " + y);
        }
    }
   
    static int maks(int x, int y, int z) {
        int m = x;
        if ( y > m) m = y;
        if (z > m) m = z;
        return m;
    }
}

Keluaran Program

maks(17, 74, 86) = 86
maks(90, 17, 54) = 90
maks(62, 46, 3) = 62
maks(66, 3, 39) = 66
maks(55, 4, 44) = 55

14.    Tulislah dan ujilah pada program yang sama sebuah metode yang menghasilkan nilai minimum dan metode lain yang menghasilkan maksimum, dimana kedua metode memiliki empat parameter yang diberikan.

Penyelesaian

import java.util.Random;
public class MetodeMaksMinEmpatParameter {
    public static void main(String[] args) {
        Random acak = new Random();
   
        for (int i = 0; i < 5; i++) {
            float x = acak.nextFloat();
            int n1 = Math.round(100*x);
            x = acak.nextFloat();
            int n2 = Math.round(100*x);
            x = acak.nextFloat();
            int n3 = Math.round(100*x);
            x = acak.nextFloat();
            int n4 = Math.round(100*x);
            System.out.println("min(" + n1 + ", " + n2 + ", " + n3 + ", "
              + n4 + ") = " + min(n1, n2, n3, n4));
            System.out.println("maks(" + n1 + ", " + n2 + ", " + n3 + ", "
       + n4 + ") = " + maks(n1, n2, n3, n4));
        }
    }

    static int min(int xl, int x2, int x3, int x4){
        int m = xl;
        if (x2 < m) m = x2;
        if (x3 < m) m = x3;
        if (x4 < m) m = x4;
        return m;
    }
   
    static int maks(int xl, int x2, int x3, int x4){
        int m = xl;
        if (x2 > m) m = x2;
        if (x3 > m) m = x3;
        if (x4 > m) m = x4;
        return m;
    }
}

Keluaran Program

min(26, 96, 31, 57) = 26
maks(26, 96, 31, 57) = 96
min(52, 94, 2, 10) = 2
maks(52, 94, 2, 10) = 94
min(56, 35, 46, 43) = 35
maks(56, 35, 46, 43) = 56
min(81, 10, 6, 71) = 6
maks(81, 10, 6, 71) = 81
min(92, 43, 32, 27) = 27
maks(92, 43, 32, 27) = 92

15.    Tulis dan ujilah sebuah metode yang mengimplementasikan fungsi permutasi menggunakan loop while, menggantikan loop for.

Penyelesaian

public class MetodePermutasiDenganWhile {
    public static void main(String[] args) {
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j <= i; j++)
                System.out.print(p(i,j) + "\t");
            System.out.println();
        }
    }
   
    static long p(int n, int k) {
        long p = 1;
        while (k--> 0)
            p *= n--;
        return p;
    }
}

Keluaran Program

1     
1      1     
1      2      2     
1      3      6      6     
1      4      12     24     24    
1      5      20     60     120    120   
1      6      30     120    360    720    720   
1      7      42     210    840    2520   5040   5040  
1      8      56     336    1680   6720   20160  40320  40320 

16.    Tulis dan ujilah sebuah metode yang mengimplementasikan fungsi kombinasi menggunakan definisi berikut:


Penyelesaian

public class MetodeKombinasiBaru {
    public static void main(String[] args) {
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j <= i; j++)
                System.out.print(c(i,j) + "\t");
            System.out.println();
        }
    }

    static long c(int n, int k) {
        return f(n)/(f(k)*f(n-k)) ;
    }
   
    static long f(int n) {
        long f = 1;
        while (n > 1)
            f *= n--;
        return f;
    }
}

Keluaran Program

1     
1      1     
1      2      1     
1      3      3      1     
1      4      6      4      1     
1      5      10     10     5      1     
1      6      15     20     15     6      1     
1      7      21     35     35     21     7      1     
1      8      28     56     70     56     28     8      1

17.    Tulis dan ujilah metode yang mengimplementasi fungsi pemangkatan.

Penyelesaian

public class MetodePangkat {
    public static void main(String[] args) {
        for (int n = -3; n < 7; n++)
            System.out.println(pangkat(2.0,n));
    }

    static double pangkat(double x, int n) {
        double p = 1.0;
   
        for (int i = 0; i < n; i++)
            p *= x;
        for (int i = 0; i < -n; i++)
            p /= x;

        return p;
    }
}

Keluaran Program

0.125
0.25
0.5
1.0
2.0
4.0
8.0
16.0
32.0
64.0

18.    Tulis dan ujilah metode yang mengimplementasikan fungsi GCD (greatest common divisor, pembagi bersama terbesar). Fungsi ini menghasilkan pembagi bersama terbesar dari dua angka.

Penyelesaian

import java.util.Random;
public class MetodeGCD {
    public static void main(String[] args) {
        Random acak = new Random();
   
        for (int i = 0 ; i < 9; i++) {
            float x = acak.nextFloat();
            int m = Math.round(100*x);
            x = acak.nextFloat();
            int n = Math.round(100*x);
            int g = gcd(m, n);

            System.out.println("gcd("+ m + ", " + n + ") =" + g
                + "  \t" + m + "/" + g + " = " + m/g
                + "  \t" + n + "/" + g + " = " + n/g);
        }
    }
   
    static int gcd(int m, int n) {
        while (m > 0 ) {
            if (m < n) {
                int temp = m;
                m = n;
                n = temp;
            }
            m -= n;
        }
        return n;
    }
}

Keluaran Program

gcd(75, 47) =1       75/1 = 75     47/1 = 47
gcd(37, 52) =1       37/1 = 37     52/1 = 52
gcd(45, 89) =1       45/1 = 45     89/1 = 89
gcd(31, 1) =1        31/1 = 31     1/1 = 1
gcd(78, 55) =1       78/1 = 78     55/1 = 55
gcd(56, 18) =2       56/2 = 28     18/2 = 9
gcd(34, 11) =1       34/1 = 34     11/1 = 11
gcd(99, 47) =1       99/1 = 99     47/1 = 47
gcd(81, 74) =1       81/1 = 81     74/1 = 74

19.    Tulis dan ujilah metode yang mengimplementasikan fungsi lcm (least common multiple, kelipatan bersama terkecil) atas dua angka. Sebagai contoh, lcm(24, 40) adalah 120. Gunakan formula



Penyelesaian

import java.util.Random;
public class MetodeLCM {
    public static void main(String[] args) {
        Random acak = new Random();

        for (int i = 0; i < 9; i++) {
            float x = acak.nextFloat();
            int m = Math.round(100*x);
            x = acak.nextFloat();
            int n = Math.round(100*x);
            int y = lcm(m, n);
           
            System.out.println("lcm("+ m + ", " + n + ") =" + y
                + "  \t" + y + "/" + m + " = " + y/m
                + "  \t" + y + "/" + n + " = " + y/n);
        }

        try { System.in.read();}
        catch (Exception e) { }
    }

    static int lcm(int m, int n) {
            return m*n/gcd(m,n);
    }

    static int gcd(int m, int n) {
        while (m > 0) {
            if (m < n) {
                int temp = m;
                m = n;
                n = temp;
            }
            m -= n;
        }
        return n;
    }
}

Keluaran Program

lcm(4, 41) =164      164/4 = 41    164/41 = 4
lcm(52, 71) =3692    3692/52 = 71         3692/71 = 52
lcm(25, 34) =850     850/25 = 34  850/34 = 25
lcm(61, 88) =5368    5368/61 = 88         5368/88 = 61
lcm(13, 51) =663     663/13 = 51  663/51 = 13
lcm(78, 78) =78      78/78 = 1     78/78 = 1
lcm(52, 48) =624     624/52 = 12  624/48 = 13
lcm(17, 38) =646     646/17 = 38  646/38 = 17
lcm(45, 50) =450     450/45 = 10  450/50 = 9



20.    Tulislah dan ujilah metode yang menghasilkan dijit pada urutan ke-k dari integer positif n yang diberikan. Sebagai contoh, dijit(846590, 3) akan menghasilkan 6, dan dijit(86421, 7) akan menghasilkan 0.

Penyelesaian

import java.util.Random;
public class MetodeDijit {
    public static void main(String[] args) {
        Random acak = new Random();

        float x = acak.nextFloat();
        long n = Math.round(10000000000L*x);

        System.out.println("dijit 9 dari " + n + " adalah " + dijit(n,9));
        System.out.println("dijit 8 dari " + n + " adalah " + dijit(n,8));
        System.out.println("dijit 7 dari " + n + " adalah " + dijit(n,7));
        System.out.println("dijit 2 dari " + n + " adalah " + dijit(n,2));
        System.out.println("dijit 1 dari " + n + " adalah " + dijit(n,1));
        System.out.println("dijit 0 dari " + n + " adalah " + dijit(n,0));
    }

    static int dijit(long n, int k) {
        for (int i = 0; i < k; i++)
            n /= 10;
        return (int)n%10;
    }
}

Keluaran Program

dijit 9 dari 2147483647 adalah 2
dijit 8 dari 2147483647 adalah 1
dijit 7 dari 2147483647 adalah 4
dijit 2 dari 2147483647 adalah 6
dijit 1 dari 2147483647 adalah 4
dijit 0 dari 2147483647 adalah 7

21.    Tulis dan ujilah metode yang mengimplementasikan fungsi Fibonacci secara rekursif.

Penyelesaian

public class MetodeFibonacci {
    public static void main(String[] args) {
        for (int i = 0; i < 17; i++)
            System.out.print(fib(i)+ " ") ;

        try { System.in.read();}
        catch (Exception e) { }
    }

    static long fib(int n) {
        if (n < 2) return n;
        return fib(n-1) + fib(n-2);
    }
}

Keluaran Program

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

22.    Implementasikanlah fungsi gcd secara rekursif. Anda harus memeriksa keluaran program Anda dengan memanggil kedua versi fungsi gcd (iteratif dan rekursif).

Penyelesaian

import java. util.Random;
public class MetodeGCDRekursif {
    public static void main(String[] args) {
        Random acak = new Random();
   
        for (int i = 0 ; i < 9; i++) {
            float x = acak.nextFloat();
            long m = Math.round(100*x);
            x = acak.nextFloat();
            long n = Math.round(100*x);
            long g1 = gcd1(m, n);

            System.out.println("gcd("+ m + ", " + n + ") =" + g1
                + "  \t" + m + "/" + g1 + " = " + m/g1
                + "  \t" + n + "/" + g1 + " = " + n/g1);
           
            long g2 = gcd2(m, n);
            System.out.println("gcd("+ m + ", " + n + ") =" + g2
                + "  \t" + m + "/" + g2 + " = " + m/g2
                + "  \t" + n + "/" + g2 + " = " + n/g2);
        }
    }
       
    static long gcd1(long m, long n) {
        while (m > 0 ) {
            if (m < n) {
                long temp = m;
                m = n;
                n = temp;
            }
        m -= n;
        }
        return n;
    }

    static long gcd2 (long m, long n) {
        if (m < 1) return n;
        if (m < n) return gcd2 (n, m);

        return gcd2 (m-n,n );
    }
}

Keluaran Program

gcd(99, 24) =3       99/3 = 33     24/3 = 8
gcd(99, 24) =3       99/3 = 33     24/3 = 8
gcd(81, 74) =1       81/1 = 81     74/1 = 74
gcd(81, 74) =1       81/1 = 81     74/1 = 74
gcd(37, 73) =1       37/1 = 37     73/1 = 73
gcd(37, 73) =1       37/1 = 37     73/1 = 73
gcd(53, 57) =1       53/1 = 53     57/1 = 57
gcd(53, 57) =1       53/1 = 53     57/1 = 57
gcd(6, 30) =6        6/6 = 1       30/6 = 5
gcd(6, 30) =6        6/6 = 1       30/6 = 5
gcd(35, 33) =1       35/1 = 35     33/1 = 33
gcd(35, 33) =1       35/1 = 35     33/1 = 33
gcd(83, 67) =1       83/1 = 83     67/1 = 67
gcd(83, 67) =1       83/1 = 83     67/1 = 67
gcd(88, 31) =1       88/1 = 88     31/1 = 31
gcd(88, 31) =1       88/1 = 88     31/1 = 31
gcd(38, 39) =1       38/1 = 38     39/1 = 39
gcd(38, 39) =1       38/1 = 38     39/1 = 39

23.    Implementasikanlah fungsi pemangkatan secara rekursif. Ujilah program Anda dengan juga memanggil metode Math.pow untuk memeriksa validitas hasil.

Penyelesaian

public class MetodePangkatRekursif {
    public static void main (String [] args){
        for (int n = -3; n < 7; n++)
            System.out.println("\t" + n + "\t"+ pangkat(2.0, n)
                + "\t" + Math.pow(2.0,n));
    }
   
    static double pangkat(double x, int n) {
        if (n == 0) return 1.0;
        if (n < 0) return pangkat(1.0/x, - n ) ;

        return x*pangkat(x, n-1);
    }
}

Keluaran Program

-3     0.125  0.125
       -2     0.25   0.25
       -1     0.5    0.5
       0      1.0    1.0
       1      2.0    2.0
       2      4.0    4.0
       3      8.0    8.0
       4      16.0   16.0
       5      32.0   32.0
       6      64.0   64.0

24.    Tulis dan ujilah metode rekursif yang menghasilkan angka kuadrat ke-n.

Penyelesaian

public class MetodeKuadrat {
    public static void main(String[] args) {
        for (int i = 0; i < 200; i++)
            if (apaKuadrat(i)) System.out.println(i + " adalah angkat kuadrat.");
    }

    static boolean apaKuadrat(long n) {
        long jum = 0;
        long i = 1;

        while (jum < n) {
            jum += i;
            i += 2 ;
        }
        return (jum == n);
    }
}

Keluaran Program

0 adalah angkat kuadrat.
1 adalah angkat kuadrat.
4 adalah angkat kuadrat.
9 adalah angkat kuadrat.
16 adalah angkat kuadrat.
25 adalah angkat kuadrat.
36 adalah angkat kuadrat.
49 adalah angkat kuadrat.
64 adalah angkat kuadrat.
81 adalah angkat kuadrat.
100 adalah angkat kuadrat.
121 adalah angkat kuadrat.
144 adalah angkat kuadrat.
169 adalah angkat kuadrat.
196 adalah angkat kuadrat.

25.    Implementasikanlah fungsi Babbage secara rekursif. Ujilah program Anda dengan memanggil kedua versi fungsi (iteratif dan rekursif) untuk memeriksa hasil program.

Penyelesaian

public class MetodeBabbageRekursif {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++)
            System.out.println("\tBabbage(" + i + ") = " + f2(i)
                + " = " + f1(i));
    }

    static long f2(int n) {
        if (n < 1) return 41;
        return f2(n-1) + 2*n;
    }
   
    static long f1(int n) {
        return n*n + n + 41;
    }
}

Keluaran Program

Babbage(0) = 41 = 41
       Babbage(1) = 43 = 43
       Babbage(2) = 47 = 47
       Babbage(3) = 53 = 53
       Babbage(4) = 61 = 61
       Babbage(5) = 71 = 71
       Babbage(6) = 83 = 83
       Babbage(7) = 97 = 97
       Babbage(8) = 113 = 113
       Babbage(9) = 131 = 131

26.    Tulis dan ujilah metode rekursif yang menghasilkan angka segitiga ke-n. Angka-angka segitiga adalah 0, 1, 3, 6, 10, 15, 21, 28, .... Perhatikan bahwa t(n) = t(n-1) + n untuk n > 1.

Penyelesaian

public class MetodeSegitiga {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++)
            System.out.println(i + "\t" + t(i));

        try { System.in.read(); }
        catch (Exception e) { }
    }

    static long t(int n) {
        if (n < 2 ) return n;
        return t(n-1) + n;
    }
}

Keluaran Program

0      0
1      1
2      3
3      6
4      10
5      15
6      21
7      28
8      36
9      45



No comments:

Post a Comment