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 .
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? ).
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 . 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 .
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 . 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 .
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) . 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? .
Tidak ada komentar:
Posting Komentar