PERTEMUAN 05
Struktur Data – Struct
STRUCT, UNION, &
ENUMERATION
160 menit · 25 Bagian Materi
Mengelola data heterogen. Dari variabel terpisah ke struktur data yang terpadu dan bermakna.
01 / 25
Tujuan Pertemuan
🎯 Apa yang akan kita capai?
1Memahami cara menyimpan data heterogen (berbeda tipe).
2Mendefinisikan dan menggunakan struct dalam C++.
3Memahami perbedaan penggunaan memori antara struct dan union.
4Menggunakan enumeration untuk kode yang lebih deskriptif.
02 / 25
Learning Flow
🧭 Struktur Besar
1
🚀 Pembukaan & Koneksi
15 min
2
🏗 Konsep Struct
40 min
3
🧬 Union & Memori
20 min
4
🔢 Enumeration
20 min
5
🏗 Mini Project
25 min
03 / 25
Bagian 1 · Pembukaan · 15 menit
🚀 Mengelola Data Heterogen

Bagaimana cara menyimpan data yang terdiri dari berbagai tipe berbeda dalam satu kesatuan?

Nama (String)
Umur (Integer)
IPK (Float)
KARTU MAHASISWA
NIM
2401010001
Nama
Budi Santoso
IPK
3.75
Semester
4
04 / 25
Bagian 1 · Review Materi
🧠 Review Array

Mahasiswa sudah mempelajari Array 1D & 2D.

int nilai[5] = {80, 75, 90, 85, 70};
0
80
1
75
2
90
3
85
4
70
Keterbatasan: Array hanya menyimpan data dengan tipe yang sama.
05 / 25
Bagian 1 · Masalah Dunia Nyata
📉 Masalah Array Paralel

Menyimpan data mahasiswa dengan 4 array terpisah:

string nim
"001"
"002"
"003"
string nama
"Budi"
"Ani"
"Caca"
float ipk
3.75
3.80
3.50
DISKUSI
Apa risikonya jika urutan (indeks) antar array tidak sinkron?
06 / 25
Bagian 2 · Konsep Struct · 40 menit
💡 Solusi: Struct

Definisi: Struct adalah kumpulan variabel dengan tipe berbeda yang dikelompokkan dalam satu unit.

Bayangkan sebuah formulir kertas. Satu lembar berisi NIM, Nama, IPK, dan Semester sekaligus.
MAHASISWA
nim
nama
ipk
semester
07 / 25
Bagian 2 · Sintaks Struct
📝 Sintaks Deklarasi
struct Mahasiswa {
    string nim;      // Anggota 1
    string nama;     // Anggota 2
    float ipk;       // Anggota 3
    int semester;    // Anggota 4
}; // <--- Jangan lupa titik koma!
struct: Keyword untuk memulai definisi.
Mahasiswa: Nama tipe data baru buatan Anda.
{...};: Daftar anggota dan diakhiri semicolon.
08 / 25
Bagian 2 · Penggunaan
📦 Membuat Variabel Struct
Mahasiswa mhs1;

Sekarang mhs1 adalah sebuah objek yang memiliki 4 "ruangan" di dalamnya.

mhs1
nim
nama
ipk
semester
09 / 25
Bagian 2 · Akses Anggota
🔗 Operator Dot (.)
mhs1.nim = "2401010001";
mhs1.nama = "Budi";
mhs1.ipk = 3.75;
mhs1.semester = 4;

cout << mhs1.nama; // Output: Budi
Gunakan tanda titik . untuk mengakses atau mengisi anggota struct.
10 / 25
Bagian 2 · Input String
⌨️ Input String Ber-spasi

Masalah: cin >> berhenti saat bertemu spasi.

cin.ignore(); // Membersihkan buffer
getline(cin, mhs1.nama); // Membaca satu baris penuh
TIPS
Gunakan getline jika Anda ingin menginput nama lengkap yang mengandung spasi.
11 / 25
Bagian 2 · Aktivitas Cepat
⚡ Aktivitas 5 Menit

Buatlah struct Buku dengan field sebagai berikut:

judul (string)
pengarang (string)
harga (int)

Lalu buat satu variabel buku1 dan isi datanya!

12 / 25
Bagian 2 · Struktur Lanjut
📚 Array of Struct
Mahasiswa daftar[3]; // Membuat 3 slot mahasiswa
daftar[0]
nim
nama
ipk
daftar[1]
nim
nama
ipk
daftar[2]
nim
nama
ipk

