Bahasa Pemrograman &
Perangkat Pengolahan Langsung


Tugas 6 Kalender Jawa

Buatlah file yang ingin anda ketahui tanggal lahirnya, simpan dengan file lahir.txt, seperti dibawah ini:

agus 17 2 1987
farid 12 8 1988
erik 27 6 1988
yoyok 15 4 1987
doni 2 11 1988
wawan 18 2 1987
dimas 17 11 1988
sigit 13 12 1989
romy 14 7 1988
dedi 25 3 1986
yopi 3 4 1990
yusuf 16 5 1988
ahmadi 30 4 1988
faruk 27 7 1990
evan 19 3 1989

dan rumusnya simpanlah di file yang beda dengan nama tanggal.txt

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

Setelah selesai, buka terminal anda dan ketikkan program awk anda, seperti berikut:

andy@andy-laptop ~:$ awk -f tanggal.txt lahir.txt

Kemudian output tersebut akan menampilkan kalendernya sebagai berikut :

andy@andy-laptop ~:$ awk -f tanggal.txt lahir.txt

TUGAS 5 : kalender georgian

tugas ke 5 ini menampilkan hari lahir dengan menggunakan program AWK
Program ini untuk menentukan nama hari pada tanggal dengan sistem kalender Georgian.
Masukan berupa beberapa tanggal lahir, misalkan yang disimpan dengan file lahir.txt, Contoh input data nama orang :
ari 23 9 1989
aming 10 2 2009
arip 12 5 1990
beni 16 12 1987
cici 4 7 1989
deni 8 9 1984
demian 20 11 1988
rizuki 28 8 1987
limbad 29 6 1989
jo 17 2 1978
abu 17 3 1984
mike 14 1 1987
bayu 5 5 1990
sonia 13 6 1988
zakaria 5 11 1985

Kemudian untuk syntax-nya sebagai proses, dengan membuat file dengan nama tanggalan.txt. Syntax :

{
#-hari-
hari[1] = "minggu"; hari[2] = "senin"; hari[3] = "selasa"; hari[4] = "rabu"; hari[5] = "kamis"; hari[6] = "jumat"; hari[0] = "sabtu";
#--jumlah--
jmlhri[0]=0; jmlhri[1]=31; jmlhri[2]=28; jmlhri[3]=31; jmlhri[4]=30; jmlhri[5]=31; jmlhri[6]=30; jmlhri[7]=31; jmlhri[8]=31; jmlhri[9]=30; jmlhri[10]=31; jmlhri[11]=30; jmlhri[12]=31;

jum = 0
tahun= $4-1
x = tahun % 4
z = tahun /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 += jmlhri[i] }
if ( $3 > 2){
tot = jumhari + jum + $2 +1}
else {
tot = jumhari + jum + $2 -1 }
}

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

tothar = tot % 7


printf ("%-10s %-5d %-5d %-5d %-10s\n", $1, $2, $3, $4, hari[tothar]);
}

Membuat Bujur Sangkar Ajaib menggunakan AWK

Pada tugas 4 yaitu membuat bujur sangkar ajaib dengan menggunakan AWK ini langkah awal buat dahulu file dengan nama ajaib.txt

{ ordo[55,55]; #ordo bujur sangkar
n=$1; #input matriks
X=1; #nilai awal
Y=1; #interval
Z=1; #interval pindah

{ ordo[55,55]; #ordo bujur sangkar
n=$1; #input matriks
X=1; #nilai awal
Y=1; #interval
Z=1; #interval pindah

for(a=0; a<=n+2; a++) #menghitung letak kolom dan baris
{ 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]);
}
}

Setelah rumus bujur sangkar ajaib diatas dimasukkan dalam dokument ajaib.txt maka dalam terminal bisa di tampilkan dengan menggunakan perintah :

andy@andy-desktop:~$ echo 7 | awk -f ajaib.txt

yang mana Echo 7 ini digunakan untuk membuat sebuat matiks ordo 7x7.
Contoh lain misalnya bujur sangkar ajaib ordo 5x5, maka rumus menjadi:

andy@andy-desktop:~$ echo 5 | awk -f ajaib.txt

Hasil untuk sebuah matriks ordo 7x7 seperti dibawah ini :

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

Mencari Harga Barang & Diskon dengan AWK

BarangJumlahHarga satuan
CPU75500000
Printer51500000
Scaner82700000
Monitor103500000
Hardisk61200000
Mouse12100000
Webcam151000000

untuk mencari Harga Barang dan Diskonnya dengan AWK menggunakan rumus Seperti Dibawah ini :

awk 'BEGIN{printf "%-10s %-10s %-10s %-10s %-10s %s\n",
"BARANG","JUMLAH","HARGA SATUAN","TOTAL","DISCOUNT",
"BAYAR"}
{if($2>=5 && $2 <10){printf 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