Welcome!!

Selamat datang di blog milik Andika Candra Jaya (a.k.a TheCruiser)

06 Januari 2012

Kode untuk Panduan Artileri

Kode ini ditulis dalam bahasa C++. Pengguna bahasa lainnya mungkin perlu menyesuaikan dengan algoritmanya.
Pertama, susun dulu algoritma berpikir untuk software ini. Tidak akan digambar karena akan menyita waktu.

Langkah 1-3 adalah masukan (input), 4-8 adalah proses dan langkah 9 adalah keluaran (output)

  1. Masukkan koordinat musuh dalam bentuk XOY (sistem Cartesian, SSDD).
  2. Berikan perbedaan ketinggian, kalau ada, untuk melengkapi penghitungan dengan aturan Rifleman's kecuali pada tembakan voli.
  3. Masukkan jenis peluru, ada kemungkinan beda peluru beda kecepatan luncurnya.
  4. Tentukan jumlah peluru yang mau dilayangkan ke sasaran, berpengaruh kepada perubahan kecepatan gara-gara laras memanas.
  5. Hitung jarak horizontal dari artileri/batrai ke sasaran, gunakan teorema Pitagoras pada posisi musuh.
  6. Hitung sudut kemiringan medan antara artileri dan sasaran, pakailah teori arctan ketinggian terhadap jarak horizontal.
  7. Cari jurusan moncong meriam terhadap sasaran dan gunakan struktur jurusan-tiga-angka.
  8. Hitung kemiringan laras terhadap horizontal.
  9. Tampilkan jarak, arah moncong dan semua elevasi.
Inilah dia kodenya

#include <cstdlib>
#include <iostream>
#include <math.h>
#define rad 57.295771308232087679815481410
using namespace std;
int main (int argc, char *argv[])
{
    double x, y, v, vh, e;
    int type, c, n;
    cout << "------------WELCOME TO ARTILERY COMPUTER!!------------" << endl;
    cout << "All measurements are in meters, as standard rule and improve precision" << endl;
    cout << "Enemy distance due east : (negative for due west)" << endl;
    cin >> x;
    cout << "Enemy distance due north : (negative for due south)" << endl;    cin >> y;    cout << "Input, if any, the altitude difference. Otherwise, input zero. " << endl;
    cin >> e;    cout << "Our ammo selection : " << endl;
    cout << "1. High Explosive" << endl;
    cout << "2. Armor Piercing"<< endl;
    cout << "3. Thermobaric" << endl;
    cout << "4. Smoke" << endl;
    cout << "5. Nuclear" << endl;
    cout << "Type of our ammo : " << endl;
    cin >> type;
    switch (type) {
         case 1:
              v = 582;
              vh = 607;
              break;
         case 2:
              v = 981;
              vh = 1002;
              break;
         case 3:
              v = 776;
              vh = 802;
              break;
         case 4:
              v = 213;
              vh = 224;
              break;
         case 5:
              v = 1512;
              vh = 1663;
              break;
         default :
                 cout << "I guess you don't want to fire since you input an invalid number" << endl;
                 
    system("PAUSE");
   return EXIT_SUCCESS;

         }
    cout << "How many ammos we would like to rain them?? " << endl;
    cin >> n;
    if (x==0) {
      if (y==0) {
      cout << "Enemy is damn here!! Watch out!!" << endl;
       } else {
        if (y>0) {
        cout << "Direction to enemy : Bearing 0" << endl;
         } else {
         cout << "Direction to enemy : Bearing 180" << endl;
      }
   }
      } else if (x>0) {
     cout << "Direction to enemy : Bearing " << (90 - atan (y/x) * rad) << endl;
      } else {
     cout << "Direction to enemy : Bearing " << (270 - atan (y/x) * rad) << endl;
    }    cout << "Enemy Distance : " << sqrt (x*x + y*y) << endl;
    if ((x*x + y*y) < 302500) {
             cout << "They are close and personal, use whatever your firearms!!" << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
    } double b = atan (e/(sqrt (x*x + y*y)))*rad;
  if (e == 0) {   if (((9.8 * sqrt (x*x + y*y))/ (v*v)) > 1) {
   cout << "Enemy beyond maximum firing range!! Move closer!!" << endl;
   } else {
    cout << " Elevations up to 45 degrees " << endl;
    int i = 1;
    for (i; i<=n; i++) {
   cout << 0.5* asin ((9.8*(sqrt (x*x + y*y))) / pow ((0.8*vh - 0.2*vh/i), 2))* rad << endl;
   }
    cout << " Elevations beyond 45 degrees " << endl;
    for (int i=1; i<=n; i++) {   cout << 90 - (0.5* asin ((9.8*(sqrt (x*x + y*y))) / pow ((0.8*vh - 0.2*vh/i), 2))* rad) << endl;    }
  }
 } else {
   if (((9.8 * sqrt (x*x + y*y))/ (v*v)) > 1) {
   cout << "Enemy beyond maximum firing range!! Move closer!!" << endl;
   } else {
    cout << " Elevations up to 45 degrees " << endl;
    int i = 1;
    for (i; i<=n; i++) {
   cout << (0.5* asin ((9.8*(sqrt (x*x + y*y))) / pow ((0.8*vh + 0.2*vh/i), 2))* rad+ b) << endl;
  }
    cout << " Elevations beyond 45 degrees " << endl;
    for (int i=1; i<=n; i++) {   cout << 90 - (0.5* asin ((9.8*(sqrt (x*x + y*y))) / pow ((0.8*vh + 0.2*vh/i), 2))* rad) << endl;
   }
 }
}    system("PAUSE");
    return EXIT_SUCCESS;
}


Mungkin kode ini masih mentah karena inilah contoh program buatan freshman jurusan teknik informatika. Detil lengkap dari program ini (dalam bentuk makalah) ada di tangan Dr. Tjong Wan Sen (dosen Universitas President)

Tidak ada komentar:

Posting Komentar

 
Tweets by @RealCruiser