ed_edwardaj

Untitled

Jan 17th, 2019
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cmath>
  4. using namespace std;
  5. #define IdxMin 0
  6. #define IdxMax 4
  7. char ArrOp[IdxMax]; /* Berisi Array Operator + - / * () */
  8. double ArrNum[IdxMax]; /* Berisi Array yang akan dimasukkan pada program */
  9.  
  10. void InitArrOp () { /* Inisialiasi ArrOp */
  11.   ArrOp[0] = '*';  ArrOp[1] = '+';  ArrOp[2] = '/';  ArrOp[3] = '-';
  12. }
  13.  
  14. void InitArrNum() { /* Inisialisasi ArrNum */
  15.   for (int i = IdxMin ; i < IdxMax ; ++i)
  16.     cin >> ArrNum[i];
  17. }
  18.  
  19. double HslOp (char op, double a, double b) { /* Fungsi empat operasi aritmatika yang digunakan pada program utama */
  20.   if (op == '+') return (double)a+b;
  21.   else if (op == '-') return (double)a-b;
  22.   else if (op == '/') {
  23.     if (b != 0) return (double)a/b;
  24.   }
  25.   else if (op == '*') return (double)a*b;
  26. }
  27.  
  28. int main () {
  29.   int i,j,k ; int no = 0; int Hsl = 24; double EPS = 0.0000000001; // EPS digunakan untuk membandingkan double dengan 24 (Hsl), karena menyangkut presisi
  30.   InitArrOp();
  31.   cout << "Masukkan empat buah angka yang Anda mau!" << endl;  InitArrNum();
  32.   sort(ArrNum, ArrNum+4); // Karena next_permutation mengembalikan hasil sampai 4 angka terurut dari besar ke kecil, maka 4 angka harus disort dari kecil ke besar
  33.   cout << "Solusi (menghasilkan 24):" << endl;
  34.   do {
  35.     for (i = IdxMin ; i < IdxMax ; i++) { // Mengenerate semua kemungkinan operator di posisi pertama
  36.       for (j = IdxMin ; j < IdxMax ; j++) { // Mengenerate semua kemungkinan operator di posisi kedua
  37.         for (k = IdxMin; k < IdxMax ; k++) { // Mengenerate semua kemungkinan operator di posisi ketiga
  38.           if (fabs(HslOp(ArrOp[k], (HslOp(ArrOp[j], (HslOp(ArrOp[i],ArrNum[0], ArrNum[1])), ArrNum[2])), ArrNum[3]) -Hsl) <= EPS) { // ((a op b) op c) op d
  39.             no++; //Jumlah solusi bertambah 1.
  40.             cout << no << " "<< "((" << ArrNum[0] << ArrOp[i] <<  ArrNum[1] << ")" << ArrOp[j]  << ArrNum[2] << ")" << ArrOp[k] << ArrNum[3] << endl;
  41.           }
  42.           if (fabs(HslOp(ArrOp[k], (HslOp( ArrOp[i], ArrNum[0], (HslOp(ArrOp[j],ArrNum[1], ArrNum[2])) ) ) , ArrNum[3])- Hsl) <= EPS) { // (a op (b op c)) op d
  43.             no++;
  44.             cout << no << " "<< "(" << ArrNum[0] << ArrOp[i] << "("  << ArrNum[1]  << ArrOp[j]  << ArrNum[2] << "))" << ArrOp[k] << ArrNum[3] << endl;
  45.           }
  46.           if (fabs(HslOp(ArrOp[j],HslOp(ArrOp[i], ArrNum[0], ArrNum[1]), HslOp(ArrOp[k], ArrNum[2], ArrNum[3])) - Hsl ) <= EPS) { // (a op b) op (c op d)
  47.             no++;
  48.             cout << no << " "<< "(" << ArrNum[0] << ArrOp[i]   << ArrNum[1]  << ")" << ArrOp[j]  << "(" << ArrNum[2] << ArrOp[k] << ArrNum[3] << ")" << endl;
  49.           }
  50.           if (fabs(HslOp(ArrOp[i],ArrNum[0],HslOp(ArrOp[k],HslOp(ArrOp[j],ArrNum[1],ArrNum[2]), ArrNum[3])) - Hsl) <= EPS) { // a op ((b op c) op d)
  51.             no++;
  52.             cout << no <<" " << ArrNum[0] << ArrOp[i] << "(("  << ArrNum[1]  << ArrOp[j]  << ArrNum[2] << ")" << ArrOp[k] << ArrNum[3] << ")" << endl;
  53.           }
  54.           if (fabs(HslOp(ArrOp[i],ArrNum[0],HslOp(ArrOp[j],ArrNum[1],HslOp(ArrOp[k], ArrNum[2],ArrNum[3]))) - Hsl) <= EPS) { // a op (b op (c op d))
  55.             no++;
  56.             cout << no <<" " << ArrNum[0] << ArrOp[i] << "("  << ArrNum[1]  << ArrOp[j]  << "("  <<  ArrNum[2]  << ArrOp[k] << ArrNum[3] << "))" << endl;
  57.           } // Terdapat lima buah if-condition yang berguna untuk meletakkan semua kemungkinan '(' dan ')'
  58.         }
  59.       }
  60.     }
  61.   } while (next_permutation(ArrNum, ArrNum+4)); // Mengenerate semua kombinasi (urutan) dari empat angka yang dimasukkan
  62.   if (no == 0) cout << "Tidak Ada Solusi" << endl;
  63.   return 0;
  64. }
Add Comment
Please, Sign In to add comment