Wednesday 7 February 2018

Perbandingan Grade Nilai Kuliah

Bagaimana cara menentukan urutan nilai mata kuliah dengan kode huruf? Jika nilai mata kuliah dikodekan dengan huruf-huruf A, B, C, D, dan E, relatif masih lebih mudah untuk membandingkan apakah nilai huruf B "lebih besar" dari pada nilai huruf D. Namun jika kode yang digunakan sedikit beragam, bagaimana menentukan apakah nilai C+ "lebih kecil" daripada B?


Latar Belakang Masalah

Mata kuliah yang diambil seorang mahasiswa akan mendapatkan dua komponen nilai, yakni:
  1. Nilai Huruf, dikodekan dengan simbol-simbol A, A-, B+, B, B-, C+, C, D, dan E.
  2. Status Nilai, dikodekan dengan simbol-simbol C (Completed), MG (Missing Grade), NR (No Record of attendance, dan FR (FRaud).
Nilai huruf ditentukan dari nilai angka hasil perhitungan akhir semua komponen penilaian mata kuliah, termasuk di dalamnya Ujian Akhir Semester, Ujian Tengah Semester, Tugas, Presentasi, Aktifitas kelompok, dan lain sebagainya. Konversi dari nilai angka ke nilai huruf ditentukan melalui rentang nilai sebagai berikut:

Min
Max
Grade
80 100 A
77 79,99 A-
74 76,99 B+
68 73,99 B
65 67,99 B-
62 64,99 C+
56 61,99 C
45 55,99 D
0 44,99 E

Komponen Status Nilai akan menentukan nilai huruf final yang dicatat dalam transkrip. Jika semua kondisi lengkap memenuhi kriteria yang ditentukan, maka status nilai dicatat sebagai Completed. Jika tidak memenuhi kriteria, maka status nilai akan dicatat sebagai berikut:
  • MG (Missing Grade), jika ada komponen penilaian kuliah yang tidak dapat diselesaikan oleh mahasiswa.
  • NR (No Record of attendance), jika jumlah minimum kehadiran seorang mahasiswa tidak memenuhi kriteria yang sudah ditetapkan.
  • FR (Fraud), jika dalam proses belajar mengajar mahasiswa yang bersangkutan teridentifikasi melakukan pelanggaran, misalnya mencontek saat ujian, atau melakukan plagiasi dalam menyelesaikan tugas penulisan essay.
Jika Status Nilai seorang mahasiswa tidak Completed, maka nilai huruf yang sebelumnya sudah didapat, akan diubah menjadi E, sekalipun nilai angka yang didapat lebih besar atau sama dengan 45.

Update Nilai melalui Perbaikan

Jika seorang mahasiswa menyelesaikan satu mata kuliah dengan status Completed, maka dia berhak memperbaiki nilai mata kuliah tersebut dengan mengambil mata kuliah yang sama di semester reguler atau semester perbaikan. Jika nilai yang didapat pada pengulangan lebih baik daripada nilai sebelumnya, maka nilai mata kuliah diubah menjadi nilai yang lebih baik. Sebaliknya jika nilai pengulangan lebih kecil, maka nilai yang lama akan dipertahankan.

Pertanyaan mendasar yang perlu diperhatikan adalah:
Apakah nilai yang dibandingkan berdasar nilai angka, atau berdasar nilai huruf?
Untuk memberi ilustrasi dari pertanyaan tersebut, misalkan ada contoh kasus sebagai berikut:

  1. Seorang mahasiswa mendapatkan nilai angka 63 pada satu mata kuliah, dengan status Completed. Dia mengulang mata kuliah tersebut, dan mendapatkan nilai angka 70, namun dengan status tidak Completed (mungkin NR, MG, atau FR). Misalkan saja status nilainya MG.
  2. Kasus yang sama dengan nomor (1), namun mahasiswa berhasil menyelesaikan ulang mata kuliah sehingga status nilainya Completed.
Pada kasus 2, persoalan dapat diselesaikan dengan mudah melihat nilai angka antara nilai yang lama dengan nilai yang baru.


Pada kasus 1, jika perbandingan dengan melihat perbedaan antara nilai angka yang lama dengan nilai angka yang baru, maka nilai huruf mahasiswa tersebut menjadi E dengan nilai angka 70.

Pada kasus 1, jika perbandingan dilakukan dengan melihat perbedaan nilai huruf, maka nilai mahasiswa tersebut (seharusnya) tetap 'C+' (63). Namun bagaimana cara menentukan nilai 'C+' "lebih baik" daripada nilai 'E' ? Membandingkan antara huruf 'C' dengan 'E' relatif mudah. Namun bagaimana jika simbol yang digunakan tersusun atas satu atau lebih tanda seperti 'C+', 'A-', 'B-' ?

Usulan Pemecahan Masalah

Ada beberapa cara untuk memecahkan persoalan di atas, salah satu algoritme yang dapat adalah:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
def main():
    # contoh data
    nilai_angka_lama = 63.00
    status_nilai_lama = 'C'
    nilai_angka_baru = 70.00

    # uji coba status nilai baru
    ##status_nilai_baru = 'C'
    status_nilai_baru = 'MG'

    nilai_huruf_lama = huruf(nilai_angka_lama)
    nilai_huruf_lama = status_nilai(nilai_huruf_lama, status_nilai_lama)
    nilai_huruf_baru = huruf(nilai_angka_baru)
    nilai_huruf_baru = status_nilai(nilai_huruf_baru, status_nilai_baru)

    if rank_huruf(nilai_huruf_baru) > rank_huruf(nilai_huruf_lama):
        print "Nilai baru: ", nilai_huruf_baru
    else:
        print "Nilai lama: ", nilai_huruf_lama

Bagian terpenting dari algoritme ini adalah sebuah fungsi yang menerima simbol nilai huruf dan mengembalikan sebuah bilangan integer sebagai representasi peringkat nilai huruf tersebut. Fungsi ini dinyatakan dengan nama fungsi rank_huruf(), digunakan pada baris 16.

Di samping fungsi utama rank_huruf() ada definisi fungsi huruf() dan fungsi update_status(). Fungsi huruf() digunakan untuk memetakan nilai angka ke nilai huruf, fungsi update_status() digunakan untuk mengubah nilai huruf mahasiswa menjadi 'E' jika status nilainya bukan Completed. Definisi lengkap dari fungsi-fungsi tersebut adalah sebagai berikut:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def huruf(nilai):
    if nilai <= 100.00 and nilai >= 80.00:
        hasil = 'A'
    elif nilai >= 77.00:
        hasil = 'A-'
    elif nilai >= 74.00:
        hasil = 'B+'
    elif nilai >= 68.00:
        hasil = 'B'
    elif nilai >= 65.00:
        hasil = 'B-'
    elif nilai >= 62.00:
        hasil = 'C+'
    elif nilai >= 56.00:
        hasil = 'C'
    elif nilai >= 45.00:
        hasil = 'D'
    else:
        hasil = 'E'

    return hasil


def rank_huruf(huruf):
    if huruf in ['A', 'a']:
        rank = 9
    elif huruf in ['A-', 'a-']:
        rank = 8
    elif huruf in ['B+', 'b+']:
        rank = 7
    elif huruf in ['B', 'b']:
        rank = 6
    elif huruf in ['B-', 'b-']:
        rank = 5
    elif huruf in ['C+', 'c+']:
        rank = 4
    elif huruf in ['C', 'c']:
        rank = 3
    elif huruf in ['D', 'd']:
        rank = 2
    elif huruf in ['E', 'e']:
        rank = 1

    return rank


def status_nilai(nilai_huruf, status_nilai):
    # Ubah nilai huruf menjadi 'E' jika status nilai bukan Completed
    if status_nilai in ['MG', 'NR', 'IN']:
        return 'E'
    else:
        return nilai_huruf

Semoga bermanfaat.

No comments: