Senin, 25 Maret 2019

Contoh Program Sederhana Menghitung IPK dan IPS Menggunakan Struct

Contoh Program Sederhana Menghitung IPK dan IPS Menggunakan Struct

Deskripsi Program


Program sederhana menghitung IPK dan IPS, program ini hanya akan melakukan perhitungan dengan meng-input jumlah SKS dan jumlah bobot persemester saja, jadi program ini tidak secara terperinci meng-input semua mata kuliah, sks, nilai huruf dll. Dimana seluruh proses perulangan, percabangan, perhitungan IPS dan IPK akan diproses di fungsi main.

Program ini menggunakan 2 cara pendeklarasian yaitu deklarasi struct manual dan struct of array. Struct manual saya gunakan untuk menampung nilai total, nama, prodi, nim dan jumlah semester, sedangan Struct of array saya gunakan untuk menampung nilai variabel array 1 demensi.


Source Code


#include <iostream>
#include <stdlib.h>

using namespace std;

//Struct deklarasi manual
struct mahasiswa{
        string nama,prodi,nim;
        float total_bobot=0,total_sks=0,total_akhir;
        int jml_sm;
};
mahasiswa mhs;

//Struct of array
struct dataMahasiswa{
        float ips[10],jml_sks[15],jml_bobot[15] ;
};
dataMahasiswa data[10];

main (){

    cout<<"==========================================="<<endl;
    cout<<"|                                         |"<<endl;
    cout<<"|      MENGHITUNG IPK & IPS MAHASISWA     |"<<endl;
    cout<<"|                                         |"<<endl;
    cout<<"==========================================="<<endl;
    cout<<"|  >>> Selamat Datang di Portal UTY <<<   |"<<endl;
    cout<<"-------------------------------------------"<<endl;
    cout<<"| Nama Mahasiswa  : "; getline(cin,mhs.nama);
    cout<<"| NIM Mahasiswa   : "; getline(cin,mhs.nim);
    cout<<"| Program Studi   : "; getline(cin,mhs.prodi);
    cout<<"| Anda Semester   : "; cin>>mhs.jml_sm;
    cout<<"-------------------------------------------\n\n";


    for (int i=1;i<=mhs.jml_sm;i++){
         cout<<"-------------------------------------------"<<endl;
         cout<<"<< Semester ke-"<<i<<" >>"<<endl;
         cout<<"| Jumlah SKS      : ";cin>>data[i].jml_sks[i];
         cout<<"| Jumlah Bobot    : ";cin>>data[i].jml_bobot[i];
         cout<<"-------------------------------------------"<<endl;

         //Menghitung IPS
         data[i].ips[i]=data[i].jml_bobot[i]/data[i].jml_sks[i];

         //Menampilkan IPS
         cout<<"Iindeks Prestasi Semester (IPs) : "<<data[i].ips[i]<<endl;
         cout<<"-------------------------------------------"<<endl;

        /*Menjumlahkan total bobot dan total sks setiap
          proses perulangan */
          mhs.total_bobot += data[i].jml_bobot[i];
          mhs.total_sks   += data[i].jml_sks[i];
    }
    //Menghitung IPK
    mhs.total_akhir=mhs.total_bobot/mhs.total_sks;

    //Menahan program
    system("pause");

    //Membersihkan layar
    system("cls");

    cout<<"===========================================\n";
    cout<<"|       ---- Kartu Hasil Studi ---        |\n";
    cout<<"===========================================\n";
    cout<<"| Nama Mahasiswa  : "<<mhs.nama<<endl;
    cout<<"| NIM Mahasiswa   : "<<mhs.nim<<endl;
    cout<<"| Program Studi   : "<<mhs.prodi<<endl;
    cout<<"| Semester        : "<<mhs.jml_sm<<endl;
    cout<<"-------------------------------------------\n";
    cout<<"| Total seluruhan bobot : "<<mhs.total_bobot<<endl;
    cout<<"| Total seluruhan SKS   : "<<mhs.total_sks<<endl;
    cout<<"| IPK Selama "<<mhs.jml_sm<<" Semester : "<<mhs.total_akhir<<endl;
    cout<<"-------------------------------------------\n";

  if(mhs.total_akhir>=3.51 || mhs.total_akhir<=4){
        cout<<"===========================================\n";
        cout<<"|        SELAMAT !! Anda Cum Laude        |\n";
        cout<<"===========================================\n";
    }else if(mhs.total_akhir>=3.01 || mhs.total_akhir<=3.50){
        cout<<"===========================================\n";
        cout<<"|        IPK Anda Sangat Memuaskan        |\n";
        cout<<"===========================================\n";
    }else if(mhs.total_akhir>=2.76 || mhs.total_akhir<=3){
        cout<<"===========================================\n";
        cout<<"|            IPK Anda Memuaskan           |\n";
        cout<<"===========================================\n";
    }else{
        cout<<"===========================================\n";
        cout<<"|        Terus Tingkatkan IPK Anda        |\n";
        cout<<"===========================================\n";
    }
}


