100% menganggap dokumen ini bermanfaat (1 suara)
89 tayangan10 halaman

Tugas Personal Ke-2 (Minggu 8 / Sesi 13) : Jawaban

Dokumen tersebut memberikan tugas untuk membuat program yang dapat menginput, menyimpan, dan menampilkan data mahasiswa beserta nilainya. Program tersebut memiliki menu untuk (1) input data mahasiswa, (2) input nilai, dan (3) menampilkan nilai dan status lulus/tidak lulus berdasarkan rumus tertentu.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
100% menganggap dokumen ini bermanfaat (1 suara)
89 tayangan10 halaman

Tugas Personal Ke-2 (Minggu 8 / Sesi 13) : Jawaban

Dokumen tersebut memberikan tugas untuk membuat program yang dapat menginput, menyimpan, dan menampilkan data mahasiswa beserta nilainya. Program tersebut memiliki menu untuk (1) input data mahasiswa, (2) input nilai, dan (3) menampilkan nilai dan status lulus/tidak lulus berdasarkan rumus tertentu.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 10

Tugas Personal ke-2

(Minggu 8 / Sesi 13)

1. Buatlah ringkasan pemahaman anda mengenai perbedaan Struct dan Union serta berikan
contoh penerapannya.
Jawaban:
Perbedaan Struct dan Union terletak pada kata kunci (keyword) dan ukurannya (size).

Pada Struct menggunakan kata kunci struct sedangkan Union menggunakan kata kunci
union.

Pada Struct jumlah ukuran (size) memori yang dialokasi oleh compiler adalah total
jumlah dari ukuran setiap anggotanya. Sedangkan pada Union jumlah ukuran (size)
memori yang dialokasi oleh compiler adalah dari anggota yang memiliki ukuran terbesar.

Contoh program:

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

struct struct_person {
char name[256];
int age;
float weight;
};

union union_person {
char name[256];
int age;
float weight;
};

int main() {

// struct
struct struct_person sp;

strcpy(sp.name, "Kresna");
sp.age = 26;
sp.weight = 70.2;

printf("\n Struct \n");


printf("Nama: %s \n", sp.name);
printf("Umur %d \n", sp.age);
printf("Berat badan %.2f \n", sp.weight);

union union_person up;

strcpy(up.name, "Kresna");
up.age = 26;

COMP6112 – Algorithm and Programming


up.weight = 70.2;

printf("\n Union \n");


printf("Nama: %s \n", up.name);
printf("Umur %d \n", up.age);
printf("Berat badan %.2f \n", up.weight);
}

Output program:

Pada gambar di atas, tanda panah merah menunjukkan bahwa hanya output Berat Badan
yang nilainya benar pada baris Union. Hal ini dikarenakan field weight (Berat Badan)
pada union_people diinisialisasi di baris terakhir sehingga memori yang ada Union akan
berfokus pada field weight.

2. Buatlah program untuk menghitung nilai akhir mahasiswa, adapun aturannya adalah
a. Buatlah tampilaan menu sebagai berikut:
 Menu 1 untuk Input data mahasiswa.
 Menu 2 untuk Input nilai.
 Menu 3 untuk melihat nilai mahasiswa dan status
 Menu 4 keluar dari program

b. Jika pengguna memilih Menu 1


Input data mahasiswa antara lain: nim, nama dan mata kuliah

Catatan: Validasikan jika mahasiswa yang dimasukkan sudah pernah diinput sebelumnya.

c. Jika pengguna memilih menu 2


Input data nilai antara lain:
1) Nilai Hadir

COMP6112 – Algorithm and Programming


2) Nilai Tugas
3) Nilai Quiz
4) Nilai Keaktifan Forum
5) Nilai UAS

d. Jika Pengguna memilih Menu 3.


Pengguna meng-input nim mahasiswa maka akan tampil hasil kalkulasi dari
penjumlahan dan status grade yang didapat.

Catatan

Rumus perhitungan: Nilai Hadir 10% +Nilai Tugas 20% + Nilai Quiz 10% + Nilai keaktifan
forum 10% dan Nilai UAS 50%.

Status grade
Grade A = 100 – 90 (Lulus)
Grade B = 89 – 80 (Lulus)
Grade C = 79 – 70 (Lulus)
Grade D = 69 – 60 (Lulus)
Grade E = 59 – 50 (Tidak Lulus)

Jawaban soal nomor 2:

Saya menggunakan field “NIM” sebagai field unik untuk validasi, sehingga data NIM
mahasiswa yang diinput tidak kembar.

Kode program:

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

// Maksimal 10 mahasiswa
#define MAX_SIZE 10

struct Nilai {
float NilaiHadir, NilaiTugas, NilaiQuiz, NilaiKeaktifanForum, NilaiUAS,
HasilNilai;
char grade[255];
};

struct Mahasiswa {
char NIM[255], Nama[255], MataKuliah[255];
struct Nilai nilai;
};

struct Mahasiswa mahasiswaBINUS[MAX_SIZE];

