Kali ini saya akan menunjukan bagaimana membuat sebuah program yang dapat menghitung banyaknya huruf alphabet dari A sampai Z, serta menghitung banyaknya huruf vokal dan konsonan. Bagi yang sedang belajar pemrograman, mungkin artikel ini akan membantu anda untuk belajar atau menyelesaikan tugas pemrograman. Serta dengan sedikit penjelasan yang berguna untuk anda yang nantinya memberikan gambaran bagaimana program ini dibuat.
Membedah alogritma program
Untuk diagram alur program yang akan kita buat, kira-kira begini:
Untuk inisialisasi data dan input data, saya rasa tidak susah dan hanya perlu fungsi fgets ke stdin untuk inputnya (gets bisa juga, tetapi tidak disarankan untuk berberapa kompiler dan muncul warning karena berpotensi menyebabkan buffer overflow).
char teks[255]; int counter[26]; int vokal = 0, konsonan = 0; int x; printf("Masukan teks: "); fgets(&teks[0], 255, stdin); printf("\n%s\n", teks);
Dan pastikan, nilai semua direset ke nol.
for (x=0; x<26; x++) { counter[x] = 0; }
Setelah itu, sekarang saatnya menghitung banyaknya alphabet yang digunakan dan dimasukan ke dalam suatu counter array. Untuk looping penghitungan huruf, bisa diimplementasikan sebagai berikut.
for (x=0; teks[x]!='\0'; x++) { itung_kar(teks[x], counter); }
Pada contoh barusan, program akan looping ke semua karakter hingga karakter null-terminator. Untuk menghitung hanya karakter alphabet saja, maka kita perlu mengimplementasikan sebuah fungsi yang menentukan dan menghitung alphabet yang digunakan. Pada kasus ini, fungsi ini saya namai itung_kar.
Adapun alur dari fungsi dari itung_kar ini sebagai berikut:
Lalu bagaimana cara mengkonversi karakter alphabet, lalu menjumlahkannya sesuai counter?
Untuk statemen pertama, anda harus paham bagaimana susunan tabel ASCII. Pertama kita buat batasan dengan if, jika karakter diantara indeks ke 64 dan 89 (a dan z besar), maka akan kita tambahkan sehingga menjadi huruf kecil (karena dalam susunan tabel ASCII, a kecil dimulai dari indeks ke 97). Tambahkan saja huruf tersebut dengan dengan hasil indeks_a_kecil – indeks_a_besar – 1. Untuk bagian ini, saya tidak menggunakan fungsi standar dari pemrograman C supaya kode lebih efisien, serta anda dapat belajar bagaimana deret suatu karakter, dan mencegah huruf besar untuk tidak masuk dalam hitungan selanjutnya. :afro:
Supaya gak mumet kode kita, buat saja macro berikut
#define alphacnt 26 #define a_kecil 97 #define a_besar 64 #define z_kecil a_kecil+alphacnt #define z_besar a_besar+alphacnt
Untuk statemen berikutnya, buat batasan if, tetapi untuk huruf kecil (dari indeks 97 ke 122). Jika cocok, kurangi indeks dari char tersebut dengan 97 dan gunakan hasil pengurangan sebagai indeks array counter yang di increment-kan. Lalu lakukan increment pada array dengan indeks yang barusan kita dapatkan tadi.
a = 97 -> 97-97 = 0 b = 98 -> 98-97 = 1 c = 99 -> 99-97 = 2 ... x = 120 -> 120-97 = 23 y = 121 -> 121-97 = 24 z = 122 -> 122-97 = 25
Hmm, sudah kebayang bagaimana anda bisa mengakses array counter sesuai urutan alphabet? Maka fungsi yang akan kita hasilkan sebagai berikut:
void itung_kar(char kar, int countz[]) { int count_idx; if ((kar >= a_besar) && (kar <= z_besar)) { kar+= a_kecil - a_besar - 1; } if ((kar >= a_kecil) && (kar <= z_kecil)) { count_idx = (char)kar - a_kecil; countz[count_idx]++; } }
Lanjut, sekarang untuk alur fungsi vokal_kons adalah sebagai berikut.
Karena loopingnya juga ga ribet-ribet amat, berikut kode yang akan kita amati:
void vokal_kons(int countz[], int *vokal, int *konsonan) { const char index_vk[alphacnt] = "vkkkvkkkvkkkkkvkkkkkvkkkkk"; int muter; for (muter=0; muter<alphacnt; muter++) { if (index_vk[muter] == 'k') { *konsonan+= countz[muter]; } else { *vokal+= countz[muter]; } } }
Kita melakukan looping dari counter indeks 0 (untuk alphabet A) hingga indeks 25 (untuk alphabet Z). Sebenarnya, kita bisa saja menambahkan langsung counter yang konsonan dijumlahkan dalam variabel konsonan, dan sebaliknya, namun kodenya jadi kepanjangan. Sehingga saya membuat pattern (pola, lihat pada konstanta index_vk), dimana jika indeks yang ditemukan adalah k, maka indeks tersebut adalah untuk konsonan, dan sebaliknya.
Hmm, jangan lupa kode untuk penggunaan fungsi dan cetak outputnya :cool
vokal_kons(counter, &vokal, &konsonan); printf("Vokal: %d\n", vokal); printf("Konsonan: %d\n", konsonan); for (x=0; x<alphacnt; x++) { printf("%c=%d\n", x+a_kecil, counter[x]); } return 0;
Hasil akhir
Berikut adalah hasil program yang telah kita buat :cendol
/* Menghitung banyak huruf dan menghitung banyaknya huruf vokal dan konsonan * Coded by FARISSS (thekill96[at]gmail.com * Website: https://www.khayalan.id */ #include <stdio.h> #define alphacnt 26 #define a_kecil 97 #define a_besar 64 #define z_kecil a_kecil+alphacnt #define z_besar a_besar+alphacnt void itung_kar(char kar, int countz[]); void vokal_kons(int countz[], int *vokal, int *konsonan); int main() { char teks[255]; int counter[alphacnt]; int vokal = 0, konsonan = 0; int x; printf("Masukan teks: "); fgets(&teks[0], 255, stdin); printf("\n%s\n", teks); for (x=0; x<alphacnt; x++) { counter[x] = 0; } for (x=0; teks[x]!='\0'; x++) { itung_kar(teks[x], counter); } vokal_kons(counter, &vokal, &konsonan); printf("Vokal: %d\n", vokal); printf("Konsonan: %d\n", konsonan); for (x=0; x<alphacnt; x++) { printf("%c=%d\n", x+a_kecil, counter[x]); } return 0; } void itung_kar(char kar, int countz[]) { int count_idx; if ((kar >= a_besar) && (kar <= z_besar)) { kar+= a_kecil - a_besar - 1; } if ((kar >= a_kecil) && (kar <= z_kecil)) { count_idx = (char)kar - a_kecil; countz[count_idx]++; } } void vokal_kons(int countz[], int *vokal, int *konsonan) { const char index_vk[alphacnt] = "vkkkvkkkvkkkkkvkkkkkvkkkkk"; int muter; for (muter=0; muter<alphacnt; muter++) { if (index_vk[muter] == 'k') { *konsonan+= countz[muter]; } else { *vokal+= countz[muter]; } } }
Compile dan test hasilnya…
Dan akhirnya, semoga artikel ini bermamfaat bagi anda semua. Sampai jumpa di tutorial dan artikel selanjutnya :thanks2