STRUCT
TUJUAN UMUM Memahami tipe struct dan implementasi dalam program
TUJUAN KHUSUS Karakteristik Deklarasi Structure Tipe Data Abstrak pada Struct Struktur Mapping Function Parameter mapping Function Parameter Structure Rumus Umum SMF Memori yang digunakan oleh struct Array of Structure
STRUCTURE
Struct merupakan tipe data terstruktur yang digunakan dalam bahasa C++ yang serupa dengan tipe data record dalam bahasa Pascal.
Karakteristik
Hubungan antara elemen linier Penempatan di memori secara fisik maupun secara logik sama Hubungan antara Field Identifier dengan komponen adalah one-to-one Tipe heterogen Cara access Random
Deklarasi Structure Struct <structure name> {
; ; ; …. ; }; <structure variable>;
Contoh: struct Pegawai { char Nama[30]; int umur; char status; float gaji; char jabatan[20]; }; Struct Pegawai P1, P2, P3; Tipe Data Abstrak Struct Retrieve(S, v, id); Mengambil data dari struct S pada field identifier id untuk disimpan di variabel v. Implementasi dengan bahasa C++: v = S.id;
Update(S, v, id) Mengubah nilai data dari struct S pada filed identifierid, dengan nilai dari variabel v. Implementasi dengan bahasa C: S.id = v
Contoh Aplikasi Struct
struct products { char name [30]; float price; } apple, orange, melon; apple.name apple.price orange.name orange.price melon.name melon.price
// example about structures #include #include <string.h> #include <stdlib.h> struct movies_t { char title [50]; int year; } mine, yours; void printmovie (movies_t movie); int main () { char buffer [50]; strcpy (mine.title, "2001 A Space Odyssey"); mine.year = 1968; cout << "Enter title: "; cin.getline (yours.title,50); cout << "Enter year: "; cin.getline (buffer,50); yours.year = atoi (buffer); cout << "My favourite movie is:\n "; printmovie (mine); cout << "And yours:\n "; printmovie (yours); return 0; } void printmovie (movies_t movie) { cout << movie.title; cout << " (" << movie.year << ")\n"; }
Contoh algoritma yang menggunakan kedua operator Retrive( ) dan Update( ) yaitu: Menyalin isi struct A ke struct B Structure Mapping Function Fungsi untuk memetakan komponen struct pada field identifier i ke alamatdi memori Perhitungan SMF memerlukan parameter structure. Parameter Structure 1. Alamat awal/Base Lokation(b) Alamat komponen pertama array di memori. Pada dasarnya alamat ini tidak diketahui oleh pemrogram, sehingga nilai b selalu dimisalkan. 2. Daftar Field/Field List 3. Panjang Komponen Field/Field Length (FL) Ukuran tipe data (dalam byte) yang digunakan, seperti: integer: FL = 2, char: FL = 1 dan float: FL = 4
Rumus Umum SMF Addr(Field) = b + offset Memori yang digunakan oleh struct MS = FL1 + FL2 + FL3 + ….. FLn Contoh: struct tgl { int Tanggal; int Bulan; int Tahun; }; Struct Peg { int NIP; tgl MK;/* Mulai Bekerja */ tgl BK; /* Berhenti Bekerja */ }; Struct Peg Yacob;
Nama Komponen
Tipe Field
L
Offset
Yacob.NIP
Int
2
0
Yacob.MK.Tanggal
Int
2
2
Yacob.MK.Bulan
Int
2
4
Yacob.MK.Tahun
Int
2
6
Yacob.BK.Tanggal
Int
2
8
Yacob.BK.Bulan
Int
2
10
Yacob.BK.Tahun
Int
2
12
Bila dimisalkan b = 1000 Addr(Yacob.BK.Tanggal) = b + offset = 1000 + 8 = 1008 Array of Structure struct Pegawai { char Nama[30]; int umur; char status; float gaji; char jabatan[20]; }; Struct Pegawai P[50]; /* Array of Structure*/
30 byte Nama
2 byte
1 byte
4 byte
20 byte
Umur
status
Gaji
Jabatan
P[0] P[1] P[2] P[3] …… P[49 ]
Rumus Perhitungan besarnya memori yang digunakan oleh array of struct. M = MS x (U1 + 1 ) = FL1 + FL2 + FL3 +…. FLn x (U1 +1)
Untuk array of struct Pegawai P[50], diperlukan : M = (30+2+1+4+20) x (49 +1) = 2850 byte Akses Komponen: 1 Perkalian + 2 Penambahan Apabila daftar pegawai disimpan dalam array2 dimensi, P[50][5] diperluakan : M = L x (U1 + 1 ) x (U2 + 1 ) = 30 x 50 x 5 = 7500 byte
Akses komponen: 2 perkalian + 2 penambahan
Contoh Aplikasi Array of Struct // array of structures #include #include <stdlib.h> #define N_MOVIES 5 struct movies_t { char title [50]; int year; } films [N_MOVIES]; void printmovie (movies_t movie); int main () { char buffer [50]; int n; for (n=0; n
} cout << "\nYou have entered these movies:\n"; for (n=0; n
Latihan 1. Buat array of struct untuk 76 mahasiswa dengan daftar field sebagai berikut: Nama string 40 karakter, Nim string 10 karakter, Alamat string 50 karakter, IPS float IPK float Berapa byte memori dibutuhkan untuk menampung daftar mahasiswa tersebut? 2. Bila daftar mahasiswa pada soal no. 1 ditampung dalam array 2 dimensi, berapa byte memori yang dibuthkan? Misal M[76][4] 3. Buat modul yang berfungsi untuk memasukkan data semua pegawai? 4. Buat modul yan gberfungsi untuk mencari data pegawai dengan: a. gaji terbesar b. gaji terkecil c. gaji rata-rata