Sabtu, 26 September 2015

Prima with Bash

Berikut ini adalah suatu sajian test-case yang akan kita coba selesaikan dengan menggunakan pemrograman bash. Saya asumsikan kalian telah belajar lebih banyak dari post sebelumnya tentang dasar pemrograman bash. So, Check it Out!

*************
Prima with Bash

Cayza ingin mengetahui bilangan apa saja yang merupakan bilangan prima. Bantulah Cayza untuk mengetahui bilangan-bilangan prima yang ada di bawah bilangan tertentu.

Semisal Cayza menginputkan angka 50, maka program akan memberikan semua bilangan prima yang ada di bawah 50 dalam list dan dimasukkan dalam file berjudul prima.txt. 

Selain itu Cayza ingin program bisa otomatis mengompress file tersebut dalam format .tar.gz dan membuat file baru berisi catatan (log) waktu pemakaian program tersebut. Jadi setiap kali Cayza menjalankan program, waktunya tercatat dalam catatan log tersebut.

---------------------

Logical Solution

Bilangan prima didapatkan dengan cara bilangan yang diinginkan dibagi satu-persatu  dengan semua bilangan dibawahnya (kecuali 1). Apabila tidak ada hasil pembagian yang bulat, maka bilangan tersebut adalah bilangan prima.

Katakanlah bilangan yang diinginkan adalah x, maka pseudoce-nya:

===============================

flag:=0
for i:= 2 to x
        if (x % i == 0) then flag := flag +1
if (flag := 0) then x is prima
else x is non-prima         

===============================

Variabel flag sebagai penanda, apabila ada pembagian yang bernilai bulat maka nilai flag akan bertambah. Jadi, apabila nilai flag tidak pernah bertambah (masih 0) berarti tidak ada pembagian yang bulat, berarti bilangan tersebut prima. Mudah bukan?

Karena nilai x dicari statusnya satu persatu mulai dari 2 sampai bilangan yang diinput oleh Cayza (0 dan 1 sudah jelas bukan bilangan prima), maka untuk x pun harus dibuat dalam mode looping. Jadi 
pseudocode-nya:

===============================
for x:=2 to input
        for i:= 2 to x
                if (x % i == 0) then flag := flag +1
        if (flag := 0) then x is prima
        else x is non-prima
===============================

Apabila kita code dengan bash :

===============================

#!/bin/bash
read input;
x=2
while [ $x -le  $input ];
do
    flag=0
    i=2
    while [ $i -lt $x ];
    do
        if [ $(( x%i )) -eq 0 ];
        then
        let "flag= $flag +1"
        fi
        let "i=$i+1"
    done
    if [ $flag -eq 0 ];
    then
    echo $x >> prima.txt
    fi
    let "x=$x+1"
done


===============================

Selanjutnya meng-konversi ke dalam bentuk .tar.gz. Dalam hal ini bisa menggunakan fungsi tar -zcvf. Berikut ini adalah penjelasan mengenai -zcvf

-> z artinya mengarsip dengan menggunakan gzip
-> c artinya mengompres (bisa  x kalau mau mengekstrak)
-> v artinya view, prosesnya tertampil di terminal (opsional, boleh dihilangkan)
-> f artinya nama file

Apabila kita code dengan bash :

===============================

tar -zcvf arsip_prima.tar.gz prima.txt
echo "File Telah Dikompres pada tanggal $(date '+%d_%m_%Y') pukul $(date '+%H:%M:%S')" >> log_prima.txt

=================================

Dengan demikian case kali ini terselesaikan dengan baik. Semoga posting ini bermanfaat untuk semua. Posting berikutnya akan berisi hal yang tidak ada hubungannya dengan pemrograman bash

#!/bin/bash

Nge-script dengan bash? Why not?

Pada dasarnya logika ngoding dengan bahasa bash hampir sama dengan bahasa C. Perbedaannya adalah pada aturan-aturan penulisan. Well, langsung saja kita simak bagaimana contoh programnya. Check it Out!



 ******************

Materi 1 : Input Output

---------------------------

#!/bin/bash
read nama;
echo "Hello $nama"

---------------------------

Penjelasan :

baris pertama adalah header. Sama seperti #include<iostream> di C++

baris kedua berarti meminta input dan menyimpan dalam variabel nama. Sama seperti fungsi scamf di C++. Variabel disini tidak perlu dideklarasikan terlebih dahulu

baris ketiga mencetak sesuatu yang telah diinputkan di dalam variabel nama. Sama seperti fungsi printf di C++. Untuk mengakses isi variabel nama menggunakan operator $

Hasil output:


****************

Materi 2 : Branching

------------------------

#!/bin/bash
read x
if [ $x = 10 ]
then
echo "Sama dengan 10"
else
echo "Lebih dari atau kurang dari 10"
fi

----------------------

Penjelasan :

Baris ketiga, yang di dalam kurung siku adalah pernyataan input sama dengan 10. Apabila pernyataan benar maka akan tercetak Sama dengan 10. Apabila pernyataan salah maka akan tercetak "Lebih dari atau kurang dari 10".

Baris kedelapan, fi berfungsi sebagai penutup fungsi if. Seperti kurung kurawa pada C++

Hasil output:


****************

Materi 3 : Looping

-----------------------

#!/bin/bash
read x
i=0
while [ $i -lt $x ]
do
echo "Masih Looping"
let "i=$i+1"
done

-----------------------

Penjelasan:

Looping menggunakan while mempunyai konsep hampir sama seperti Branching. Apabila pernyataan benar maka sistem akan melakukan perulangan. Perulangan berhenti ketika pernyataan tidak terpenuhi. 

Baris ketiga seperti fungsi percabangan if, yaitu pernyataan sebagai syarat looping.
Sebagai pengganti kurung kurawa, di bash menggunakan "do" dan "done"

Hasil output:

Tiga materi tersebut adalah fungsi yang paling sering dilakukan dalam pemrograman. Silahkan kembangkan diri kalian seluas mungkin dalam bidang pemrograman bash. Untuk post berikutnya adalah tentang testcase-testcase yang diselesaikan dengan menggunakan pemrograman bash. Semoga bermanfaat.

Senin, 14 September 2015

Ice Cream

Ingat episode ini? Episode di mana spongebob berkompetisi dengan Patrick untuk menjadi koki terbaik. Episode ini berjudul "The Fry Cook Games".Salah satu perlombaan dalam  kompetisi tersebut adalah membuat es krim.

Di televisi, tentu saja semua episode spongebob dialih-bahasa menjadi bahasa Indonesia, atau istilahnya 'dubbing'. Di episode ini ada satu scene yang mengalami kesalahan translate, sehingga lelucon yang sebenarnya dibuat tidak tersampaikan.

Scene tersebut adalah ketika spongebob berteriak "I scream for ice cream" (aku berteriak demi eskrim) di episode aslinya. Rupanya pihak penerjemah mendengarnya sebagai "Ice cream for ice cream" dan mendubbingnya "Es krim demi eskrim".