Anda di halaman 1dari 21

TOPIK 14 MEMBANGUN APLIKASI SEDERHANA

Membangun suatu program memerlukan pemahaman yang komprehensif terkait kasus yang
ingin diselesaikan. Setiap kasus memiliki domainnya sendiri, hal ini menuntuk programmer
melakukan riset atau kajian terhadap permasalahan yang dihadapi. Kompleksitas dari
permasalahan yang dihadapi sangat tergantung pada hasil kajian tersebut. Hal ini dapat
mempermudah seorang programmer mengimplementasikan program sesuai dengan
kebutuhan dan tuntutan spesifikasi dari program aplikasi yang akan dikembangkan.
Terdapat beberapa langkah penting yang sebaiknya dilakukan seorang programmer; yaitu,
berusaha memahami persoalan, merncang konstruksi dari program aplikasi yang akan
dibuat, melakukan analisis kebutuhan program dan melakukan koding sesuai rancangan.
Berikut ini kita akan mencoba menyelesaikan suatu kasus yang beberapa bagiannya telah
dibahas pada modul-modul sebelumnya, sehingga anda dapat memahami alur dan
kesinambungan alur pikir terkait penyelesaian masalah pemrograman.
Kasus yang akan kita selesaikan adalah sebagai berikut. Kita akan membuat program aplikasi
sederhana berbasis teks untuk pengelolaan nilai mahasiswa dalam mata kuliah tertentu
dengan ketentuan sebagai berikut:
 Program dapat menyelesaikan masalah penilaian sekelompok mahasiswa dalam mata
kuliah tertentu.
 Program memiliki fasilitas:
 Dapat mengentri identitas sekelompok mahasiswa
 Dapat mengentrikan komponen nilai mid, nilai uas, nilai tugas dan nilai quiz
 Dapat menghitung nilai akhir berdasarkan komponen nilai dan persentasi setiap
komponen penilaian
 Dapat mengkonversi nilai akhir menjadi nilai huruf mahasiswa tersebut
berdasarkan ketentuan penilaian huruf
 Dapat membuat ranking nilai mahasiswa berdasarkan nilai akhir yang diperoleh
 Dapat mencari informasi mahasiswa tertentu yang diinginkan
 Dapat menampilkan rekapitulasi nilai-nilai seluruh mahasiswa

1. Memahami Permasalahan
Kasus penilaian suatu mata kuliah
2. Skenario program dan Konstruksi Program

1
Skenario Program
Kasus penilaian mahasiswa dapat dibagi ke dalam beberapa sub-masalah.
Ketika menjalankan program, diharapkan muncul judul dan menu pilihan, sehingga kita
membutuhkan bagian (modul) untuk menampilkan judul dan bagian yang menampilkan
menu pilihan, sehingga skenario dari program yang akan dibuat dapat berupa:
 Ketika program dijalankan akan ditampilkan judul dari program lalu user diminta
menekan enter untuk melanjkutkan program
 Menu pilihan ditampilkan, terdiri dari:
 Entri Identitas Mahasiswa
 Entri Nilai Mahsiswa
 Lihat Daftar Mahasiswa
 Lihat Daftar Nilai
 Cari Mahasiswa Tertentu
 Lihat para Juara
 Lihat Rekapitulasi Nilai
 Keluar dari Program
 Pada pilihan 1, yaitu Entri Identitas Mahasiswa, user diminta mengentrikan
identitas mahasiswa yang terdiri dari nama dan nomor induk mahasiswa untuk
sejumlah mahasiswa yang ditetapkan. Jika telah selesai entri, user ditanyai apakah
akan kembali ke Manu Pilihan atau keluar dari program.
 Pilihan nomor 2, Entri Nilai Mahasiswa. Program akan melakukan pengecekan
terlebih dahulu apakah data mahasiswa telah dientri? Jika data identitas
mahasiswa telah ada, maka user diminta mengentrikan komponen nilai mid, uas,
tugas dan quiz. Jika belum, maka akan muncul keterangan bahwa data masih
kosong, dan program akan kembali ke menu pilihan.
 Pilihan nomor 3, Lihat Daftar Mahasiswa. Program akan melakukan pengecekan
terlebih dahulu apakah data mahasiswa telah dientri? Jika data identitas
mahasiswa telah ada, maka akan ditampilkan daftar mahasiswa. Jika belum, maka
akan muncul keterangan bahwa data masih kosong, dan program akan kembali ke
menu pilihan.
 Pilihan nomor 4, Lihat Daftar Nilai. Program akan melakukan pengecekan terlebih
dahulu apakah data mahasiswa dan nilai sudah ada? Jika data sudah ada maka
program akan menampilkan daftar yang diminta. Jika belum, maka akan muncul
keterangan bahwa data masih kosong, dan program akan kembali ke menu pilihan.

2
 Pilihan nomor 5, Cari Mahasiswa Tertentu. Program akan melakukan pengecekan
data terlebih dahulu. Jika data sudah ada, maka pencarian data mahasiswa
tertentu akan dilakukan, jika belum, maka akan muncul keterangan bahwa data
masih kosong, dan program akan kembali ke menu pilihan.
 Pilihan nomor 6, Lihat Para Juara. Program akan melakukan pengecekan data
terlebih dahulu. Jika data sudah ada, maka program akan mengurutkan data
mahasiswa berdasarkan nilai akhir lalu menampilkan daftar para juara. Jika belum
ada, maka akan muncul keterangan bahwa data masih kosong, dan program akan
kembali ke menu pilihan.
 Pilihan nomor 7, Lihat Rekapitulasi Nilai. Program akan melakukan pengecekan
data terlebih dahulu. Jika data sudah ada, maka program akan melakukan
perhitungan-perhitungan mengenai:
 Menghitung rata-rata nilai mid
 Menghitung rata-rata nilai uas
 Menghitung rata-rata nilai tugas
 Menghitung rata-rata nilai quiz
 Menghitung rata-rata nilai akhir
 Merekap nilai huruf yang diperoleh mahasiswa
Kemudian menampilkan informasi yang diminta. Jika belum ada, maka akan
muncul keterangan bahwa data masih kosong, dan program akan kembali ke menu
pilihan.
 Pilihan nomor 0. Keluar dari program.
 Jika user memasukkan nomor selain nomor pilihan yang sah, maka program akan
memberikan informasi, bahwa nomor pilihan tidak tersedia dan program akan
kembali ke manu pilihan.

Konstruksi Program
Supaya bisa menerapkan skenario program, kita sebaiknya menyusun konstruksi
program. Bagian-bagian program apa saja yang diperlukan dan bagaimana hubungan
antar bagian tersebut.
Berikut ini adalah konstruksi program yang dirancang:

3
PENILAIAN

judul MENU

Entri Mhs Entri Nilai Daftar mhs Daftar nilai Cari Mhs Juara rekapitulasi
mmPENIL mmPENILAI

Hitung nilai Konversi nilai infoMhs Cari data

urutkan

Rekap Nilai Rekap Nilai Rekap Nilai Rekap Nilai Rekap Nilai Rekap Nilai

Kita bisa melihat bagaimana konstruksi dari program yang akan dibuat dan hubungan
antar bagian program. Bagian bagian ini akan diimplementasikan menjadi fungsi-fungsi
dengan tugas masing-masing. Setiap fungsi yang akan dibuat dianalisis kebutuhannya,
seperti kebutuhan variabel dan kebutuhan proses spesifik dari fungsi yang bersangkutan.
3. Analisis Kebutuhan Program
a) Kebutuhan Struktur Data
i. Struktur data yang akan digunakan adalah structur struct of struct seperti
didefinisikan pada latihan sebelumnya, liaht kembali struktur yang digunakan.
Struct yang pertama:
typedef struct MHS{
char nama[30]; //panjang nama mahasiswa adalah 30 karakter
char nim[4]; //panjang nim mahasiswa adalah 5 karakter
} MHS; //nama tipe bentukan adalah MHS

Struct yang kedua:


typedef struct NILAI{
double mid;
double uas;
double tugas;
double quiz;
double nAkhir; //dihitung dengan fungsi hitungAkhir()
char nHuruf; //diisi melalui pemanggilan fungsi konversiHuruf()

4
} NILAI;
Sedangkan struct yang ketiga berisi struct ke 1 dan ke 2:
//kedua tipe MHS dan NILAI digunakan untuk tipe bentukan baru
//suatu stract of struct atau struct di dalam struct, sehingga
//struct yang baru memiliki seluruh data baik identitas maupun
//nilai2 mahasiswa, sbb:
typedef struct DATAMHS{
MHS mhs;
NILAI nilai;
} DATAMHS;

b) Kebutuhan Konstanta
Konstanta yang dibutuhan meliputi konstanta yang menyetakan banyaknya elemn
array (representasi banyaknya mahasiswa) dan konstanta untuk besar bobot
komponen nilai, sebagai berikut:

#define N 3 //banyaknya mahassiswa


#define MID 0.25 //prosentase nilai mid adalah 25 persen
#define UAS 0.30 //prosentase nilai uas adalah 30 persen
#define TGS 0.30 //prosentase nilai tugas adalah 30 persen
#define QSZ 0.15 //prosentase nilai quiz adalah 15 persen

c) Kebutuhan Variabel Global


Satu buah variabel global yang menyatakan variabel array of struct bertipe
DATAMHS:
DATAMHS dataMhs[N]; //banyak mahasiswa adalah N orang

d) Kebutuhan Fungsi
Fungsi-fungsi yang dibutuhkan sesuai konstruksi program yang dirancang terdiri
dari:
1. void judul();
2. void menu();
3. void bacaMhs();
4. void bacaNilai();

5
5. void daftarMhs();
6. void infoMhs(int i);
7. void daftarNilai();
8. void infoNilai(int i);
9. double hitungAkhir(double m, double u, double t, double q);
10. char konversiHuruf(double na);
11. void cariMhs();
12. int cariData(char nimnya[]);
13. void lihatJuara();
14. void urutkan();
15. void rekapNilai();
16. void rekapMid();
17. void rekapUas();
18. void rekapTugas();
19. void rekapQuiz();
20. void rekapAkhir();
21. void rekapHuruf();

4. Implementasi Program
Berikut adalah implementasi program aplikasi sederhana berbasis teks:

