Rabu, 24 Juni 2009

Kalender Jawa

Tugas 5
1. membuat kalender
Pada tugas 5 kali ini kita akan membuat kalender dengan menggunakan bahasa pemrograman awk, dimana input berasal dari file yang berisi nama, tanggal, bulan dan tahun. output dari program adalah mengeluarkan kembali input dan ditambah nama bulan, nama hari dan nama pasaran. pada program saya kali ini input berasal dai file input.txt yang berisi:
putra 2 3 1989
hadi 11 7 1988
irawan 19 1 1989
jenggo 6 2009
ana 4 8 1987
lia 3 2 1992
ani 19 6 1989
ina 31 3 1989
rama 2 7 1988
sihnta 6 9 1993
shanti 31 3 2000
sisi 14 7 1990
joe 19 3 1980
bambang 26 3 1980
telwe 10 11 1062

selanjutnya kita buat program seperti berikut :

{
tgl=$2;
bln=$3;
thn=$4;
jm_hr=0;jum_kab=0;jum_biasa=0;

bulan[0] = 0;bulan[1] = 31;bulan[2] = 28;bulan[3] = 31;bulan[4] = 30;bulan[5] = 31;bulan[6] = 30;bulan[7] = 31;bulan[8] = 31;bulan[9] = 30;bulan[10] = 31;bulan[1] = 30;
#-----------------------------------------------------------------------
bulan_kab[0] = 0;bulan_kab[1] = 31;bulan_kab[2] = 29;bulan_kab[3] = 31;bulan_kab[4] = 30;bulan_kab[5] = 31;bulan_kab[6] = 30;bulan_kab[7] = 31;bulan_kab[8] = 31;bulan_kab[9] = 30;bulan_kab[10] = 31;bulan_kab[1] = 30;
#-----------------------------------------------------------------------
nama[1] = "januari";nama[2] = "pebruari";nama[3] = "maret";nama[4] = "april"; nama[5] = "mei";nama[6] = "juni";nama[7] = "juli";nama[8] = "agustus";nama[9] = "september";nama[10] = "oktober";nama[11] = "nopember";nama[12] = "desember";
#------------------------------------------------------------------------
pasaran[1] = "pahing" ; pasaran[2] = "pon"; pasaran [3]= "wage"; pasaran[4] = "kliwon"; pasaran[0] = "legi";
#-------------------------------------------------------------------------
hari[1] = "minggu"; hari[2] = "senin"; hari[3] = "selasa"; hari[4] = "rabu"; hari[5] = "kamis"; hari[6] = "jumat"; hari[0] = "sabtu";

if(thn%4==0){
for(i=0;i
jm_hr = jm_hr + bulan_kab[i];
}
}
else
for(i=0;i
jm_hr = jm_hr + bulan[i];
}

thn_b = thn-1;
kabisat = thn_b/4;
if(thn%2==0){
thn_biasa = thn - kabisat;
}
else
thn_biasa = thn - kabisat - 1;

for(j=1;j<=kabisat;j++){
jum_kab = jum_kab+366;
}
for(k=1;k<=thn_biasa;k++){
jum_biasa = jum_biasa+365;
}

if(bln>1){
tot_hari = jum_kab + jum_biasa + jm_hr+ tgl+1;
}
else
tot_hari = jum_kab + jum_biasa + jm_hr+ tgl;

sisa_pasaran = tot_hari%5;

sisa = tot_hari%7;
printf("%-10s %-5d %-5d %-5d %-10s %-10s %-10s\n",$1,$2,$3,$4, nama[bln], hari[sisa], pasaran[sisa_pasaran]);
}

Output yang ada adalah sebagai berikut :

putra 2 3 1989 kamis wage
hadi 11 7 1988 selasa kliwon
irawan 19 1 1989 kamis pahing
jenggo 6 2009 selasa pahing
ana 4 8 1987 senin pon
lia 3 2 1992 senin pahing
ani 19 6 1989 senin pon
ina 31 3 1989 jumat pon
rama 2 7 1988 sabtu legi
shinta 6 9 1993 senin pon
shanti 31 3 2000 jumat legi
sisi 14 7 1990 sabtu pon
joe 19 3 1980 rabu wage
bambang 26 3 1980 rabu legi
telwe 10 11 1062 senin kliwon

Make a Magic Square

*) Pada pertemuan kali ini kita akan mengerjakan bujur sangkar ajaib

program untuk membuat bujur sangkar ajaib adalah seperti dibawah ini. input bisa berupa file ataupun diinputkan dari pipelie echo. pada tugas kali ini saya menggunakan input dari file input _magic.txt yang berisi:
3 1 1 1
dimana kolom satu adalah input untuk memberi nilai pada umlah ordo yang akan ditentukan, misal untuk ordo 3x3 kita isikan 3, untuk 5x5 kita isikan 5 dst. kolom kedua digukanan untuk memberi nilai awal pada bujur sangkar ajaib, misal kita beri nilai satu maka nilai akan naik sari 1, 2, 3 dst. kolom kedua digunakan untuk memberi nilai kenaikan pada setiam 1 kali perpindahan. sedangkan kolom ketiga digunakan untuk memberi kenaikan nilai interval.

{
matrik[15,15]; #array untuk ordo maximal bujur sangkar
n=$1; #jumlah ordo yang dicari berada pada kolom 1
X=$2; #input nilai awal berada pada kolom 2
Y=$3; #nilai kenaikan, pada kol0m 3
Z=$4; #kenaikan setiap pindah interval, pada kolom 4

for(i=0; i<=n+2; i++)
{
for(b=0; b<=n+2; b++)
matrik[i,b] = 0;
}
i=1; b=(n+1) / 2;
X-=Y;
for(N=1; N<=n*n;)
{ if(matrik[i,b]==0)
{
X+=Y;
matrik[i,b] = X;
if(i==n)
matrik[0,b] = X;
if(b==1)
matrik[i,n+1] = X;
if(i==n && b==1 )
matrik[0,n+1] = X;
i--; b++; N++;
if(i==0&&b==n+1)
continue;
else
{
if (i==0) i=n;
if(b==n+1) b=1;
}
}
else
{
i+=2;
b-=1;
X=X-Y+Z;
}
}
for(i=1; i<=n; i++)
T1+=matrik[i,n+1-i];

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

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

}
}

lalu kita jalankan dengan program pada console sebagai berikut:
jenggo@jenggo-desktop:~$ awk -f magic.txt input_magic.txt

hasil dari program diatas adalah
15

8 1 6 15

3 5 7 15

4 9 2 15

15 15 15 15

Rabu, 10 Juni 2009

Sebelum membuat kode program,maka kita buat terlebih dahulu daftar harganya seperti di bawah ini:

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

Seelah itu kita buat programnya seperti di bawah ini :


awk 'BEGIN{printf "%-10s %-10s %-10s %-10s %-10s %s\n",
"BARANG","JUMLAH","HARGA SATUAN","TOTAL","DISCOUNT",
"BAYAR"}
{if($2>=5 && $2 <10){printf "%-10s %-10s %-10s %-10s %-10s %s\n", $1,$2,$3,$4=$2*$3,$5=0.1*$4,$6=$4-$5 }}
{if($2>=10){printf "%-10s %-10s %-10s %-10s %-10s %s\n", $1,$2,$3,$4=$2*$3,$5=0.2*$4,$6=$4-$5 }}' barang