Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Matakuliah Tahun Versi : T0016 / Algoritma dan Pemrograman : 2007 :6 Pertemuan 17-18 Structure dan Union 1 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : • Menerapkan konsep tipe data structure untuk data majemuk non homogen (C3) 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 • Sintaks struct nama_structure { tipedata1 nama_field1; tipedata2 nama_field2; … }; • variabel structure bisa didefinisikan pada saat deklarasi structure. struct nama_structure { tipedata1 nama_field1; tipedata2 nama_field2; … } nama_variable_structure ; • Deklarasi variabel structure struct nama_structure nama_variable_structure; 5 Definisi dan Deklarasi Structure • Contoh : struct rekening { int noRek; char tipeRek; char nama[31]; long saldo; }; struct rekening nasabah1, nasabah2; ATAU 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> struct tmhs { // tipe data structure char nim[11]; char nama[26]; float ipk; }; void function1 ( ) { struct tmhs akad_mhs; // variabel structure ... } int main (){ ... struct tmhs ali, tono; ... } // variabel structure 8 Deklarasi Structure # include <stdio.h> # include <string.h> struct tmhs { // tipe data structure char nim[11]; char nama[26]; float ipk; } akad_mhs, ali, tono; // global variabel structure void function1 ( ) { ... } int main (){ ... } 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 ( ) { ... } int main (){ ... } 10 AKSES STRUCTURE Elemen (field) structure diakses dengan operator titik dari sebuah variabel structure. # include <stdio.h> # include <string.h> struct mhs { char nim[9]; char nama[26]; float ipk; }; int main (){ struct mhs lia; float wipk; scanf("%s", &lia.nim); 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> void main() { struct { int x, y; } tA, tB; float dist; Titik A : posisi x dan y ? 5 10 Titik B : posisi x dan y ? 15 15 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 Nested Structure • Contoh : 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 Inisialisasi Structure • Sintaks • 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 di isi dengan variabel structure yang lain yang nama structure nya sama. #include <stdio.h> struct employee { int id; char name[32]; }; void main(void) { struct employee info = {1,"B. Smith"}; struct employee amir = info; printf("Nama Karyawan: %s\n", amir.name); printf("ID Karyawan: %04d\n\n", amir.id); } 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; }; struct tanggal ultah[ ] = { {“Tata”, 9, 7, 1984}, {“Titi”, 7, 9, 1986}, {“Tutu”, 9, 9, 1990} }; 20 Array of Structure # include <stdio.h> # include <string.h> int main (){ struct tmhs arr[50], x; ... struct tmhs { char nim[9]; char nama[26]; float ipk; }; scanf("%s", &arr[0].nim); ... x = arr[0]; arr[0] = arr[1]; arr[1] = x; for (i = 0; i < 50; i++) { printf("%s %s %.2f", arr[i].nim, arr[i].nama, arr[i].ipk); } return 1; } 21 typedef • typedef : adalah alias (nama lain) • Digunakan untuk mempersingkat penulisan, khususnya untuk nama/identifer yang panjang. • typedef sering digunakan pada structure • Contoh: typedef struct MahasiswaBinus{ char Nama[20]; int Nim; float Ipk; }Mhs; • Pada contoh diatas Mhs adalah nama lain (alias) dari struct MahasiswaBinus, dan berfungsi sebagai tipedata baru. • Untuk mendefinisikan variabel struct dengan cara sbb Mhs ali, tono; 22 typedef #include <stdio.h> #include <conio.h> typedef struct employee { int id; char name[32]; }EMP; 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; …... }; • Tipe : hanya boleh unsigned int, signed int, atau int. 24 Bit-Field • Contoh : struct { unsigned short unsigned short unsigned short unsigned short }screen[25][80]; icon : 8; color : 4; underline : 1; blink : 1; • Pada contoh diatas, array screen berisi 2000 element, dan setiap element terdiri dari 2-byte. (14-bit memerlukan 2 byte). 25 UNION • Union digunakan untuk kongsi memory. Dengan menggunakan union suatu lokasi memori dapat ditempati oleh dua atau beberapa variabel dengan masing-masing tipe data yang berbeda. • Jumlah memori yang digunakan oleh variabel union adalah sama dengan memori terbesar diantara elemen union. 26 UNION Deklarasi tipe data union union nama_union{ tipedata1 nama_var1 ; tipedata2 nama_var2; …… } nama_var_union; Deklarasi variabel union union nama_union nama_var_union; 27 UNION # include <stdio.h> void main() { union tbil{ unsigned int di; unsigned char dc[2]; } bil_x; di = 321 dc[0] = 65 dc[1] = 1 bil_x.di = 321; 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> struct biner{ unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; }; union byte{ unsigned char ch; struct biner bit; }; 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; } Contoh program untuk mengkonversi 1 byte bilangan desimal (0-255) ke bilangan biner dengan menggunakan UNION dan BIT-FIELD 29 ENUMERATION • Enumaration adalah suatu tipe data yang jumlah datanya sudah ditentukan. Jumlah data yang terbatas ini diberi nama dengan tujuan untuk memperjelas program. • Deklarasi tipe data enumeration enum nama_tipe { konstanta1, konstanta2,… konstanta_n }nama_var; • Deklarasi variabel enumeration enum nama_tipe nama_var; 30 ENUMERATION # include <stdio.h> enum boolean {false, true}; enum boolean ujigenap(int n) { enum boolean hasiluji; if (n % 2 == 0) hasiluji = true; else hasiluji = false; Return hasiluji; } int main () { int bil; enum boolean hasil; 100 genap 37 ganjil scanf("%d", &bil); hasil = ujigenap(bil); if (hasil == true) printf("genap"); else printf("ganjil"); return 1; } 31 ENUMERATION # include <stdio.h> # include <conio.h> enum tipehari {minggu, senin, selasa, rabu, kamis, jumat, sabtu}; 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; } Untuk mempersingkat penulisan enumeration bisa digunakan typedef seperti contoh diatas. 33 Latihan • Buatlah struct sebagai berikut : – Struct Mhs berisi Nim, Nama, Alamat, Tempat, TanggalLahir – Alamat merupakan struct yang terdiri dari NamaJalan, NomorRumah, Kota, Provinsi – TanggalLahir merupakan struct yang berisi Tanggal, Bulan dan Tahun 34 Latihan • Berdasarkan soal sebelumnya, buatlah program untuk menginput data sebanyak 5 mahasiswa (menggunakan array of structure) 35 Latihan • Berdasarkan struct berikut : struct automobile { int year; char model[8]; int engine_power; float weight; }; • Buatlah aplikasi menggunakan array of structure untuk menginput 5 jenis mobil, kemudian tampilkan dalam format yang layak. 36 Latihan • Menggunakan struct berikut : struct ipkmhs { char nim[11]; char nama[30]; float ipk; }; • Buatlah program untuk menginput data 5 mahasiswa, dan tampilkan data mahasiswa ipk >= 3.0 dan ipk < 3.0 • Contoh : Mhs ipk >=3.0 : Andi Budi Candra Mhs ipk < 3.0 : Dadu Emin 37 Latihan • Buatlah sebuah struct : struct nilaimhs { char Nim[11]; char Nama [30]; char KodeMtk [5]; int sks; char grade; }; • Buat program (tanpa menggunakan array) untuk menginput struct tersebut, kemudian tampilkan nim, nama, kodemtk, sks, grade. 38 Latihan • Berdasarkan soal sebelumnya, dengan mempertimbangkan bobot grade dan sks : Grade A B C D E BobotGrade 4 3 2 1 0 • Buatlah program menggunakan array of struct untuk menginput 5 nilai matakuliah pada semester 1, kemudian tampilkan IP mahasiswa. 39 Latihan • Buat program untuk mengkonversi 4 byte bilangan unsigned integer ke bilangan heksadesimal dengan menggunakan UNION dan BIT-FIELD 40