Jumat, 11 Juli 2014

Contoh Program Menyebut Angka C++


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 &lt;&lt; "satu "; break;

      case 2: cout &lt;&lt; "dua "; break;

      case 3: cout &lt;&lt; "tiga "; break;

      case 4: cout &lt;&lt; "empat "; break;

      case 5: cout &lt;&lt; "lima "; break;

      case 6: cout &lt;&lt; "enam "; break;

      case 7: cout &lt;&lt; "tujuh "; break;

      case 8: cout &lt;&lt; "delapan "; break;

      case 9: cout &lt;&lt; "sembilan "; break;

      case 10: cout &lt;&lt; "sepuluh "; break;

      case 11: cout &lt;&lt; "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 &lt;= 1)

                  first (n);

            else {

                  first (sisa);

                  cout &lt;&lt; "belas ";

            }

      }

      else {

            first (bul);

            cout &lt;&lt; "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 &lt;&lt; "seratus ";

            else {

                  cout &lt;&lt; "seratus ";

                  second (sisa);

            }

      }

      else {

            first (bul);

            cout &lt;&lt; "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 &lt;&lt; "seribu ";

            else {

                  cout &lt;&lt; "seribu ";

                  third (sisa);

            }

      }

      else {

            third (bul);

            cout &lt;&lt; "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 &lt;&lt; "satu juta ";

            else {

                  cout &lt;&lt; "satu juta ";

                  fourth (sisa);

            }

      }

      else {

            third (bul);

            cout &lt;&lt; "juta ";

            fourth (sisa);

      }

}

void main () {

      int n = 1;

      while (n == 1) {

            int num1;

     

            do {

                  cout &lt;&lt; "";

                  cin &gt;&gt; num1;

            } while (num1 &lt; 1);

            fifth (num1);

            cout &lt;&lt; "\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).

Tidak ada komentar:

Posting Komentar