Saturday, October 15, 2016

Program Tebak Angka dalam bahasa Java

Halo algoritma!

Kalau pada postingan sebelumnya membagikan kode program tebak angka dalam bahasa C, kali ini adalah program tebak angka dalam bahasa Java. Kenapa postingannya dipisah? Biar nggak terlalu panjang bos! Hahaha....

Algoritma yang dipakai sama. Hanya bedanya ini menggunakan bahasa Java. Untuk penjelasannya silakan baca pada postingan sebelumnya ya.

Cekidot!


// nama file: TebakAngka.java

import java.util.Scanner;
import java.util.Random;

public class TebakAngka {
    public static void main(String args[]) {
        int MAX_ANGKA = 100;
        Scanner scanner = new Scanner(System.in);

        String mulai;
        int tebakan, angka_user, langkah;
        Random rand = new Random();

        do {
            angka_user = 0;
            langkah = 0;

            tebakan = rand.nextInt(MAX_ANGKA) + 1;

            while (angka_user != tebakan) {
                langkah++;
                System.out.print("Masukkan angka tebakan Anda: ");
                angka_user = scanner.nextInt();

                if (angka_user > tebakan) {
                    System.out.println("Uh! Kebesaran!");
                } else if (angka_user < tebakan) { 
                    System.out.println("Uh! Kekecilan!");
                } else {
                    System.out.println("Mantap! Anda menebak dalam " + langkah + " kali");
                }
            }

            System.out.print("Masih mau main lagi? (y jika ya) ");
            mulai = scanner.next();
            System.out.println();
            System.out.println();
            System.out.println();
        } while (mulai.equals("y"));
    }
}



Program Tebak Angka dalam Bahasa C

Hai mas bro dan mbak sis. Sudah lama juga ternyata nggak nulis tentang algoritma dan pemrograman.

Kali ini saya mas ganteng akan memberikan contoh kode program tebak angka dalam bahasa C. Tapi kali ini beda. Saya tidak membahas bagaimana algoritma sebuah program tebak angka tersebut. Sebagai gantinya saya berikan beberapa komentar di sana sini dengan harapan dapat memperjelas kode.

Inti dari program ini adalah bagaimana menghasilkan angka acak untuk ditebak oleh user. Dan program akan mengatakan apakah tebakan dari user itu kekecilan atau kebesaran sampai user menginput angka yang benar.

Cekidot!

#include <stdio.h>
#include <stdlib.h>
#define MAX_ANGKA (100 + 1)

int main() {
    char mulai;
    int tebakan, angka_user, langkah;

    time_t t;
    srand((unsigned) time(&t));

    // jalan terus sampai user menekan karakter selain y
    do {
        // inisialisasi angka_user dan langkah
        angka_user = 0;
        langkah = 0;

        // set angka tebakan
        tebakan = rand() % MAX_ANGKA;
        if (tebakan == 0) tebakan = 1;

        // ulangi terus sampai angka tebakan dan angka inputan user sama
        while (angka_user != tebakan) {
            // tambahkan jumlah langkah
            langkah++;
            printf("Masukkan angka tebakan Anda: ");
            scanf("%d", &angka_user);
            getchar(); // quick fix. setelah scanf harus ditambahkan getchar agar bisa jalan

            if (angka_user > tebakan) { // jika angka user terlalu besar
                printf("Uh! Kebesaran!\n");
            } else if (angka_user < tebakan) { // jika angka user terlalu kecil
                printf("Uh! Kekecilan!\n");
            } else { // jika sudah berhasil menebak. karena jika bukan "lebih dari" dan "kurang dari", berarti "sama dengan"
                printf("Mantap! Anda menebak dalam %d kali\n\n\n", langkah);
            }
        }

        // pertanyaan apakah mau main lagi?
        printf("Masih mau main lagi? (y jika ya) ");
        scanf("%c", &mulai);
        getchar();
    } while (mulai == 'y');

    return 0;
}

Friday, October 7, 2016

Algoritma dan Program Menghitung Luas dan Keliling Lingkaran

Algoritma dan program menghitung luas dan keliling lingkaran sangat mudah. Asalkan tahu rumusnya sudah bisa.

Implementasi Algoritma
1) Tentukan pi = 3.14
2) Masukkan jari-jari
3) luas = pi * r * r
4) keliling = 2 * pi * r
5) Slesai

Implementasi dalam bahasa Java

// nama file: LuasKelilingLingkaran.java

import java.util.Scanner;

public class LuasKelilingLingkaran {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        final double PI = 3.14;
        double r;
        double luas;
        double keliling;

        System.out.print("Masukkan jari-jari lingkaran: ");
        r = scanner.nextDouble();
        luas = PI * r * r;
        keliling = 2 * PI * r;

        System.out.format("Jari-jari = %.2f\n", r);
        System.out.format("Luas = %.2f\n", luas);
        System.out.format("Keliling = %.2f\n", keliling);
    }
}



Implementasi dalam Bahasa C


#include <stdio.h>
#include <stdlib.h>

#define PI 3.14

int main() {
    float r;
    float luas;
    float keliling;

    printf("Masukkan jari-jari = ");
    scanf("%f", &r);

    luas = PI * r * r;
    keliling = 2 * PI * r;

    printf("Jari-jari = %.2f\n", r);
    printf("Luas = %.2f\n", luas);
    printf("Keliling = %.2f\n", keliling);

    return 0;
}

Algoritma dan Program Deret Bilangan Fibonacci

Kaidah:
Deret bilangan Fibonacci adalah deret bilangan yang anggota sukunya merupakan penjumlahan dari dua suku sebelumnya.

Misalnya, suku ke-1 adalah 1 dan suku ke-2 adalah 1. Maka suku ke-3 adalah 2 (1 + 1 = 2). Dengan demikian deret fibonacci tersebut adalah:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ....


Penjelasan:
Untuk mendapatkan deret bilangan Fibonacci sampai suku ke-n, kita harus melakukan perulangan sampai n-kali.

Dalam perulangan tersebut, kita buat tiga buah variabel, misalnya a, b, dan c. Untuk variabel a kita beri nilai 1 sedangkan b kita beri nilai 0. Nilai dari variabel c adalah anggota bilangan fibonacci suku ke-n.

Untuk setiap perulangan, nilai c = a + b kemudian kita persiapkan nilai a dan b yang baru. Nilai a yang baru adalah nilai b, sedangkan nilai b yang baru adalah nilai c.

Bingung? Langsung aja yuk ke implementasinya.

Implementasi Algoritma:
1) Masukkan jumlah suku
2) Inisialisasi variabel a = 1, b = 0, dan c = 0. Juga nilai i = 1 untuk loop
3) c = a + b
4) Cetak nilai c
5) Persiapkan untuk nilai a dan b yang baru. a = b dan b = c
6) Tambahkan nilai i = i + 1
7) Jika i kurang dari atau sama dengan jumlah suku, maka lanjut ke langkah 3.
8) Selesai

Implementasi dalam Bahasa Java:

// nama file: Fibo.java

import java.util.Scanner;

public class Fibo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int suku;
        int a = 1;
        int b = 0;
        int c;

        System.out.print("Masukkan jumlah suku: ");
        suku = scanner.nextInt();

        for (int i=1; i<=suku; i++) {
            c = a + b;
            System.out.print(c + " ");

            a = b;
            b = c;
        }

        System.out.println("");
    }
}


Implementasi dalam Bahasa C:

#include <stdio.h>

int main() {
    int suku;
    int a = 1, b = 0, c;
    int i;

    printf("Masukkan jumlah suku: ");
    scanf("%d", &suku);

    for (i=1; i<=suku; i++) {
        c = a + b;
        printf("%d ", c);

        a = b;
        b = c;
    }

    printf("\n");

    return 0;
}

Wednesday, October 5, 2016

Algoritma dan Program Menentukan Bilangan Prima

Kaidah:
Bilangan prima adalah bilangan yang hanya memiliki dua faktor, yakni angka 1 dan bilangan itu sendiri.
Misalnya, angka 7 adalah bilangan prima karena hanya memiliki faktor 1 dan 7 (1x7 dan 7x1).
Sedangkan angka 9 bukan merupakan bilangan prima karena memiliki faktor 1, 3, 9 (1x9, 3x3, 9x1).
Angka 0 dan 1 bukan bilangan prima.
Angka 2 adalah satu-satunya bilangan genap bukan nol yang merupakan bilangan prima.


Penjelasan:
Untuk menentukan berapa banyak faktor yang dimiliki suatu bilangan, biasanya digunakan perulangan (repetition) mulai angka 1 sampai bilangan tersebut dan menguji tiap-tiap item apakah habis dibagi item tersebut. Jika habis, maka jumlah faktor bertambah.
Terakhir, diuji apakah jumlah faktor = 2. Jika ya, maka termasuk bilangan prima. Jika tidak, maka bukan termasuk bilangan prima.

Langkah ini bisa sangat panjang. Oleh karena itu perlu dilakukan pengujian pada tiap-tiap item apakah faktor > 2. Jika ya, maka looping berhenti.

Kita masih bisa mempersingkat langkah ini dengan cara membatasi perulangan. Jadi, perulangannya bukan sampai bilangan tersebut tetapi hanya sampai akar bilangannya saja. Misalnya, untuk menentukan apakah 101 termasuk bilangan prima atau tidak, kita tidak perlu melakukan perulangan sampai 101 kali tapi cukup 10 kali saja (akar 101 adalah 10.0498 dibulatkan ke bawah menjadi 10).


Implementasi Algoritma:
Dari penjelasan di atas dapat dibuat algoritma sebagai berikut,
1) Masukkan sebuah bilangan, simpan dengan nama "bilangan"
2) Tentukan limit yakni akar dari bilangan kemudian ambil bilangan bulatnya
3) Beri nilai awal 1 pada is_prime
4) Masukkan nilai a = 2
5) Jika bilangan habis dibagi a maka ubah is_prime menjadi 0
6) Jika is_prime bernilai 0 maka akhiri perulangan (menuju langkah 7). Jika tidak, maka ulangi ke langkah 5
7) Jika is_prime bernilai 1 dan bilangan bernilai lebih dari atau sama denga 2, maka katakan "termasuk bilangan prima". Jika tidak, katakan "bukan bilangan prima"
8) Selesai


Implementasi dalam Bahasa Java:

// nama file: Prima.java

import java.util.Scanner;

public class Prima {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int number;
        System.out.print("Masukkan sebuah bilangan: ");
        number = scanner.nextInt();
        boolean is_prime = true;
        double limit = Math.ceil(Math.sqrt(number));

        for (int i = 2; i <= limit; i++) {
            if (number % i == 0) {
                is_prime = false;
                break;
            }
        }

        if (is_prime) {
            System.out.println(number + " adalah bilangan prima");
        } else {
            System.out.println(number + " bukan bilangan prima");
        }
    }
}


Implementasi dalam Bahasa C:

#include <stdio.h>
#include <math.h>

int main() {
    int bilangan;
    printf("Masukkan sebuah bilangan: ");
    scanf("%d", &bilangan);

    int limit = floor(sqrt(bilangan));
    int is_prime = 1;

    int a;
    for (a=2; a<=limit; a++) {
        if (bilangan % a == 0) {
            is_prime = 0;

            break;
         }
    }

    if (is_prime && bilangan >=2) {
        printf("%d termasuk bilangan prima\n", bilangan);
    } else {
        printf("%d bukan bilangan prima\n", bilangan);
    }

    return 0;
}

Thursday, September 22, 2016

Algoritma dan Program Menentukan Bilangan Ganjil atau Genap

Hello saudara. Kali ini saya akan membahas algoritma menentukan bilangan ganjil atau genap.

Kaidah:
1) Sebuah bilangan dikatakan ganjil apabila bilangan itu TIDAK HABIS DIBAGI 2
2) Sebuah bilangan dikatakan genap apabila bilangan itu HABIS DIBAGI 2

Penjelasan:
Dalam ilmu matematika ada istilah "modulus", yakni sisa hasil pembagian. Misalnya:

7 dibagi 4 sama dengan 1 sisa 2 (angka 2 adalah hasil modulus)
Di beberapa bahasa pemrograman, operasi modulus ini dengan mudah dilakukan. Misalnya pada pemrograman bahasa Java dapat ditulis:

7 % 4 maka hasilnya adalah 2. Dan karena tidak habis dibagi 2 (karena hasil modulusnya lebih dari nol), maka 7 termasuk bilangan ganjil

Implementasi Algoritma:
1) Masukkan sebuah bilangan n
2) Bagi bilangan itu dengan 2, dan simpan modulusnya ke dalam m
3) Jika m > 0 maka bilangan ganjil. Jika m = 0 maka bilangan genap
4) Selesai


Implementasi dalam Bahasa Java:


// simpan dengan nama file: GanjilGenap.java

import java.util.Scanner;

public class GanjilGenap {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int number;
        System.out.print("Masukkan sebuah bilangan: ");
        number = scanner.nextInt();

        if (number % 2 == 0) {
            System.out.println(number + " adalah bilangan genap");
        } else {
            System.out.println(number + " adalah bilangan ganjil");
        }
    }
}

Implementasi dalam Bahasa C

#include <stdio.h>

