#include <iostream>
#include <cmath>   // Diperlukan untuk fungsi sin() dan pow()
#include <iomanip> // Diperlukan untuk mengatur presisi output desimal
 
// Mendefinisikan konstanta yang akan digunakan
const double GRAVITASI = 9.8; // Percepatan gravitasi dalam m/s^2
const double PI = 3.14159265358979323846;
 
/**
 * @brief Mengonversi sudut dari derajat ke radian.
 * @param derajat Sudut dalam satuan derajat.
 * @return Sudut dalam satuan radian.
 */
double derajatKeRadian(double derajat) {
    return derajat * PI / 180.0;
}
 
int main() {
    // Deklarasi variabel untuk menampung input dari pengguna
    double kecepatanAwal, sudutDalamDerajat;
 
    // Mengatur output ke bahasa Indonesia
    // std::locale::global(std::locale("id_ID.utf8")); // Baris ini mungkin tidak berfungsi di semua sistem
 
    // Meminta input kecepatan awal dari pengguna
    std::cout << "Masukkan kecepatan awal (v0) dalam m/s: ";
    std::cin >> kecepatanAwal;
 
    // Meminta input sudut elevasi dari pengguna
    std::cout << "Masukkan sudut elevasi (theta) dalam derajat: ";
    std::cin >> sudutDalamDerajat;
 
    // Mengonversi sudut yang diinput dari derajat ke radian karena fungsi sin() C++ menggunakan radian
    double sudutDalamRadian = derajatKeRadian(sudutDalamDerajat);
 
    // Menghitung ketinggian maksimum (h_max) menggunakan rumus gerak parabola
    // Rumus: h_max = (v0^2 * sin^2(theta)) / (2 * g)
    double sin_theta = sin(sudutDalamRadian);
    double h_max = (pow(kecepatanAwal, 2) * pow(sin_theta, 2)) / (2 * GRAVITASI);
 
    // Menampilkan hasil perhitungan kepada pengguna
    std::cout << "\nKetinggian maksimum yang dicapai adalah: "
              << std::fixed << std::setprecision(3) << h_max << " meter." << std::endl;
 
    // Memberikan catatan terkait contoh input dan output yang Anda berikan
    std::cout << "\n--- Catatan Penting ---\n"
              << "Untuk input kecepatan 100 m/s dan sudut 37 derajat, hasil perhitungan\n"
              << "berdasarkan rumus fisika yang benar adalah sekitar 184.773 meter.\n"
              << "Output 12.036 yang Anda sebutkan kemungkinan berasal dari rumus atau\n"
              << "nilai input yang berbeda. Program ini dibuat berdasarkan rumus fisika standar.\n";
 
    return 0;
}