Running program


Tampilan awal (inputan dan IPS)
Running program 1
Tampilan Akhir
Running program 2


Gambar Alur Proses Running


Gambar Alur Proses Running


Analisa


  • Tahap pertama pendeklarasian variable menggunakan struct, program ini menggunakan 2 jenis pendeklarasian struct yaitu pendeklarasian struct secara manual dan pendeklarasian struct of array. Berikut variable yang terdapat didalam struct deklarasi manual
    • total_bobot=0 >> bertipe data float 
    • total_sks=0      >> bertipe data float 
    • total_akhir     >> bertipe data float 
    • jml_sm                 >> bertipe data integer 
  • Dan berikut vairabel yang ada didalam struct of array
    • ips[10]       >> array 1 dimensi bertipe data float 
    • jml_sks[15]   >> array 1 dimensi bertipe data float 
    • jml_bobot[15] >> array 1 dimensi bertipe data float 
  • Running program, kita akan disuruh meng-input Nama Mahasiswa, NIM Mahasiswa, Program Studi dan Semester Anda. Pada saat anda selesai meng-input semester, sebagai contoh Anda semester : 2, maka nilai tersebut akan masuk ke proses perulangan for. 
  • Karena men-input 2 maka akan terjadi 2 kali perulangan jumlah SKS dan jumlah bobot. 
  • Untuk mencari IPS (Indeks Prestasi Semester) rumusnya sebagai berikut :
    Rumus IPS (Indeks Prestasi Semester)
  • Karena nilai input sudah merupakan bilangan total maka tinggal dibagikan sebagai berikut : data[i].ips[i]=data[i].jml_bobot[i] / data[i].jml_sks[i]. Hasil ini akan langsung ditampilkan di variabel data[i].ips[i], bersamaan dengan proses perulangan berlangsung.
  • mhs.total_bobot += data[i].jml_bobot[i], artinya setiap kali jumlah bobot melakukan perulangan maka akan ditambah dengan nilainya sendiri. 
  • mhs.total_sks += data[i].jml_sks[i,], artinya setiap kali jumlah sks melakukan perulangan maka akan ditambah dengan nilainya sendiri. 
  • Rumus IPK (Indeks Prestasi Kumulatif)
    Rumus IPK (Indeks Prestasi Kumulatif)
  • Rumus IPK dan IPS hampir sama yang membedakannya adalah, jika IPS menghitung persemester sedangkan IPK akan menjumlahkan data[i].jml_bobot tiap semetar dan akan dibagi dengan hasil penjumlahan data[i].total_sks tiap semester.
  • Setelah selesai meng-input diperulangan terakhir, program akan di pause dengan perintah system(“pause”), untuk melanjutkan tinggal menekat sembarang tombol. 
  • Selanjtunya layar inputan sebelumnya akan dibersihkan, dengan perintah system(“cls”). 
  • Dan akan menampilkan Kartu Hasil Studi, yang berisi, nama mahasiswa, nim, prodi, semester, total seluruh bobot, total seluruh sks dan nilai IPK.
  •  Terakhir menampilkan predikat IPK sesuai ketentuan berikut : 
    • ≤ 2,75 : “Terus Tingkatkan IPK Anda”
    • ≥ 2,76 atau ≤ 3,00 : “IPK Anda Memuaskan” 
    • ≥ 3,01 atau ≤ 3,50 : “IPK Anda Sangat Memuaskan” 
    • ≥ 3,51 atau ≤ 4,00 : “Selamat !! Anda Cum laude” 
  • Selesai.