Anda di halaman 1dari 36

Pertemuan ke 13: Struct

Algoritme dan Pemrograman


Informatika UPN Veteran Jakarta

@Vini Indriasari, ST, M.Sc., Ph.D


Outline
1. Membuat Struct
2. Array dari Struct
3. Struct dan Fungsi
4. Enumerasi
1

MEMBUAT STRUCT
Struct
• Kasus 1
– Misalkan anda ingin menyimpan data
sejumlah mahasiswa, yang terdiri dari
nama dan nilai. Dapatkah disimpan dalam
satu array?
– Tidak bisa, karena kedua data memiliki
tipe yang berbeda.
• Nama: string
• Nilai: float
Struct
• Kasus 2
– Misal anda memiliki suatu fungsi untuk
memasukkan data mahasiswa, terdiri dari
nama mahasiswa, tanggal lahir, dan
tempat lahir, dideklarasi sbb:
void entri_data(char nama[26], char
tgl_lahir[11], char tempat_lahir[30]);

– Apakah ketiga parameter ini dapat


dikelompokkan menjadi satu parameter?
Struct
• Beberapa variabel dengan tipe yang
berbeda dapat dikelompokkan ke
dalam satu paket menggunakan struct.
– Struct adalah kumpulan variabel, masing-
masing boleh berbeda tipe, yang dikemas
ke dalam satu nama variabel.
– Struct merupakan record data, dan
variabel-variabel di dalamnya merupakan
field pada record tsb.
Membuat Struct
Sintaks membuat struct
struct tag {
tipe field [, field, …];
 tipe field [, field, …];
} [svar1, svar2, …];

Sintaks deklarasi dan definisi variabel tipe struct


struct tag svar1 [, svar2, … ] ;
 struct tag svar = { nilai1, nilai2, … };

Struct dapat dibuat global ataupun lokal.


Membuat Struct

struct dataMhs { struct dataMhs {


char *nama; char *nama;
float nilai; float nilai;
}; } mhs1, mhs2;

Struct ini memiliki nama Struct ini sekaligus


tag dataMhs, dan mendeklarasikan variabel
memiliki dua field, yaitu bernama mhs1 dan mhs2.
nama (string) dan nilai Setiap variabel menyimpan
(float). satu record data mahasiswa.
Membuat Struct
Nama tag untuk struct adalah optional
#include <stdio.h>
struct {
char *nama;
float nilai;
} mhs1, mhs2;

Struct dapat dibuat tanpa nama tag. Jika struct tidak


memiliki nama tag, maka variabel dengan tipe struct
tersebut hanya dapat dideklarasikan dalam definisi
struct, tidak dapat dideklarasikan secara terpisah.
Membuat Struct
Membuat struct global dengan variabel lokal
#include <stdio.h>
struct dataMhs { Indah Nian 95.4
char *nama; Putri Melati 87.6
float nilai;
};

int main(){
struct dataMhs mhs1 = {"Indah Nian", 95.4};
struct dataMhs mhs2;
mhs2.nama = "Putri Melati";
mhs2.nilai = 87.6;
printf("%s %.1f\n", mhs1.nama, mhs1.nilai);
printf("%s %.1f\n", mhs2.nama, mhs2.nilai);
return 0;
}
Membuat Struct
Membuat struct global dengan variabel global
#include <stdio.h>
Indah Nian 95.4
struct {
Putri Melati 87.6
char *nama;
float nilai;
} mhs1, mhs2;

int main(){
mhs1.nama = "Indah Nian";
mhs1.nilai = 95.4;
mhs2.nama = "Putri Melati";
mhs2.nilai = 87.6;
printf("%s %.1f\n", mhs1.nama, mhs1.nilai);
printf("%s %.1f\n", mhs2.nama, mhs2.nilai);
return 0;
}
Field String
• Field bertipe string pada struct
– Dapat dideklarasi sebagai pointer
• Contoh: char *nama
• Untuk mengisinya dapat menggunakan
operator assignment (=).
– Dapat dideklarasi sebagai array
• Contoh: char alamat[40]
• Untuk mengisinya harus menyalin string ke
array tsb, dapat menggunakan fungsi strcpy();
Field String
Mengisi field string dengan strcpy()
#include <stdio.h>
#include <string.h> Indah Nian
Jl. Cemara
int main(){
Struct struct {
lokal char *nama, alamat[40];
} mhs;

mhs.nama = "Indah Nian";


strcpy(mhs.alamat, "Jl. Cemara");
puts(mhs.nama); puts(mhs.alamat);
return 0;
} String alamat berupa array,
diisi dengan strcpy()
Operator Struct
• Field pada struct dapat diakses
menggunakan dua macam operator,
tergantung pada tipe dari struct.
– Operator titik (.) untuk struct biasa.
• Contoh: mhs.nama
– Operator tanda panah (->) untuk pointer.
• Contoh: p->nama sama dengan (*p).nama
Operator Struct
Operator pada struct
#include <stdio.h>
struct dataMhs { Indah Nian 95.4
char *nama; Indah Nian 95.4
float nilai; Indah Nian 95.4
};

