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