Saturday, October 29, 2016

Algoritma dan Program Mengurutkan Data dengan Metode Bubble Sort dalam Bahasa C

Ada banyak sekali algoritma pengurutan data. Bubble sort adalah algoritma pengurutan data paling mudah. Meski demikian bukan berarti Bubble Sort ini adalah metode pengurutan paling efektif. Sebab cenderung membutuhkan banyak sekali perulangan.

Dalam Algoritma Pengurutan Data menggunakan Bubble Sort, dua buah data dibandingkan. Jika data awal lebih besar, maka kedua data tersebut dibalik.

Untuk lebih jelasnya lihat gambar berikut,



Implementasi dalam Bahasa C

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

#define MAX_DATA 10

int main() {
    int i;
    int item[MAX_DATA];
    int temp;
    int buff;

    int nochange;
    int counter = 0;

    for (i=0; i<MAX_DATA; i++) {
        printf("Masukkan item ke-%d: ", i+1);
        scanf("%d", &temp);
        getchar();
        item[i] = temp;
    }

    do {
        nochange = 0;
        for (i=0; i<MAX_DATA-1; i++) {
            buff = item[i];

            if (buff > item[i+1]) {
                item[i] = item[i+1];
                item[i+1] = buff;

                nochange = 1;
            }

            counter++;
        }
    } while (nochange == 1);

    printf("Data setelah diurutkan:\n");
    for (i=0; i<MAX_DATA; i++) {
        printf("%d\n", item[i]);   
    }

    printf("Membutuhkan %d iterasi\n", counter);
    return 0;
}

Friday, October 28, 2016

Algoritma dan Program Mengitung Volume Balok

Langsung saja

Implementasi algoritma
1) Masukkan panjang
2) Masukkan lebar
3) Masukkan tinggi
4) volume = panjang * lebar * tinggi
5) Selesai

Implementasi dalam bahasa Java

// nama file: VolumeBalok.java

import java.util.Scanner;

public class VolumeBalok {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        double panjang, lebar, tinggi, volume;

        System.out.print("Masukkan panjang: ");
        panjang = scanner.nextDouble();

        System.out.print("Masukkan lebar: ");
        lebar = scanner.nextDouble();

        System.out.print("Maskkan tinggi: ");
        tinggi = scanner.nextDouble();

        volume = panjang * lebar * tinggi;

        System.out.format("Volume = %.2f\n", volume);
    }
}


Implementasi dalam Bahasa C

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

int main() {
    float panjang, lebar, tinggi, volume;

    printf("Masukkan panjang: ");
    scanf("%f", &panjang);

    printf("Masukkan lebar: ");
    scanf("%f", &lebar);

    printf("Masukkan tinggi: ");
    scanf("%f", &tinggi);

    volume = panjang * lebar * tinggi;

    printf("Volume = %.2f\n", volume);

    return 0;
}

Algoritma dan Program Menghitung Volume Kerucut

Langsung saja

Implementasi algoritma
1) Masukkan jari-jari alas
2) Masukkan tinggi kerucut
3) volume = (1/3) * (PI * r * r) * t
4) Selesai

Implementasi dalam bahasa Java

// nama file: VolumeKerucut.java

import java.util.Scanner;

public class VolumeKerucut {
    public static void main(String args[]) {
        final double PI = 3.14;
        Scanner scanner = new Scanner(System.in);
        double r, tinggi, volume;

        System.out.print("Masukkan jari-jari alas: ");
        r = scanner.nextDouble();

        System.out.print("Maskkan tinggi: ");
        tinggi = scanner.nextDouble();

        volume = (1.0 / 3.0) * (PI * r * r) * tinggi;

        System.out.format("Volume = %.2f\n", volume);
    }
}


Implementasi dalam bahasa C

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

#define PI 3.14

int main() {
    float r, tinggi, volume;

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

    printf("Masukkan tinggi: ");
    scanf("%f", &tinggi);

    volume = (1.0 / 3.0) * (PI * r * r) * tinggi;

    printf("Volume = %.2f\n", volume);

    return 0;
}




Algoritma dan Program Menghitung Volume Tabung

Langsung saja

