// PR Bab 10, tantangan -- pembahasan. // // Bug di cepat(): batas perulangan i < n - 1 melewatkan elemen terakhir. // Yang benar i < n. #include #include using namespace std; int lambat(int a[], int n) { int terbesar = 0; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (a[i] - a[j] > terbesar) terbesar = a[i] - a[j]; return terbesar; } int cepat(int a[], int n) { int besar = a[0], kecil = a[0]; for (int i = 1; i < n; i++) { // sudah diperbaiki if (a[i] > besar) besar = a[i]; if (a[i] < kecil) kecil = a[i]; } return besar - kecil; } int cepat_bug(int a[], int n) { int besar = a[0], kecil = a[0]; for (int i = 1; i < n - 1; i++) { // versi lama, untuk perbandingan if (a[i] > besar) besar = a[i]; if (a[i] < kecil) kecil = a[i]; } return besar - kecil; } int main() { srand(12345); for (int uji = 1; uji <= 1000; uji++) { int n = rand() % 6 + 1; int a[10]; for (int i = 0; i < n; i++) a[i] = rand() % 21 - 10; if (lambat(a, n) != cepat_bug(a, n)) { cout << "versi lama gagal pada uji ke-" << uji << ", n = " << n << "\n"; for (int i = 0; i < n; i++) cout << a[i] << " "; cout << "\nlambat = " << lambat(a, n) << ", cepat_bug = " << cepat_bug(a, n) << "\n"; break; } } for (int uji = 1; uji <= 1000; uji++) { int n = rand() % 6 + 1; int a[10]; for (int i = 0; i < n; i++) a[i] = rand() % 21 - 10; if (lambat(a, n) != cepat(a, n)) { cout << "versi perbaikan masih salah pada uji ke-" << uji << "\n"; return 0; } } cout << "versi perbaikan cocok pada 1000 uji\n"; return 0; }