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.
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.
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.
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.
Sumber: IlmuKomputer.com
Tidak ada komentar:
Posting Komentar