C++: Kalkulator Statistika Deskriptif (Bagian I: Mean, Median, Modus, Nilai Maks Min, dan Range)
Halo semuanya!
Salam sejahtera untuk kita semua. Pada artikel kali ini, saya ingin berbagi catatan hasil belajar saya tentang fungsi if-else, for, dan array dalam pengaplikasiannya untuk menghitung mean, median, modus, nilai minimum dan maksimum, standar deviasi, varian, simpangan rata-rata, dan koefisien variasi. Berikut adalah output yang dihasilkan.
Saya juga akan memberikan kode programnya beserta penjelasan singkat tentang algoritma programnya. Agar dapat mengakses fitur-fitur dalam bahasa C++, langkah awal yang perlu kita lakukan adalah menggunakan fungsi #include untuk menggunakan fungsi-fungsi yang diperlukan.
Mari kita mulai!
#include <iostream>
#include <math.h>
using namespace std;
Header file standar yang digunakan untuk input dan output adalah <iostream>, sementara <math.h> adalah header file yang berisi fungsi-fungsi matematika seperti fungsi eksponen, logaritma, dan trigonometri.
Saat menggunakan fungsi dari namespace std, kita harus menuliskan std:: sebelum fungsi tersebut. Untuk menghindari penulisan std:: di setiap fungsi yang berasal dari namespace std, kita dapat menggunakan perintah using namespace std;. Dengan menggunakan perintah ini, kita dapat dengan mudah memanggil fungsi-fungsi yang berasal dari namespace std.
Selanjutnya,
int main (){
//deklarasi variabel
int i, jml_data;
float nilai[999];
Variabel i dan jml_data memiliki tipe data integer yang dapat digunakan untuk menyimpan nilai bilangan bulat. Selain itu, terdapat variabel nilai yang merupakan sebuah array bertipe data float dengan panjang 999. Array adalah kumpulan variabel yang memiliki tipe data yang sama dan memiliki indeks untuk mengakses elemen di dalamnya.
Pada program ini, variabel nilai akan digunakan untuk menampung data numerik yang diinputkan oleh pengguna. Sedangkan variabel i akan digunakan sebagai variabel loop untuk mengakses elemen array nilai. Terakhir, variabel jml_data akan digunakan untuk menyimpan jumlah data yang akan disimpan ke dalam array nilai. Dengan demikian, pengguna dapat menyimpan sebanyak maksimal 999 data numerik ke dalam program C++ ini.
cout<<"\n KALKULATOR STATISTIKA DESKRIPTIF"<<endl;
cout<<"==========================================="<<endl;
cout<<" Masukkan banyaknya data yang ingin diinput: ";cin>>jml_data;
cout<<"-----------------------------------------------"<<endl;
for(i=1;i<=jml_data;i++){
cout<<" Data ke-"<<i<<": ";cin>>nilai[i];
}
cout<<"______________________________________________"<<endl;
Bagian kode tersebut bertujuan untuk meminta input data dari pengguna. Program akan menampilkan pesan pada layar untuk meminta pengguna untuk memasukkan jumlah data yang ingin diinput, kemudian nilai tersebut disimpan dalam variabel jml_data.
Kemudian program akan melakukan perulangan for untuk meminta pengguna memasukkan nilai data sebanyak jml_data kali. Setiap kali pengguna diminta memasukkan nilai data, program akan menampilkan pesan “Data ke-i: “ dengan i sebagai nomor urutan data yang diminta, kemudian menerima input nilai data yang dimasukkan menggunakan operator “cin” dan menyimpan nilai tersebut pada variabel nilai[i].
Selanjutnya akan dilakukan pengurutan data dari nilai — nilai yang diinput oleh pengguna yang bersifat acak
cout<<" Urutan Data: "<<endl;
cout<<"----------------------------------------------"<<endl;
for(i=1;i<=jml_data;i++){
for(int j=i+1;j<=jml_data;j++){
if(nilai[j]<nilai[i]){
float temp = nilai[i];
nilai[i]=nilai[j];
nilai[j]=temp;
}
}
}
for(i=1;i<=jml_data;i++){
cout<<" "<<nilai[i];
}
Pada bagian tersebut, dilakukan pengurutan data yang dimasukkan ke dalam array nilai. Data diurutkan dari nilai terkecil hingga nilai terbesar dengan menggunakan algoritma sorting bubble sort.
Pertama, dilakukan looping pertama dari indeks ke-1 hingga jml_data, lalu dilakukan looping kedua dari indeks i+1 hingga jml_data. Dalam looping kedua, dilakukan perbandingan antara nilai pada indeks j dengan nilai pada indeks i. Jika nilai pada indeks j lebih kecil dari nilai pada indeks i, maka dilakukan pertukaran nilai pada indeks i dengan nilai pada indeks j.
Pada bagian tersebut terdapat penggunaan variabel temp
yang digunakan sebagai wadah sementara untuk menyimpan nilai dari nilai[i]
. Kemudian, nilai nilai[i]
akan diganti dengan nilai dari nilai[j]
dan nilai nilai[j]
akan diganti dengan nilai temp
.
Setelah pengurutan selesai dilakukan, dilakukan looping ketiga dari indeks ke-1 hingga jml_data untuk menampilkan urutan data yang sudah diurutkan. Setiap nilai pada array nilai ditampilkan secara berurutan menggunakan perulangan for dan ditampilkan ke layar menggunakan perintah cout.
Setelah memasukkan data ke dalam array, selanjutnya kita akan melakukan beberapa perhitungan dalam statistika deskriptif menggunakan rumus yang tersedia di internet.
RATA-RATA
Rata-rata dihitung dengan menjumlahkan seluruh nilai dalam kumpulan data, kemudian dibagi dengan jumlah total data.
//rata-rata
float rata_rata = 0;
for(i=1;i<=jml_data;i++){
rata_rata += nilai[i];
}
rata_rata = rata_rata/jml_data;
Pada bagian ini, kita akan menghitung nilai rata-rata dari data yang telah dimasukkan sebelumnya. Pertama-tama, kita buat variabel rata_rata dengan tipe data float dan nilai awal 0. Kemudian, kita menggunakan perulangan for untuk menjumlahkan semua data pada array nilai dengan menggunakan operator +=. Setelah itu, nilai rata-rata dihitung dengan membagi hasil penjumlahan dengan jumlah data yang diinputkan. Nilai rata-rata tersebut kemudian disimpan pada variabel rata_rata. Dengan menggunakan rumus ini, kita dapat menghitung nilai rata-rata dari kumpulan data (nilai) yang telah diinputkan.
MEDIAN
Median adalah nilai tengah dari sebuah kumpulan data yang sudah diurutkan dari yang terkecil hingga yang terbesar atau sebaliknya. Dalam bahasa C++, untuk menghitung nilai median dari suatu array data, kita perlu mengurutkan data terlebih dahulu, kemudian mencari nilai median yang terletak di tengah-tengah data jika jumlah datanya ganjil atau nilai rata-rata dari dua nilai tengah jika jumlah datanya genap.
//median
float median;
if(jml_data%2==0){
median = (nilai[jml_data/2]+nilai[(jml_data/2)+1])/2;
}
else{
median = nilai[(jml_data/2)+1];
}
Dari kode di atas, jml_data
adalah jumlah data dalam array, dan nilai
adalah array yang berisi data yang akan dihitung median-nya. Setelah itu, kita melakukan pengecekan apakah jml_data
ganjil atau genap dengan menggunakan operator modulus %
. Jika genap, nilai median dihitung dengan menambahkan dua nilai tengah, yaitu nilai[jml_data/2]
dan nilai[jml_data/2 + 1]
, lalu dibagi dua. Sedangkan jika ganjil, nilai median dihitung dengan mengambil nilai pada posisi tengah, yaitu nilai[(jml_data+1)/2]
.
MODUS
Modus dalam statistika deskriptif adalah nilai atau kelas data yang muncul paling sering atau memiliki frekuensi terbanyak dalam kumpulan data. Untuk menghitung modus dalam program C++, Kita dapat menggunakan array dan perulangan for.
//modus
int frekuensi[999] = {0}; // inisialisasi semua elemen array menjadi 0
for(i=1;i<=jml_data;i++){
for(int j=1;j<=jml_data;j++){
if(nilai[i] == nilai[j]){
frekuensi[i]++;
}
}
}
int max_frekuensi = 0;
for(i=1;i<=jml_data;i++){
if(frekuensi[i] > max_frekuensi){
max_frekuensi = frekuensi[i];
}
}
Untuk menghitung modus, pertama-tama dibuat sebuah array bernama frekuensi
dengan ukuran 999 dan semua elemennya diinisialisasi menjadi 0. Array frekuensi
digunakan untuk menyimpan frekuensi atau jumlah kemunculan setiap data pada array nilai
.
Selanjutnya, dilakukan perulangan for dengan nested loop untuk memeriksa setiap elemen pada array nilai
. Dalam perulangan ini, setiap elemen pada array nilai
akan dibandingkan dengan seluruh elemen pada array nilai
. Jika terdapat elemen pada array nilai
yang sama, maka frekuensi pada elemen tersebut akan ditambah 1 pada array frekuensi
.
Setelah frekuensi dari setiap data pada array nilai
berhasil dihitung, dilakukan perulangan for untuk mencari frekuensi tertinggi atau nilai maksimum dari array frekuensi
. Nilai maksimum tersebut akan menjadi frekuensi dari data yang paling sering muncul atau modus.
Dalam konteks ini, digunakan teknik perulangan for dan nested loop untuk menghitung frekuensi kemunculan setiap data pada array nilai
dan mencari nilai maksimum dari array frekuensi
.
Selanjutnya, akan dilakukan pencetakan output modusnya.
cout<<" Modus = ";
float modus[999] = {0};
int n_modus = 0;
for (i = 1; i <= jml_data; i++) {
if (frekuensi[i] == max_frekuensi) {
bool sudah_ada = false;
for (int j = 0; j < n_modus; j++) {
if (nilai[i] == modus[j]) {
sudah_ada = true;
break;
}
}
if (!sudah_ada) {
modus[n_modus++] = nilai[i];
cout << nilai[i] << " ";
}
}
}
Program tersebut bertujuan untuk membuat array modus
yang berfungsi untuk menyimpan nilai-nilai modus yang ditemukan pada array nilai
. Selain itu, program membuat variabel n_modus
yang akan menyimpan banyaknya nilai modus yang ditemukan pada array nilai
.
Program melakukan perulangan untuk setiap nilai pada array nilai
dan memeriksa apakah frekuensi kemunculan nilai tersebut sama dengan frekuensi nilai maksimum yang telah ditemukan sebelumnya. Jika iya, program akan memeriksa apakah nilai tersebut sudah terdapat pada array modus
. Jika belum, maka nilai tersebut akan ditambahkan pada array modus
dan n_modus
akan ditambah 1. Kemudian, program akan mencetak nilai modus yang ditemukan pada layar.
Fungsi bool
pada kode tersebut digunakan untuk mengembalikan nilai true
atau false
. Pada baris kode tersebut, variabel sudah_ada
bertipe data bool
digunakan untuk mengecek apakah nilai nilai[i]
sudah ada pada array modus
.
Pertama, variabel sudah_ada
diinisialisasi dengan nilai false
. Kemudian, dilakukan perulangan for
pada array modus
untuk mengecek apakah terdapat elemen pada array modus
yang bernilai sama dengan nilai[i]
. Jika terdapat elemen yang bernilai sama, maka variabel sudah_ada
akan diubah nilainya menjadi true
. Namun, jika tidak terdapat elemen yang bernilai sama, maka variabel sudah_ada
tetap berisi nilai false
.
Pada akhirnya, variabel sudah_ada
digunakan pada kondisi if (!sudah_ada)
untuk mengecek apakah nilai nilai[i]
sudah ada pada array modus
. Jika sudah_ada
bernilai true
, maka nilai nilai[i]
tidak akan dimasukkan ke dalam array modus
. Sebaliknya, jika sudah_ada
bernilai false
, maka nilai nilai[i]
akan dimasukkan ke dalam array modus
pada indeks ke-n_modus dan nilai n_modus akan bertambah 1.
NILAI MAKSIMUM , MINIMUM, DAN RANGE
Untuk mencari nilai maksimum, biasanya digunakan sebuah variabel sementara yang diinisialisasi dengan nilai awal dari elemen pertama dalam array, kemudian dibandingkan dengan setiap elemen array yang berikutnya. Jika nilai pada elemen berikutnya lebih besar dari nilai variabel sementara, maka nilai variabel sementara akan diperbarui dengan nilai elemen tersebut. Proses ini akan terus diulang sampai seluruh elemen array telah dibandingkan, dan nilai maksimum akan terdapat pada variabel sementara tersebut. Begitu juga dalam mencari nilai minimum, kita tinggal mengganti kondisi if nya menjadi kurang dari (<). Berikut adalah kode programnya.
//maksimum dan minimum
float maks, min;
maks = nilai[1];
min = nilai[1];
for(i=1;i<=jml_data;i++){
if(i==1){
maks = nilai[i];
min = nilai[i];
}
else if(nilai[i]>maks){
maks = nilai[i];
}
else if(nilai[i]<min){
min = nilai[i];
}
else {
}
}
//range
float range = maks - min;
Pada kode di atas, dilakukan perhitungan nilai maksimum dan minimum dari sebuah array dengan menggunakan variabel maks dan min berturut-turut diinisialisasi dengan nilai dari elemen pertama array, yaitu nilai[1]. Kemudian, dilakukan perulangan untuk memeriksa setiap elemen array, dimulai dari indeks ke-1 hingga indeks ke-jumlah data.
Dalam setiap iterasi, dilakukan pengecekan kondisi. Pada iterasi pertama, nilai maksimum dan minimum disamakan dengan nilai elemen array pada indeks ke-1. Pada iterasi selanjutnya, jika nilai elemen pada indeks ke-i lebih besar dari nilai maksimum, maka nilai maksimum akan diperbarui dengan nilai elemen pada indeks ke-i. Jika nilai elemen pada indeks ke-i lebih kecil dari nilai minimum, maka nilai minimum akan diperbarui dengan nilai elemen pada indeks ke-i. Jika tidak terpenuhi keduanya, maka tidak dilakukan apa-apa.
Setelah proses perulangan selesai, nilai maksimum dan minimum akan berisi nilai tertinggi dan terendah dari elemen-elemen dalam array.
Apabila pengguna hanya menginputkan 1 banyaknya data maka nilai maksimum dan minimum sama dan berindeks 1.
Selanjutnya untuk menghitung range kita tinggal menambahkan variabel baru bertipe data float (float range;) kemudian rumusnya adalah nilai maksimum dikurangi nilai minimum yang didapatkan tadi.
Pada bagian pertama ini hanya sampai menghitung range. Untuk perhitungan standar deviasi, varian, simpangan rata-rata, dan koefisien variasi akan dibahas pada artikel berikutnya bagian II.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Full code :
#include <iostream>
#include <math.h>
using namespace std;
int main (){
//deklarasi variabel
int i, jml_data;
float nilai[999];
cout<<"\n KALKULATOR STATISTIKA DESKRIPTIF"<<endl;
cout<<"==========================================="<<endl;
cout<<" Masukkan banyaknya data yang ingin diinput: ";cin>>jml_data;
cout<<"-----------------------------------------------"<<endl;
for(i=1;i<=jml_data;i++){
cout<<" Data ke-"<<i<<": ";cin>>nilai[i];
}
cout<<"______________________________________________"<<endl;
//Urutan data
cout<<" Urutan Data: "<<endl;
cout<<"----------------------------------------------"<<endl;
for(i=1;i<=jml_data;i++){
for(int j=i+1;j<=jml_data;j++){
if(nilai[j]<nilai[i]){
float temp = nilai[i];
nilai[i]=nilai[j];
nilai[j]=temp;
}
}
}
for(i=1;i<=jml_data;i++){
cout<<" "<<nilai[i];
}
//rata-rata
float rata_rata = 0;
for(i=1;i<=jml_data;i++){
rata_rata += nilai[i];
}
rata_rata = rata_rata/jml_data;
//median
float median;
if(jml_data%2==0){
median = (nilai[jml_data/2]+nilai[(jml_data/2)+1])/2;
}
else{
median = nilai[(jml_data/2)+1];
}
//modus
int frekuensi[999] = {0}; // inisialisasi semua elemen array menjadi 0
for(i=1;i<=jml_data;i++){
for(int j=1;j<=jml_data;j++){
if(nilai[i] == nilai[j]){
frekuensi[i]++;
}
}
}
int max_frekuensi = 0;
for(i=1;i<=jml_data;i++){
if(frekuensi[i] > max_frekuensi){
max_frekuensi = frekuensi[i];
}
}
//maksimum dan minimum
float maks, min;
maks = nilai[1];
min = nilai[1];
for(i=1;i<=jml_data;i++){
if(i==1){
maks = nilai[i];
min = nilai[i];
}
else if(nilai[i]>maks){
maks = nilai[i];
}
else if(nilai[i]<min){
min = nilai[i];
}
else {
}
}
//range
float range = maks - min;
//rata-rata ukur
float angka_satu = 1;
float rata2_ukur;
for(i=1;i<=jml_data;i++){
angka_satu *= nilai[i];
}
rata2_ukur = pow(angka_satu, (1.0/jml_data));
//standar deviasi sampel
float sd_sampel = 0;
for(i=1;i<=jml_data;i++){
sd_sampel += pow(nilai[i]-rata_rata, 2)/(jml_data-1);
}
sd_sampel = sqrt(sd_sampel);
//standar deviasi populasi
float sd_populasi = 0;
for(i=1;i<=jml_data;i++){
sd_populasi += pow(nilai[i]-rata_rata, 2)/jml_data;
}
sd_populasi = sqrt(sd_populasi);
//varian sampel
float varian_sampel;
varian_sampel = pow(sd_sampel, 2);
//varian populasi
float varian_populasi;
varian_populasi = pow(sd_populasi, 2);
//simpangan rata-rata
float simp_rata2 = 0;
for(i=1;i<=jml_data;i++){
simp_rata2 += abs(nilai[i]-rata_rata);
}
simp_rata2 = simp_rata2/jml_data;
//koefisien variasi
float kv;
kv = sd_populasi/rata_rata;
//output
cout<<"\n=============================================="<<endl;
cout<<"\n Rata-rata = "<<rata_rata<<endl;
cout<<" Median = "<<median<<endl;
cout<<" Modus = ";
float modus[999] = {0};
int n_modus = 0;
for (i = 1; i <= jml_data; i++) {
if (frekuensi[i] == max_frekuensi) {
bool sudah_ada = false;
for (int j = 0; j < n_modus; j++) {
if (nilai[i] == modus[j]) {
sudah_ada = true;
break;
}
}
if (!sudah_ada) {
modus[n_modus++] = nilai[i];
cout << nilai[i] << " ";
}
}
}
cout<<"\n Maks = "<<maks<<endl;
cout<<" Min = "<<min<<endl;
cout<<" Range = "<<range<<endl;
cout<<" Rata-rata ukur = "<<rata2_ukur<<endl;
cout<<" Standar deviasi sampel = "<<sd_sampel<<endl;
cout<<" Standar deviasi populasi = "<<sd_populasi<<endl;
cout<<" Varian sampel = "<<varian_sampel<<endl;
cout<<" Varian populasi = "<<varian_populasi<<endl;
cout<<" Simpangan rata-rata = "<<simp_rata2<<endl;
cout<<" Koefisien variasi = "<<kv<<endl;
cout<<endl;
return 0;
}
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Terima kasih!