Tugas kali ini adalah kelanjutan dari tugas terstruktur sebelumnya dengan penekanan pada aspek indirection.
Minggu lalu, Butet dan Ucok telah mengembangkan sebuah simulator untuk mensimulasikan entitas-entitas pada lingkup dunia akademik. Simulator tersebut masih sederhana dan memiliki banyak ruang pengembangan. Butet dan Ucok mengidentifikasi setidaknya ada empat fungsionalitas yang dapat dikembangkan.
- Fitur yang pertama adalah penyimpanan informasi GPA (Grade Point Average) atau yang biasa disebut IPK (Indeks Prestasi Kumulatif) atau IPS (Indeks Prestasi Semester) untuk konteks periode yang lebih pendek.
- Fitur untuk menampilkan sekumpulan enrollment yang dikemas dalam sebuah array. Fitur ini bermanfaat untuk memudahkan manajemen data.
- Fitur kedua adalah pemberian nilai terhadap suatu enrollment atau rencana studi.
- Fitur untuk menghitung GPA.
Kemarin sore, Butet dan Ucok yang kurang kerjaan ini, menemui dosen pemrograman yang minggu lalu menugaskan mereka mengembangkan simulator. Mereka menyampaikan ide mereka untuk melanjutkan pengembangan dengan menambahkan keempat fitur. Ide mereka diterima dan mereka diizinkan untuk merealisasikan ide tersebut.
Dalam merealisasikan idenya, Butet dan Ucok lebih banyak berpikir dan berdiskusi daripada langsung menulis kode. Mereka merencanakan pendekatan yang akan digunakan. Butet ingin mempertahankan konsep dan desain yang telah ada pada simulator dan lebih memilih untuk bekerja dengan mengikuti pola yang sama. Dengan demikian tidak akan merusak apa yang sudah ada.
Setelah beberapa saat melakukan brainstorming, Butet dan Ucok kemudian menyepakati:
- Untuk meletakkan
GPAsebagai bagian dari entitasstudentdengan tipe datafloat. Selain itu,GPAakan selalu direpresentasikan dalam dua digit presisi. Oleh sebab itu, implementasi fungsiprint_studentperlu disesuaikan. - Untuk memudahkan manajemen data, enrollment akan disimpan dalam array. Sebagai batasan, array akan di-set fixed-size, 10 elemen. Di masa mendatang, ukuran ini dapat dibuat dinamis.
- Untuk menampilkan enrollment yang tersimpan pada array, akan dikembangkan sebuah fungsi baru
print_assignmentsyang perilakunya sangat mirip denganprint_assingment. Perbedaannya terletak pada tipe masukan. - Untuk mengeset grade dari suatu enrollment akan dikembangkan sebuah fungsi baru,
set_enrollment_grade. Nilai diberikan pada sebuah enrollment dengancoursedanstudentyang relevan. Jika terdapat lebih dari satu enrollment yang relevan, maka grade akan diberikan pada enrollment yang paling akhir dimasukan. - Untuk menghitung GPA akan dikembangkan sebuah fungsi baru,
calculate_gpa. Pada saat menghitung GPA, hanya memperhitungkan enrollment yang relevan saja.
Semua entitas telah didefinisikan pada berkas academic.h. Entitas course, student, dan enrollment didefinisikan dalam bentuk structures, sementara opsi nilai (grade) dan semester didefinisikan dalam bentuk enumerations. Pada academic.h juga telah dituliskan spesifikasi dari fungsi-fungsi yang harus dikembangkan untuk menyelesaikan tugas ini. Atribut baru, gpa pada struktur student dan berbagai function prototypes yang diperlukan telah didefinisikan pada academic.h.
Dengan mengikuti pendekatan pada pekerjaan sebelumnya, maka hanya diperbolehkan untuk mengubah berkas academic.c saja. Pada berkas tersebut berisi implementasi dari spesifikasi. Implementasi yang dikerjakan Butet harus merujuk pada spesifikasi.
- Terjadi perubahan pada format keluaran untuk
print_studentdengan tambahan nilaigpapada segmen akhir (lihat contoh cases). - Untuk
print_enrollementspada dasarnya sama denganprint_enrollementdengan jumlah baris keluaran sesuai dengan banyak elemen pada array yang diberikan sebagai parameter.
Proses kompilasi harus menyertakan program dan academic.c yang berisi implementasi dari spesifikasi. Berikut ini adalah contoh perintah untuk mengkompilasi t06_01.c.
> gcc t06_01.c academic.c -o t06_01
Dari kompilasi akan dihasilkan sebuah berkas executable t06_01.
Berikut adalah keluaran yang diharapkan.
12S1102|Visual Programming|2|D
10S1002|Procedural Programming|2|D
12S20999|Wiro Sableng|2020|Information Systems|0.00
Berikut adalah keluaran yang diharapkan.
12S1102|Visual Programming|2|D
10S1002|Procedural Programming|2|D
12S20999|Wiro Sableng|2020|Information Systems|0.00
12S1102|12S20999|None|0.00
10S1002|12S20999|None|0.00
Berikut adalah keluaran yang diharapkan.
12S1102|Visual Programming|2|D
10S1002|Procedural Programming|2|D
12S20999|Wiro Sableng|2020|Information Systems|0.00
12S1102|12S20999|None|0.00
10S1002|12S20999|None|0.00
12S1102|12S20999|A|8.00
10S1002|12S20999|AB|7.00
Berikut adalah keluaran yang diharapkan.
12S1102|Visual Programming|2|D
10S1002|Procedural Programming|2|D
12S20999|Wiro Sableng|2020|Information Systems|0.00
12S1102|12S20999|None|0.00
10S1002|12S20999|None|0.00
12S1102|12S20999|A|8.00
10S1002|12S20999|AB|7.00
12S20999|Wiro Sableng|2020|Information Systems|3.75
- academic.c
- changelog.txt
Please see https://youtu.be/g0BQ195-aWo