Implementasi algoritma
1) Definisikan PI = 3.14
2) Masukkan jari-jari alas
3) Masukkan tinggi tabung
4) volume = (PI * r * r) * tinggi
5) Selesai

Implementasi dalam bahasa Java

// nama file: VolumeTabung.java

import java.util.Scanner;

public class VolumeTabung {
    public static void main(String args[]) {
        final double PI = 3.14;
        Scanner scanner = new Scanner(System.in);
        double r, tinggi, volume;

        System.out.print("Masukkan jari-jari alas: ");
        r = scanner.nextDouble();

        System.out.print("Maskkan tinggi: ");
        tinggi = scanner.nextDouble();

        volume = (PI * r * r) * tinggi;

        System.out.format("Volume = %.2f\n", volume);
    }
}


Implementasi dalam bahasa C

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

#define PI 3.14

int main() {
    float r, tinggi, volume;

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

    printf("Masukkan tinggi: ");
    scanf("%f", &tinggi);

    volume = (PI * r * r) * tinggi;

    printf("Volume = %.2f\n", volume);

    return 0;
}

Algoritma dan Program Menghitung Luas dan Keliling Persegi Panjang

Langsung ya

Implementasi algoritma
1) Masukkan panjang
2) Masukkan lebar
3) luas = panjang * lebar
4) keliling = (2 * panjang) + (2 * lebar)
5) Selesai

Implementasi dalam Bahasa Java

// name file LuasKelilingPersegiPanjang.java

import java.util.Scanner;

public class LuasKelilingPersegiPanjang {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        double panjang, lebar, luas, keliling;

        System.out.print("Masukkan panjang = ");
        panjang = scanner.nextDouble();

        System.out.print("Masukkan lebar = ");
        lebar = scanner.nextDouble();

        luas = panjang * lebar;
        keliling = (2 * panjang)  + (2 * lebar);

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



Implementasi dalam Bahasa C

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

int main() {
    float panjang, lebar, luas, keliling;

    printf("Masukkan panjang: ");
    scanf("%f", &panjang);

    printf("Maskkan lebar: ");
    scanf("%f", &lebar);

    luas = panjang * lebar;
    keliling = (2 * panjang) + (2 * lebar);

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

    return 0;
}


Algoritma dan Program Menghitung Luas Segitiga

Langsung saja

Implementasi algoritma
1) Masukkan alas
2) Masukkan tinggi
3) luas = 0.5 * alas * tinggi
4) Selesai

Implementasi dalam Bahasa Java
// nama file: LuasSegitiga.java

import java.util.Scanner;

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

        double alas, tinggi, luas;

        System.out.print("Masukkan alas: ");
        alas = scanner.nextDouble();

        System.out.print("Maskkan tinggi: ");
        tinggi = scanner.nextDouble();

        luas = 0.5 * alas * tinggi;

        System.out.format("Luas = %.2f\n", luas);
    }
}


Implementasi dalam Bahasa C

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

int main() {
    float alas, tinggi, luas;

    printf("Masukkan alas: ");
    scanf("%f", &alas);

    printf("Masukkan tinggi: ");
    scanf("%f", &tinggi);

    luas = 0.5 * alas * tinggi;

    printf("Luas = %.2f\n", luas);

    return 0;
}

Algoritma dan Program Pemisah Ribuan

Hai pemuda dan pemudi. Lama tak jumlah di halo algoritma. Kali ini saya akan membagikan algoritma dan program pemisah ribuan.

Penjelasan
Berawal dari teman-teman yang kesusahan bagaimana membuat sebuah deretan angka menjadi terpisah tiap tiga digit.

Misalnya, mengubah "75000" menjadi "75.000". Secara sederhana langkahnya sangat mudah. Cukup dengan memberikan pemisah ribuan setelah tiga karakter dari belakang dan seterusnya.

Tapi bagaimana mengimplementasikannya dalam algoritma dan pemrograman? Horoh kono... Nggak usah dipikir susah-susah guys! Kalau kita sudah tahu cara sederhananya, ya sudah pake cara itu saja.


Implementasi Algoritma:
1) Masukkan deretan angka (simpan dalam variabel string angka)
2) Hitung panjang deretan, simpan sebagai panjang_karakter
3) Inisiasi sebuah variabel untuk menelusuri angka, i = panjang_karakter - 1
4) Inisiasi sebuah karakter untuk menghitung setiap tiga iterasi, counter = 0
5) Inisiasi hasilnya dengan string kosong hasil = ""
6) Ambil karakter ke-i dari angka dan masukkan ke bagian belakang hasil hasil = angka[i] + hasil
7) Tambahkan nilai counter menjadi counter++
8) Jika counter = 3 maka beri "." pada hasil dengan hasil = "." + hasil dan isi counter = 0

9) Kurangi nilai i. Jika i>=0 maka ulangi langkah 6
10) Selesai

Implementasi dalam Bahasa Java
Gimana? Bingung nggak dengan implementasi algoritmanya? Gampang kok sebenarnya. Lebih jelasnya akan dicontohkan implementasi algoritma di atas ke dalam bahasa Java. Cekidot!

// nama file: PemisahRibuan.java

import java.util.Scanner;

public class PemisahRibuan {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String angka;
        int panjang_karakter;
        int counter = 0;
        String hasil = "";

        System.out.print("Masukkan deretan angka: ");
        angka = scanner.nextLine();
        panjang_karakter = angka.length();

        for (int i=panjang_karakter-1; i>=0; i--) {
            hasil = angka.charAt(i) + hasil;
            counter++;

            if (counter == 3) {
                hasil = "." + hasil;
                counter = 0;
            }
        }

        System.out.println("Hasilnya = " + hasil);

    }
}


Nah, gampang kan!

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!

Monday, August 29, 2016

Dasar-Dasar Algoritma Pemrograman

Hai. Jumpa lagi dengan mas ganteng saya. Kali ini seperti janji yang pernah saya ucapkan, saya akan membahas tentang dasar-dasar algoritma.

Yang dimaksud dengan dasar-dasar algoritma adalah bahwa hal-hal berikut ini sangat penting diketahui dan tentu saja merupakan jenis algoritma paling dasar yang membentuk macam-macam algoritma lainnya.

Dengan mengetahui dasar-dasar algoritma, kamu punya modal untuk mempelajari algoritma lainnya. Ibarat menggunakan kalkulator, kamu setidaknya harus tahu matematika dasar, kan? Begitu juga dengan dasar-dasar algoritma juga harus diketahui sebelum menyelam ke dalam dunia algoritma dan implementasinya ke dalam pemrograman.

1. Sequence (Runtutan)

Algoritma yang pertama adalah sequence (berurutan). Artinya, sesuatu bisa/harus dikerjakan secara berurutan. Kita beri contoh algoritma makan
1) Ambil piring
2) Ambil sendok dan garpu
3) Ambil nasi
4) Ambil sayur
5) Ambil lauk pauk
6) Makan
7) Selesai

Pada contoh di atas, ambil nasi (3) tidak boleh ada lebih dulu sebelum ambil piring (1) sebab tidak mungkin ambil nasi tanpa ambil piring. Sedangkan langkah (2), (3), (4), dan (5) bisa dilakukan tanpa mengindahkan urutannya.

Contoh lagi, algoritma mencari luas segitiga
1) Masukkan nilai alas
2) Masukkan nilai tinggi
3) Tentukan luas dengan rumus luas = 1/2 * alas * tinggi
4) Tampilkan nilai luas
5) Selesai

Pada contoh algoritma di atas, langkah (1) dan (2) boleh dibolak-balik. Akan tetapi letaknya tidak boleh sesudah langkah (3) karena langkah (3) memerlukan input berupa nilai alas (1) dan nilai tinggi (2).

2. Branching (Percabangan / Selection)

Dasar Algoritma yang kedua adalah branching atau sering juga disebut selection. Pada algoritma ini, sebuah kondisi diuji untuk menghasilkan nilai benar dan salah. Kemudian dilakukan sebuah tindakan untuk nilai tersebut.

Bingung ya? Hahaha... Gini deh. Kita contohkan algoritma menentukan bilangan genap atau ganjil.

1) Masukkan sebuah nilai n
2) Jika nilai n habis dibagi 2, maka tampilkan hasil "bilangan genap"
3) Jika nilai n tidak habis dibagi 2, maka tampilkan hasil "bilangan ganjil"
4) Selesai

Inti dari branching adalah kata "Jika/If".  Pada langkah 2, kondisi yang dites adalah "nilai n habis dibagi 2" dan ketika hasilnya "benar" yakni n habis dibagi 2, maka tindakannya adalah tampilkan hasil "bilangan genap".

Perlu diingat bahwa tindakan dapat terjadi jika kondisinya bernilai "benar". Pada contoh (3) terlihat seakan-akan hasilnya salah. Padahal benar. Kondisi "nilai n tidak habis dibagi 2" bernilai "benar" jika bilangan itu tidak habis dibagi 2.

If ... Else ...

Algoritma di atas sudah benar. Hanya saja, akan lebih efisien kalau menggunakan if-else. Kondisi pada langkah (3) adalah kebalikan dari langkah (2) dan ini bisa dipersingkat dengan algoritma berikut:

1) Masukkan sebuah nilai n
2) Jika nilai n habis dibagi 2, maka tampilkan hasil "bilangan genap". Jika tidak, maka tampilkan "bilangan ganjil"
3) Selesai

 Jadi, else adalah tindakan yang dilakukan ketika kondisinya bernilai "salah".

Algoritma branching bisa dipersingkat dengan kata-kata "jika ini benar maka lakukan tindakan ini jika tidak maka lakukan tindakan itu"

3) Looping/Repetition (Perulangan)

Maksud dari algoritma ini adalah mengulangi langkah secara terus menerus selama kondisi tertentu terpenuhi. Nah loh, bingung lagi. Gini aja deh. Kita langsung ke contoh algoritma cetak bilangan dari 1 sampai 5. Jika kita menggunakan algoritma sequence, maka kita bisa buat sebuah langkah-langkah algoritma sebagai berikut:

1) Cetak 1
2) Cetak 2
3) Cetak 3
4) Cetak 4
5) Cetak 5
6) Selesai

 Maka ada 5 langkah (Belum termasuk langkah (6)). Bayangkan jika yang diinginkan adalah cetak angka sampai 1000. Apa nggak bonyok? Nanti kalau nulis kodenya gimana? Copy paste kode pun nggak gampang. Untuk itulah, looping to the rescue. Algoritma di atas bisa disingkat dengan menggunakan repetition/looping menjadi:

1) Masukkan nilai n = 5
2) Nilai i = 1
3) Cetak i
4) i = i + 1
5) Jika i <= n  maka ulangi langkah (3)
6) Selesai

Jika kita perhatikan memang agak sedikit berbelit-belit, namun yang pasti: logis dan sistematis. Kita bisa mencetak angka berapapun hanya dengan mengganti nilai n. Misal kita mau cetak 1000 angka, bisa!

Perhatikan langkah nomor (5). Repetition/looping juga melibatkan algoritma branching (if). Ketika kondisi terpenuhi, maka langkah menjadi naik sampai kondisi tidak dipenuhi lagi.

Gimana? Gampang kan!


Demikianlah pembahasan tentang dasar-dasar algoritma pemrograman. Sejauh ini kita masih belum mengimplementasikannya ke dalam kode program sama sekali.

Sebelum teman-teman belajar lebih dalam lagi tentang algoritma pemrograman, wajib hukumnya untuk memahami tiga algoritma dasar di atas.

Sunday, August 28, 2016

Apa Itu Algoritma?

Sebagai mahasiswa jurusan Teknik Informatika dan sebangsanya, atau SMK jurusan Rekayasa Perangkat Lunak, kata "algoritma" seharusnya sudah sering diucapkan. Namun tidak banyak yang tahu apa itu sebenarnya algoritma dan dari mana kata algoritma berasal.

Alkisah, saat dunia Eropa mengalami masa yang disebut abad kegelapan (darkness age), di belahan dunia lain justru sedang terjadi abad pencerahan. Dunia Islam sangat berjasa dalam menjaga mata rantai ilmu pengetahuan melalui para ilmuwan yang belajar dari terjemahan buku-buku Yunani/Romawi.

Tersebutlah salah seorang matematikawan bernama Muhammad Ibnu Musa al-Khawarizmi. Tidak hanya matematikawan dia juga seorang ahli astronomi dan geografi berkebangsaan Persia. Seorang ulama (kata lain dari sarjana) dari Baitul Hikmah (Rumah Kebijaksanaan).

Konon, kata "algoritma" berasal dari namanya "al-khawarizm" kemudian lidah Eropa (setelah keluar dari masa kegelapannya itu) menyebutnya sebagai "algorithm".

Gambar A-Khawarizmi. Foto diambil dari sini

Fibonacci, seorang matematikawan yang pastinya kita kenal, sangat tergila-gila dengan karya-karya al-Khawarizmi. Al-Khawarizmi dalam setiap awal bukunya selalu memuji keagungan Sang Pencipta. Fibonacci pun kemudian mengamati ciptaan dari Sang Pencipta ini dan dari hasil kontemplasinya ini terciptalah deret Fibonacci yang dia klaim sebagai "deretan bilangan alami". Mungkin Fibonacci tidak tahu kalau hampir seluruh karya tulis yang disusun oleh umat Islam selalu (meski tidak semua) diawali dengan kata pengantar (muqaddimah) dengan memuji keagungan Allah dan sholawat kepada Nabi Muhammad saw.

Jadi sudah tahu kan, teman-teman. Itulah asal kata Algoritma.

Lalu apa sih algoritma itu?

Oh iya, pertanyaan ini belum terjawab, sodara. Pengertian algoritma bisa jadi sangat membosankan:
Algoritma adalah susunan yang logis dan sistematis untuk memecahkan suatu masalah atau untuk mencapai tujuan tertentu.

Gimana? Bosenin kan? Sebenarnya algoritma itu nggak selalu identik dengan komputer. Hanya saja, ketika kita berbicara "algoritma pemrograman" maka pasti yang dibahas adalah menggunakan algoritma dalam pembuatan kode-kode program.

Contoh algoritma dalam kehidupan sehari-hari, misalnya ketika kita mandi. Eh, jangan ambil contoh itu. Terlalu v*lg*r. Kita ambil contoh lain, misalnya saat menyalakan motor.

1) Keluarkan motor dari garasi
2) Putar kunci ke posisi on
3) Nyalakan motor dengan menggunakan salah satu cara:
    3.a) Kick starter, atau
    3.b) Electric starter
4) Jika menggunakan motor bergigi, masukkan gigi 1
5) Tarik gas
6) Selesai

Penting sekali untuk menulis kata "Selesai" karena itu artinya algoritma kita telah sampai pada tujuan yang dimaksud.

Pada dasarnya dalam kehidupan kita tidak pernah lepas dari algoritma, disadari atau tidak. Apapun yang berkaitan dengan prosedur dan tujuan, pasti berhubungan dengan algoritma. Hanya saja, sesuatu prosedur bisa disebut sebagai algoritma ketika dia disusun secara sistematis seperti pada algoritma "menyalakan motor" di atas.

Inti dari algoritma adalah mencapai tujuan tertentu. Jika tujuan tidak tercapai, berarti algoritma kamu gatot alias gagal total. Dikatakan secara logis dan sistematis, jadi kesampingkan keajaiban di sini. Tidak mungkin sebuah komputer melakukan tugas tanpa kita program. Dan tidak ada program yang bisa digunakan tanpa algoritma. Jadi, algoritma dan pemrograman itu bagaikan dua sisi dalam satu mata uang.

Satu hal lagi. Karena algoritma didasarkan pada hasil, maka bisa jadi setiap orang memiliki algoritma yang berbeda-beda asalkan hasilnya benar.

Sekian dulu pembahasan apa itu algoritma dari seorang pemula ini. Moga teman-teman sudah punya gambaran sekilas tentang apa itu algoritma. Kalau ada waktu akan dijelaskan dasar-dasar algoritma. Selamat menunggu.

Friday, August 26, 2016

Hallo Dunia

Hai semuanya. Ini adalah postingan pertama dari blog Gudang Algoritma. Blog ini berisi hal-hal yang berhubungan dengan algoritma dan pemrograman, seperti pengenalan dasar algoritma, macam-macam algoritma, serta bahasa-bahasa pemrograman yang bisa digunakan untuk menyelesaikan suatu algoritma.
Ada juga pembahasan soal-soal algoritma lo! Jadi pantengin terus blog ini.
Sementara itu, saya mau tidur dulu. Ngok...