Algoritma Pemrograman Dengan Menggunakan C++
Pengantar
Puji dan syukur kepada Tuhan Yang Maha Esa karena berkat Dia-lah tulisan
ini bisa selesai. Tulisan pertama saya ini membahas mengenai algoritma dalam
pemrograman. Mudah –mudahan tulisan ini bisa memberi masukan bagi banyak orang
khususnya bagi orang yang mempelajari pemrograman komputer untuk mempermudah
mereka dalam membuat sebuah program yang baik.
Dalam membuat sebuah program, ada beberapa hal yang penting, paling tidak
menurut saya, yaitu:
1.
Tujuan pembuatan program,
2.
Algoritma,
3.
Bahasa pemrograman itu sendiri
Dalam kesempatan kali ini, saya ingin membahas mengenai algoritma dalam
pemrograman. Hal – hal yang akan disajikan di sini merupakan contoh – contoh
program yang ditulis dalam bahasa C++ yang kemudian akan dijelaskan lebih detail. Lebih tepatnya jika saya katakan
bahwa tulisan ini merupakan kumpulan
contoh algoritma yang pernah dibahas dan cukup “populer” sebagai contoh –
contoh algoritma.
Pembahasan yang terdapat disini sebenarnya lebih ditujukan kepada orang –
orang yang sudah sedikit mengenal bahasa pemrograman C++ sehingga akan
mempermudah dalam memahami konsep algoritma yang dijelaskan di sini.
Sekilas Mengenai Algoritma
Algoritma seperti kata kebanyakan orang, bukanlah sesuatu yang hanya berhubungan dengan dunia komputer
saja. Algoritma juga berlaku dalam kehidupan sehari-hari. Kali ini saya mau
membahas contoh yang mungkin kedengaran tidak “lazim” digunakan untuk memberi
gambaran mengenai algoritma :D.
Beberapa contoh sederhana mengenai algoritma yang dapat ditemui dalam
kehidupan sehari – hari misalnya:
1.
Memasak mie instant.
Prosesnya sbb: memanaskan air, membuka pembungkus mie instant (tentunya),
memasukkan mie ke dalam air, taruh bumbu di piring, angkat mie jika sudah
masak, campurkan dengan bumbu yang sudah ada di piring dengan mie, makan… :D
(koq jadi laper? :D)
2.
Menelepon
Prosesnya sbb: angkat telepon, tekan nomor teleponnya:
·
jika diangkat maka mulai berbicara setelah
selesai tutup teleponnya
·
jika tidak diangkat, maka tutup teleponnya
Dan masih banyak lagi contoh – contoh sederhana mengenai algoritma yang
dapat kita jumpai dalam kehidupan sehari – hari.
Algoritma Pemrograman
Sekarang kita mulai membicarakan mengenai algoritma pemrograman. Pertama
– tama, akan saya kutip dulu ciri – ciri dari algoritma seperti yang dipaparkan
oleh Donald E. Knuth:
·
Algoritma mempunyai awal dan akhir.
·
Setiap langkah harus didefinisikan dengan tepat sehingga
tidak memiliki arti ganda (ambigu).
·
Memiliki masukan (input) atau kondisi awal.
·
Memiliki keluaran (output) atau kondisi akhir.
·
Algoritma harus efektif; bila digunakan benar –
benar menyelesaikan persoalan.
Saya sendiri sebenarnya tidak terlalu setuju dengan hal – hal seperti itu
yang terkesan terlalu membatasi. Karena sebenarnya ada banyak cara untuk
menghasilkan sesuatu tanpa harus mengikuti aturan yang “baku”
/ satu aturan saja yang terkesan mengikat, iya kan? Namun jika ada yang mau “bertindak”
seperti yang telah dipaparkan di atas, itu sah – sah saja.
Sekarang, kita akan melihat beberapa program, mulai dari yang mudah
sampai yang cukup sulit, beserta penjelasannya.
Nilai Terbesar Dari 3 Buah Bilangan
Untuk mencari nilai terbesar dari 3 buah bilangan, dalam C++, kode yang
saya gunakan adalah sbb:
#include
<iostream>
using
namespace std;
void main()
{
int a, b, c, d;
cout << "nilai 1: ";
cin >> a;
cout << "nilai 2: ";
cin >> b;
cout << "nilai 3: ";
cin >> d;
c = (a > b ? a : b);
cout << "nilai terbesar adalah
: " << (c > d ? c : d) << "\n";
}
Logika:
Bandingkan nilai
pertama dengan nilai kedua. Kemudian yang lebih besar di antara nilai tersebut
di bandingkan dengan nilai berikutnya (nilai ke tiga), sehingga di dapat nilai
terbesar di antara ketiga variabel tersebut.
Penjelasan kode:
Seperti yang
kita lihat di atas, pertama – tama, kita membuat tiga variabel yaitu, variabel a, b, c,
dan d.
Kemudian, kita meminta user untuk
memasukkan nilai untuk variabel a, b, dan d. Setelah itu, kita
membandingkan nilai masing – masing variabel. Disini digunakan variabel c
sebagai “alat bantu”. Variabel c sendiri menyimpan nilai terbesar antara
variabel a
dan b.
Kemudian ditampilkan nilai yang terbesar yang didapat setelah membandingkan
variabel c
dan d.
Jumlah Deret
Yang dimaksud dengan jumlah deret di sini adalah misalnya saja yang
diminta adalah 3 suku deret. Maka dikalkulasikan menjadi:
1 – 1/3 + 1/5 –
1/ 7
Perhatikan bahwa
dalam proses kalkulasi tersebut tanda + dan – berubah setiap kali dilakukan proses
perhitungan. Baiklah, sekarang kita membahas kodenya:
#include
<iostream>
using
namespace std;
void main
() {
int mp = -1;
double satu = 1, ulang = 3;
int masuk;
cout << "masukan nilai :
";
cin >> masuk;
for (int ulang2 = 1; ulang2 <= masuk;
++ulang2) {
satu = satu + ((1 / ulang) * mp);
mp *= -1;
ulang += 2;
}
cout << satu <<
"\n";
}
Logika:
Melakukan perhitungan dari suku pertama sampai suku ke
– n (jumlah suku yang diminta oleh user).
Mungkin yang paling “mengganggu” pemikiran Anda adalah bagaimana cara untuk
membuat tanda + dan minus berubah – ubah setiap kali, kan?
Padahal itu bisa saja diatasi hanya
dengan mengalikan -1 dengan -1
sehingga hasilnya bisa menjadi positif , ya kan? Jika sudah begitu, “urusan” berikutnya
menjadi beres J.
Penjelasan kode:
Kode di atas juga cukup jelas jika diamati dengan
baik. Awalnya kita membuat beberapa “buah” variabel:
·
Yang akan menjadi
input bagi / dari user, yaitu masuk
·
Yang akan
“menampung” hasil perhitungan, yaitu satu
·
Yang akan menjadi
pembagi dan terus dinaikkan nilainya, yaitu ulang
·
Yang akan “merubah”
tanda dan jenis perhitungan (dari penjumlahan menjadi pengurangan dan
sebaliknya), yaitu mp
Kemudian kita melakukan perulangan dengan menjumlahkan
variabel satu yang bernilai 1
(pada awalnya) dengan hasil dari 1 dibagi dengan variabel ulang dimana nilai awalnya adalah 3,
dan kemudian ditambah 2 untuk setiap perulangan yang dilakukan kemudian
dikalikan dengan variabel mp yang bernilai -1 pada awalnya sehingga menghasilkan perhitungan:
1 – (1/3).Variabel mp kemudian dikalikan dengan -1
untuk menghasilkan nilai positif sehingga pada perhitungan berikutnya menjadi
seperti berikut:
1 – (1/3) + (1/5)
Begitu seterusnya hingga perhitungan mencapai suku ke
– n, dan proses perhitungan pun dilakukan sekali lagi dan berhenti. Hasilnya
kemudian ditunjukkan oleh variabel satu. Jelas sekali, bukan?
Array
Ok, sekarang, masuk ke “permainan” array.
Dalam “permainan” ini, kita akan meminta user untuk memasukkan nomor stambuk
yangterdiri atas 7 angka. Masing - masing angka (dari nomor stambuk) tersebut
akan disimpan dalam sebuah array yang terdapat variabel a. Nilai dari masing –
masing array tersebut akan dikalikan jika nilai tersebut bukan 0 (nol) dan
“disimpan dalam sebuah variabel sebut saja x. Kemudian dibuat variabel lain sebut
saja b yang memiliki 7 array juga. “Isi” variabel b merupakan hasil dari masing
– masing array variabel a ditambah x. Berikut ini kodenya:
#include
<iostream>
using
namespace std;
void main()
{
int a[7], x = 1;
for (int i = 0; i < 7; ++i) {
cout << "nomor "
<< i + 1 << ": ";
cin >> a[i];
}
for (int j = 0; j < 7; ++j) {
if (a[j] == 0)
continue;
else {
x *= a[j];
}
}
int b[7];
for (int k = 0; k < 7; ++k) {
b[k] = a[k] + x;
cout << b[k] <<
"\n";
}
}
Logika:
Dari semua array (angka – angka) yang ada (sudah
dimasukkan), kita melakukan “pencarian”. Jika array tersebut bernilai 0 (nol)
maka, array tersebut kita lewati. Jika array tersebut bukan bernilai nol
(karena itu tentu saja bernilai lebih dari nol, karena secara logika, tidak ada
nomor stambuk yang minus, kan?),
maka kita kalikan dengan array berikutnya yang juga tidak bernilai nol.
Kemudian setelah itu, kita membuat array lain dari sebuah variabel yang lain
(tentunya) untuk “ditempati” masing – masing oleh hasil dari masing – masing
array variabel yang satunya ditambah dengan hasil perkalian seluruh nilai tadi.
Penjelasan kode:
Pertama – tama, kita buat sebuah variabel (variabel a) untuk menampung 7 buah array, lalu variabel x untuk menampung hasil perkalian seluruh array variabel a. Nilai awal x adalah 1, dengan asumsi bahwa
tidak ada nomor stambuk yang seluruhnya 0 (nol) (karena klo gitu buat apa
dibuatkan nomor stambuk, kan?) sehingga bisa dikalikan dengan seluruh array
variabel a dengan
memiliki kemungkinan nilai terkecil adalah 1. Lakukan perulangan untuk setiap array variabel a, dengan “menyisipkan” kondisi agar
jika nilai array tersebut adalah 0
(nol) maka dilewati (continue), dan apabila nilainya bukan nol, maka dikalikan
dengan variabel x. Setelah selesai, dibuat variabel baru dengan array yang sama, yaitu 7. Lalu perulangan dilakukan lagi untuk mengisi
semua array tersebut dengan hasil
dari x ditambah dengan masing – masing array
variabel a.
Segitiga
Siku - Siku
Gambar segitiga yang akan dibuat adalah seperti di bawah ini:
*
**
***
****
*****
******
*******
Seperti yang kita lihat, bahwa terdapat
segitiga siku – siku yang dibuat dengan cara membuat simbol “*” mulai dari satu
sampai baris ke – n. Misalnya saja, dengan contoh di atas, user ingin menampilkan segitiga dengan jumlah baris 7, maka
ditampilkan gambar seperti di atas. Begitu seterusnya. Berikut adalah
contoh kodenya:
#include
<iostream>
using
namespace std;
void main
() {
int segi1;
cout << "";
cin >> segi1;
for (int j = 1; j <= segi1; ++j) {
for (int i = 1; i <= segi1; ++i)
{
if (i <= segi1 - j)
cout << "
";
else
cout <<
"*";
}
cout << "\n";
}
}
Logika:
Bila diamati baik – baik, akan diketahui bahwa,
misalnya, jika ada 7 baris yang diminta, maka ada 6 buah spasi yang dibuat lalu
kemudian dicetak tanda asterisk “*”,
dan pada baris berikutnya ada 5 buah spasi lalu dicetak dua buah tanda asterisk. Lalu kemudian pada baris berikutnya ada 4
buah spasi, pada baris berikutnya lagi ada 3 buah spasi, dst. Dapat disimpulkan
bahwa jumlah spasi yang dibuat pada baris pertama adalah:
Total baris yang diinginkan – 1
Lalu kemudian pada baris kedua adalah:
Total baris yang diinginkan – 2
Begitu seterusnya.
Dengan demikian diketahui bahwa untuk mecetak spasi
menggunakan rumus:
Total baris yang diinginkan – baris yang akan dicetak
Jadi, misalnya baris yang sedang “dikerjakan” adalah
baris pertama maka, rumusnya menjadi: total baris yang diinginkan – 1, begitu
juga dengan baris kedua menjadi: total baris yang diinginkan – 2, dst. Jika
sudah “melewati” keadaan tersebut, dicetak “*”.
Penjelasan kode:
Pada kode di atas, pertama – tama kita membuat sebuah
variabel / identifier dengan nama segi1. Dimana segi1, merupakan input dari user untuk menentukan berapa banyak
baris segitiga yang akan dicetak. Setelah itu, dilakukan perulangan untuk mencetak
banyaknya baris, di sini kita memakai variabel j. Untuk mencetak spasi dan tanda “*” sendiri digunakan
variabel i, dengan
kondisi:
·
Jika i lebih kecil atau sama dengan segi1 - j, dicetak spasi
Ini karena syarat yang telah dikemukakan
sebelumnya, jumlah spasi yang dicetak per baris adalah hasil dari segi1 – j, dimana j adalah baris yang aktual (current) pada saat itu.
·
Jika i lebih besar dari segi1, maka dicetak tanda “*”.
Sebenarnya, jika Anda bisa mengamati dengan
cukup seksama, maka Anda akan menemukan bahwa kita selalu mencetak dengan
jumlah yang sama. Misalnya jumlah baris yang diinginkan adalah 7, maka
sebenarnya dalam setiap baris dari baris pertama sampai baris 7, kita selalu mencetak
sebanyak 7 kali pada setiap barisnya. Hanya saja ada “variasi”pada setiap
barisnya, yaitu jika dengan dikuranginya segi1 dengan j, maka denga sendirinya jumlah “*” yang tercetak akan
semakin banyak dan pada akhirnya sama dengan jumlah baris yang diinginkan.
Jadi, cobalah bayangkan bahwa yang kita cetak adalah sebuah persegi / persegi
panjang dengan gambaran seperti yang telah disebutkan di atas (bisa, kan? J).
Hal ini terus berlanjut pada setiap baris dan pada
ahirnya berhenti pada kondisi dimana j lebih besar dari segi1. Hasilnya dapat Anda lihat
pada screen shot berikut:
Baris Ganda
Kali ini Anda diminta untuk membuat /
menampilkan berapa banyak baris yang diminta oleh user tapi dengan menggandakan setiap baris yang dicetak di layar.
Misalnya, jumlah baris yang diminta adalah 5, maka yang tercetak adalah:
11
2222
333333
44444444
5555555555
Maka kode yang saya buat adalah sebagai
berikut:
#include
<iostream>
using
namespace std;
void main
() {
int in;
cout << "banyaknya baris:
";
cin >> in;
for (int i = 1; i <= in; ++ i) {
for (int j = 1; j <= i * 2; ++j)
{
cout << i;
}
cout << "\n";
}
}
Logika:
Logika yang digunakan di sini cukup mirip dengan cara
kita mencetak segitiga siku –siku ke layar. Mungkin bisa dibilang ini masih ada
“hubungan keluarga” dengan yang tadi J. Disini kita melakukan perulangan untuk mencetak baris
yang diminta oleh user. Dalam
melakukan perulangan tersebut, kita menampilkan baris yang dicetak pada saat
itu. Misalnya jika baris yang sedang dicetak pada saat itu adalah baris kedua,
maka yang ditampilkan adalah angka 2. Begitu seterusnya. Perhatikan bahwa angka
– angka yang dicetak memiliki sebuah pola. Pada setiap baris yang sedang dicetak
pola dari angka –angkanya adalah: baris
yang sedang dicetak dikali 2.
Misalnya pada baris pertama, jumlah angka / banyaknya angka yang dicetak adalah 1 X 2 = 2 kali di
cetak. Pada baris kedua, banyaknya baris yang di cetak adalah 2 X 2, dst. Hal
ini berlanjut sampai baris yang diinginkan oleh user sudah tercetak.
Penjelasan kode:
Pada kode di atas, dibuat variabel untuk menampung
berapa banyak baris yang diinginkan oleh user
(in), just like usual J. Berdasarkan input
dari user tersebut, kita membuat
perulangan untuk mencetak baris – baris yang diinginkan user. Dalam perulangan ini, kita “menyisipkan” sebuah perulangan
lagi untuk mencetak angka ke layar (dengan menggunakan variabel j). Perulangan ini dilakukan dengan
kondisi j lebih kecil atau sama
dengan i dikali 2. Dimana, i adalah baris yang sedang
dikerjakan dan j adalah berapa banyak perulangan yang dilakukan dalam kondisi j lebih kecil atau sama dengan i.
Berikut ini screen
shot-nya:
Menyebut
Angka Terbalik
Kita mulai memasuki salah satu bagian
favorit saya yaitu “mengkonversi” bilangan menjadi kalimat / kata – kata J. Kita memasuki dulu
bagian yang mudahnya, menyebut angka dengan terbalik. Kali ini, kita meminta user untuk mengurangi bilangan apa pun (yang lebih kecil dari
10.000) dengan 10.000. Misalnya, user memasukkan angka 3456, maka 10.000 –
3.456 tentu saja hasilnya = 6.544, tapi kita mengkonversinya dengan
menjadikannya sebagai kalimat tapi dibaca terbalik. Jadi, tampilannya adalah:
empat empat lima
enam J.
Kodenya adalah:
#include
<iostream>
using
namespace std;
void sntce
(int n) {
switch (n) {
case 1: cout << "satu ";
break;
case 2: cout << "dua ";
break;
case 3: cout << "tiga ";
break;
case 4: cout << "empat ";
break;
case 5: cout << "lima "; break;
case 6: cout << "enam ";
break;
case 7: cout << "tujuh ";
break;
case 8: cout << "delapan
"; break;
case 9: cout << "sembilan
"; break;
case 0: cout << "nol ";
break;
default: break;
}
}
void
reverse (int n) {
int zero, mod;
zero = n / 10;
mod = n % 10;
if (zero == 0 && mod == 0)
exit;
else {
sntce (mod);
reverse (zero);
}
}
void main
() {
int in, reduce;
const int stay = 10000;
do {
cout << "";
cin >> in;
} while (in > 10000 || in < 1);
reduce = stay - in;
reverse (reduce);
cout << "\n";
}
Logika:
Dari input yang dimasukan oleh user, dikurangi dengan 10.000 lalu hasilnya mulai dari angka paling
terakhir sampai dengan angka pertama dikonversi ke dalam bentuk angka. Cara
untuk “mengambil” angka terakhir adalah dengan mengambil modulo / sisa bagi dari hasil pengurangan tersebut dibagi 10.
Misalnya, hasilnya 6544 dibagi 10 tentu saja sisanya adalah 4. Kemudian hasil
bulat dari 6544 dibagi 10 yang adalah 654 akan di bagi lagi dengan 10 dan akan
menghasilkan angka 4. Dan hasil bulat dari 654 dibagi 10 yang adalah 65 kembali
dibagi dengan 10 dan sisanya adalah 5. Kemudian yang terakhir, karena nilai 6
yang disimpan kemudian dibagi 10, dan sisanya pasti 6, maka 6 diambil.
Penjelasan kode:
Pada bagian utama program, kita membuat beberapa
variabel: reduce, in, dan stay. Variabel reduce sendiri berguna untuk
menampung hasil pengurangan dari stay, yang telah kita beri nilai konstan dari awal yaitu
10.000. Tapi, kita mau mencegah agar user tidak memasukkan angka yang “tidak
lazim” misalnya angka 0 atau 10.001 dan seterusnya. Maka, kita memakai fungsi do...while (ini sebenarnya “favorit”
saya, karena saya ingin selalu mencegah input
yang tidak normal) dengan “aturan” bahwa tampilan tersebut (“”) akan selalu
terulang bila user memasukkan angka
yang lebih besar dari 10.000 atau lebih kecil dari 1. Kita lalu memasukkan reduce ke reverse, itulah akhir dari program
utama. Lalu, seperti yang kita lihat di atas, ada 2 fungsi yang kita buat sejak
awal: sntce dan reverse. sntce berfungsi untuk mengkonversi
angka menjadi sebuah kata dengan fungsi switch, yang saya rasa sudah cukup jelas, bahwa jika inputnya (dalam hal ini adalah sisa bagi
dari 10.000 dikurangi input dari user kemudian dibagi 10) adalah 1, maka
yang ditampilkan adalah kata “satu”, bila 2, maka ditampilkan adalah “dua”,
dst. Sedangkan reverse untuk menghitung hasil pengurangan dari 10.000
dikurangi dengan input dari user (in). Di sini kita memakai dua kondisi, yaitu jika hasil
bulat dari n (reduce) dibagi 10 sama dengan 0 dan
juga sisa bagi (mod) sama dengan 0 (nol), dan kondisi
di luat itu (tentu saja ini berarti bahwa masih ada bilangan yang harus di bagi
10 atau bisa saja masih ada sisa bagi yang harus di masukkan ke sntce). Jika yag terjadi adalah
kondisi kedua, kita “melempar” variabel mod ke sntce (udah tau kan
fungsinya?) lalu memangil kembali reverse dengan menggunakan zero sampai akhirnya tidak ada lagi yang bisa dibagi dan
tidak ada lagi sisa pembagian. Berikut tampilannya:
Menyebut
Angka
Ok, akhirnya sampai di sini juga. Program
berikut adalah program untuk menyebut angka dalam bentuk kalimat mulai dari 1
sampai jutaan. Misalnya angka 123 menjadi “seratus dua puluh tiga”, dst.
Berikut ini salah satu contoh kodenya:
#include
<iostream>
using
namespace std;
void first
(int n) {
switch (n) {
case 1: cout << "satu ";
break;
case 2: cout << "dua ";
break;
case 3: cout << "tiga ";
break;
case 4: cout << "empat ";
break;
case 5: cout << "lima "; break;
case 6: cout << "enam ";
break;
case 7: cout << "tujuh ";
break;
case 8: cout << "delapan
"; break;
case 9: cout << "sembilan
"; break;
case 10: cout << "sepuluh
"; break;
case 11: cout << "sebelas
"; break;
default: break;
}
}
void second
(int n) {
int bul, sisa;
bul = n / 10;
sisa = n % 10;
if (bul == 0)
first (sisa);
else if (bul == 1) {
if (sisa <= 1)
first (n);
else {
first (sisa);
cout << "belas
";
}
}
else {
first (bul);
cout << "puluh ";
first (sisa);
}
}
void third
(int n) {
int bul, sisa;
bul = n / 100;
sisa = n % 100;
if (bul == 0)
second (sisa);
else if (bul == 1) {
if (sisa == 0)
cout << "seratus
";
else {
cout << "seratus
";
second (sisa);
}
}
else {
first (bul);
cout << "ratus ";
second (sisa);
}
}
void fourth
(int n) {
int bul, sisa;
bul = n / 1000;
sisa = n % 1000;
if (bul == 0)
third (sisa);
else if (bul == 1) {
if (sisa == 0)
cout << "seribu
";
else {
cout << "seribu
";
third (sisa);
}
}
else {
third (bul);
cout << "ribu ";
third (sisa);
}
}
void fifth
(int n) {
int bul, sisa;
bul = n / 1000000;
sisa = n % 1000000;
if (bul == 0)
fourth (sisa);
else if (bul == 1) {
if (sisa == 0)
cout << "satu juta
";
else {
cout << "satu juta
";
fourth (sisa);
}
}
else {
third (bul);
cout << "juta ";
fourth (sisa);
}
}
void main
() {
int n = 1;
while (n == 1) {
int num1;
do {
cout << "";
cin >> num1;
} while (num1 < 1);
fifth (num1);
cout
<< "\n";
}
}
Logika:
Kita mau mengetes apakah angka yang dimasukkan adalah
jutaan, ribuan, ratusan, puluhan, atau satuan. Karena pada dasarnya hanya itu
saja jenis – jenis angka yang ada (tidak termasuk milyaran dan triliunan dan
yang lebih besar, karena tipe int tidak dapat menjangkau bilangan – bilangan tersebut).
Pada waktu pertama kali kita “mengetes” bilangan
tersebut, kita mencoba menguji:
1. Apakah bilangan itu adalah jutaan?
Pertama – tama, mungkin ada yang bertanya
mengapa bagian ini dimasuki terlebih dahulu? Secara logisnya, dari cara
pengucapannya, dalam mengucapkan nama bilangan, tentu saja yang akan diucapan
adalah bilangan terbesarnya lalu berurut sampai yang terkecil. Misalnya, 1.234
dibaca seribu dua ratus tiga puluh empat. Maka, dari besarnya angka yang dapat
dimasukkan ke dalam program, jutaan merupakan “porsi” yang terbesar. Maka yang
paling pertama diuji adalah “apakah bilangan itu adalah jutaan?”.
·
jika tidak, maka
bilangan itu dites apakah bilangan itu adalah ribuan.
·
jika ya, maka “bagian
jutaan” bilangan itu diterjemahkan ke dalam kata – kata lalu sisanya (ratusan
ribu ke bawah) dicek lagi pada fungsi untuk bilangan ribuan.
2. Apakah bilangan itu ribuan?
·
Jika tidak, maka
bilangan itu akan dites apakah bilangan itu adalah ratusan.
·
Jika ya, maka
“bagian ribuan” dari bilangan itu diterjemahkan lalu sisanya dimasukkan di
bagian ratusan.
3. Apakah bilangan itu ratusan?
·
Jika tidak, maka
bilangan itu akan dites apakah bilangan itu adalah puluhan.
·
Jika ya, maka
“bagian ratusan” dari bilangan itu diterjemahkan lalu sisanya dimasukkan ke
dalam fungsi puluhan.
4. Apakah bilangan itu puluhan?
·
Jika tidak, maka
bilangan itu akan dimasukkan ke dalam fungsi terakhir, fungsi satuan.
·
Jika ya, maka “bagian puluhan” dari bilangan itu
akan diterjemahkan dan kemudian sisanya dimasukkan ke dalam fungsi satuan.
Penjelasan kode:
Pertama – tama, perlu kita perhatikan bahwa sudah
“disiapkan” sebuah perulangan di sana
(while). Itu sebenarnya
“kerjaaan” saya, yang membuatnya supaya programnya bisa diulang terus menerus (silahkan
edit sendiri kalau mau merubahnya) J. Pada fungsi utama,
seperti yang kita lihat, kita ingin supaya masukan kita mempunyai nilai paling
tidak sama dengan satu. Lalu setelah itu, kita memasukkan input tersebut pada
bagian jutaan. Caranya mirip dengan bagaimana kita menerjemahkan angka – angka
ke dalam kata – kata. Prosesnya dapat kita lihat pada kondisi – kondisi pada
fungsi tersebut.
·
Jika hasil bulat
dari pembagian n dengan
1.000.000 adalah 0 (nol), maka bisa dipastikan bahwa n bukanlah bilangan jutaan.
·
Jika hasil bulat
dari pembagian n dengan 1.000.000 adalah 1 dan sisanya adalah 0 (nol), maka n pastilah
1.000.000 (satu juta).
·
Jika hasil bulat
dari pembagian n dengan 1.000.000 lebih besar dari 1, maka bilangan tersebut pastilah
lebih atau sama dengan 2.000.000. Maka hasil bulat pembagian tersebut,
dimasukkan ke dalam third (karena nilai maksimal dari bilangan jutaan adalah
ratusan juta), lalu di cetak kata “juta ”, dan kemudian sisanya dimasukkan ke
dalam fourth (karena ada
kemungkinan sisanya bernilai ribuan)
Pada
fungsi – fungsi yang lainnya juga dibuat dengan cara seperti itu hingga
akhirnya pada bagian satuan dari bilangan tersebut. Hanya saja, jika kita
perhatikan pada fungsi second, ada sebuah kondisi dimana jika hasil bulat dari
pembagian adalah 1, dan jika sisanya lebih besar dari 1, maka sisanya akan
dimasukkan ke dalam first dan selanjutnya di cetak kata “belas ”. Jadi
misalnya, angkanya adalah 19, sisanya tentu saja adalah 9. Angka 9 di first, akan menghasilkan kata
“sembilan “ di layar. Lalu ditambah dengan kata “belas “, maka hasilnya adalah
“sembilan belas “. Jadi, kita tidak usah membuat case untuk “belas – belas” yang lain selain 11 (sebelas), ‘tul ga? J.
Penutup
Phew, akhirnya selesai juga
tulisan ini (tepatnya beberapa menit lagi sebelum Van Helsing beraksi alias
tengah malam :D). Ngga tau, berapa
lama waktu saya habiskan di depan kompie
untuk menyempurnakan tulisan ini. Lagi pula, karena ini merupakan tulisan
pertama saya, maka pasti tidak luput dari kesalahan – kesalahan (sebenarnya
tulisan ke berapa pun pasti ada kesalahan karena manusia tidak ada yang
sempurna, ‘tul ga?). Oleh karena itu,
saran dan kritik sangat diharapkan untuk menjadi masukan yang berguna
dikemudian hari.
Referensi
·
Drs. Suarga,
M.Sc., M. Math., Ph.D., Algoritma
Pemrograman, Penerbit ANDI, 2006
·
Robert Setiadi, Algoritma Itu Mudah, PT. Prima
Infosarana Media, 2008
·
http://www.lautanindonesia.com
(beserta para penghuninya J. Thanks atas kritikan –kritikan dan masukan -masukannya).
·
Benda kecil yang
telah dibuatkan dan dititipkan Tuhan pada saya untuk dijaga yang bernama otak J.