teknik informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/struktur.pdf · 3 struktur...
TRANSCRIPT
Struktur
Tim ALPRO
Teknik Informatika
Overview
• STRUCTURE
• TYPEDEF
• ARRAY OF STRUCTURE
• POINTER & STUCTURES
• STRUCTURE & FUNCTION
3
Struktur
• Abstract Data Type
• Kumpulan variabel yang berelasi di bawah satunama besar /aggregate dan sering digunakanuntuk mendefinisikan object – orang, tempat / record dalam database / file.
• Dapat berisi berbagai macam variabel dengantipe data yang berbeda.
Cara Menggunakan Struktur
1. Definisi Struktur
2. Deklarasi/Inisialisasi instanStruktur
3. Mengakses Anggota dari instanStruktur
Mendefinisikan Struktur
• Proses awal dalam membuat struktur adalahmendefinisikannya menggunakan struct
• Keyword struct untuk mendefinisikan koleksivariabel dari bermacam type
• Dalam penulisan program, keyword structdiikuti oleh brace (“{ }”) dengan variabelindividual didalamnya (member)
struct hitung{
int x,y;
};
6
Latihan Definisi Struktur
Lunchbox
Definisikan struktur dg nama“Lunchbox” yg mempunyaibagian/compartments:
• fruit compartment (jumlah)
• sandwich compartment (jenis)
• drink compartment (liter)
• Struktur adalah sebuah blueprint
• Contoh:
7
Contoh Definisi Struktur
• Anggota yg ditentukan terdiri dari variabel yang berbeda dari struct
• Contoh:
struct LunchBox
{
int fruit;
float drink;
char sandwich[MAXN];
};Lunchbox
Deklarasi Variabel Struktur
• Ketika mendefinisikan struktur menggunakan struct, memory belum dialokasikan untuk struktur, sampaideklarasi variabel dibuat.
• Deklarasi variabel
TipeDataStruct NamaVariabel
• Contoh : struct hitung{
int x,y;
};
struct hitung Jumlah;
Variabel Jumlah dengan type data struct hitung
9
Variabel Struktur
• Instan Struktur: urutan actual yg berdekatandalam penyimpanan di lokasi memori
struct LunchBox kyle;
struct LunchBox stan, cartman, kenny;
struct LunchBox kids[5];
10
Inisialisasi variabel struct
struct LunchBox kyle = { 1, 370.0, “ham”};
11
struct LunchBox kids[5] =
{
{1, 370.0, “ham” },
{2, 100.0, “roast”},
{0, 0.0, “muffin”},
{1, 300.0, “salad”},
{0, 0.0, “”}
};
0 1 2 3 4
Inisialisasi variabel struct
Mengakses Struktur Member
• Akses pada member memudahkan dalam inisialisasi nilai
• Prosedurnya adalah nama variable instan struktur diikutioleh operator dot ( . ) dan nama member
• Contoh :
struct hitung{
int x;
int y;
};
struct hitung Jumlah;
Jumlah.x=10;
Jumlah.y=20;
13
Anggota variabel struct
struct LunchBox stan, kenny;
stan.drink = 0.0;
stan.fruit = 0;
strcpy(stan.sandwich,“fruit cake”);
kenny.fruit = 1;
strcpy(kenny.sandwich, “muffin”);
kenny.drink = 300.0;
14
Anggota variabel struct
struct LunchBox kids[3];
int index = 1;
kids[0].drink = 370.0;
kids[0].fruit = 1;
strcpy(kids[2].sandwich, “ham”);
kids[index].fruit = 2;
0
1
2
15
Input/Output struct
• Library functions printf() dan scanf() tidak memilikiformat conversion specifiers untuk struct
• Input/Output hanya untuk anggota saja
struct LunchBox cartman;
scanf(“%d”, &(cartman.fruit));
scanf(“%f”, &(cartman.drink));
scanf(“%s”, cartman.sandwich);
printf(“%d, %f\n”,
cartman.fruit, cartman.drink);
printf(“%s\n”, cartman.sandwich);
16
Input/Output dr struct
struct LunchBox kids[3];
int i = 0;
for (i=0; i < 3; i++)
{
scanf(“%d %f %s”,
&(kids[i].fruit),&(kids[i].drink),
kids[i].sandwich);
}
for (i=0; i < 3; i++)
{
printf(“%d, %f, %s\n”,
kids[i].fruit, kids[i].drink,
kids[i].sandwich);
}
0
1
2
Catatan Struct
• Kesalahan Umum
struct hitung{
int x,y;
};
Semicolon disini
jangan lupa
18
Catatan struct
• Inisialisasi vs. Assignment
struct StudentRec studA = {“Fermat”, 90};
struct StudentRec studA;
studA = {“Fermat”, 90};
19
Catatan struct
• Var struct tidak dapat di bandingkan
• Kita hanya dapat membandingkan anggotanya saja
if (studA == studB)
{
printf(“Duplikasi data.\n”);
}
if (strcmp(studA.lastname, studB.lastname) == 0
&& (studA.Nilai == studB.Nilai) )
{
printf(“Duplikasi data.\n”);
}
20
Catatan struct
struct StudentRec
{
char lastname[MAXLEN];
float Nilai;
} studA, studB, class[MAXN];
• Kita dapat mendefinisikan struct, dan mendeklarasikan instan utk struktur tsb
Instan
Typedef
• Statement typedef membuat identifer sama
dengan tipe yg ditentukan
• Dalam deklarasi variable dari sebuah structure, harus menyertakan keyword struct.
• Typedef merupakan alternative dalam deklarasivariable tanpa harus menyertakan struct
struct hitung{
int x,y;
};
struct hitung Jumlah;
struct hitung Kali;
struct hitung{
int x,y;
};
typedef struct hitung operasi;
operasi Jumlah;
operasi Kali;
Prosedur Penggunaan Typedef
• Letakkan typedef pada awal definisi structure
• Pada akhir definisi structure, letakkan nama alias untuk melengkapi pendefinisian menggunakantypedef
typedef struct hitung operasi
Definisi structure Nama aliastypedef
type data operasi
Array of Structure
• Proses pembuatan dan kerja array of structure prinsipnya sama dengan kerja array yang didalamnya terdapat tipe data seperti integer, character, float
• Proses pembuatan array of structure menentukanjumlah elemen array yang diletakkan setelahdefinisi structure
• Contoh : typedef struct pekerja{
int id;
char nama[20];
}emp;
emp data[2];
Contoh
typedef struct pekerja{
int id;
char nama[20];
}emp;
main(){
emp data[2];
strcpy(data[0].nama, “Maxidena”);
data[0].id = 0001;
strcpy(data[1].nama, “Rhyne”);
data[1].id = 0002;
int x;
for(x=0;x<3;x++){
printf(“%d %c”, data[x].id,data[x].nama);
}
}
Fungsi Operator Structure
• Setelah mendeklarasikan sebuah Structure, yang tidak kalahpentingnya adalah membuat fungsi operator (fungsi untukmengoperasikan struct).
• Fungsi operator bisa dikategorikan menjadi 4 macam:• Fungsi Constructor : untuk membentuk struct
• Fungsi Selector : untuk mendapatkan nilai elemen/nilai tertentu dari struct
• Fungsi Validator : untuk memvalidasi komponen struct
• Fungsi Manipulator : untuk melakukan operasi-operasi tambahan pada struct
• Contoh:time make_time(int j, int m, int d);
int get_minutes(time waktu);
int time_valid(time waktu);
time add_time(time waktu1, time waktu2);
Fungsi Operator Structure
void print_time(time waktu){
printf("%d:%d:%d\n",
waktu.j, waktu.m, waktu.d);
}
int time_valid(time waktu){
return ((waktu.j < 24) && waktu.j > 0) &&
(waktu.m < 60) && waktu.m > 0) &&
(waktu.d < 60) && waktu.d > 0))
}
time make_time(int j,int m,int d)
{
time waktu;
waktu.j = j;
waktu.m = m;
waktu.d = d;
if(time_valid(waktu)){
return waktu;
} else {
return make_time(0, 0, 0);
}
}
int time_to_seconds(time waktu){
return (waktu.j * 3600) +
(waktu.m * 60) + waktu.d;
}
int get_minutes(time waktu){
return waktu.m;
}
Structure & Functions
• Melewatkan sebuah struktur untukmenjadi parameter sebuah fungsi dapatdilakukan sama dengan pengirimanparameter berupa variabel biasa.
• Pengiriman dapat dilakukan baik secaranilai (pass by value) maupun secara acuan(pass by reference).
28
Mengirim struct ke Function
• Seperti biasa, parameter formal di copy ke aktual parameter
void printRecord ( Student item )
{
printf("Nama: %s\n", item.lastname);
printf(“Nilai: %.1f\n\n", item.Nilai);
}
main()
{
Student studentA = {“Gauss”, 99.0};
printRecord(studentA);
}
29
Function yg mengembalikansuatu struct
• “paket” yg berisi beberapa nilai
main()
{
Student studentA;
studentA = readRecord();
}
Student readRecord ( void )
{
Student newStudent;
printf("Masukan nama dan nilai ");
scanf("%s %f",
newStudent.lastname,&(newStudent.Nilai));
return newStudent;
} Version 1
30
Function yg mengembalikan suatu struct
Student readRecord ( Student newStudent )
{
printf("Masukan nama dan nilai ");
scanf("%s %f",
newStudent.lastname,&(newStudent.Nilai));
return newStudent;
}
main()
{
Student studentA;
studentA = readRecord(studentA);
}
Version 2
• “paket” yg berisi beberapa nilai
Pointer & Structure
• Sama seperti fungsi pointer umumnya, penggunaan pointer pada structure digunakanuntuk mengakses alamat yang ada padastructure
• Pointer pdata menyimpan alamat dari jumlah
hitung jumlah={10,20,30};
pdata = &jumlah;
32
int main()
{
Student studentA;
studentA = readRecord(studentA);
return 0;
}
Student readRecord ( Student newStudent )
{
printf("Masukan nama dan nilai: ");
scanf("%s %f", newStudent.lastname,
&(newStudent.Nilai) );
return newStudent;
}
Mengirim variabel struct
Mengirim seluruhelemen struct
33
Bagaimanajika structbesar ?
Mengirim variabel struct
Student readRecord ( Student newStudent )
{
printf("Masukan nama dan nilai: ");
scanf("%s %f", newStudent.lastname,
&(newStudent.Nilai) );
return newStudent;
}
int main()
{
Student studentA;
studentA = readRecord(StudentA);
return 0;
}
34
Mengirim pointer struct
Mengirim pointerke variabel struct !
lastname:
Nilai:
studentA:
studentPtr:
35
void readRecord ( Student *studentPtr )
{
/* De-reference pointer disini. */
}
int main()
{
Student studentA;
readRecord( &(studentA) );
return 0;
}
Mengirim pointer struct
lastname:
Nilai:
studentA:
studentPtr:
lastname:
36
utk de-reference pointer kestruct variable:
Style 1: Pakai operator *
void readRecord ( Student *studentPtr )
{
printf("Masukan nama dan nilai: ");
scanf("%s %f", (*studentPtr).lastname,
&((*studentPtr).Nilai) );}
Nilais4b.c
Mengirim pointer struct
studentPtr:
Nilai:
studentA:
lastname:
37
utk de-reference pointer ke struct
variable:
Style 2: Pakai operator ->
void readRecord ( Student *studentPtr )
{
printf("Masukan nama dan nilai: ");
scanf("%s %f", studentPtr->lastname,
&(studentPtr->Nilai) );
}
Nilais4c.c
Mengirim pointer struct
studentPtr:
Nilai:
studentA:
lastname:
Contoh
typedef struct pekerja{
int id;
char nama[20];
}emp;
main(){
emp data={0,0};
emp *pdata; //create a pointer of structure type
pdata=&data; //assign address to pointer of structure type
strcpy(pdata->nama, “Maxidena”);
pdata->id = 0001;
printf(“%d %s”, pdata->id,pdata->nama)
}
Operator ->
digunakan untuk
mengakses member
dalam structure
39
Structs Dalam Structs
• Struct dapat menjadi anggota struct lainnya
• Contoh:
– Student record berisi Nama, Nilai (ID Number, alamat dll)
– Daftar Class adalah kumpulan record student (jumlah students, subject code, dll)
– Departmental database adalah kumpulan daftarkelas (department name, jumlah subjects, dsb)
40
Contoh: Student Record
lastname:
Nilai:
struct StudentRec
{
char lastname[MAXLEN];
float Nilai;
};
typedef struct StudentRec Student;
41
class:
lastname:
Nilai:
lastname:
Nilai:
lastname:
Nilai:
Student class[MAXN];
struct StudentRec
{
char lastname[MAXLEN];
float Nilai;
};
typedef struct StudentRec Student;
Contoh: Class Record
42
Informasi yg diperlukan utk mengeloladaftar kelas:• Jumlah students dalam kelas
(<= MAXN)• Subject code
class:
lastname:
Nilai:
lastname:
Nilai:
lastname:
Nilai:
Student class[MAXN];
Contoh: Class Record (lanj)
43
Informasi yg diperlukan utkmengelola daftar kelas:• Jumlah students dalam kelas
(<= MAXN)• Subject code
char subjCode[MAXLEN];
int count;
Student class[MAXN];
count:
class:
lastname:
Nilai:
lastname:
Nilai:
lastname:
Nilai:
subjCode:
Contoh: Class Record (lanj)
44
struct ClassRec
{
char subjCode[MAXLEN];
int count;
Student class[MAXN];
};
typedef struct ClassRec ClassList;
Contoh: Class Record (lanj)
count:
class:
lastname:
Nilai:
lastname:
Nilai:
lastname:
Nilai:
subjCode:“Encapsulates” data
yg diperlukan utk
mengelola daftar
kelas
45
ClassList subject[MAXSUBJ];
Contoh: Department Database
subject:
46
char deptName[MAXLEN];
int count;
ClassList subject[MAXSUBJ];
Contoh: Department Database (lanj)
subject:
deptName:
count:
47
Contoh: Department Database (lanj)
subject:
deptName:
count:
struct DatabaseRec
{
char deptName[MAXLEN];
int count;
ClassList subject[MAXSUBJ];
};
typedef struct DatabaseRec Database;
“Encapsulates” data
yg diperlukan utk
mengelola daftar
kelas
48
Mengakses anggota struct
subject:
deptName:
count:
Bagaiman memasukan nilai 97.5 disana?
Database
finalNilais;
Misal kita deklarasikan
var struct :
49
Mengakses anggota struct
finalNilais
subject:
deptName:
count:
finalNilais:
50
Mengakses anggota struct
finalNilais.subject[1]
subject:
deptName:
count:
finalNilais:
51
Mengakses anggota struct
finalNilais.subject[1].class[0]
subject:
deptName:
count:
finalNilais:
52
Mengakses anggota struct
finalNilais.subject[1].class[0].Nilai = 97.5;
subject:
deptName:
count:
finalNilais:
Terimakasih