// Simpan array
char arr_nim[MAX_SIZE][255];

int size = 0;

void inputMhs();

COMP6112 – Algorithm and Programming


void inputNilai();
void lihatMhs();

// Cek apakah NIM X diijinkan untuk diinput ke dalam struct mhs?

int isNIMAllowed(char arr_nim[][255], int size, char NIM[255]) {


int allowed = 1;
if (size == 0) {
return 1;
} else {
for (int i = 0; i <= size; i++) {
if (strcmp(NIM, arr_nim[i]) == 0) {
allowed = 0;
break;
}
}
}

return allowed;
}

void inputMhs() {
// Karena array dimulai dari index 0 maka harus + 1
// Agar sesuai dengan jumlah data mahasiswa
int temp_size = size + 1;
if (temp_size > MAX_SIZE) {
printf("Maaf, hanya bisa menginput %d mahasiswa \n", MAX_SIZE);
} else {
int is_nim_allowed;
char NIM[255], Nama[255], MataKuliah[255];

printf("NIM: ");
fgets(NIM, sizeof(NIM), stdin);
NIM[strcspn(NIM, "\n")] = '\0';

is_nim_allowed = isNIMAllowed(arr_nim, MAX_SIZE, NIM);


while (!is_nim_allowed) {
printf("NIM yang %s sudah pernah diinputkan sebelumnya! \n", NIM);
printf("Silakan masukkan NIM baru! \n");
printf("NIM: ");
fgets(NIM, sizeof(NIM), stdin);
NIM[strcspn(NIM, "\n")] = '\0';
is_nim_allowed = isNIMAllowed(arr_nim, MAX_SIZE, NIM);
}
strcpy(arr_nim[size], NIM);
strcpy(mahasiswaBINUS[size].NIM, NIM);

printf("Nama: ");
fgets(Nama, sizeof(Nama), stdin);
Nama[strcspn(Nama, "\n")] = '\0';
strcpy(mahasiswaBINUS[size].Nama, Nama);

printf("Mata kuliah: ");


fgets(MataKuliah, sizeof(MataKuliah), stdin);
MataKuliah[strcspn(MataKuliah, "\n")] = '\0';
strcpy(mahasiswaBINUS[size].MataKuliah, MataKuliah);

COMP6112 – Algorithm and Programming


size++;
}
}

void inputNilai() {
char NIM[255], NilaiHadir_str[256], NilaiTugas_str[256], NilaiQuiz_str[256],
NilaiKeaktifanForum_str[256], NilaiUAS_str[256], grade[255];

float NilaiHadir, NilaiTugas, NilaiQuiz, NilaiKeaktifanForum, NilaiUAS,


HasilNilai;

printf("Cari NIM untuk input nilai: ");


fgets(NIM, sizeof(NIM), stdin);
NIM[strcspn(NIM, "\n")] = '\0';

for (int i = 0; i < MAX_SIZE; i++) {


if (strcmp(mahasiswaBINUS[i].NIM, NIM) == 0) {

printf("Input nilai hadir: ");


fgets(NilaiHadir_str, sizeof(NilaiHadir_str), stdin);
sscanf(NilaiHadir_str, "%f", &NilaiHadir);
while (NilaiHadir < 0 || NilaiHadir > 100) {
printf("Nilai tidak boleh kurang dari 0 atau lebih dari 100! \n");
printf("Input nilai hadir: ");
fgets(NilaiHadir_str, sizeof(NilaiHadir_str), stdin);
sscanf(NilaiHadir_str, "%f", &NilaiHadir);
}
mahasiswaBINUS[i].nilai.NilaiHadir = NilaiHadir;

printf("Input nilai tugas: ");


fgets(NilaiTugas_str, sizeof(NilaiTugas_str), stdin);
sscanf(NilaiTugas_str, "%f", &NilaiTugas);
while (NilaiTugas < 0 || NilaiTugas > 100) {
printf("Nilai tidak boleh kurang dari 0 atau lebih dari 100! \n");
printf("Input nilai tugas: ");
fgets(NilaiTugas_str, sizeof(NilaiTugas_str), stdin);
sscanf(NilaiTugas_str, "%f", &NilaiTugas);
}
mahasiswaBINUS[i].nilai.NilaiTugas = NilaiTugas;

printf("Input nilai quiz: ");


fgets(NilaiQuiz_str, sizeof(NilaiQuiz_str), stdin);
sscanf(NilaiQuiz_str, "%f", &NilaiQuiz);
while (NilaiQuiz < 0 || NilaiQuiz > 100) {
printf("Nilai tidak boleh kurang dari 0 atau lebih dari 100! \n");
printf("Input nilai quiz: ");
fgets(NilaiQuiz_str, sizeof(NilaiQuiz_str), stdin);
sscanf(NilaiQuiz_str, "%f", &NilaiQuiz);
}
mahasiswaBINUS[i].nilai.NilaiQuiz = NilaiQuiz;

printf("Input nilai keaktifan forum: ");


fgets(NilaiKeaktifanForum_str, sizeof(NilaiKeaktifanForum_str), stdin);

COMP6112 – Algorithm and Programming


sscanf(NilaiKeaktifanForum_str, "%f", &NilaiKeaktifanForum);
while (NilaiKeaktifanForum < 0 && NilaiKeaktifanForum > 100) {
printf("Nilai tidak boleh kurang dari 0 atau lebih dari 100! \n");
printf("Input nilai keaktifan forum: ");
fgets(NilaiKeaktifanForum_str, sizeof(NilaiKeaktifanForum_str),
stdin);
sscanf(NilaiKeaktifanForum_str, "%f", &NilaiKeaktifanForum);
}
mahasiswaBINUS[i].nilai.NilaiKeaktifanForum = NilaiKeaktifanForum;

printf("Input nilai UAS: ");


fgets(NilaiUAS_str, sizeof(NilaiUAS_str), stdin);
sscanf(NilaiUAS_str, "%f", &NilaiUAS);
printf("Nilai UAS %f \n", NilaiUAS);
while (NilaiUAS < 0 || NilaiUAS > 100) {
printf("Nilai tidak boleh kurang dari 0 atau lebih dari 100! \n");
printf("Input nilai UAS: ");
fgets(NilaiUAS_str, sizeof(NilaiUAS_str), stdin);
sscanf(NilaiUAS_str, "%f", &NilaiUAS);
}
mahasiswaBINUS[i].nilai.NilaiUAS = NilaiUAS;

// TODO: Kalkulasi dan berikan grade

float NilaiAkhir = (NilaiHadir * 0.1) + (NilaiTugas * 0.2) + (NilaiQuiz


* 0.1) + (NilaiKeaktifanForum * 0.1)
+ (NilaiUAS * 0.5);
mahasiswaBINUS[i].nilai.HasilNilai = NilaiAkhir;

if (NilaiAkhir >= 90 && NilaiAkhir == 100) {


strcpy(grade, "A");
} else if (NilaiAkhir >= 80 && NilaiAkhir < 90) {
strcpy(grade, "B");
} else if (NilaiAkhir >= 70 && NilaiAkhir < 80) {
strcpy(grade, "C");
} else if (NilaiAkhir >= 60 && NilaiAkhir < 70) {
strcpy(grade, "D");
} else if (NilaiAkhir >= 50 && NilaiAkhir < 60) {
strcpy(grade, "E");
}

strcpy(mahasiswaBINUS[i].nilai.grade, grade);
break;
} else {
printf("NIM tidak ditemukan! \n");
break;
}
}
}