int main() {
    int number;
    printf("Masukkan sebuah bilangan: ");
    scanf("%d", &number);

    if (number % 2 == 0) {
        printf("%d adalah bilangan genap\n", number);
    } else {
        printf("%d bukan bilangan ganjil\n", number);
    }

    return 0;
}


Gampang kan? Begitulah algoritma menentukan bilangan ganjil atau genap!

Tuesday, August 30, 2016

Cara Penulisan Algoritma

Di dunia kerja, sebenarnya tidak ada cara baku dalam penulisan algoritma. Bahkan, untuk membaca algoritma dari suatu program yang ditulis orang lain, mereka langsung membacanya dari kode sumber program.

Namun demikian, cara tersebut adalah cara yang digunakan oleh orang yang sudah mahir bahasa pemrograman tertentu dan sudah terbiasa dengan membaca kode. Lalu bagaimana dengan orang-orang yang baru belajar? Maka di sinilah pentingnya cara penulisan algoritma.

1) Deskriptif

Cara penulisan algoritma secara deskriptif sebenarnya sudah dilakukan pada postingan terdahulu, yakni merinci langkah-langkah poin per poin. Sangat penting untuk menulis kata "Selesai" karena itu berarti algoritma kita berjalan sesuai dengan hasil yang diharapkan.

2) Flowchart

Cara penulisan algoritma yang lebih populer adalah dengan menggunakan flowchart atau diagram alir. Contoh flowchart seperti berikut,



Flowchart di atas menggambarkan algoritma mencari luas sebuah lingkaran dari r yang diinputkan oleh user. Pada flowchart, sangat penting untuk menuliskan kata "Start" dan "End" dengan bentuk segiempat bersudut lingkaran (rounded rectangle).

Input dan output digambarkan dalam bentuk jajar genjang (parallel epipedum), sedangkan pemrosesan digambarkan dalam bentuk kotak persegi panjang.

Contoh lainnya,



Contoh di atas adalah algoritma menampilkan bilangan berkelipatan 3 dengan limit yang diinputkan oleh user. Pada contoh di atas, yang baru adalah bentuk belah ketupat dengan dua cabang (branch). Itu adalah contoh branching (masih ingat nggak?). Statement "n % 3 == 0" menunjukan bahwa apakah bilangan n tersebut habis dibagi tiga atau tidak. Jika ya, maka tampilkan n di layar dan jika tidak, lanjut ke baris berikutnya.

Perhatikan bahwa pada statement kondisi "n <= limit", jika benar maka langkahnya kembali ke atas. Ini adalah contoh looping (repetition).

Anak panah menunjukkan urutan pengerjaannya. Ini merupakan implementasi dari dasar algoritma "sequence" (berurutan).

3) Pseudocode

Cara yang terakhir adalah dengan menggunakan kode palsu. Artinya, penjelasan algoritma melalui bahasa tertentu tetapi bukan bahasa pemrograman. Faktanya, tidak ada aturan baku dalam penulisan pseudocode. Malah, penulisan pseudocode sangat dipengaruhi oleh bahasa apa yang dikuasai oleh penulis. Bisa jadi, pseudocode lebih mirip cara penulisan algoritma secara deskriptif hanya bedanya cara penulisan pseudocode memiliki indentasi yang lebih memudahkan pembacaan. Contoh algoritma mencetak bilangan berkelipatan 3 yang dicontohkan di atas:

INPUT limit
n = 1
WHILE n <= limit
    IF n % 3 == 0 THEN
        PRINT n
    n = n + 1
END WHILE

Lebih mirip bahasa pemrograman kan?


Lalu timbul pertanyaan. Cara manakah yang paling efektif dalam penulisan algoritma? Tentu saja sesuai dengan yang ditanyakan di dalam soal. Hahaha... Kalau Dosen / Guru meminta kita untuk menulis algoritma dengan menggunakan flowchart, ya jangan jawab dengan menggunakan pseudocode dong.

Seperti yang telah saya singgung sebelumnya, pada dasarnya tidak ada keharusan harus menggunakan cara yang bagaimana. Bahkan bahasa-bahasa pemrograman di abad ini sudah sedemikian mendekati bahasa manusia sehingga algoritmanya pun bisa dibaca dengan mudah.

Bahasa-bahasa scripting seperti Python, Ruby, Javascript juga sudah sangat mudah untuk dimengerti. Apalagi semua bahasa pemrograman mengijinkan penulisnya menulis komentar di setiap baris kode. Jadi, take it easy, guys.

Belajar algoritma itu menyenangkan kok!