/*
Nama File: projek.c

Program aplikasi sederhana berbasis teks tentang Sistem Informasi Penilaian


untuk suatu Mata Kuliah
Entri Mahasiswa
ENtri Nilai
MENU PILIHAN
- Cari Data
- Ubah Data
- Lihat Daftar Nilai
- Lihat Juara (3 ranking terbaik)
- Rekapitulasi Nilai:
- Rata-rata Nilai MID
- Rata-rata Nilai UAS

6
- Rata-rata Nilai TUGAS
- Rata-rata Nilai QUIZ
- Rata-rata Nilai AKHIR
- Rekapitulasi Nilai Huruf
*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

#define N 3 //banyaknya mahassiswa

#define MID 0.25 //prosentase nilai mid adalah 25 persen


#define UAS 0.30 //prosentase nilai uas adalah 30 persen
#define TGS 0.30 //prosentase nilai tugas adalah 30 persen
#define QSZ 0.15 //prosentase nilai quiz adalah 15 persen

//mendefinisikan tipe bentukan berupa struct bernama MHS


typedef struct MHS{
char nama[30]; //panjang nama mahasiswa adalah 30 karakter
char nim[4]; //panjang nim mahasiswa adalah 5 karakter
} MHS; //nama tipe bentukan adalah MHS

typedef struct NILAI{


double mid;
double uas;
double tugas;
double quiz;
double nAkhir; //dihitung dengan fungsi hitungAkhir()
char nHuruf; //diisi melalui pemanggilan fungsi konversiHuruf()
} NILAI;

//kedua tipe MHS dan NILAI digunakan untuk tipe bentukan baru
//suatu stract of struct atau struct di dalam struct, sehingga
//struct yang baru memili seluruh data baik identitas maupun
//nilai2 mahasiswa, sbb:
typedef struct DATAMHS{

7
MHS mhs;
NILAI nilai;
} DATAMHS;

//deklarasi fungsi yang akan digunakan


void judul();
void menu();
void bacaMhs();
void bacaNilai();
void daftarMhs();
void infoMhs(int i);
void daftarNilai();
void infoNilai(int i);
double hitungAkhir(double m, double u, double t, double q);
char konversiHuruf(double na);
void cariMhs();
int cariData(char nimnya[]);
void lihatJuara();
void urutkan();
void rekapNilai();
void rekapMid();
void rekapUas();
void rekapTugas();
void rekapQuiz();
void rekapAkhir();
void rekapHuruf();

//deklarasi variabel global berupa array of struct dari tipe DATAMHS sbb:
DATAMHS dataMhs[N]; //banyak mahasiswa adalah N orang

void main(){
char jawab = 'Y';

judul();
do{
menu();
printf("\nKembali ke Menu Pilihan (Y/T)?: ");
jawab = getche();

8
}while(toupper(jawab)=='Y');
printf("\nTerima kasih...");
getch();
}

void judul(){
printf("===================================================================\
n");
printf("Program Pengolahan Data Mahasiswa\n");
printf("Programmer: Antu\n");
printf("===================================================================\
n");
printf("Tekan tombol enter...");
getch();
}

void menu(){
int pilihan;

printf("\nMENU PILIHAN\n");
printf("===================================\n");
printf("1. Entri Identitas Mahasiswa\n");
printf("2. Entri Nilai Mahasiswa\n");
printf("3. Lihat Daftar Mahasiswa\n");
printf("4. Lihat Daftar Nilai\n");
printf("5. Cari Mahasiswa Tertentu\n");
printf("6. Lihat Para Juara\n");
printf("7. Lihat Rekapitulasi Nilai\n");
printf("0. Keluar\n");
printf("===================================\n");
printf("Ketikan nomor pilihan: ");
scanf("%d", &pilihan); fflush(stdin);

switch(pilihan){
case 0: printf("Keluar dari Program\n");
printf("Terima kasih... Tekan Enter");
getch();
exit(1);

9
case 1: bacaMhs();
printf("\nTekan enter untuk kembali ke Manu Pilihan... ");
getch();
menu();
break;
case 2: bacaNilai();
printf("\nTekan enter untuk kembali ke Manu Pilihan... ");
getch();
menu();
break;
case 3: daftarMhs();
printf("\nTekan enter untuk kembali ke Manu Pilihan... ");
getch();
menu();
break;
case 4: daftarNilai();
printf("\nTekan enter untuk kembali ke Manu Pilihan... ");
getch();
menu();
break;
case 5: cariMhs();
printf("\nTekan enter untuk kembali ke Manu Pilihan... ");
getch();
menu();
break;
case 6: lihatJuara();
printf("\nTekan enter untuk kembali ke Manu Pilihan... ");
getch();
menu();
break;
case 7: rekapNilai();
printf("\nTekan enter untuk kembali ke Manu Pilihan... ");
getch();
menu();
default: printf("\nNomor pilihan tidak ada... Tekan Enter...");
getch();
menu();
}

10
}

void bacaMhs(){
int i; //variable konter perulangan
char namanya[30]; //penyimpan sementara nama mahasiswa
char nimnya[4]; //penyimpan sementara nim mahasiswa

printf("\nMembaca identitas sejumlah Mahasiswa\n");


printf("========================================\n");
printf("Jumlah Mahasiswa: %d Orang\n",N);
for(i=0;i<N;i++){
printf("Ketikkan nama Mahasiswa ke-%d: ",i+1);
gets(namanya); fflush(stdin); //baca nama mahasiswa
printf("Ketikkan NIM Mahasiswa : ");
gets(nimnya); fflush(stdin); //baca nim mahasiswa
//masukan nama dan nim mahasiswa ke array of struct
strcpy(dataMhs[i].mhs.nama, namanya); //perhatikan cara mengakses field
strcpy(dataMhs[i].mhs.nim, nimnya);
}
printf("\nEntri Data selesai... Tekan enter...");
}

void bacaNilai(){
double midnya, uasnya, tugasnya, quiznya, nAkhirnya;
char nHurufnya;
char namanya[30], nimnya[4];
int i;

printf("\nMembaca Nilai-nilai Mahasiswa\n");


printf("========================================\n");
//cek dulu apakah mahasiswanya sudah ada?
if(!strcmp(dataMhs[0].mhs.nim, "")){
printf("\nData Masih Kosong... Tekan enter...");
getch();
}
else{
for(i=0;i<N;i++){
strcpy(namanya, dataMhs[i].mhs.nama);

11
strcpy(nimnya, dataMhs[i].mhs.nim);
printf("Nama Mahasiswa: %s\n",namanya);
printf("NIM : %s\n",nimnya);
printf("Ketik nilai MID : ");
scanf("%lf",&midnya); fflush(stdin);
printf("Ketik nilai UAS : ");
scanf("%lf",&uasnya); fflush(stdin);
printf("Ketik nilai TUGAS: ");
scanf("%lf",&tugasnya); fflush(stdin);
printf("Ketik nilai QUIZ : ");
scanf("%lf",&quiznya); fflush(stdin);
//lalu masukkan ke array dataMhs, sbb
dataMhs[i].nilai.mid = midnya;
dataMhs[i].nilai.uas = uasnya;
dataMhs[i].nilai.tugas = tugasnya;
dataMhs[i].nilai.quiz = quiznya;
//lalu panggil fungsi untuk menghitung nilai akhir dan
//tampung nilai baliknya pada variabel nAkhirnya
nAkhirnya = hitungAkhir(midnya, uasnya, tugasnya, quiznya);
//lalu panggil fungsi untuk mengkonveri nilai akhir ke nilai huruf
//dg passing parameter berupa nilai akhir atau nAkhirnya
//tampung hasil atau nilai baliknya pada variabel nHurufnya
nHurufnya = konversiHuruf(nAkhirnya);
//simpan nilai akhir dan nilai huruf ke dataMhs
dataMhs[i].nilai.nAkhir = nAkhirnya;
dataMhs[i].nilai.nHuruf = nHurufnya;
printf("\n");
}
}
}

void daftarMhs(){
int i;

printf("\nDaftar Mahasiswa Peserta Kuliah\n");


printf("=========================================\n");

//cek dulu apakah datanya kosong?

12
if(!strcmp(dataMhs[0].mhs.nim,"")){
printf("\nData masih Kosong... Tekan enter...");
getch();
}
else{
for(i=0;i<N;i++){
printf("%d. ", i+1);
infoMhs(i);
}
}
}

//fungsi ini harus dimodifikasi melibatkan data nilai2


void infoMhs(int i){
char namanya[30]; //penyimpan sementara nama mahasiswa
char nimnya[4]; //penyimpan sementara nim mahasiswa

//salin dulu data mahasiswa ke variabel sementara


strcpy(namanya, dataMhs[i].mhs.nama);
strcpy(nimnya, dataMhs[i].mhs.nim);

//tampilkan informasi mahasiswa yang diminta


printf("Nama Mahasiswa: %s\n", namanya);
printf("\tNIM : %s\n", nimnya);
printf("========================================\n");
}

void daftarNilai(){
int i;

printf("\nDaftar Nilai Mahasiswa Peserta Kuliah\n");


printf("=========================================\n");

//cek dulu datanya


if(dataMhs[i].nilai.nAkhir == 0.0){
printf("Data masih Kosong... Tekan enter...");
getch();

13
}
else{
for(i=0;i<N;i++){
printf("%d. ", i+1);
infoNilai(i);
}
}
}

void infoNilai(int i){


char namanya[30]; //penyimpan sementara nama mahasiswa
char nimnya[4]; //penyimpan sementara nim mahasiswa
double midnya, uasnya, tugasnya, quiznya, nAkhirnya;
char nHurufnya;

//salin dulu data nilai ke variabel sementara


strcpy(namanya, dataMhs[i].mhs.nama);
strcpy(nimnya, dataMhs[i].mhs.nim);

//tampung dulu nilai-nilainya


midnya = dataMhs[i].nilai.mid;
uasnya = dataMhs[i].nilai.uas;
tugasnya = dataMhs[i].nilai.tugas;
quiznya = dataMhs[i].nilai.quiz;
nAkhirnya = dataMhs[i].nilai.nAkhir;
nHurufnya = dataMhs[i].nilai.nHuruf;
//tampilkan informasi mahasiswa yang diminta
printf("Nama Mahasiswa: %s\n", namanya);
printf("\tNIM : %s\n", nimnya);
printf("\tNilai MID : %0.1lf\n", midnya);
printf("\tNilai UAS : %0.1lf\n", uasnya);
printf("\tNilai Tugas : %0.1lf\n", tugasnya);
printf("\tNilai Quiz : %0.1lf\n", quiznya);
printf("\tNilai Akhir : %0.1lf\n", nAkhirnya);
printf("\tNilai Huruf : %c\n", nHurufnya);
printf("========================================\n");
}

14
double hitungAkhir(double m, double u, double t, double q){
double nAkhirnya;

nAkhirnya = m * MID + u * UAS + t * TGS + q * QSZ;


return nAkhirnya;
}

char konversiHuruf(double na){


char nHurufnya;
//tentukan nilai hurufnya
if((na >= 81.0) && (na<= 100.0))
nHurufnya = 'A';
else if(na >= 76.0)
nHurufnya = 'B';
else if(na >= 56.0)
nHurufnya = 'C';
else if(na >= 45.0)
nHurufnya = 'D';
else nHurufnya = 'E';

return nHurufnya; //kirim hasilnya sebagai nilai balik


}

void cariMhs(){
char nimnya[4];
int posisi;

//cek dulu datanya


if(!strcmp(dataMhs[0].mhs.nim, "")){
printf("\nData masih Kosong... Tekan enter... ");
}
else{
printf("Ketik NIM yang dicari: ");
gets(nimnya); fflush(stdin);
posisi = cariData(nimnya);
if(posisi == -999){
printf("\nData tidak ditemukan... Tekan enter...");
getch();

15
}
else{
printf("\nData ditemukan\n");
//tampilkan
infoNilai(posisi);
}
}
}

int cariData(char nimnya[]){


int i, posisi;

//cari nim tersebut di array nim


for(i=0;i<N;i++){
if(!strcmp(nimnya, dataMhs[i].mhs.nim)){
posisi = i;
break;
}
else {
posisi = -999; //nilai ini menunjukkan data tdk ditemukan
}
}
return posisi; //posisi data dikirim sebagai nilai balik
}

void lihatJuara(){
int i;

printf("\nPara Juara dengan Nilai Tertinggi\n");


printf("========================================\n");
//cek dulu keberadaan datanya
if(dataMhs[0].nilai.nAkhir == 0.0){
printf("\nData masih kosong... tekan enter...");
getch();
}
else{
//urutkan dulu datanya
urutkan();

16
for(i=0;i<3;i++){
printf("Juara ke-%d\n", i+1);
infoNilai(i);
}
}
}

void urutkan() { //metode selection sort


int indexMaks,i,j;
DATAMHS temp; //variabel sementara berupa struct DATAMHS

//loop untuk seluruh data


for(i = 0; i < N-1; i++) {

// elemen sekarang yang dianggap nilai maksimum


indexMaks = i;

//periksa nilai akhir terbesar


for(j = i+1;j < N;j++) {
if(dataMhs[j].nilai.nAkhir > dataMhs[indexMaks].nilai.nAkhir) {
indexMaks = j;
}
}

if(indexMaks != i) {//kalau posisinya bukan posisi awal


// pertukarkan posisi data
temp = dataMhs[indexMaks];
dataMhs[indexMaks] = dataMhs[i];
dataMhs[i] = temp;
}
}
}

void rekapNilai(){
printf("\nRekapitulasi Nilai Mahasiswa\n");
printf("====================================\n");

//cek dulu apakah datanya ada?

17
if(dataMhs[0].nilai.nAkhir == 0.0){
printf("\nData masih kosong... Tekan enter...");
getch();
}
else{
rekapMid();
rekapUas();
rekapTugas();
rekapQuiz();
rekapAkhir();
rekapHuruf();
}
}

void rekapMid(){
double rerata = 0.0;
double jumlah = 0.0;
int i;

for(i=0;i<N;i++){
jumlah += dataMhs[i].nilai.mid;
}
rerata = jumlah/N;
printf("\nRata-rata nilai MID : %0.1lf\n", rerata);
}

void rekapUas(){
double rerata = 0.0;
double jumlah = 0.0;
int i;

for(i=0;i<N;i++){
jumlah += dataMhs[i].nilai.uas;
}
rerata = jumlah/N;
printf("\nRata-rata nilai UAS : %0.1lf\n", rerata);
}

18
void rekapTugas(){
double rerata = 0.0;
double jumlah = 0.0;
int i;

for(i=0;i<N;i++){
jumlah += dataMhs[i].nilai.tugas;
}
rerata = jumlah/N;
printf("\nRata-rata nilai Tugas: %0.1lf\n", rerata);
}

void rekapQuiz(){
double rerata = 0.0;
double jumlah = 0.0;
int i;

for(i=0;i<N;i++){
jumlah += dataMhs[i].nilai.quiz;
}
rerata = jumlah/N;
printf("\nRata-rata nilai Quis : %0.1lf\n", rerata);
}

void rekapAkhir(){
double rerata = 0.0;
double jumlah = 0.0;
int i;

for(i=0;i<N;i++){
jumlah += dataMhs[i].nilai.nAkhir;
}
rerata = jumlah/N;
printf("\nRata-rata nilai Akhir: %0.1lf\n", rerata);
}

void rekapHuruf(){
int hurufA=0, hurufB=0, hurufC=0, hurufD=0, hurufE=0;

19
int i;

//hitung yang memperoleh nilai A


for(i=0;i<N;i++){
if(dataMhs[i].nilai.nHuruf == 'A'){
hurufA += 1;
}
}
printf("\nMemperoleh nilai A: %d Orang\n", hurufA);

//hitung yang memperoleh nilai B


for(i=0;i<N;i++){
if(dataMhs[i].nilai.nHuruf == 'B'){
hurufB += 1;
}
}
printf("\nMemperoleh nilai B: %d Orang\n", hurufB);
//hitung yang memperoleh nilai C
for(i=0;i<N;i++){
if(dataMhs[i].nilai.nHuruf == 'C'){
hurufC += 1;
}
}
printf("\nMemperoleh nilai C: %d Orang\n", hurufC);
//hitung yang memperoleh nilai D
for(i=0;i<N;i++){
if(dataMhs[i].nilai.nHuruf == 'D'){
hurufD += 1;
}
}
printf("\nMemperoleh nilai D: %d Orang\n", hurufD);
//hitung yang memperoleh nilai E
for(i=0;i<N;i++){
if(dataMhs[i].nilai.nHuruf == 'E'){
hurufE += 1;
}
}
printf("\nMemperoleh nilai E: %d Orang\n", hurufE);

20
}

Tugas
Tugas berikut ini harus dilakukan mandiri, walaupun anda dapat berdiskusi
bersama teman Anda.
Buatlah penyelesaian tugas ini dengan terlebih dahulu melakukan analisis
kebutuhan untuk semua hal yang diperlukan dalam memnyusun program.
Lengkapi juga jawaban Anda dengan rancangan konstruksi modular program
dengan menerapkan konsep devide and conquer atau top -down analysis.
Selamat mengerjakan tugas.
Kasus:
1. Buatlah sebuah program yang dapat digunakan untuk mengelola hasil
perlombaan bermain layangan. Program harus memiliki menu pilihan,
seperti entri data, pencarian data, penentuan juara, dan lainnya. Perlu
diingat bahwa penilaian lomba ditentukan oleh tinggi layangan peserta
yang bersangkutan, tetapi nilai ini tidak diinputkan, melainkan dihitung
oleh program. Data yang perlu diinputkan meliputi data identitas peserta
dan data pertandingan berupa panjang tali yang terulur serta sudut elevasi
tali dengan tanah. (ingat, bagaimana menghitung tinggi berdasarkan dua
komponen ini).

2. Buatlah program yang dapat digunakan untuk mengelola hasil


pertandingan memanah dari sejumlah peserta pertandingan. Setiap
peserta memiliki kesempatan melakukan panahan sebanyak 3 kali
memanah. Setiap kali memanah dinilai dengan ketentuan sebagai berikut:
 Sasaran memanah terdiri dari suatu bidang yang diberi nomor 1 hingga 10.
jika mengenai sasaran nomor 1, maka nilainya adalah 100, jika mengenai
nomor 2, maka nilai 90, demikian seterusnya hingga jika mengenai nomor 10
maka nilainya adalah 10. apabila tidak mengenai salah satu nomor, maka akan
diberi nilai 0 (nol).
 Nilai total diperoleh dari akumulasi nilai setiap kali kesempatan memanah dan
ini menentukan penilaian juara memanah.
 Program harus dilengkapi dengan menu pilihan, seperti, entri data, cari
peserta tertentu, daftar hasil pertandingan dan daftar juara pertandingan.

21

Anda mungkin juga menyukai