• Tidak ada hasil yang ditemukan

Struct. Tim ALPRO Teknik Informatika

N/A
N/A
Protected

Academic year: 2021

Membagikan "Struct. Tim ALPRO Teknik Informatika"

Copied!
53
0
0

Teks penuh

(1)

Struct

Tim ALPRO

(2)

Overview

• STRUCTURE

• TYPEDEF

• ARRAY OF STRUCTURE

• POINTER & STUCTURES

• STRUCTURE & FUNCTION

(3)

3

Struktur

• Kumpulan variabel yang berelasi di bawah satu

nama besar /

aggregate

dan sering digunakan

untuk mendefinisikan object – orang, tempat /

record dalam database / file

(4)

Cara Menggunakan Struktur

1. Definisi Struktur

2. Deklarasi/Inisialisasi instan

Struktur

3. Mengakses Anggota dari instan

Struktur

(5)

Mendefinisikan Struktur

• Proses awal dalam membuat structure adalah

mendefinisikannya menggunakan

struct

• Keyword struct digunakan untuk

mendefinisikan koleksi variable dari bermacam

type yang disebut structure

• Dalam penulisan program, keyword struct

diikuti oleh brace (“

{ }

”) dengan variable

individual didalamnya (

member

)

struct hitung{

int x,y;

(6)

Latihan Definisi Struktur

Lunchbox

Definisikan struktur dg nama

Lunchbox

” yg mempunyai

bagian/compartments:

fruit

compartment (jumlah)

sandwich

compartment (jenis)

drink

compartment (liter)

• Struktur adalah sebuah

blueprint

(7)

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

(8)

Deklarasi Variabel Struktur

• Ketika mendefinisikan structure menggunakan

struct, memory belum dialokasikan untuk structure,

sampai deklarasi variable dibuat

• Contoh :

struct hitung{

int x,y;

};

struct hitung Jumlah;

(9)

9

Variabel Struktur

• Instan

Struktur: urutan actual

yg berdekatan

dalam penyimpanan di lokasi memori

struct LunchBox kyle;

struct LunchBox stan, cartman, kenny;

struct LunchBox kids[5];

(10)

Inisialisasi variabel struct

(11)

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

(12)

Mengakses Struktur Member

• Akses pada member memudahkan dalam inisialisasi nilai

• Prosedurnya adalah nama variable diikuti oleh operator

dot ( . ) dan nama member

• Contoh :

struct hitung{

int x;

int y;

};

struct hitung Jumlah;

Jumlah.x=10;

(13)

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)

15

Input/Output struct

• Library functions printf() dan scanf() tidak memiliki

format 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

(17)

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;

(19)

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

(21)

Typedef

• Statement

typedef

membuat identifer sama

dengan tipe yg ditentukan

• Dalam deklarasi variable dari sebuah structure,

harus menyertakan keyword struct.

• Typedef merupakan alternative dalam deklarasi

variable 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;

(22)

Prosedur Penggunaan Typedef

• Letakkan typedef pada awal definisi structure

• Pada akhir definisi structure, letakkan nama alias

untuk melengkapi pendefinisian menggunakan

typedef

typedef

struct hitung

operasi

Definisi structure Nama alias typedef

(23)

Fungsi Operator Structure

• Setelah mendeklarasikan sebuah Structure, yang tidak kalah

pentingnya adalah membuat fungsi operator (fungsi untuk

mengoperasikan 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);

(24)

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;

(25)

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 menentukan

jumlah elemen array yang diletakkan setelah

definisi structure

• Contoh :

typedef struct pekerja{

int id;

char nama[20];

}emp;

(26)

Contoh

typedef struct pekerja{

int id;

char nama[20];

}emp;

main(){

emp data[2];

strcpy(data[0].nama, “Maxidena”);

data.id = 0001;

strcpy(data[1].nama, “Rhyne”);

data.id = 0002;

int x;

for(x=0;x<3;x++){

printf(“%d %c”, data[x].id,data[x].nama);

}

}

(27)

Structure & Functions

• Melewatkan sebuah struktur untuk

menjadi parameter sebuah fungsi dapat

dilakukan sama dengan pengiriman

parameter berupa variabel biasa.

• Pengiriman dapat dilakukan baik secara

nilai (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)

29

Function yg mengembalikan

suatu 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;

(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

(31)

Pointer & Structure

• Sama seperti fungsi pointer umumnya,

penggunaan pointer pada structure digunakan

untuk mengakses alamat yang ada pada

structure

• 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 seluruh elemen struct

(33)

33

Bagaimana

jika struct

besar ?

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 pointer

ke variabel struct !

lastname: Nilai: studentA:

studentPtr:

(35)

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 ke

struct 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)

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:

(38)

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)

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 daftar

kelas (department name, jumlah subjects, dsb)

(40)

Contoh: Student Record

lastname: Nilai:

struct StudentRec

{

char lastname[MAXLEN];

float Nilai;

};

(41)

41

class

:

lastname: Nilai: lastname: Nilai: lastname: Nilai:

Student class[MAXN];

struct StudentRec

{

char lastname[MAXLEN];

float Nilai;

};

typedef struct StudentRec

Student

;

(42)

Informasi yg diperlukan utk mengelola

daftar kelas:

• Jumlah students dalam kelas

(<= MAXN)

• Subject code

class:

lastname: Nilai: lastname: Nilai: lastname: Nilai:

Student class[MAXN];

(43)

43

Informasi yg diperlukan utk

mengelola 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

:

(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)

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)

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)

49

Mengakses anggota struct

finalNilais

subject: deptName: count:

finalNilais:

(50)

Mengakses anggota struct

finalNilais.

subject[1]

subject: deptName: count:

finalNilais:

(51)

51

Mengakses anggota struct

finalNilais.

subject[1].

list[0]

subject: deptName: count:

finalNilais:

(52)

Mengakses anggota struct

finalNilais.

subject[1].

list[0]

.Nilai

= 97.5;

subject: deptName: count:

finalNilais:

(53)

Referensi

Dokumen terkait

[r]

Pendekatan stakeholder pada Pertanggungjawaban sosial korporat merupakan misi bahwa sebuah bisnis mempunyai suatu kewajiban untuk melayani masyarakat pada umumnya dan

Ada 18 nilai untuk pengembangan pendidikan budaya dan karakter bangsa yang disusun oleh Diknas. Mulai tahun ajaran 2011, seluruh tingkat pendidikan di Indonesia harus

sehingga dengan melihat ringkasan laporan keuangan diatas, untuk sementara dapat dilihat bagaimana perusahaan menjaga likuiditasnya dari aspek pengalokasian dana pada aktiva

Rumusan pengertian perlindungan konsumen yang terdapat dalam Pasal 1 angka 1 Undang-Undang Perlindungan Konsumen tersebut cukup memadai. Kalimat yang menyatakan

For our first step, we’ll perform some transformations on the raw input data using the code from the transform.py file, shown next, in an Azure ML Execute Python Script module:.. ##

ini terjadi apabila kenaikan modal yang dimiliki oleh bank dengan presentase lebih. besar daripada kenaikan

Penelitian ini bertujuan untuk mengetahui besar penerimaan yang diperoleh dalam usaha keripik pisang gula aren pada industri Flamboyan kurun waktu 3 bulan,