Akses: daftar[0].nama = "Budi";

13 / 25
Bagian 2 · Contoh Program
🏆 Contoh: IPK Tertinggi
Input
Loop
Bandingkan
Output

Program ini akan meminta input 3 mahasiswa, lalu menampilkan siapa yang memiliki IPK paling tinggi.

14 / 25
Bagian 3 · Union & Memori · 20 menit
🧬 Mengapa Union?

Dalam kondisi tertentu (seperti sistem tertanam/IoT), memori sangat terbatas.

Kita butuh variabel yang bisa menyimpan beberapa tipe secara bergantian.
Hanya satu anggota yang aktif di satu waktu.

Contoh: Data sensor yang bisa berupa int (suhu bulat) atau float (suhu presisi).

15 / 25
Bagian 3 · Sintaks Union
📝 Sintaks Union
union Data {
    int angka;
    float desimal;
};

Data d1;
d1.angka = 10;
d1.desimal = 3.14; // Nilai 'angka' akan tertimpa!
INGAT
Union menggunakan alamat memori yang sama untuk semua anggotanya.
16 / 25
Bagian 3 · Perbandingan
⚖️ Struct vs Union
STRUCT
[ angka ][ desimal ]
Ukuran = Total Anggota
UNION
shared memory
Ukuran = Anggota Terbesar
17 / 25
Bagian 3 · Kegunaan
🛠 Kapan Menggunakan Union?
1Embedded System: Menghemat RAM yang sangat kecil (microcontroller).
2Protokol Komunikasi: Membaca paket data yang formatnya bisa berbeda-beda.
3Optimasi: Jika Anda yakin hanya satu data yang perlu disimpan dalam satu waktu.
18 / 25
Bagian 4 · Enumeration · 20 menit
❓ Masalah Angka Misterius
int status = 2;
DISKUSI
Apa arti angka 2 di atas?
  • Lulus?
  • Cuti?
  • Drop Out?

Kode di atas sulit dibaca dan dipahami!

19 / 25
Bagian 4 · Konsep Enum
🔢 Solusi: Enumeration (Enum)
enum Status { AKTIF, CUTI, LULUS };

Status mhs1 = LULUS;
if (mhs1 == LULUS) { ... }

Mapping di belakang layar:

AKTIF 0
CUTI 1
LULUS 2
20 / 25
Bagian 4 · Input Enum
🔄 Input Enum: static_cast

Masalah: cin tidak tahu cara mengisi variabel Enum secara langsung.

int pilihan;
cin >> pilihan;
mhs1.kondisi = static_cast<Status>(pilihan);
static_cast<Tipe> digunakan untuk mengubah satu tipe ke tipe lain secara eksplisit.
21 / 25
Bagian 4 · Integrasi
🤝 Enum dalam Struct
struct Mahasiswa {
    string nama;
    Status kondisi; // Menggunakan enum Status
};

Mahasiswa s1;
s1.nama = "Andi";
s1.kondisi = AKTIF;

Ini membuat data mahasiswa jauh lebih deskriptif dibanding hanya menggunakan angka int.

22 / 25
Bagian 4 · Latihan Singkat
✍️ Latihan Integrasi
  1. Buat enum JenisKelamin { LAKI, PEREMPUAN }.
  2. Buat struct Pasien yang berisi:
    • Nama
    • Umur
    • Jenis Kelamin (dari enum)
Coba deklarasikan satu pasien dan isi datanya!
23 / 25
Bagian 5 · Mini Project · 25 menit
🏗 Mini Project:
Sistem Karyawan

Fitur:

  • Data: ID, Nama, Gaji, Jabatan (Enum).
  • Input 3 data karyawan.
  • Cari gaji tertinggi.
  • Hitung rata-rata gaji perusahaan.
24 / 25
Bagian 5 · Refleksi
🏁 Refleksi Konseptual
?Mengapa struct lebih baik daripada array paralel?
?Kapan sebaiknya kita memilih union daripada struct?
?Apa keuntungan menggunakan enum dibanding const int?
25 / 25
Next Topic
🚀 Preview: Linked List

Di pertemuan berikutnya, kita akan belajar Linked List.

data
*next
data
*next

Node dalam linked list didefinisikan menggunakan Struct.