void lihatMhs() {
for (int i = 0; i < MAX_SIZE; i++) {
if (strlen(mahasiswaBINUS[i].NIM) != 0 && strlen(mahasiswaBINUS[i].Nama) !=
0 && strlen(mahasiswaBINUS[i].MataKuliah) != 0) {
printf("NIM: %s \n", mahasiswaBINUS[i].NIM);
printf("Nama: %s \n", mahasiswaBINUS[i].Nama);

COMP6112 – Algorithm and Programming


printf("Mata kuliah: %s \n", mahasiswaBINUS[i].MataKuliah);
printf("Nilai hadir %.2f \n", mahasiswaBINUS[i].nilai.NilaiHadir);
printf("Nilai tugas %.2f \n", mahasiswaBINUS[i].nilai.NilaiTugas);
printf("Nilai quiz %.2f \n", mahasiswaBINUS[i].nilai.NilaiQuiz);
printf("Nilai keaktifan forum %.2f \n",
mahasiswaBINUS[i].nilai.NilaiKeaktifanForum);
printf("Nilai UAS %.2f \n", mahasiswaBINUS[i].nilai.NilaiUAS);
printf("Hasil nilai %.2f \n", mahasiswaBINUS[i].nilai.HasilNilai);
printf("Grade %s \n", mahasiswaBINUS[i].nilai.grade);
}
}
}

int main() {
int menu;
char menu_str[255];
while (menu != 4) {
printf("Program Menghitung Nilai Akhir Mahasiswa \n");
printf("1. Input data mahasiswa \n");
printf("2. Input nilai mahasiswa \n");
printf("3. Lihat nilai mahasiswa \n");
printf("4. Keluar \n");
printf("Pilihan Anda: ");
fgets(menu_str, sizeof(menu_str), stdin);
sscanf(menu_str, "%d", &menu);

if (menu == 1) {
inputMhs();
} else if (menu == 2) {
inputNilai();
} else if (menu == 3) {
lihatMhs();
} else if (menu == 4) {
printf("Terima kasih\n");
break;
} else {
printf("Pilih menu yang tersedia");
}
}

return 0;
}

Output program (di halaman berikutnya):

COMP6112 – Algorithm and Programming


COMP6112 – Algorithm and Programming
COMP6112 – Algorithm and Programming
-=Selamat Mengerjakan=-

COMP6112 – Algorithm and Programming

Anda mungkin juga menyukai