Struktur
Struktur
1
Learning Outcomes
2
Outline Materi
Structure
• Definisi dan deklarasi structure
• Nested structure
• Inisialisasi structure
• Akses anggota structure
• Array of structure
• Array vs structure
• Bit field
• Union
3
Definisi dan Deklarasi Structure
• Structure: tipe data yang digunakan untuk
menampung sekelompok data yang berbeda
tipe, tetapi berkaitan.
• Komponen struktur disebut anggota atau
field atau elemen.
• Bersifat heterogen (karena tipe data dari
setiap field bisa berbeda).
• Structure di bahasa pemrograman lain, sering
disebut dengan record
4
Definisi dan Deklarasi Structure
• variabel structure bisa
• Sintaks
didefinisikan pada saat
struct nama_structure { deklarasi structure.
tipedata1 nama_field1;
tipedata2 nama_field2;
struct nama_structure {
…
tipedata1 nama_field1;
};
tipedata2 nama_field2;
…
} nama_variable_structure ;
struct rekening {
int noRek;
char tipeRek;
char nama[31];
long saldo;
} nasabah1, nasabah2;
6
Definisi dan Deklarasi Structure
• Contoh :
struct automobile {
int year;
char model[8];
int engine_power;
float weight;
};
struct Mahasiswa{
int Nim;
char Namal[20];
float IPK;
char JenisKelamin;
};
7
Deklarasi Structure
# include <stdio.h>
# include <string.h>
void function1 ( ) {
struct tmhs akad_mhs; // variabel structure
...
}
void function1 ( ) {
...
}
9
Deklarasi Structure
• Structure bisa tanpa nama, dan variabel
structure langsung dibuat setelah deklarasi
structure.
# include <stdio.h>
struct {
char nim[11];
char nama[26];
float ipk;
} akad_mhs, tono, ali; // global variabel structure
void function1 ( ) {
...
}
# include <stdio.h>
# include <string.h> int main (){
struct mhs lia;
struct mhs { float wipk;
char nim[9];
char nama[26]; scanf("%s", &lia.nim);
float ipk; fflush(stdin);
}; gets(lia.nama);
scanf("%f", &wipk);
lia.ipk = wipk;
printf("%s %s %.2f",
lia.nim, lia.nama, lia.ipk);
return 1;
}
11
DEKLARASI STRUCTURE LOKAL
# include <stdio.h>
# include <math.h> Titik A :
posisi x dan y ? 5 10
void main() {
struct { Titik B :
int x, y; posisi x dan y ? 15 15
} tA, tB;
float dist; Jarak A dan B = 11.18 unit
printf("Titik A : \n ");
printf("posisi x dan y ? ");
scanf("%d %d", &tA.x, &tA.y);
printf("\nTitik B : \n ");
printf("posisi x dan y ? ");
scanf("%d %d", &tB.x, &tB.y);
dist = sqrt(pow((tA.x - tB.x), 2) +
pow((tA.y - tB.y), 2));
printf("\nJarak A dan B = %.2f unit", dist);
}
12
Nested Structure
• Struktur yang salah satu anggotanya adalah
struktur lain.
• Deklarasi struktur lain dilakukan sebelum
deklarasi struktur yang memuatnya.
• Contoh :
– Struct Mhs berisi Nim, Nama, Alamat, Tanggal
Lahir
– Alamat merupakan struct yang terdiri dari Nama
Jalan, Nomor Rumah, Kota, Provinsi
– Tanggal Lahir merupakan struct yang berisi
Tanggal, Bulan dan Tahun
13
• Contoh : Nested Structure
struct Alamat {
char Jalan[40];
int NoRumah;
char Kota[20];
char Propinsi[20];
};
struct TanggalLahir{
int Tangga, Bulan, Tahun;
};
struct Mhs{
int Nim;
char Nama[20];
struct Alamat addr;
struct TanggalLahir tgllahir;
};
14
• Sintaks Inisialisasi Structure
• Struct name variabel = {nilai_1, …, nilai_m};
• Contoh
• Struct rekening nasabah1 = {1984, ‘a’, “frenzy”,
200000, 19};
15
Inisialisasi Structure
• Contoh :
#include <stdio.h>
struct employee {
int id;
char name[32];
};
void main(void)
{
struct employee info = {1,"B. Smith"};
printf("Nama Karyawan: %s\n", info.name);
printf("ID Karyawan: %04d\n\n", info.id);
}
16
Inisialisasi Structure
• Variabel structure bisa diisi dengan variabel structure yang
lain yang nama structurenya sama.
#include <stdio.h>
struct employee {
int id;
char name[32];
};
void main(void)
{
struct employee info = {1,"B. Smith"};
struct employee amir = info;
17
Array of Structure
• Tipe data struct dalam kenyataannya hanya
bisa menampung satu record saja, sedangkan
dalam aplikasi biasanya dibutuhkan record
lebih dari satu.
• Maka, dalam penggunaanya tipe data struct
biasanya digabung dengan array.
18
Array of Structure
• Contoh :
struct tanggal {
int tgl, bln, thn;
};
struct rekening {
int noRek;
char tipeRek;
char nama[31];
long saldo;
struct tanggal transAkhir;
};
//Array of structure
struct rekening nasabah[100];
19
Nilai Awal Array of Structure
struct tanggal {
char nama[31];
int tgl, bln, thn;
};
20
Array of Structure
22
typedef
#include <stdio.h>
#include <conio.h>
int main(void)
{
EMP info = {1,"B. Smith"};
printf("Nama Karyawan: %s\n", info.name);
printf("ID Karyawan: %04d\n\n", info.id);
getch();
return 0;
}
23
Bit-Field
• Sebuah struct dimana setiap field jumlah bit-nya
tertentu.
• Sintak:
struct name{
tipe field1: jumlah_bit;
…...
};
24
Bit-Field
• Contoh :
struct {
unsigned short icon : 8;
unsigned short color : 4;
unsigned short underline : 1;
unsigned short blink : 1;
}screen[25][80];
26
UNION
union nama_union{
tipedata1 nama_var1 ;
tipedata2 nama_var2;
……
} nama_var_union;
27
UNION
# include <stdio.h>
void main() {
union tbil{
unsigned int di;
unsigned char dc[2]; di = 321
} bil_x;
dc[0] = 65
bil_x.di = 321; dc[1] = 1
printf("di = %d \n", bil_x.di);
printf("dc[0] = %d \n", bil_x.dc[0]);
printf("dc[1] = %d\n", bil_x.dc[1]);
}
//asumsi size untuk tipe int = 2 byte
321= 101000001
28
UNION
#include <stdio.h> union byte{
unsigned char ch;
struct biner{ struct biner bit;
unsigned bit0:1; unsigned bit1:1; };
unsigned bit2:1; unsigned bit3:1;
unsigned bit4:1; unsigned bit5:1;
unsigned bit6:1; unsigned bit7:1;
};
int main()
{
unsigned char ch;
union byte x;
printf("masukkan bilangan (0-255): ");
scanf("%d",&ch);
x.ch=ch;
printf("%d binernya = %d%d%d%d%d%d%d%d\n",
ch,x.bit.bit7,x.bit.bit6,x.bit.bit5,x.bit.bit4,
x.bit.bit3,x.bit.bit2,x.bit.bit1,x.bit.bit0);
getch();
return 0;
}
enum nama_tipe {
konstanta1, konstanta2,… konstanta_n
}nama_var;
30
ENUMERATION
# include <stdio.h>
enum boolean {false, true};
scanf("%d", &bil);
hasil = ujigenap(bil);
if (hasil == true) printf("genap");
else printf("ganjil");
return 1;
}
31
ENUMERATION
# include <stdio.h>
# include <conio.h>
void main() {
enum tipehari hari;
clrscr();
for (hari = minggu; hari <= sabtu; hari++)
printf("%d ", hari);
...
}
0 1 2 3 4 5 6
32
ENUMERATION
#include <stdio.h>
typedef enum boolen {TRUE, FALSE} BOOL;
int main()
{
BOOL b;
b=TRUE;
if(b==TRUE) printf("b=TRUE\n");
getch();
return 0;
}
33
Latihan
34
Latihan
35
Latihan
37
Latihan
39
Latihan
• Buat program untuk mengkonversi 4 byte
bilangan unsigned integer ke bilangan
heksadesimal dengan menggunakan UNION
dan BIT-FIELD
40