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 to-oneone Tipe heterogen Cara access Random Deklarasi Structure Struct <structure name> { <tipe data 1> <field identifier 1>; <tipe data 2> <field identifier 2>; <tipe data 3> <field identifier 3>;. <tipe data n><field identifier n>; }; <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 <iostream.h< iostream.h> #include <string.h< string.h> #include <stdlib.h< 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 n "; printmovie (mine); cout << "And yours:\n 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 = FL 1 + FL 2 + FL 3 +.. FL n 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 Yacob.NIP Yacob.MK.Tanggal Yacob.MK.Bulan Yacob.MK.Tahun Yacob.BK.Tanggal Yacob.BK.Bulan Yacob.BK.Tahun Tipe Field L Offset Int 2 0 Int 2 2 Int 2 4 Int 2 6 Int 2 8 Int 2 10 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 2 byte 1 byte 4 byte 20 byte P[0] P[1] P[2] P[3] P[49 ] Nama Umur status Gaji Rumus Perhitungan besarnya memori yang digunakan oleh array of struct. M = MS x (U 1 + 1 ) = FL 1 + FL 2 + FL 3 +. FL n x (U 1 + 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 Jabatan Apabila daftar pegawai disimpan dalam array2 dimensi,, P[50][5] diperluakan : M = L x (U 1 + 1 ) x (U 2 + 1 ) = 30 x 50 x 5 = 7500 byte Akses komponen: 2 perkalian + 2 penambahan
Contoh Aplikasi Array of Struct // array of structures #include <iostream.h< iostream.h> #include <stdlib.h< 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<n_movies; n++) { cout << "Enter title: "; cin.getline (films[n].title,50); cout << "Enter year: "; cin.getline (buffer,50); films[n].year = atoi (buffer); } cout << "\nyou" have entered these movies:\n"; for (n=0; n<n_movies; n++) printmovie (films[n]); return 0; } void printmovie (movies_t movie) { cout << movie.title; cout << " (" << movie.year << ")\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