Pemanfaatan Kalkulator Lanjutan untuk Berbagai Kebutuhan Matematika
Nama: Rizky Delfa Ramadhani
NIM: A11.2024.15687
Universitas: Universitas Dian Nuswantoro (UDINUS)
URL Blog: Eksplorasi Rizky
Tanggal: 16 Januari 2025
Pendahuluan
Proyek aplikasi kalkulator lanjutan ini bertujuan untuk memberikan solusi praktis bagi pengguna dalam melakukan berbagai perhitungan matematika, baik yang bersifat dasar maupun lanjutan. Aplikasi ini dikembangkan menggunakan bahasa pemrograman C++ dan dirancang dengan antarmuka berbasis teks yang memungkinkan interaksi langsung dengan pengguna melalui pilihan menu perhitungan.
Kalkulator ini mencakup perhitungan seperti:
- Perkalian, Penjumlahan, Pembagian, Pengurangan.
- Volume Kubus dan Balok.
- Perhitungan Trigonometri (sinus, kosinus, tangen).
- Operasi dengan Pecahan (penjumlahan, pengurangan, perkalian, pembagian).
- Faktorial.
1. Problem
Aplikasi kalkulator lanjutan ini dikembangkan dengan tujuan membantu pengguna dalam melakukan perhitungan matematika dasar dan lanjutan. Beberapa jenis perhitungan yang tersedia di dalam aplikasi ini meliputi:
- Operasi dasar: Perkalian, Penjumlahan, Pembagian, dan Pengurangan.
- Menghitung volume kubus dan balok.
- Perhitungan trigonometri dasar.
- Operasi dengan pecahan (penjumlahan, pengurangan, perkalian, pembagian).
- Faktorial.
Aplikasi ini memungkinkan pengguna untuk memasukkan angka-angka yang diperlukan dan langsung melihat hasil perhitungannya.
2. Solusi
Solusi untuk permasalahan di atas diberikan dengan membangun aplikasi kalkulator berbasis teks menggunakan bahasa pemrograman C++. Aplikasi ini menyediakan menu interaktif yang memungkinkan pengguna untuk memilih jenis perhitungan yang diinginkan. Setiap perhitungan dilakukan dengan menggunakan fungsi-fungsi modular yang memproses input yang diberikan oleh pengguna dan menampilkan hasilnya di layar.
3. Kode Program Lengkap
i#include <iostream>
#include <cmath>
#include <cctype>
using namespace std;
// cara compile : klik ctrl + ` lalu tulis "// caranya klik ctrl +
// lalu tulis "clear && g++ advcalc.cpp && ./a.out"
// untuk menjalankan, tulis ini di terminala
// judul : AdvCalc
// tanggal : 13 november 2024
// Kamus
string menu_pilihan_string;
int angka_pertama_perkalian;
int angka_kedua_perkalian;
int angkake1_pertambahan;
int angkake2_pertambahan;
int angkake1_pembagian;
int angkake2_pembagian;
int angkake1_perkurangan;
int angkake2_perkurangan;
int panjangsisi_volumekubus;
int angkake1_volumebalok;
int angkake2_volumebalok;
int angkake3_volumebalok;
int hasil;
int status_berhenti;
char ingin_keluar;
int pers_A;
int pers_B;
int pers_C;
int input_pilihan_mode_pecahan;
// kamus untuk mode trigonometri
int input_pilihan_mode_trig;
float input_derajat_trig;
float output_hitung_trig;
float x1;
float x2;
int status_output;
// kamus untuk operasi pecahan
int isi_pembilang_pec1;
int isi_penyebut_pec1;
int isi_pembilang_pec2;
int isi_penyebut_pec2;
int hasil_pembilang_atas;
int hasil_penyebut_bawah;
int hasil_penyederhanaan_penyebut;
int hasil_penyederhanaan_pembilang;
int input_faktorial;
int hasil_faktorial;
void tampilkan_pilihan_menu_utama();
void tampilkan_logo();
void tampilkan_help();
void bersihkan_layar();
int hitung_perkalian(int angka_1, int angka_2);
int hitug_pertambahan (int angka_1, int angka_2);
int hitung_pembagian (int angka_1, int angka_2);
int hitung_penkurangan (int angka_1, int angka_2);
int hitung_volumekubus (int angka_1);
int hitung_volumebalok (int angka_1, int angka_2, int angka_3);
float hitung_rumus_abc(int a, int b, int c, string mode);
int konfirmasi_ingin_keluar();
int cari_angka_yg_bisa_bagi_habis(int pembilang, int penyebut);
int simpelkan_bentuk_per(int pembilang, int penyebut, string mode_keluaran);
int tambahkan_pecahan(int atas, int bawah, int lawan_nya_atas, int lawan_nya_bawah, string mode);
int kalikan_pecahan(int atas, int bawah, int lawan_nya_atas, int lawan_nya_bawah, string mode);
int kurangkan_pecahan(int atas, int bawah, int lawan_nya_atas, int lawan_nya_bawah, string mode);
int bagi_pecahan(int atas, int bawah, int lawan_nya_atas, int lawan_nya_bawah, string mode);
string isi_kekosongan_dgn_spasi(int angka, int digit);
int terbesardr6data(int data1, int data2, int data3, int data4, int data5, int data6);
void tampilkan_pecahan( int pembilang_pers1, int penyebut_pers1,
int pembilang_pers2, int penyebut_pers2,
int pembilang, int penyebut, char tipe_operator_sekarang);
float ubah_derajatkeradian(float derajat);
void tampilkan_menu_trigonometri();
void fungsi_khusus_op_ngitung_trig();
void fungsi_khusus_op_pecahan();
void tampilkan_pilihan_menu_utama()
{
cout<<"\033[0;33m [ 1 ] Perkalian :" << "\033[0;33m [ 6 ] volume Balok : " << "\033[0;33m [ 11 ] Help : "<< endl;
cout<<"\033[0;33m [ 2 ] Pertambahan :" << "\033[0;33m [ 7 ] Persamaan Kuadrat : "<< endl;
cout<<"\033[0;33m [ 3 ] Pembagian :" << "\033[0;33m [ 8 ] Operasi Pecahan : "<< endl;
cout<<"\033[0;33m [ 4 ] Pengurangan :" << "\033[0;33m [ 9 ] Trigonometry : "<< endl;
cout<<"\033[0;33m [ 5 ] volume Kubus :" << "\033[0;33m [ 10 ] Faktorial : "<< endl;
}
void tampilkan_logo()
{ cout<<endl;
cout<<"\033[0;33m █████╗ ██████╗ ██╗ ██╗ ██████╗ █████╗ ██╗ ██████╗\033[0m" << endl;
cout<<"\033[0;33m ██╔══██╗██╔══██╗██║ ██║ ██╔════╝██╔══██╗██║ ██╔════╝\033[0m" << endl;
cout<<"\033[0;33m ███████║██║ ██║██║ ██║█████╗██║ ███████║██║ ██║ \033[0m" << endl;
cout<<"\033[0;33m ██╔══██║██║ ██║╚██╗ ██╔╝╚════╝██║ ██╔══██║██║ ██║ \033[0m" << endl;
cout<<"\033[0;33m ██║ ██║██████╔╝ ╚████╔╝ ╚██████╗██║ ██║███████╗╚██████╗\033[0m" << endl;
cout<<"\033[0;33m ╚═╝ ╚═╝╚═════╝ ╚═══╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═════╝\033[0m" << endl;
cout<<"\033[0;34m =========================================================\033[0m" << endl;
cout<<"\033[0;36m | Advanced calculator by: - Fadhil Riyanto | \033[0m" << endl;
cout<<"\033[0;36m | - Rizky Delfa Ramadhani | \033[0m" << endl;
cout<<"\033[0;36m | - Rezqy Tatya Anza | \033[0m" << endl;
cout<<"\033[0;34m =========================================================\033[0m" << endl;
cout<< endl;
}
void tampilkan_help() {
cout << "\n\033[0;34m==================== HELP - Advanced Calculator ====================\033[0m\n";
cout << "\033[0;36mCara Menggunakan Program AdvCalc:\033[0m\n";
cout << "1. Jalankan program ini di terminal Anda.\n";
cout << "2. Setelah program dimulai, Anda akan melihat beberapa opsi menu.\n";
cout << "3. Pilih operasi yang ingin dijalankan dengan memasukkan nomor menu:\n";
cout << " - [1] Perkalian\n";
cout << " - [2] Pertambahan\n";
cout << " - [3] Pembagian\n";
cout << " - [4] Pengurangan\n";
cout << " - [5] Volume Kubus\n";
cout << " - [6] Volume Balok\n";
cout << " - [7] Persamaan Kuadrat\n";
cout << " - [8] Operasi Pecahan\n";
cout << " - [9] Trigonometry\n";
cout << " - [10] Faktorial\n";
cout << " - [11] Help\n"; // Menambahkan opsi Help
cout << "4. Masukkan angka yang diminta oleh program untuk menyelesaikan operasi yang dipilih.\n";
cout << "5. Setelah hasil muncul, Anda akan ditanya apakah ingin keluar (y/n).\n";
cout << " - Ketik 'y' untuk keluar dari program atau 'n' untuk kembali ke menu.\n";
cout << "\033[0;33mTips:\033[0m Gunakan kombinasi \033[1;32mCtrl + `\033[0m untuk membuka terminal di beberapa editor.\n";
cout << "==================================================================\n\n";
}
void bersihkan_layar()
{
std::cout << "\x1B[2J\x1B[H";
}
int hitung_perkalian(int angka_1, int angka_2) {
return angka_1 * angka_2;
}
int hitug_pertambahan (int angka_1, int angka_2) {
return angka_1 + angka_2;
}
int hitung_pembagian (int angka_1, int angka_2) {
return angka_1 / angka_2;
}
int hitung_penkurangan (int angka_1, int angka_2) {
return angka_1 - angka_2;
}
int hitung_volumekubus (int angka_1) {
return angka_1 * angka_1 * angka_1;
}
int hitung_volumebalok (int angka_1, int angka_2, int angka_3) {
return angka_1 * angka_2 * angka_3;
}
float hitung_rumus_abc(int a, int b, int c, string mode)
{
// rumus determinan adlh akar(b^2 - 4ac)
float determinan = sqrt((b * b) - 4 * a * c);
if (mode == "xpositif")
{
return (-b + determinan) / (2 * a);
}
else if (mode == "xnegatif")
{
return (-b - determinan) / (2 * a);
}
// cout << determinan << endl;
return 0;
}
int konfirmasi_ingin_keluar() {
cout << "\033[0;31mapakah anda ingin keluar? (y/n) : ";
cin >> ingin_keluar;
std::cout << "\x1B[2J\x1B[H";
if (ingin_keluar == 'y' || ingin_keluar == 'Y') {
return 1;
} else {
return 0;
}
}
int cari_angka_yg_bisa_bagi_habis(int pembilang, int penyebut)
{
if (penyebut == 0) {
return pembilang;
}
return cari_angka_yg_bisa_bagi_habis(penyebut, pembilang % penyebut); // ini namanya fungsi rekursif
}
int simpelkan_bentuk_per(int pembilang, int penyebut, string mode_keluaran) {
int angka_ygbisa_bagi_habis = cari_angka_yg_bisa_bagi_habis(pembilang, penyebut);
int hasil_pembilang = pembilang / angka_ygbisa_bagi_habis;
int hasil_penyebut = penyebut / angka_ygbisa_bagi_habis;
if (mode_keluaran == "pembilang") {
return hasil_pembilang;
} else if (mode_keluaran == "penyebut") {
return hasil_penyebut;
}
return 0;
}
// fungsi untuk pecahan start dr disini ya
int tambahkan_pecahan(int atas, int bawah, int lawan_nya_atas, int lawan_nya_bawah, string mode)
{
// bentuk cara menambahkan pecahan
// a / b + c / d = (a * d) + (b * c) / b * d
if (mode == "pembilang") {
// perkalian silang yg menghasilkan atas
return (atas * lawan_nya_bawah) + (bawah * lawan_nya_atas);
} else {
return bawah * lawan_nya_bawah;
}
}
int kalikan_pecahan(int atas, int bawah, int lawan_nya_atas, int lawan_nya_bawah, string mode)
{
// bentuk cara menambahkan pecahan
// a / b * c / d = (a * c) / (b * d)
if (mode == "pembilang") {
// perkalian silang yg menghasilkan atas
return atas * lawan_nya_atas;
} else {
return bawah * lawan_nya_bawah;
}
}
int kurangkan_pecahan(int atas, int bawah, int lawan_nya_atas, int lawan_nya_bawah, string mode)
{
// a / b + c / d = (a * d) + (b * c) / b * d
if (mode == "pembilang") {
// perkalian silang yg menghasilkan atas
return (atas * lawan_nya_bawah) - (lawan_nya_atas * bawah);
} else {
return bawah * lawan_nya_bawah;
}
}
int bagi_pecahan(int atas, int bawah, int lawan_nya_atas, int lawan_nya_bawah, string mode)
{
// bentuk cara menambahkan pecahan
// a / b / c / d = (a / b) * (d / c) // dibalik pecahaan nya c / d nya
if (mode == "pembilang") {
// perkalian silang yg menghasilkan atas
return (atas * lawan_nya_bawah);
} else {
return (bawah * lawan_nya_atas);
}
}
// ditambahkan dr file pecahan.cpp jam 11.23
string isi_kekosongan_dgn_spasi(int angka, int digit)
{
string angkakestring = to_string(angka);
int jumlah_string = angkakestring.length();
string spasi_yg_disiappkan = "";
if (jumlah_string == digit) {
// tidak perlu menyisipkan lagi
return " " + angkakestring + " ";
} else {
// perlu disii dgn spasi
for(int i = 0; i < (digit - jumlah_string); i++) {
spasi_yg_disiappkan = spasi_yg_disiappkan + " ";
}
// gabungkan
return " " + angkakestring + spasi_yg_disiappkan + " ";
}
}
int terbesardr6data(int data1, int data2, int data3, int data4, int data5, int data6)
{
int gak_kepake_lg = 0;
if (data1 < data2)
{
gak_kepake_lg = data1;
data1 = data2;
data2 = gak_kepake_lg;
}
if (data1 < data3) {
gak_kepake_lg = data1;
data1 = data3;
data3 = gak_kepake_lg;
}
if (data1 < data4) {
gak_kepake_lg = data1;
data1 = data4;
data4 = gak_kepake_lg;
}
if (data1 < data5) {
gak_kepake_lg = data1;
data1 = data5;
data5 = gak_kepake_lg;
}
if (data1 < data6){
gak_kepake_lg = data1;
data1 = data6;
data6 = gak_kepake_lg;
}
return data1;
}
void tampilkan_pecahan( int pembilang_pers1, int penyebut_pers1,
int pembilang_pers2, int penyebut_pers2,
int pembilang, int penyebut, char tipe_operator_sekarang)
{
int terbesar_drsemua = terbesardr6data(pembilang_pers1,
penyebut_pers1, pembilang_pers1,
penyebut_pers2, pembilang, penyebut);
string angka_ver_string = to_string(terbesar_drsemua);
int jmldigit = angka_ver_string.length();
cout << isi_kekosongan_dgn_spasi(pembilang_pers1, jmldigit) << " " << isi_kekosongan_dgn_spasi(pembilang_pers2, jmldigit) << " " << isi_kekosongan_dgn_spasi(pembilang, jmldigit) << endl;
for(int i = 0; i < jmldigit + 2; i++) {
cout << "-";
}
cout << " " << tipe_operator_sekarang << " ";
for(int i = 0; i < jmldigit + 2; i++) {
cout << "-";
}
cout << " " << "=" << " ";
for(int i = 0; i < jmldigit + 2; i++) {
cout << "-";
}
cout << endl;
cout << isi_kekosongan_dgn_spasi(penyebut_pers1, jmldigit) << " " << isi_kekosongan_dgn_spasi(penyebut_pers2, jmldigit) << " " << isi_kekosongan_dgn_spasi(penyebut, jmldigit) << endl;
}
// fungsi untk pecahan stop
// fungsi khusus trigonometri dimulai
float ubah_derajatkeradian(float derajat)
{
return derajat * (M_PI / 180);
}
void tampilkan_menu_trigonometri()
{
bersihkan_layar();
tampilkan_logo();
cout<<"\033[0;36mFungsi Trigonometri yang tersedia: " << endl;
cout<<"\033[0;33m [ 1 ] sin() " << endl;
cout<<"\033[0;33m [ 2 ] cos() " << endl;
cout<<"\033[0;33m [ 3 ] tan() " << endl;
}
void fungsi_khusus_op_ngitung_trig()
{
tampilkan_menu_trigonometri();
cout<<"\033[0;36mmasukkan menu > " ;
cin >> input_pilihan_mode_trig;
if (input_pilihan_mode_trig == 1) {
bersihkan_layar();
tampilkan_logo();
cout << "[mode fungsi sin()]" << endl;
cout << "\033[0;33mMasukkan derajat: ";
cin >> input_derajat_trig;
output_hitung_trig = sinf(ubah_derajatkeradian(input_derajat_trig));
cout << "sin(" << input_derajat_trig << ") = " << output_hitung_trig << endl;
} else if (input_pilihan_mode_trig == 2) {
bersihkan_layar();
tampilkan_logo();
cout << "[mode fungsi cos()]" << endl;
cout << "\033[0;33mMasukkan derajat: ";
cin >> input_derajat_trig;
output_hitung_trig = cosf(ubah_derajatkeradian(input_derajat_trig));
cout << "cos(" << input_derajat_trig << ") = " << output_hitung_trig << endl;
} else if (input_pilihan_mode_trig == 3) {
bersihkan_layar();
tampilkan_logo();
cout << "[mode fungsi tan()]" << endl;
cout << "\033[0;33mMasukkan derajat: ";
cin >> input_derajat_trig;
output_hitung_trig = tanf(ubah_derajatkeradian(input_derajat_trig));
cout << "tan(" << input_derajat_trig << ") = " << output_hitung_trig << endl;
} else {
cout << "\033[1;31mWaduh, mode tidak dikenali !" << endl;
}
}
// fungsi ini khusus untuk operasi pecahan, penjumlahan, perkalian, tambah, dll
void fungsi_khusus_op_pecahan()
{
bersihkan_layar();
tampilkan_logo();
cout<<"\033[0;36mIngin melakukan apa dengan pecahan? " << endl;
cout<<"\033[0;33m [ 1 ] penjumlahan pecahan " << endl;
cout<<"\033[0;33m [ 2 ] perkalian pecahan " << endl;
cout<<"\033[0;33m [ 3 ] pengurangan pecahan " << endl;
cout<<"\033[0;33m [ 4 ] pembagian pecahan " << endl;
cout<<"\033[0;36m [ 9 ] kembali ke menu utama " << endl;
cout<<"\033[0;36mmasukkan menu > " ;
cin >> input_pilihan_mode_pecahan;
if (input_pilihan_mode_pecahan == 1) {
bersihkan_layar();
tampilkan_logo();
cout << "\033[0;36m[MODE PENJUMLAHAN PECAHAN]" << endl;
cout << "\033[0;33mMasukkan pembilang (pecahan 1): ";
cin >> isi_pembilang_pec1;
cout << "Masukkan penyebut (pecahan 1) : ";
cin >> isi_penyebut_pec1;
cout << "\033[0;33mMasukkan pembilang (pecahan 2): ";
cin >> isi_pembilang_pec2;
cout << "Masukkan penyebut (pecahan 2) : ";
cin >> isi_penyebut_pec2;
// cek apakah penyebut ada yg isi na nol atau engga
if (isi_penyebut_pec1 == 0 && isi_penyebut_pec2 == 0) {
cout << "\033[1;31mWaduh, dilarang membagi dengan 0 !" << endl;
} else {
cout << "\033[0;36m-----------------------" << endl;
hasil_pembilang_atas = tambahkan_pecahan(isi_pembilang_pec1, isi_penyebut_pec1,
isi_pembilang_pec2,
isi_penyebut_pec2,
"pembilang");
hasil_penyebut_bawah = tambahkan_pecahan(isi_pembilang_pec1, isi_penyebut_pec1,
isi_pembilang_pec2, isi_penyebut_pec2,
"penyebut");
hasil_penyederhanaan_pembilang = simpelkan_bentuk_per(hasil_pembilang_atas,
hasil_penyebut_bawah, "pembilang");
hasil_penyederhanaan_penyebut = simpelkan_bentuk_per(hasil_pembilang_atas,
hasil_penyebut_bawah, "penyebut");
tampilkan_pecahan(isi_pembilang_pec1,
isi_penyebut_pec1,
isi_pembilang_pec2,
isi_penyebut_pec2,
hasil_penyederhanaan_pembilang,
hasil_penyederhanaan_penyebut, '+');
}
// nb: yg pembagian belum selese
} else if (input_pilihan_mode_pecahan == 2) {
bersihkan_layar();
tampilkan_logo();
cout << "\033[0;36m[MODE PERKALIAN PECAHAN]" << endl;
cout << "\033[0;33mMasukkan pembilang (pecahan 1): ";
cin >> isi_pembilang_pec1;
cout << "Masukkan penyebut (pecahan 1) : ";
cin >> isi_penyebut_pec1;
cout << "\033[0;33mMasukkan pembilang (pecahan 2): ";
cin >> isi_pembilang_pec2;
cout << "Masukkan penyebut (pecahan 2) : ";
cin >> isi_penyebut_pec2;
// cek apakah penyebut ada yg isi na nol atau engga
if (isi_penyebut_pec1 == 0 && isi_penyebut_pec2 == 0) {
cout << "\033[1;31mWaduh, dilarang membagi dengan 0 !" << endl;
} else {
cout << "\033[0;36m-----------------------" << endl;
hasil_pembilang_atas = kalikan_pecahan(isi_pembilang_pec1, isi_penyebut_pec1,
isi_pembilang_pec2,
isi_penyebut_pec2,
"pembilang");
hasil_penyebut_bawah = kalikan_pecahan(isi_pembilang_pec1, isi_penyebut_pec1,
isi_pembilang_pec2, isi_penyebut_pec2,
"penyebut");
hasil_penyederhanaan_pembilang = simpelkan_bentuk_per(hasil_pembilang_atas,
hasil_penyebut_bawah, "pembilang");
hasil_penyederhanaan_penyebut = simpelkan_bentuk_per(hasil_pembilang_atas,
hasil_penyebut_bawah, "penyebut");
tampilkan_pecahan(isi_pembilang_pec1,
isi_penyebut_pec1,
isi_pembilang_pec2,
isi_penyebut_pec2,
hasil_penyederhanaan_pembilang,
hasil_penyederhanaan_penyebut, 'x');
}
// return 0;
} else if (input_pilihan_mode_pecahan == 3) {
bersihkan_layar();
tampilkan_logo();
cout << "\033[0;36m[MODE PENGURANGAN PECAHAN]" << endl;
cout << "\033[0;33mMasukkan pembilang (pecahan 1): ";
cin >> isi_pembilang_pec1;
cout << "Masukkan penyebut (pecahan 1) : ";
cin >> isi_penyebut_pec1;
cout << "\033[0;33mMasukkan pembilang (pecahan 2): ";
cin >> isi_pembilang_pec2;
cout << "Masukkan penyebut (pecahan 2) : ";
cin >> isi_penyebut_pec2;
// cek apakah penyebut ada yg isi na nol atau engga
if (isi_penyebut_pec1 == 0 && isi_penyebut_pec2 == 0) {
cout << "\033[1;31mWaduh, dilarang membagi dengan 0 !" << endl;
} else {
cout << "\033[0;36m-----------------------" << endl;
hasil_pembilang_atas = kurangkan_pecahan(isi_pembilang_pec1, isi_penyebut_pec1,
isi_pembilang_pec2,
isi_penyebut_pec2,
"pembilang");
hasil_penyebut_bawah = kurangkan_pecahan(isi_pembilang_pec1, isi_penyebut_pec1,
isi_pembilang_pec2, isi_penyebut_pec2,
"penyebut");
hasil_penyederhanaan_pembilang = simpelkan_bentuk_per(hasil_pembilang_atas,
hasil_penyebut_bawah, "pembilang");
hasil_penyederhanaan_penyebut = simpelkan_bentuk_per(hasil_pembilang_atas,
hasil_penyebut_bawah, "penyebut");
tampilkan_pecahan(isi_pembilang_pec1,
isi_penyebut_pec1,
isi_pembilang_pec2,
isi_penyebut_pec2,
hasil_penyederhanaan_pembilang,
hasil_penyederhanaan_penyebut, '-');
}
// return 0;
} else if (input_pilihan_mode_pecahan == 4) {
bersihkan_layar();
tampilkan_logo();
cout << "\033[0;36m[MODE PEMBAGIAN PECAHAN]" << endl;
cout << "\033[0;33mMasukkan pembilang (pecahan 1): ";
cin >> isi_pembilang_pec1;
cout << "Masukkan penyebut (pecahan 1) : ";
cin >> isi_penyebut_pec1;
cout << "\033[0;33mMasukkan pembilang (pecahan 2): ";
cin >> isi_pembilang_pec2;
cout << "Masukkan penyebut (pecahan 2) : ";
cin >> isi_penyebut_pec2;
// cek apakah penyebut ada yg isi na nol atau engga
if (isi_penyebut_pec1 == 0 && isi_penyebut_pec2 == 0) {
cout << "\033[1;31mWaduh, dilarang membagi dengan 0 !" << endl;
} else {
cout << "\033[0;36m-----------------------" << endl;
hasil_pembilang_atas = bagi_pecahan(isi_pembilang_pec1, isi_penyebut_pec1,
isi_pembilang_pec2,
isi_penyebut_pec2,
"pembilang");
hasil_penyebut_bawah = bagi_pecahan(isi_pembilang_pec1, isi_penyebut_pec1,
isi_pembilang_pec2, isi_penyebut_pec2,
"penyebut");
hasil_penyederhanaan_pembilang = simpelkan_bentuk_per(hasil_pembilang_atas,
hasil_penyebut_bawah, "pembilang");
hasil_penyederhanaan_penyebut = simpelkan_bentuk_per(hasil_pembilang_atas,
hasil_penyebut_bawah, "penyebut");
tampilkan_pecahan(isi_pembilang_pec1,
isi_penyebut_pec1,
isi_pembilang_pec2,
isi_penyebut_pec2,
hasil_penyederhanaan_pembilang,
hasil_penyederhanaan_penyebut, '/');
}
// return 0;
} else if (input_pilihan_mode_pecahan == 9) {
// kosong
} else {
cout << "inputan salah, mohon pilih menu di atas tersebut." << endl;
}
}
int main()
{
// loop terus tanpa berhenti
while (1) {
// jika variabel status berhenti nilai nya 1, maka break loop nya
if (status_berhenti==1) {
break;
}
bersihkan_layar();
tampilkan_logo();
tampilkan_pilihan_menu_utama();
cout<<"\033[0;36mmasukkan menu > " ;
cin >> menu_pilihan_string;
if (menu_pilihan_string == "1") {
cout << "\033[0;33mmasukan angka pertama : ";
cin >> angka_pertama_perkalian ;
cout << "masukan angka kedua : ";
cin >> angka_kedua_perkalian;
// panggil fungsi disini, lalu simpan di hasil
hasil = hitung_perkalian(angka_pertama_perkalian, angka_kedua_perkalian);
cout << "hasil Perkalian : a x b = " << hasil << endl;
status_berhenti = konfirmasi_ingin_keluar();
} else if (menu_pilihan_string == "2") {
cout << "\033[0;33mMasukan angka pertama :";
cin >> angkake1_pertambahan;
cout << "Masukan angka kedua :";
cin >> angkake2_pertambahan;
// panggil fungsi disini, lalu simpan hasil
hasil = hitug_pertambahan(angkake1_pertambahan, angkake2_pertambahan);
cout << "hasil pertambahan : a + b = " << hasil << endl;
status_berhenti = konfirmasi_ingin_keluar();
}else if (menu_pilihan_string == "3") {
cout << "\033[0;33mMasukan angka pertama :";
cin >> angkake1_pembagian;
cout << "\033[0;33mMasukan angka pertama :";
cin >> angkake2_pembagian;
// panggil fungsi disini, lalu simpan hasil
hasil = hitung_pembagian (angkake1_pembagian, angkake2_pembagian);
cout << "hasil pembagian : a : b = " << hasil << endl;
status_berhenti = konfirmasi_ingin_keluar();
}else if (menu_pilihan_string == "4") {
cout << "\033[0;33mMasukan angka pertama :";
cin >> angkake1_perkurangan;
cout << "\033[0;33mMasukan angka kedua :";
cin >> angkake2_perkurangan;
// panggil fungsi disini, lalu simmpan hasil
hasil = hitung_penkurangan (angkake1_perkurangan, angkake2_perkurangan);
cout << "hasil pengurangan : a - b = " << hasil << endl;
status_berhenti = konfirmasi_ingin_keluar();
}else if (menu_pilihan_string == "5") {
cout <<"\033[0;33mMasukan sisi kubus :";
cin >> panjangsisi_volumekubus;
// panggil fungsi disini, lalu simmpan hasil
hasil = hitung_volumekubus (panjangsisi_volumekubus);
cout << "hasil volume kubus : S x S x S = " << hasil << endl;
status_berhenti = konfirmasi_ingin_keluar();
}else if (menu_pilihan_string == "6") {
cout <<"\033[0;33mMasukan panjang balok :";
cin >> angkake1_volumebalok;
cout <<"\033[0;33mMasukan lebar balok :";
cin >> angkake2_volumebalok;
cout <<"\033[0;33mMasukan tinggi balok :";
cin >> angkake3_volumebalok;
// panggil fungsi disini, lalu simmpan hasil
hasil = hitung_volumebalok (angkake1_volumebalok, angkake2_volumebalok, angkake3_volumebalok);
cout << "hasil volume balok : P x L x T = " << hasil << endl;
status_berhenti = konfirmasi_ingin_keluar();
}else if (menu_pilihan_string == "7") {
cout <<"\033[0;33mMasukan nilai A :";
cin >> pers_A;
cout <<"\033[0;33mMasukan nilai B :";
cin >> pers_B;
cout <<"\033[0;33mMasukan nilai C :";
cin >> pers_C;
x1 = hitung_rumus_abc(pers_A, pers_B, pers_C, "xpositif");
cout << "x1 = " << x1 << endl;
x2 = hitung_rumus_abc(pers_A, pers_B, pers_C, "xnegatif");
cout << "x1 = " << x2 << endl;
status_berhenti = konfirmasi_ingin_keluar();
}else if (menu_pilihan_string == "8") {
fungsi_khusus_op_pecahan();
status_berhenti = konfirmasi_ingin_keluar();
}else if (menu_pilihan_string == "9") {
fungsi_khusus_op_ngitung_trig();
status_berhenti = konfirmasi_ingin_keluar();
}else if (menu_pilihan_string == "10") {
bersihkan_layar();
tampilkan_logo();
input_faktorial = 0;
hasil_faktorial = 1;
cout << "\033[0;33mMasukkan angka yg ingin difaktorialkan: ";
std::cin >> input_faktorial;
std::cout << "===\n";
for(int i = input_faktorial; i != 0; --i) {
if (i == 1) {
std::cout << i;
} else {
std::cout << i << " x ";
}
hasil_faktorial = hasil_faktorial * i;
}
std::cout << " = ";
std::cout << hasil_faktorial << std::endl;
status_berhenti = konfirmasi_ingin_keluar();
} else if (menu_pilihan_string == "help" || menu_pilihan_string == "11") {
bersihkan_layar();
tampilkan_help();
cout << "[enter untuk keluar]" << endl;
cin.ignore();
cin.get();
} else {
bersihkan_layar();
tampilkan_logo();
cout << "\033[1;31mOops, menu tidak diketahui" << endl;
cout << "[enter untuk kembali]" << endl;
cin.ignore();
cin.get();
}
}
}
4. Penjelasan Kode
Penjelasan kode akan dibagi menjadi beberapa bagian, sesuai dengan struktur dan fungsionalitas masing-masing menu.
a. Struktur Program dan Fungsi Utama (Main)
Penjelasan:
- Loop Utama (while(1)): Program akan terus berjalan dalam loop ini, menunggu input dari pengguna hingga kondisi berhenti tercapai.
- Pembersihan layar: Fungsi
bersihkan_layar()
digunakan untuk membersihkan tampilan layar sebelum menampilkan menu berikutnya. - Menampilkan logo dan menu: Fungsi
tampilkan_logo()
dan tampilkan_pilihan_menu_utama()
digunakan untuk menampilkan logo aplikasi dan daftar pilihan menu. - Input Menu: Program meminta pengguna untuk memasukkan pilihan menu yang diinginkan.
b. Fungsi-fungsi untuk Setiap Menu
Setiap menu yang dipilih akan memanggil fungsi yang relevan dan menampilkan hasil perhitungan berdasarkan input yang diberikan.
Menu 1: Perkalian
Penjelasan:
- Pengguna diminta untuk memasukkan dua angka yang akan dikalikan.
- Fungsi
hitung_perkalian()
akan mengalikan kedua angka tersebut. - Hasilnya akan ditampilkan di layar.
Menu 2: Penjumlahan
Penjelasan:
- Pengguna diminta memasukkan dua angka untuk dijumlahkan.
- Fungsi
hitug_pertambahan()
digunakan untuk menjumlahkan kedua angka tersebut. - Hasilnya ditampilkan di layar.
Menu 3: Pembagian
Penjelasan:
- Pengguna diminta memasukkan dua angka untuk dibagi.
- Fungsi
hitung_pembagian()
membagi angka pertama dengan angka kedua. - Hasilnya ditampilkan di layar.
Menu 4: Pengurangan
Penjelasan:
- Pengguna diminta untuk memasukkan dua angka yang akan dikurangkan.
- Fungsi
hitung_penkurangan()
mengurangi angka kedua dari angka pertama. - Hasilnya ditampilkan di layar.
Menu 5: Volume Kubus
Penjelasan:
- Pengguna diminta untuk memasukkan panjang sisi kubus.
- Fungsi
hitung_volumekubus()
menghitung volume kubus dengan rumus S3. - Hasil volume kubus ditampilkan di layar.
Menu 6: Volume Balok
Penjelasan:
- Pengguna diminta untuk memasukkan panjang, lebar, dan tinggi balok.
- Fungsi
hitung_volumebalok()
menghitung volume balok dengan rumus P×L×T. - Hasil volume balok ditampilkan di layar.
Menu 7: Perhitungan Trigonometri
Penjelasan:
- Pengguna diminta untuk memasukkan sudut dalam derajat.
- Program mengonversi derajat ke radian dan menghitung nilai sinus, kosinus, dan tangen dari sudut tersebut.
Menu 8: Operasi Pecahan
Penjelasan:
- Pengguna diminta untuk memasukkan dua pecahan dalam bentuk pembilang dan penyebut.
- Aplikasi melakukan operasi penjumlahan, pengurangan, perkalian, dan pembagian pecahan.
Menu 9: Faktorial
Penjelasan:
- Pengguna diminta untuk memasukkan angka yang ingin dihitung faktorialnya.
- Program akan memeriksa apakah angka tersebut negatif. Jika negatif, program akan memberikan pesan bahwa faktorial tidak dapat dihitung untuk angka negatif.
- Jika angka valid (positif atau nol), program akan menghitung faktorial menggunakan loop for dan menampilkan hasilnya di layar.
5. Kesimpulan
Aplikasi kalkulator lanjutan ini berhasil mengimplementasikan berbagai jenis perhitungan matematika, mulai dari operasi dasar hingga volume kubus dan balok, trigonometri, operasi pecahan, dan faktorial. Dengan antarmuka berbasis teks, pengguna dapat dengan mudah memilih jenis perhitungan yang diinginkan dan mendapatkan hasil yang akurat. Penggunaan fungsi-fungsi modular membuat aplikasi ini lebih terstruktur dan mudah dipahami.
Semoga penjelasan ini bermanfaat untuk memahami proses pengembangan aplikasi kalkulator lanjutan!
Komentar
Posting Komentar