Sabtu, 27 Juni 2009

Melihat Hari Jawa pada Tanggal Lahir Seseorang dengan AWK

Tugas 6

Sebelumnya kita bisa memakai daftar nama yang berisi tanggal lahir yang sudah kita buat pada posting sebelumnya.

jaka 1 4 1989
candra 19 6 1990
yusi 3 2 1988
yayuk 2 9 1987
irna 23 7 1990
tantri 8 9 1990
budi 20 11 1988
fita 28 12 1987
adit 17 10 1984
ahsan 9 3 1988
sugeng 7 8 1990
eko 3 5 1988
ferdian 11 7 1988
karina 7 9 1990
adi 15 2 1988
adya 27 12 1990

Simpan sebagai input.awk

Berikut program menggunaka awk, kita simpan dengan nama pasaran.awk.


{ thn=$4-1; bln=$3-1; thk=thn/4;
{ if(thn%4==1)
{ b=0.25 }
if(thn%4==2)
{ b=0.50 }
if(thn%4==3)
{ b=0.75 } }

{ d=thk-b;
thb=thn-d; }

{ if(bln==0 && $4%4!=0)
{ a=0 }
if(bln==1 && $4%4!=0)
{ a=31 }
if(bln==2 && $4%4!=0)
{ a=59 }
if(bln==3 && $4%4!=0)
{ a=90 }
if(bln==4 && $4%4!=0)
{ a=120 }
if(bln==5 && $4%4!=0)
{ a=151 }
if(bln==6 && $4%4!=0)
{ a=181 }
if(bln==7 && $4%4!=0)
{ a=212 }
if(bln==8 && $4%4!=0)
{ a=243 }
if(bln==9 && $4%4!=0)
{ a=273 }
if(bln==10 && $4%4!=0)
{ a=304 }
if(bln==11 && $4%4!=0)
{ a=334 } }

{ if(bln==0 && $4%4==0)
{ a=0 }
if(bln==1 && $4%4==0)
{ a=31 }
if(bln==2 && $4%4==0)
{ a=60 }
if(bln==3 && $4%4==0)
{ a=91 }
if(bln==4 && $4%4==0)
{ a=121 }
if(bln==5 && $4%4==0)
{ a=152 }
if(bln==6 && $4%4==0)
{ a=182 }
if(bln==7 && $4%4==0)
{ a=213 }
if(bln==8 && $4%4==0)
{ a=244 }
if(bln==9 && $4%4==0)
{ a=274 }
if(bln==10 && $4%4==0)
{ a=305 }
if(bln==11 && $4%4==0)
{ a=335 } }

jum=(thb*365)+(d*366)+a+$2;

{ if(jum%5==1)
{ f="Pahing" }
if(jum%5==2)
{ f="Pon" }
if(jum%5==3)
{ f="Wage" }
if(jum%5==4)
{ f="Kliwon" }
if(jum%5==0)
{ f="Legi" } }

{ if(jum%7==1)
{ printf("%-12s %2d %2d %d Minggu %s\n",$1,$2,$3,$4,f) }
if(jum%7==2)
{ printf("%-12s %2d %2d %d Senin %s\n",$1,$2,$3,$4,f) }
if(jum%7==3)
{ printf("%-12s %2d %2d %d Selasa %s\n",$1,$2,$3,$4,f) }
if(jum%7==4)
{ printf("%-12s %2d %2d %d Rabu %s\n",$1,$2,$3,$4,f) }
if(jum%7==5)
{ printf("%-12s %2d %2d %d Kamis %s\n",$1,$2,$3,$4,f) }
if(jum%7==6)
{ printf("%-12s %2d %2d %d Jumat %s\n",$1,$2,$3,$4,f) }
if(jum%7==0)
{ printf("%-12s %2d %2d %d Sabtu %s\n",$1,$2,$3,$4,f) } }
}

Kemudian kita eksekusi:
# awk -f pasaran.awk input.dat

Hasilnya
jaka 1 4 1989 Sabtu Wage
candra 19 6 1990 Selasa Pon
yusi 3 2 1988 Rabu Legi
yayuk 2 9 1987 Rabu Pahing
irna 23 7 1990 Senin Pahing
tantri 8 9 1990 Sabtu Wage
budi 20 11 1988 Minggu Pahing
fita 28 12 1987 Senin Wage
adit 17 10 1984 Rabu Pahing
ahsan 9 3 1988 Rabu Legi
sugeng 7 8 1990 Selasa Pahing
eko 3 5 1988 Selasa Legi
ferdian 11 7 1988 Senin Kliwon
karina 7 9 1990 Jumat Pon
adi 15 2 1988 Senin Pon
adya 27 12 1990 Kamis Wage

Fin!

Kamis, 25 Juni 2009

Menentukan Hari pada Tanggal Lahir dengan AWK

Tugas 5

Seperti biasa kita buat file yang akan kita jadikan input, yakni berupa nama, tanggal lahir. Seperti contoh berikut:

jaka 1 4 1989
candra 19 6 1990
yusi 3 2 1988
yayuk 2 9 1987
irna 23 7 1990
tantri 8 9 1990
budi 20 11 1988
fita 28 12 1987
yoga 19 1 1989
purna 17 7 1989
adit 17 10 1984
ahsan 9 3 1988
sugeng 7 8 1990
eko 3 5 1988
endika 14 1 1989

simpan sebagai input.dat

{
hari[1] = "Minggu"; hari[2] = "Senin"; hari[3] = "Selasa"; hari[4] = "Rabu"; hari[5] = "Kamis"; hari[6] = "Jumat"; hari[0] = "Sabtu";

jumhar[0]=0; jumhar[1]=31; jumhar[2]=28; jumhar[3]=31; jumhar[4]=30; jumhar[5]=31; jumhar[6]=30; jumhar[7]=31; jumhar[8]=31; jumhar[9]=30; jumhar[10]=31; jumhar[11]=30;jumhar[12]=31;

jum = 0
thn = $4-1
x = thn % 4
z = thn / 4

if( x==1 ){a=z-0.25}

if( x==2 ){a=z-0.5}

if( x==3 ){a=z-0.75}

thnkab = a*366
thnb = (thn - a)*365
jumhari = thnkab + thnb

if($4 % 4== 0)
{

for (i=1; i< $3; i++){ jum += jumhar[i] } if ( $3 > 2){
tot = jumhari + jum + $2 +1}
else {
tot = jumhari + jum + $2 -1 }
}

else{
for (i = 1; i< $3; i++){ jum += jumhar[i] } tot = jumhari + jum + $2 -1 } tothar = tot % 7 printf ("%-10s %-5d %-5d %-5d %-10s\n", $1, $2, $3, $4, hari[tothar]); }

Simpan file tadi dengan nama formula.awk, kemudian kita jalankan!
# awk -f formula.awk input.dat hasilnya..


jaka 1 4 1989 Jumat
candra 19 6 1990 Senin
yusi 3 2 1988 Selasa
yayuk 2 9 1987 Selasa
irna 23 7 1990 Minggu
tantri 8 9 1990 Jumat
budi 20 11 1988 Minggu
fita 28 12 1987 Minggu
yoga 19 1 1989 Selasa
purna 17 7 1989 Sabtu
adit 17 10 1984 Rabu
ahsan 9 3 1988 Rabu
sugeng 7 8 1990 Senin
eko 3 5 1988 Selasa
endika 14 1 1989 Kamis

fin..!

Jumat, 19 Juni 2009

Membuat Bujur Sangkar Ajaib dengan menggunakan AWK

Tugas 4

Kita bisa memulai membuat file programnya sebagai berikut:

#! /bin/awk -f

# bujur-ajaib.awk

{ n=$1;
 X=1;
 Y=1;
 Z=1;

 for(a=0; a<=n+2; a++)
 { for(b=0; b<=n+2; b++)
  ordo[a,b] = 0;
 }

 a=1; b=(n+1) / 2;
 X-=Y;
 for(N=1; N<=n*n;)

 { if(ordo[a,b]==0)
  { X+=Y;
  ordo[a,b] = X;
  if(a==n) ordo[0,b] = X;
  if(b==1) ordo[a,n+1] = X;
  if(a==n && b==1 ) ordo[0,n+1] = X;
  a--; b++; N++;
  if(a==0&&b==n+1) continue;}
  else
  { if (a==0) a=n;
  if(b==n+1) b=1;
  }
  }
  
  else
  
  { a+=2;
  b-=1;
  X=X-Y+Z;
  }
 }

 for(a=1; a<=n; a++)
 T1+=ordo[a,n+1-a];

 for(a=1; a<=n*5; a++)
 printf(" ");
 printf("%5d\n\n",T1);

 for(a=1;a<=n+1;a++)
 { for(b=1; b<=n; b++)
  { printf("%5d", ordo[a,b]);
  ordo[a,n+2] += ordo[a,b];
  ordo[n+1,b] += ordo[a,b];
  }
  T2 += ordo[a,b];
  if(a==n+1) ordo[a,n+2] = T2;
  printf("%5d\n\n",ordo[a,n+2]);
 }
}

Kemudian kita simpan program tersebut dengan nama misalnya bujur-ajaib.awk

Nah, setelah itu mari kita coba jalankan! Buka terminal, kemudian jalankan filenya!

$ awk -f bujur-ajaib.awk

maka akan muncul kursor berkedip pada terminal, masukkan saja nilai sembarang.. maka awk akan mengeksekusinya dan kemudian menampilkan pada layar. Misalnya kita ketik angka 1, maka akan muncul:

# awk -f bujur.awk

Kita bisa mengetikkan lagi angka berapapun, dengan syarat bukan angka bernilai negatif atau angka bernilai genap. Kemudian untuk keluar dengan menekan tombol Ctrl-D

Namun cara ini terdapat sedikit keganjilan pada jumlah nilai diagonalnya, karena akan ditambahkan dengan diagonal nilai sebelumnya.

