Algoritma Pemrograman
Dengan
Menggunakan C++
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
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… (koq jadi laper?
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?
0 komentar:
Posting Komentar