STRUCT
STRUCT
TUJUAN UMUM
TUJUAN UMUM
Memahami
Memahami
tipe
tipe
struct
struct
dan
dan
implementasi
implementasi
dalam
TUJUAN KHUSUS
TUJUAN KHUSUS
Karakteristik
Karakteristik
Deklarasi
Deklarasi
Structure
Structure
Tipe
Tipe
Data
Data
Abstrak
Abstrak
pada
pada
Struct
Struct
Struktur
Struktur
Mapping Function
Mapping Function
Parameter mapping Function
Parameter mapping Function
Parameter Structure
Parameter Structure
Rumus
Rumus
Umum
Umum
SMF
SMF
Memori
Memori
yang
yang
digunakan
digunakan
oleh
oleh
struct
struct
STRUCTURE
STRUCTURE
Struct
Struct merupakanmerupakan tipetipe data terstrukturdata terstruktur yang yang digunakan
digunakan dalamdalam bahasabahasa C++ yang C++ yang serupaserupa dengan
dengan tipetipe data record data record dalamdalam bahasabahasa Pascal
Pascal
.
.
Karakteristik
Karakteristik
HubunganHubungan antaraantara elemenelemen linierlinier
PenempatanPenempatan didi memorimemori secarasecara fisikfisik maupunmaupun
secara
secara logiklogik samasama
HubunganHubungan antaraantara Field Identifier Field Identifier dengandengan
komponen
komponen adalahadalah oneone--toto--oneone
TipeTipe heterogenheterogen
Cara access RandomCara access Random
Deklarasi
Deklarasi
Structure
Structure
StructStruct <structure name> {<structure name> { <
<tipetipe data 1> <field identifier 1>;data 1> <field identifier 1>; <
<tipetipe data 2> <field identifier 2>;data 2> <field identifier 2>; <
<tipetipe data 3> <field identifier 3>;data 3> <field identifier 3>; …
….. <
<tipetipe data n><field identifier n>;data n><field identifier n>; }; <structure variable>;
Contoh Contoh:: struct
struct PegawaiPegawai {{ char Nama[30]; char Nama[30];
int
int umur;umur; char status; char status;
float
float gaji;gaji;
char jabatan[20]; char jabatan[20];
}; }; Struct
Struct PegawaiPegawai P1, P2, P3;P1, P2, P3; Tipe
Tipe Data AbstrakData Abstrak StructStruct
Retrieve(S, v, id);Retrieve(S, v, id);
Mengambil
Mengambil data daridata dari structstruct S S padapada field field identifier id
identifier id untukuntuk disimpandisimpan didi variabelvariabel v.v. Implementasi
Implementasi dengandengan bahasabahasa C++:C++: v = S.id;
v = S.id;
Update(S, v, id)Update(S, v, id)
Mengubah
Mengubah nilainilai data daridata dari structstruct S padaS pada filed filed identifierid
identifierid, , dengandengan nilainilai daridari variabelvariabel v.v. Implementasi
Implementasi dengandengan bahasabahasa C:C: S.id = v
Contoh
Contoh
Aplikasi
Aplikasi
Struct
Struct
struct
struct products { products { char name [30]; char name [30]; float price; } float price; }
apple, orange, melon; apple, orange, melon; apple.name apple.name apple.price apple.price orange.name orange.name orange.price orange.price melon.name melon.name melon.price melon.price
// example about structures // example about structures #include <
#include <iostream.h> iostream.h> #include <
#include <string.h> string.h> #include <
#include <stdlib.h> stdlib.h> struct
struct movies_tmovies_t { { char title [50]; char title [50];
int
int year; } year; } mine, yours; mine, yours; void
void printmovieprintmovie (movies_t(movies_t movie);movie); int
int main () main () {
{ char buffer [50]; char buffer [50];
strcpy
strcpy ((mine.title, "2001 A Space Odyssey"); mine.title, "2001 A Space Odyssey"); mine.year
mine.year = 1968; = 1968; cout
cout << "Enter title: "; << "Enter title: "; cin.getline
cin.getline (yours.title,50); (yours.title,50); cout
cout << "Enter year: "; << "Enter year: "; cin.getline
cin.getline (buffer,50); (buffer,50); yours.year
yours.year = atoi= atoi (buffer); (buffer); cout
cout << "My favourite<< "My favourite movie is:\movie is:\n "; n "; printmovie
printmovie (mine); (mine); cout
cout << "And yours:\<< "And yours:\n "; n "; printmovieprintmovie (yours); (yours); return 0;
return 0; } }
void
void printmovieprintmovie ((movies_tmovies_t movie) movie) {
{
cout
cout << movie.title<< movie.title; ; coutcout << " (" << << " (" << movie.year
movie.year << ")\<< ")\n"; n"; }
Contoh
Contoh algoritmaalgoritma yang menggunakanyang menggunakan keduakedua operator
operator RetriveRetrive( ) ( ) dandan Update( ) Update( ) yaituyaitu: : Menyalin
Menyalin isiisi structstruct A A keke structstruct BB Structure Mapping Function
Structure Mapping Function Fungsi
Fungsi untukuntuk memetakanmemetakan komponenkomponen structstruct pada
pada field identifier i field identifier i keke alamatdialamatdi memorimemori Perhitungan
Perhitungan SMF SMF memerlukanmemerlukan parameter parameter structure.
structure.
Parameter Structure Parameter Structure
1.
1. AlamatAlamat awalawal/Base /Base Lokation(bLokation(b))
Alamat
Alamat komponenkomponen pertamapertama array array didi memorimemori.. Pada
Pada dasarnyadasarnya alamatalamat iniini tidaktidak diketahuidiketahui oleholeh pemrogram
pemrogram, , sehinggasehingga nilainilai b b selaluselalu dimisalkandimisalkan..
2.
2. DaftarDaftar Field/Field ListField/Field List 3.
3. PanjangPanjang KomponenKomponen Field/Field Length (FL)Field/Field Length (FL)
Ukuran
Ukuran tipetipe data (data (dalamdalam byte) yang byte) yang digunakan
digunakan, , sepertiseperti: :
integer: FL = 2, char: FL = 1
Rumus
Rumus
Umum
Umum
SMF
SMF
Addr(Field
Addr(Field
) = b + offset
) = b + offset
Memori
Memori
yang
yang
digunakan
digunakan
oleh
oleh
struct
struct
MS = FL
MS = FL
11+ FL
+ FL
22+ FL
+ FL
33+
+
…
…
..
..
FL
FL
nnContoh
Contoh
:
:
struct
struct
tgl
tgl
{
{
int
int
Tanggal
Tanggal
;
;
int
int
Bulan
Bulan
;
;
int
int
Tahun
Tahun
;
;
};
};
Struct
Struct
Peg {
Peg {
int
int
NIP;
NIP;
tgl
tgl
MK;/*
MK;/*
Mulai
Mulai
Bekerja
Bekerja
*/
*/
tgl
tgl
BK; /*
BK; /*
Berhenti
Berhenti
Bekerja
Bekerja
*/
*/
};
};
Struct
Bila
Bila dimisalkandimisalkan b = 1000b = 1000 Addr(Yacob.BK.Tanggal
Addr(Yacob.BK.Tanggal) = b + offset) = b + offset
= 1000 + 8 = 1008 = 1000 + 8 = 1008
Array of Structure Array of Structure
struct
struct PegawaiPegawai {{ char Nama[30]; char Nama[30];
int
int umur;umur; char status; char status;
float
float gajigaji;;
char jabatan[20]; char jabatan[20];
}; }; Struct
Struct PegawaiPegawai P[50]; /* Array of Structure*/P[50]; /* Array of Structure*/ Nama
Nama KomponenKomponen TipeTipe Field
Field LL OffsetOffset Yacob.NIP
Yacob.NIP IntInt 22 00 Yacob.MK.Bulan
Yacob.MK.Bulan IntInt 22 44 Yacob.BK.Tanggal
Yacob.BK.Tanggal IntInt 22 88 Yacob.BK.Tahun
Yacob.BK.Tahun IntInt 22 1212 Yacob.MK.Tanggal
Yacob.MK.Tanggal IntInt 22 22 Yacob.MK.Tahun
Yacob.MK.Tahun IntInt 22 66 Yacob.BK.Bulan
Rumus
Rumus PerhitunganPerhitungan besarnyabesarnya memorimemori yang yang digunakan
digunakan oleholeh array of array of structstruct..
M = MS x (U
M = MS x (U11 + 1 ) = FL+ 1 ) = FL11 + FL+ FL22 + FL+ FL33 +…+…. . FLFLnnx (Ux (U11 + 1 )
+ 1 )
Untuk
Untuk array of array of structstruct PegawaiPegawai P[50], P[50], diperlukandiperlukan :: M
M = (30+2+1+4+20) x (49 +1)= (30+2+1+4+20) x (49 +1) = 2850 byte
= 2850 byte
Akses
Akses KomponenKomponen:: 1
1 PerkalianPerkalian + 2 + 2 PenambahanPenambahan Apabila
Apabila daftardaftar pegawaipegawai disimpandisimpan dalamdalam array2 array2 dimensi
dimensi, P[50][5] , P[50][5] diperluakandiperluakan ::
M = L x (U
M = L x (U11 + 1 ) x (U+ 1 ) x (U22 + 1 ) = 30 x 50 x 5 = 7500 + 1 ) = 30 x 50 x 5 = 7500 byte
byte
Akses
Akses komponenkomponen:: 2
2 perkalianperkalian + 2 + 2 penambahanpenambahan
30 30 byte
byte 2 byte2 byte 1 byte1 byte 4 byte4 byte 20 byte20 byte Nama
Nama UmurUmur statusstatus GajiGaji JabatanJabatan P[1] P[1] P[3] P[3] P[49 P[49 ] ] P[0] P[0] …… …… P[2] P[2]
Contoh
Contoh
Aplikasi
Aplikasi
Array of
Array of
Struct
Struct
// array of structures
// array of structures #include <
#include <iostream.hiostream.h>> #include <
#include <stdlib.hstdlib.h> > #define N_MOVIES 5 #define N_MOVIES 5 struct
struct movies_tmovies_t {
{
char title [50]; char title [50]; int
int year; } year; }
films [N_MOVIES]; films [N_MOVIES]; void
void printmovieprintmovie ((movies_tmovies_t movie); movie); int
int main () main () { { char buffer [50]; char buffer [50]; int int n; n; for (n=0; n<N_MOVIES; n++) for (n=0; n<N_MOVIES; n++) { { cout
cout << "Enter title: "; << "Enter title: "; cin.getline
cin.getline (films[n].title,50); (films[n].title,50); cout
cout << "Enter year: "; << "Enter year: "; cin.getline
cin.getline (buffer,50); (buffer,50); films[n].year
films[n].year = atoi= atoi (buffer); (buffer);
} } cout
cout << "<< "\\nYounYou have entered these have entered these movies:
movies:\\n"; n";
for (n=0; n<N_MOVIES; n++) for (n=0; n<N_MOVIES; n++) printmovie
printmovie ((films[nfilms[n]); return 0; ]); return 0; }
} void
void printmovieprintmovie ((movies_tmovies_t movie) movie) {
{ cout
cout << << movie.titlemovie.title; ; cout
cout << " (" << << " (" << movie.yearmovie.year << ")<< ")\\n"; n"; }
Latihan Latihan
1.
1. BuatBuat array of array of structstruct untukuntuk 76 76 mahasiswamahasiswa
dengan
dengan daftardaftar field field sebagaisebagai berikutberikut:: Nama
Nama string 40 string 40 karakterkarakter,, Nim
Nim string 10 karakterstring 10 karakter,, Alamat
Alamat string 50 karakterstring 50 karakter,, IPS float
IPS float IPK float IPK float Berapa
Berapa byte memoribyte memori dibutuhkandibutuhkan untukuntuk menampung
menampung daftardaftar mahasiswamahasiswa tersebuttersebut?? 2.
2. BilaBila daftardaftar mahasiswamahasiswa padapada soalsoal no. 1 no. 1 ditampung
ditampung dalamdalam array 2 array 2 dimensidimensi, , berapaberapa byte
byte memorimemori yang dibuthkanyang dibuthkan? ? MisalMisal M[76][4]
M[76][4] 3.
3. BuatBuat modulmodul yang yang berfungsiberfungsi untukuntuk memasukkan
memasukkan data data semuasemua pegawaipegawai?? 4.
4. BuatBuat modulmodul yanyan gberfungsigberfungsi untukuntuk mencarimencari data
data pegawaipegawai dengan:dengan: a.
a. gajigaji terbesarterbesar b.
b. gajigaji terkecilterkecil c.