$ awk -f bujur-ajaib.awk
1
     1

  1 1

  1 1

3
          16 

  8 1 6 15

  3 5 7 15

  4 9 2 15

  15 15 15 16

5
                     81

  17 24 1 8 15 65

  23 5 7 14 16 65

  4 6 13 20 22 65

  10 12 19 21 3 65

  11 18 25 2 9 65

  65 65 65 65 65 81

7
                               256

  30 39 48 1 10 19 28 175

  38 47 7 9 18 27 29 175

  46 6 8 17 26 35 37 175

  5 14 16 25 34 36 45 175

  13 15 24 33 42 44 4 175

  21 23 32 41 43 3 12 175

  22 31 40 49 2 11 20 175

  175 175 175 175 175 175 175 256 

Ctrl-D

Dengan cara lain, kita gunakan perintah echo. Perintah echo adalah perintah untuk menampilkan banyaknya baris pada teks. Akan tetapi disini akan dihitung sebagai ordo matriks yang akan kita buat.

$ echo 9 | awk -f bujur-ajaib.awk
                                       369

  47 58 69 80 1 12 23 34 45 369

  57 68 79 9 11 22 33 44 46 369

  67 78 8 10 21 32 43 54 56 369

  77 7 18 20 31 42 53 55 66 369

  6 17 19 30 41 52 63 65 76 369

  16 27 29 40 51 62 64 75 5 369

  26 28 39 50 61 72 74 4 15 369

  36 38 49 60 71 73 3 14 25 369

  37 48 59 70 81 2 13 24 35 369

  369 369 369 369 369 369 369 369 369 369


Selesai...

Rabu, 03 Juni 2009

Menghitung Harga Barang dan Diskonnya dengan AWK

Tugas 3

Terdapat sebuah tabel pembelian barang yakni perangkat komputer sebagai berikut:

Barang Jumlah Harga satuan
CPU 7 5500000
Printer 5 1500000
Scaner 8 2700000
Monitor 10 3500000
Hardisk 6 1200000
Mouse 12 100000
Webcam 15 1000000

sedangkan hasil yang diinginkan adalah sebagai berikut:

Barang Jumlah HargaSatuan Total Diskon Bayar
CPU 7 5500000 38500000 3850000 34650000

Total adalah jumlah barang dikalikan harga barang
Diskon adalah sebagai berikut:
-bila membeli barang 5 atau lebih, maka diskon 10%
-bila membeli barang 10 atau lebih, maka diskon 20%
Bayar adalah total harga barang dikurangi diskon

Nah, yang perlu kita kerjakan terlebih dahulu kita bisa membuat tabel seperti diatas kemudian menyimpannya dalam sebuah direktori dengan nama misalnya barang.dat. Kemudian kita buat programnya...

Seperti ini..

BEGIN { printf "Barang Jumlah HargaSatuan Total Diskon Bayar\n" }
{ jumlah = $2
satuan = $3
total = $2 * $3 }
{ if ( $2 >= 5 && $2 < diskon =" total">= 10) {diskon = total *0.20} }
{ bayar = total - diskon }
{ printf "%-8s %6d %11d %12d %7d %8d\n", $1, $2, $3, total, diskon, bayar }

Kemudian kita simpan program tersebut dengan nama out.awk misalnya. Kita tinggal menjalankan programnya..

$ awk -f out.awk barang.dat

maka hasilnya..

Barang Jumlah HargaSatuan Total Diskon Bayar
CPU 7 5500000 38500000 3850000 34650000
Printer 5 1500000 7500000 750000 6750000
Scanner 8 2700000 21600000 2160000 19440000
Monitor 10 3500000 35000000 7000000 28000000
Harddisk 6 1200000 7200000 720000 6480000
Mouse 12 100000 1200000 240000 960000
Webcam 15 1000000 15000000 3000000 12000000

selesaiii...!! :)

Mencetak Bilangan Prima Menggunakan AWK

Tugas 2

Dalam matematika, bilangan prima adalah bilangan asli yang lebih besar dari 1, yang faktor pembaginya adalah 1 dan bilangan itu sendiri. 2 dan 3 adalah bilangan prima. 4 bukan bilangan prima karena 4 bisa dibagi 2. Sepuluh bilangan prima yang pertama adalah 2, 3, 5, 7, 11, 13, 17, 19, 23 dan 29.

Ada beberapa cara untuk mencari bilangan prima, salah satunya dengan menggunakan saringan Eratosthenes. Namun disini agak kesulitan mengimplementasikannya dengan menggunakan AWK untuk mencarinya. Berikut cara lain untuk mendapatkannya.

awk 'BEGIN{
for(i=2;i<=100;i++)
{
if(i==2 || i==3 || i==5 || i==7) print i ;
if(i%2!=0 && i%3!=0 && i%5!=0 && i%7!=0) print i
}
}'

Hehehe, lain kali akan saya update kalo saringan Eratosthenesnya udah bisa di AWK.. :)