Tugas Personal Ke-2 (Minggu 8 / Sesi 13) : Jawaban
Tugas Personal Ke-2 (Minggu 8 / Sesi 13) : Jawaban
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;
strcpy(up.name, "Kresna");
up.age = 26;
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
Catatan: Validasikan jika mahasiswa yang dimasukkan sudah pernah diinput sebelumnya.
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)
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;
};
// Simpan array
char arr_nim[MAX_SIZE][255];
int size = 0;
void inputMhs();
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';
printf("Nama: ");
fgets(Nama, sizeof(Nama), stdin);
Nama[strcspn(Nama, "\n")] = '\0';
strcpy(mahasiswaBINUS[size].Nama, Nama);
void inputNilai() {
char NIM[255], NilaiHadir_str[256], NilaiTugas_str[256], NilaiQuiz_str[256],
NilaiKeaktifanForum_str[256], NilaiUAS_str[256], grade[255];
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);
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;
}