Tugas Mata Kuliah
EC7010 – KEAMANAN SISTEM LANJUT
Tugas – 6
PROGRAM UNTUK MENGHITUNG KEMUNCULAN KARAKTER TERBANYAK PADA BAHASA INDONESIA DAN JAWA
ARWIN NIM. 232 06 008
SEKOLAH TEKNIK ELEKTRO DAN INFORMATIKA INSTITUT TEKNOLOGI BANDUNG 2006
1
)
Program saya implementasikan menggunakan bahasa pemrograman Borland C++
4.0. dengan penjelasan sebagai berikut :
o
Program character-counter-2.0.cpp yang digunakan untuk menghitung
frekuensi
kemunculan setiap karakter alphabet (a – z) dari suatu file dokumen
berbasis plain text (*.txt) dan kemudian hasil peghitungan disimpan di dalam satu file dengan ekstensi out. Contoh : file input adalah doktrin-sbp-2004.txt dan file output adalah doktrin-sbp-2004.out.
o
Data frekuensi kemunculn karakter alphabet ini kemudian diurutkan
berdasarkan jumlah terbanyak (descending) dan kemudian hasilnya disimpan di dalam satu file output dengan ekstensi srt. Contoh : doktrin-sbp-2004.srt. )
Data yang disimpan pada file berekstensi srt kemudian digunakan untuk
menentukan top-five karakter yang sering digunakan baik di Bahasa Indonesia dan Bahasa Jawa, sedangkan file yang berekstensi out digunakan untuk membuat grafik statistik frekuensi kemunculan karakter-karakter tersebut. )
Untuk meyakinkan keakuratan hasil penghitungan, dilakukan penghitungan pada 3
(tiga) file berbeda baik Bahasa Indonesia maupun Bahasa Jawa.
Untuk data input dalam
Bahasa Indonesia diambilkan dari naskah resmi yang diterbitkan oleh institusi pemerintah agar terjamin ketepatan pemakaian kaidah berbahasa Indonesia-nya yakni : ο
UU RI N0. 3/2002 tentang Pertahanan Negara.
ο
Doktrin TNI AU Swa Bhuwana Paksa Tahun 2004.
ο
Artikel mengenai SMK Penerbangan Angkasa dalam Majalah Angkasa
Cendekia yang diterbitkan oleh Dinas Penerangan TNI AU. )
Untuk data input dalam Bahasa Jawa diambilkan dari naskah resmi yang ditulis oleh
Raja dan Pujangga Jawa serta dari surat kabar nasional yang menyediakan kolom Bahasa Jawa sehingga terjamin ketepatan pemakaian kaidah berbahasa Jawa-nya yakni :
Arwin@23206008
2
ο
Serat Wulangreh karya Raja Paku Buwana IV (1768 – 1820).
ο
Wirid Wirayat Jati karangan Raden Ngabehi Ranggawarsita (1908).
ο
Artikel mengenai Satriya dalam Surat Kabar Suara Merdeka tanggal 29
Oktober 2006.
Arwin@23206008
3
)
Hasil penghitungan Bahasa Indonesia
SBP 2004
frekuensi
Persentase
UURI 3/2002
frekuensi
Persentase
SMK Angkasa
frekuensi
Persentase
a
13211
21.4
a
7405
21.4
a
3193
19.0
n e i u k t r d g s m p l b h o y j c w f v z q x
7706 5158 3643 3399 3217 3049 2997 2704 2699 2575 2394 2209 1670 1223 1007 896 778 319 306 248 213 44 14 0 0
12.5 8.4 5.9 5.5 5.2 4.9 4.9 4.4 4.4 4.2 3.9 3.6 2.7 2.0 1.6 1.5 1.3 0.5 0.5 0.4 0.3 0.1 0.0 0.0 0.0
n e i r t u d s g k p m l b h o y j w c f v x q z
4582 3191 1946 1743 1653 1558 1522 1478 1460 1358 1260 1223 1112 698 673 593 463 258 173 169 73 16 4 1 1
13.2 9.2 5.6 5.0 4.8 4.5 4.4 4.3 4.2 3.9 3.6 3.5 3.2 2.0 1.9 1.7 1.3 0.7 0.5 0.5 0.2 0.0 0.0 0.0 0.0
n i e s u t k d r g m l p h b o y j w c f v x q z
1872 1454 1213 910 859 807 802 791 721 656 649 612 522 374 339 299 284 200 135 68 41 16 3 2 0
11.1 8.6 7.2 5.4 5.1 4.8 4.8 4.7 4.3 3.9 3.9 3.6 3.1 2.2 2.0 1.8 1.7 1.2 0.8 0.4 0.2 0.1 0.0 0.0 0.0
61679
)
Kesimpulan.
34613
16822
Dari data tabel di atas yang diperoleh dari hasil running program
terhadap 3 (tiga) file dokumen yang berbeda, disimpulkan bahwa karakter terbanyak yang muncul di dalam setiap naskah berbahasa Indonesia yang benar adalah karakter “a”. Urutan lima besar karakter yang sering muncul adalah [a, n, e, i, u], [a, n, e, i, r] dan [a, n, i, e, s].
Arwin@23206008
4
)
Hasil penghitungan Bahasa Jawa
Wirid Wirayat Jati
Frekuensi
Persentase
Satriya
Frekuensi
Persentase
Serat Wulangreh
Frekuensi
Persentase
a
1420
20.4
a
866
20.1
a
1302
20.4
n i g u k s p t r m d h w e l o b j y c f q x v z
594 350 317 187 186 148 147 110 110 103 97 85 77 69 60 33 30 29 27 12 2 0 0 0 0
17.1 10.0 9.1 5.4 5.3 4.2 4.2 3.2 3.2 3.0 2.8 2.4 2.2 2.0 1.7 0.9 0.9 0.8 0.8 0.3 0.1 0.0 0.0 0.0 0.0
n i e u r k g s t d w m h p b y o l j f c q x v z
427 404 271 257 248 244 243 223 209 137 106 105 100 97 88 85 73 70 38 8 7 0 0 0 0
9.9 9.4 6.3 6.0 5.8 5.7 5.6 5.2 4.9 3.2 2.5 2.4 2.3 2.3 2.0 2.0 1.7 1.6 0.9 0.2 0.2 0.0 0.0 0.0 0.0
n g i e r u k s m t p d l h o w b y j c q f x v z
451 273 250 183 179 171 158 117 101 99 94 81 79 56 55 51 46 39 34 17 2 0 0 0 0
14.2 8.6 7.8 5.7 5.6 5.4 5.0 3.7 3.2 3.1 2.9 2.5 2.5 1.8 1.7 1.6 1.4 1.2 1.1 0.5 0.1 0.0 0.0 0.0 0.0
3483
)
Kesimpulan.
4306
3187
Dari data tabel di atas yang diperoleh dari hasil running program
terhadap 3 (tiga) file dokumen yang berbeda, disimpulkan bahwa karakter terbanyak yang muncul di dalam setiap naskah berbahasa Jawa yang benar adalah karakter “a”. Urutan lima besar karakter yang sering muncul adalah [a, n, i, g, u], [a, n, i, e, u] dan [a, n, g, i, e]. Mengapa karakter “a” yang paling sering muncul dan bukan karakter “o” ? Karena huruf “a” dibaca atau dilafalkan “o”.
Arwin@23206008
5
ο
Grafik Persentase Frekuensi Kemunculan Karakter Bahasa Indonesia
Persentase Frekuensi Kemunculan Karakter Bahasa Indonesia 25.0
Persentase
20.0 15.0 10.0 5.0 0.0 a
c
e
g
I
k
m
o
q
s
u
w
y
Karakter (Huruf)
Grafik Persentase Frekuensi Kemunculan Karakter Bahasa Jawa
Persentase Frekuensi Kemunculan Karakter Bahasa Jawa 25.0 20.0 Persentase
ο
15.0 10.0 5.0 0.0 a b c d e f g h I j k l m n o p q r s t u v w x y z Karakter (Huruf)
Arwin@23206008
6
/* Nama File : character-counter-2.0.cpp digunakan untuk menghitung frekuensi kemunculan karakter alphabet di dalam suatu file plain text dan mengurutkannya berdasarkan frekuensi kemunculannya di dalam text file */ /* Aplikatif untuk huruf besar dan kecil */ /* bugs -> lihat listing program */ /* copyright arwin@23206008 */ #include #include #include #include #include #include
<stdio.h> <dos.h> <string.h>
#define BUFFER #define CHARNUM
100 26
// penampung sementara // jumlah karakter alphabet
main() { FILE *fptrin, *fptrout; // char fileinput[BUFFER], fileoutput[BUFFER]; char ch; int countera = 0, counterb countere = 0, counterf counteri = 0, counterj counterm = 0, countern counterq = 0, counterr counteru = 0, counterv countery = 0, counterz counteralpha = 0, counter[BUFFER], ikey[CHARNUM], inomor[CHARNUM], ik, inom, i, j, temp, temp1; float persen[CHARNUM]; float ipersen, temp2;
pointer ke file
= = = = = = =
0, 0, 0, 0, 0, 0, 0,
counterc counterg counterk countero counters counterw
= = = = = =
0, 0, 0, 0, 0, 0,
counterd counterh counterl counterp countert counterx
= = = = = =
0, 0, 0, 0, 0, 0,
// karakter // frekuensi kemunculan
// sorted-percentage
clrscr(); printf("\n==========================================\n"); printf("\nProgram Penghitung Kemunculan Karakter dan\n"); printf("\nPengurut Frekuensi Kemunculan Karakter di \n"); printf("\nsuatu Text File\n"); printf("\n==========================================\n\n"); //inisialisasi for(ch = 97; ch <= 122; ch++) { counter[ch] = 0; } //buka file artikel printf("\nMasukkan nama file yang akan dibaca (*.txt) : "); scanf("%s", fileinput); fptrin = fopen(fileinput,"rt"); printf("\nMasukkan nama file output proses (*.out) : "); scanf("%s", fileoutput); fptrout = fopen(fileoutput,"wt");
Arwin@23206008
7
//hitung jumlah tiap karakter while(ch != EOF) { //baca per karakter dari file input ch = fgetc(fptrin); ch = tolower(ch); if(ch >= 97 && ch <= 122) { counteralpha++; counter[ch]++; //efektif namun muncul unexpected bugs } /**************************************************************/ /* untuk recovery bugs penghitungan karakter (counter[ch]) bila diperlukan */ if(ch == 97) { countera++; counter[ch] = countera; } if(ch == 98) { counterb++; counter[ch] = counterb; } if(ch == 99) { counterc++; counter[ch] = counterc; } if(ch == 100) { counterd++; counter[ch] = counterd; } if(ch == 101) { countere++; counter[ch] = countere; } if(ch == 102) { counterf++; counter[ch] = counterf; } if(ch == 103) { counterg++; counter[ch] = counterg; } if(ch == 104) { counterh++; counter[ch] = counterh; } if(ch == 105) { counteri++; counter[ch] = counteri; } if(ch == 106)
Arwin@23206008
8
{ counterj++; counter[ch] = counterj; } if(ch == 107) { counterk++; counter[ch] = counterk; } if(ch == 108) { counterl++; counter[ch] = counterl; } if(ch == 109) { counterm++; counter[ch] = counterm; } if(ch == 110) { countern++; counter[ch] = countern; } if(ch == 111) { countero++; counter[ch] = countero; } if(ch == 112) { counterp++; counter[ch] = counterp; } if(ch == 113) { counterq++; counter[ch] = counterq; } if(ch == 114) { counterr++; counter[ch] = counterr; } if(ch == 115) { counters++; counter[ch] = counters; } if(ch == 116) { countert++; counter[ch] = countert; } if(ch == 117) { counteru++; counter[ch] = counteru; } if(ch == 118) { counterv++; counter[ch] = counterv;
Arwin@23206008
9
} if(ch == 119) { counterw++; counter[ch] = counterw; } if(ch == 120) { counterx++; counter[ch] = counterx; } if(ch == 121) { countery++; counter[ch] = countery; } if(ch == 122) { counterz++; counter[ch] = counterz; } /**************************************************************/ } //cetak hasil penghitungan ke layar for(ch = 97; ch <= 122; ch++) { printf("\nkarakter '%c' = %d", ch, counter[ch]); fprintf(fptrout,"%d\t%d\t%.1f\n", ch-96, counter[ch], (float)counter[ch]/counteralpha * 100); } printf("\n\nJumlah counteralpha);
total
karakter
alphabet
adalah
=
%d",
//tutup semua file fcloseall(); printf("\n\n\nLanjutkan ....\n");
dengan
pengurutan
frekuensi
kemunculan
//buka file data unsorted-character printf("\nMasukkan nama file yang akan dibaca (*.out) : "); scanf("%s", fileinput); fptrin = fopen(fileinput,"rt"); //buka file data untuk sorted-character printf("\nMasukkan nama file output proses (*.srt) : "); scanf("%s", fileoutput); fptrout = fopen(fileoutput,"wt"); //baca data buffer printf("\n\nUrutan data asli hasil proses awal adalah : \n\n"); for(i = 0; i < CHARNUM; i++) { fscanf(fptrin,"%d%d%f", &ik, &inom, &ipersen); ikey[i] = ik; inomor[i] = inom; persen[i] = ipersen; } //sorting data
Arwin@23206008
10
for(i = 0; i < CHARNUM - 1; i++) { for(j = i+1; j < CHARNUM; j++) { if(inomor[i] < inomor[j]) { temp1 = inomor[i]; temp = ikey[i]; temp2 = persen[i]; inomor[i] = inomor[j]; ikey[i] = ikey[j]; persen[i] = persen[j]; inomor[j] = temp1; ikey[j] = temp; persen[j] = temp2; } } } printf("\nHasil pengurutan adalah sebagai berikut : \n\n"); for(i = 0; i < CHARNUM; i++) { printf("%c\t%d\t%.1f\n", ikey[i]+96, inomor[i], persen[i]); fprintf(fptrout,"%c\t%d\t%.1f\n", ikey[i]+96, inomor[i], persen[i]); } //tutup semua file fcloseall(); getch(); return 0; }
Arwin@23206008