int main(){
struct dataMhs mhs = {"Indah Nian", 95.4};
struct dataMhs *p; p = &mhs;
printf("%s %.1f\n", mhs.nama, mhs.nilai);
printf("%s %.1f\n", p->nama, p->nilai);
printf("%s %.1f\n", (*p).nama, (*p).nilai);
return 0;
}
Membaca Data untuk Struct
• Membaca data dari keyboard
– Jika data dari keyboard dibaca dengan
fungsi gets() atau fgets(), maka untuk
memasukkan ke field string pada struct,
data ini harus disimpan ke variabel biasa,
baru dimasukkan ke field struct.
– Alternatif lainnya adalah menggunakan
scanf() untuk complex format string.
Membaca Data untuk Struct
Menggunakan gets()
#include <stdio.h>
struct dataMhs {
char *nama; Nama? Putri Melati
float nilai; Nilai? 87.6
} mhs; Putri Melati 87.6

int main(){
char x[40];
printf("Nama? "); gets(x); mhs.nama = x;
printf("Nilai? "); scanf("%f", &mhs.nilai);
printf("%s %.1f\n", mhs.nama, mhs.nilai);
return 0;
} Input nama disimpan ke x, baru
dimasukkan ke field mhs.nama.
Membaca Data untuk Struct
Menggunakan scanf() complex format string
#include <stdio.h>
int main(){
struct dataMhs { Nama? Putri Melati
char nama[50]; Nilai? 87.6
float nilai; Putri Melati 87.6
}mhs;

printf("Nama? "); scanf("%[^\n]", mhs.nama);


printf("Nilai? "); scanf("%f", &mhs.nilai);
printf("%s %.f", mhs.nama, mhs.nilai); return
0;
}
"%[^\n]" artinya scan selama bukan \n.
Hasil scan langsung diinput ke field mhs.nama
Typedef
• Kita dapat membuat nama alias untuk struct
menggunakan keyword typedef.
– Contoh: typedef struct dataMhs M;
– Sintaks ini mendefinisikan M sebagai nama alias
dari struct dataMhs.
• Dengan cara ini, deklarasi variabel struct tidak
perlu lagi menyertakan keyword struct,
melainkan cukup menggunakan nama
aliasnya.
– Contoh: M mhs = {"Indah Nian", 95.4}
Typedef
Sintaks deklarasi struct menggunakan typedef
typedef struct tag alias; typedef struct [tag] {
struct tag { tipe field [, field, …] ;
 tipe field [, field, …] ;  tipe field [, field, …] ;
tipe field [, field, …] ; } alias;
};

Sintaks deklarasi dan definisi variabel struct

alias svar = {nilai1, nilai2, … } ;


 alias svar1 [, svar2, … ] ;
Typedef
Menggunakan typedef
#include <stdio.h>
int main(){ Indah Nian 95.4
struct dataMhs {
char nama[50];
float nilai; M adalah
}; nama alias dari
typedef struct dataMhs M; struct dataMhs

M mhs = {"Indah Nian", 95.4}


printf("%s %.1f", mhs.nama, mhs.nilai);
return 0;
}
Struct Bertingkat
• Field pada struct boleh bertipe struct lain sehingga
membentuk struct bertingkat.
• Pengaksesan field struct bertingkat menggunakan
beberapa operator titik.
Struct kotak memiliki dua
typedef struct { field, yaitu kr_atas dan
int x, y; kn_bawah. Kedua field ini
} titik; bertipe struct titik.
typedef struct { kotak K;
titik kr_atas, kn_bawah; K.kr_atas.x = 5;
} kotak; K.kr_atas.y = 4;
2

ARRAY DARI STRUCT


