Pembedaan "more" dan "less" kan bisa dilakukan secara
internal dengan:

  if( a > b ) { more = a; less = b } else...

... sehingga bug yang disebabkan kesalahan input
pengguna bisa diminimalkan. Selain itu, selalu
usahakan semua variabel diinisialisasikan saat
dideklarasikan. Kalau membandingkan:

  int a, b, c;
  a = 1;  b = 2;  c = 3;

dengan

  int a = 1, b = 2, c = 3;

rasanya masih lebih aman yang kedua, karena untuk
daftar variabel yang panjang, bisa-bisa ada variabel
yang harus diinisialisasi tapi kelupaan dan
mengakibatkan kesalahan logika. Memang sepele, tapi
bug bisa muncul dari sini (lihat kode contohmu
sendiri).

Nama variabel juga seharusnya sesuai dengan
peruntukannya: "result" lebih baik dari "equal",
karena sekali lihat orang langsung tahu, ``Oh, hasil
komputasi akan diletakkan di sini'', tanpa harus
melihat penggunaan variabel tersebut di ujung
terbawah. Kalau harus membaca fungsi 50 baris atau
lebih, Anda akan berterimakasih kalau si pembuat
fungsi menggunakan nama-nama yang masuk akal.

Menuliskan "++stepup" di setiap cabang kondisional
juga kurang efisien; pernyataan seperti ini namanya
common statement. Keadaan seperti ini dapat dideteksi
dan diperbaiki dengan kompiler pengoptimasi seperti
GCC, tapi tetap saja: kalau satu langkah umum ini
terdiri dari lebih dari satu baris, dan digunakan
bersama oleh lebih dari dua cabang kondisional,
perubahan terhadap satu langkah ini harus dilakukan
terhadap semua salinannya:

if( kondisi_001 ) {
  langkah_umum_1; // ubah ini, dan semua salinannya!
  langkah_umum_2; // sekalian ini, biar tambah repot,
  langkah_umum_3; // bisa ada yang kelupaan.
}
...
else if( kondisi_999 ) {
  langkah_umum_1;
  langkah_umum_2;
  langkah_umum_3;
}
else {
  langkah_umum_1;
  langkah_umum_2;
  langkah_umum_3;
}

Berikut hasil saya mengubah sedikit contoh Anda:

int gcd( int a, int b ) {
  int bigger, smaller, dummy = 1, result = 1;

  if( a > b ) { bigger = a; smaller = b; }
  else        { bigger = b; smaller = a; }

  while( dummy <= bigger ) {
    if( ( bigger%dummy )==0 && ( smaller%dummy )==0 ){
      result = dummy;
    }
    ++dummy;
  }

  return result;
}

Sebenarnya di sini "dummy" tidak benar-benar
diperlukan dan untuk posisinya kita dapat mengubah
"smaller" saja, karena:

  gcd( a, b ) = gcd( a / i, b * i )

sepanjang a / i tidak bersisa. Ini fakta yang
digunakan dalam solusi Mas Eko Prasetya.

DISCLAIMER: Saya juga belum ngetes contoh di atas
dengan kompiler, lho :-P
 
--- genjuro <[EMAIL PROTECTED]> wrote:

> #include <iostream>
> using namespace std;
> 
> int main() {
>       int more, less, mod1, mod2, stepup, equal;
>       stepup = 1;
>       equal = 1;
>       cout << "masukkan angka yang lebih kecil: ";
>       cin >> less;
>       cout << "masukkan angka yang lebih besar: ";
>       cin >> more;
>       
>       while (stepup <= more) {
>               mod1 = less % stepup;
>               mod2 = more % stepup;
>       
>               if (mod1 == 0 && mod2 == 0) {
>                       if (stepup != more) {
>                               equal = stepup;
>                               ++stepup;
> 
>                       else
>                               ++stepup;
>               }
> 
>               else
>                       ++stepup;
>       }
> 
>       cout << "FPB untuk " << less << " dan " << more <<
> " 
> adalah: ";
>       cout << equal;
> 
>       return 0;
> }



      
____________________________________________________________________________________
Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs

-- 
Berhenti langganan: [EMAIL PROTECTED]
Arsip dan info: http://linux.or.id/milis

Kirim email ke