C++: Kalkulator Statistika Deskriptif (Bagian I: Mean, Median, Modus, Nilai Maks Min, dan Range)

Rasendra A. Satyatama
10 min readApr 30, 2023

--

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.

gambar 1. hasil output pada program kalkulator statistika deskriptif

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.

gambar 2. program input variabel jml_data dan nilai

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.

gambar 3. kode program pengurutan data

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.

gambar 4. kode program pertukaran data dalam pengurutan data

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];
}
gambar 5. kode program perhitungan median

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.

gambar 6. kode program mencari frekuensi tertinggi

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.

gambar 7. kode program output nilai modus bagian 1

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.

gambar 8. kode program output nilai modus bagian 2

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.

gambar 9. kode program apabila pengguna hanya menginputkan banyaknya data berjumlah 1

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!

--

--

Responses (1)