Array dari Struct
• Array dari struct
– Misalkan anda ingin menyimpan record
sejumlah mahasiswa.
– Setiap record terdiri dari nama dan nilai.
– Maka, variabel nama dan nilai dapat
dikemas ke dalam struct, lalu anda dapat
membuat array dari struct untuk
menyimpan record sejumlah mahasiswa.
Array dari Struct
Membuat array dari struct
#include <stdio.h>
#define SIZE 3

int main(){
typedef struct {
char nama[50];
float nilai;
} M;

M A[SIZE]; A adalah
... array dari
struct M
Array dari Struct
...
int i;
for (i=0; i<SIZE; i++)
scanf("%[^;];%f", A[i].nama, &A[i].nilai);

for (i=0; i<SIZE; i++)


printf("%s %.1f", A[i].nama, A[i].nilai);
return 0;
} Indah Nian; 95.4
Putri Melati; 87.6
Elok Permai; 75
Data dibaca per baris, dengan karakter
Indah Nian 95.4
(;) sebagai pemisah nama dan nilai.
Putri Melati 87.6
Elok Permai 75.0
3

STRUCT DAN FUNGSI


Struct dan Fungsi
• Struct dan Fungsi
– Struct dapat dikirim sebagai parameter
fungsi, baik by value maupun by reference.
– Struct juga dapat menjadi nilai yang
dikembalikan fungsi.
sebagai sebagai
tipe fungsi parameter

struct abc namafungsi(struct def xyz) {


...
}
Struct dan Fungsi
#include <stdio.h> Passing by
typedef struct {
int pj, lb, tg;
value
} balok ;

int hitung_volume(balok C){


return C.pj*C.lb*C.tg;
}

int main(){
balok B = {6, 4, 5};
int V = hitung_volume(B); Volume: 120
printf("Volume: %d", V);
return 0;
}
Struct dan Fungsi
#include <stdio.h> Passing by
typedef struct {
int pj, lb, tg;
reference
} balok ;

int hitung_volume(balok *C){


return C->pj * C->lb * (*C).tg;
}

int main(){
balok B = {6, 4, 5};
int V = hitung_volume(&B); Volume: 120
printf("Volume: %d", V); return
0;
}
4

ENUMERASI
Enumerasi
• Enumerasi
– Adalah kumpulan konstanta integer yang
direpresentasi oleh identifier.
– Didefinisikan dengan keyword enum.
– Penomoran identifier pada suatu enum
selalu dimulai dari 0, kecuali ditentukan
lain, dan bertambah 1.
Enumerasi
enum bulan {JAN, FEB, MAR, APR, MEI, JUN, JUL,
AGS, SEP, OKT, NOV, DES}

Sintaks di atas membuat suatu tipe enum


bernama bulan. Identifier JAN, FEB, MAR, …, DES
diberi nomor 0, 1, 2, … 11.

Untuk memberi nomor bulan mulai dari 1


sampai 12, dapat ditulis:
enum bulan {JAN=1, FEB, MAR, APR, MEI, JUN,
JUL, AGS, SEP, OKT, NOV, DES}
Enumerasi
Apa output program berikut?
#include <stdio.h>
enum hari {MON=1, TUE, WED, THU, FRI, SAT, SUN};

int main() {
enum hari H;
const char *namaHari[] = {"", "Senin", "Selasa",
"Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"};
1 Senin
for (H=MON; H<=SUN; H++)
2 Selasa
printf("%2d %s\n", H, namaHari[H]);
3 Rabu
return 0;
4 Kamis
}
5 Jumat
6 Sabtu
7 Minggu
Latihan 1
Tulis program untuk menampilkan bingkai segi
empat yang dibentuk karakter *.

• Buat struct bernama kotak


dengan field panjang dan lebar. panjang? 8
lebar? 4
• Buat fungsi untuk menggambar ********
bintang sesuai dengan panjang * *
dan lebar kotak, dengan kotak * *
********
sebagai parameter fungsi.
Latihan 2
Tulis program untuk menghitung durasi parkir motor dalam
menit (detik diabaikan). Asumsi kendaraan masuk dan keluar
dari tempat parkir pada hari yang sama.
• Buat struct motor, dengan field no. polisi ? B 2010 KJ
no. polisi, jam masuk, jam jam masuk ? 10:0
keluar, dan durasi parkir. jam keluar ? 10:9
durasi parkir = 9
• Buat fungsi untuk menghitung
durasi parkir, dengan struct
no. polisi ? B 1945 RI
motor sebagai parameter jam masuk ? 13:30
fungsi. Gunakan passing by jam keluar ? 14:46
reference. durasi parkir = 76

Anda mungkin juga menyukai