Rabu, 24 Juni 2009

Tugas 5 dan Tugas 6

Tugas 5 dan Tugas 6
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:
aditya 2 3 1989
bejo 11 7 1988
joko 19 1 1989
bambang 6 2009
yui 4 8 1987
lia 3 2 1992
nia 19 6 1989
novi 31 3 1989
ricky 2 7 1988
etik 6 9 1993
hau 31 3 2000
sisi 14 7 1990
nesta 19 3 1980
ronaldinho 26 3 1980
pahlawan 10 11 1062

selanjutnya saya membuat program untuk menampilkan output seperti yang kita inginkan. berikut programnya(program saya simpan dengan nama tanggal.txt):

{
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]);
}
kemudian jalankan menggunakan program awk dengan mengetik seperti dibawah ini dan akan langsung keluar hasilnya seperti dibawah ini:

aditya@aditya-laptop:~$ awk -f tanggal_selesai.txt input

aditya 2 3 1989 kamis wage
bejo 11 7 1988 selasa kliwon
joko 19 1 1989 kamis pahing
bambang 6 2009 selasa pahing
yui 4 8 1987 senin pon
lia 3 2 1992 senin pahing
nia 19 6 1989 senin pon
novi 31 3 1989 jumat pon
ricky 2 7 1988 sabtu legi
etik 6 9 1993 senin pon
hau 31 3 2000 jumat legi
sisi 14 7 1990 sabtu pon
nesta 19 3 1980 rabu wage
ronaldinho 26 3 1980 rabu legi
pahlawan 10 11 1062 senin kliwon

Rabu, 17 Juni 2009

Tugas 4

Buatlah program untuk menampilkan bujursangkar ajaib dengan ordo ganjil, mulai dari ordo 3x3 sampai 19x19, jadi input ordo hanya dari 3 sampai 19 saja, program juga memeriksa apabila input ordo tidak dimasukkan dengan benar, misalkan dimasukkan ordo = 4 atau 6 atau bilangan genap, maka program akan menolak input tersebut dan tidak memprosesnya.

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:
adit@adit-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

Tugas 3

monitor 5 1000000
cpu 8 4000000
keyboard 15 100000
mouse 12 150000
printer 10 800000
scaner 7 500000

awk 'BEGIN{printf("%-15s%-10s%-15s%-10s%-10s%-15s\n","Barang","Jumlah","Harga Satuan","Total","Diskon","harga potongan" );printf("=======================================================================\n")}{$4=$2*$3;if($2<10)$5=10/100*$4;else $5=20/100*$4;$6=$4-$5; printf("%-15s%-10d%-15d%-10d%-10d%-15d\n",$1,$2,$3,$4,$5,$6)}{x+=$6} END{printf("harga total : %d\n", x)}' harga.txt
Barang Jumlah Harga Satuan Total Diskon harga potongan
=======================================================================
monitor 5 1000000 5000000 500000 4500000
cpu 8 4000000 32000000 3200000 28800000
keyboard 15 100000 1500000 300000 1200000
mouse 12 150000 1800000 360000 1440000
printer 10 800000 8000000 1600000 6400000
scaner 7 500000 3500000 350000 3150000
harga total : 45490000
monitor 5 1000000
cpu 8 4000000
keyboard 15 100000
mouse 12 150000
printer 10 800000
scaner 7 500000

awk 'BEGIN{printf("%-15s%-10s%-15s%-10s%-10s%-15s\n","Barang","Jumlah","Harga Satuan","Total","Diskon","harga potongan" );printf("=======================================================================\n")}{$4=$2*$3;if($2<10)$5=10/100*$4;else $5=20/100*$4;$6=$4-$5; printf("%-15s%-10d%-15d%-10d%-10d%-15d\n",$1,$2,$3,$4,$5,$6)}{x+=$6} END{printf("harga total : %d\n", x)}' harga.txt
Barang Jumlah Harga Satuan Total Diskon harga potongan
=======================================================================
monitor 5 1000000 5000000 500000 4500000
cpu 8 4000000 32000000 3200000 28800000
keyboard 15 100000 1500000 300000 1200000
mouse 12 150000 1800000 360000 1440000
printer 10 800000 8000000 1600000 6400000
scaner 7 500000 3500000 350000 3150000
harga total : 45490000