Variabel terisi nilai 0 karena pembagian 10/100, 20/100, 30/100, dan 40/100 dianggap oleh compiler C++ sebagai operasi pembagian bilangan bulat, yang mengembalikan nilai hasil bagi bilangan bulat tanpa memperhitungkan sisa. Pada bahasa pemrograman lain, ada yang menggunakan operator atau . Hal ini tidak ada hubungannya dengan aplikasi atau IDE yang digunakan.
Jadi, jika x < 100, x bilangan bulat, maka x/100 = x div 100 = 0. Mengakibatkan: Nilai_Akhir = 0+0+0+0 = 0.
Agar menghasilkan perhitungan seperti yang diinginkan, operasi pembagian tersebut harus berada dalam ranah tipe data float. Ada beberapa alternatif solusi yang dapat dilakukan.
Alternatif 1 Menjadikan pembilang atau penyebut (salah satu saja cukup) menjadi bilangan pecahan desimal, dengan menggunakan 0 sebagai angka di belakang separator desimal (dalam hal ini titik, bukan koma).
Alternatif 2 Karena nilai pecahan desimalnya mudah dihitung, kita ganti saja menjadi pecahan desimal, bukan operasi pembagian. Misalnya, 10/100 diganti menjadi 0.1, 20/100 diganti menjadi 0.2, dan seterusnya.
Alternatif 3 Dengan typecasting menjadi tipe data . Caranya: dengan menyisipkan di awal operasi matematika (terutama pembagian) yang melibatkan seluruhnya. Operasi yang di-typecast ke tipe data float akan dianggap sebagai operasi dalam ranah tipe bilangan float.
Untuk lebih jelasnya, silahkan amati kode program modifikasi berikut, dan hasil eksekusinya.
henriyulianto
sama2. btw conio.h tdk perlu di-include-kan.
henriyulianto
Kalau tidak pakai fungsi kbhit, cgets, cscanf, putch, cputs, cprintf, clrscr, getch, tdk perlu include conio.h. Saya biasa pakai Linux, nggak ada conio.h malahan.
Jawaban dan Penjelasan:
Variabel terisi nilai 0 karena pembagian 10/100, 20/100, 30/100, dan 40/100 dianggap oleh compiler C++ sebagai operasi pembagian bilangan bulat, yang mengembalikan nilai hasil bagi bilangan bulat tanpa memperhitungkan sisa. Pada bahasa pemrograman lain, ada yang menggunakan operator atau .
Hal ini tidak ada hubungannya dengan aplikasi atau IDE yang digunakan.
Jadi, jika x < 100, x bilangan bulat, maka x/100 = x div 100 = 0.
Mengakibatkan:
Nilai_Akhir = 0+0+0+0 = 0.
Agar menghasilkan perhitungan seperti yang diinginkan, operasi pembagian tersebut harus berada dalam ranah tipe data float. Ada beberapa alternatif solusi yang dapat dilakukan.
Menjadikan pembilang atau penyebut (salah satu saja cukup) menjadi bilangan pecahan desimal, dengan menggunakan 0 sebagai angka di belakang separator desimal (dalam hal ini titik, bukan koma).
Karena nilai pecahan desimalnya mudah dihitung, kita ganti saja menjadi pecahan desimal, bukan operasi pembagian.
Misalnya, 10/100 diganti menjadi 0.1, 20/100 diganti menjadi 0.2, dan seterusnya.
Dengan typecasting menjadi tipe data .
Caranya: dengan menyisipkan di awal operasi matematika (terutama pembagian) yang melibatkan seluruhnya. Operasi yang di-typecast ke tipe data float akan dianggap sebagai operasi dalam ranah tipe bilangan float.
Untuk lebih jelasnya, silahkan amati kode program modifikasi berikut, dan hasil eksekusinya.
Kode program
#include<iostream>
using namespace std;
int main() {
float NT, NQ, NU, NS, Nilai_Akhir;
cout << "Nilai Tugas : ";
cin >> NT;
cout << "Nilai Quiz : ";
cin >> NQ;
cout << "Nilai UTS : ";
cin >> NU;
cout << "Nilai Semester : ";
cin >> NS;
// ALTERNATIF 1
Nilai_Akhir = 10.0/100*NT + 20.0/100*NQ + 30.0/100*NU + 40.0/100*NS;
cout << endl << "Alternatif 1: " << endl;
cout << "Nilai_Akhir = 10.0/100.0*NT + 20.0/100.0*NQ + 30.0/100.0*NU + 40.0/100.0*NS;" << endl;
cout << "Hasil Nilai Akhir = " << Nilai_Akhir << endl;
Nilai_Akhir = 0; // <== reset agar yakin dihitung kembali
// ALTERNATIF 2
Nilai_Akhir = 0.1*NT + 0.2*NQ + 0.3*NU + 0.4*NS;
cout << endl << "Alternatif 2: " << endl;
cout << "Nilai_Akhir = 0.1*NT + 0.2*NQ + 0.3*NU + 0.4*NS;" << endl;
cout << "Hasil Nilai Akhir = " << Nilai_Akhir << endl;
Nilai_Akhir = 0; // <== reset agar yakin dihitung kembali
// ALTERNATIF 3
Nilai_Akhir = (float)10/100*NT + (float)20/100*NQ + (float)30/100*NU + (float)40/100*NS;
cout << endl << "Alternatif 3: " << endl;
cout << "Nilai_Akhir = (float)10/100*NT + (float)20/100*NQ + (float)30/100*NU + (float)40/100*NS;" << endl;
cout << "Hasil Nilai Akhir = " << Nilai_Akhir << endl << endl;
return 0;
}
_______________
Hasil Eksekusi
Nilai Tugas : 90
Nilai Quiz : 90
Nilai UTS : 90
Nilai Semester : 90
Alternatif 1:
Nilai_Akhir = 10.0/100.0*NT + 20.0/100.0*NQ + 30.0/100.0*NU + 40.0/100.0*NS;
Hasil Nilai Akhir = 90
Alternatif 2:
Nilai_Akhir = 0.1*NT + 0.2*NQ + 0.3*NU + 0.4*NS;
Hasil Nilai Akhir = 90
Alternatif 3:
Nilai_Akhir = (float)10/100*NT + (float)20/100*NQ + (float)30/100*NU + (float)40/100*NS;
Hasil Nilai Akhir = 90
_______________
Semoga tidak bingung lagi ya.