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

1 komentar: