Algoritma dan Pemrograman
4/13/2008
STRUCTURE Algoritma dan Pemrograman Tahar Agastani Teknik Informatika UIN - 2008
Structure • Structure pada C identik dengan Record pada Pascal • Structure merupakan kumpulan dari satu atau beberapa variabel yang mempunyai tipe sama atau berbeda (Heterogenous) • Variabel dalam structure sering disebut dengan nama komponen, field, elemen atau members. • Bentuk umum deklarasi structure pada C: struct <struct_name>{
<elemen_name1>; <elemen_name2>; } <structure_variable>;
Kuliah Minggu ke 13
1
Algoritma dan Pemrograman
4/13/2008
• Contoh: struct Mahasiswa{ char nama[20]; float ip; int semester; }; – Untuk mendefinisikan variabel X dengan tipe struct Mahasiswa adalah sbb: struct Mahasiswa X;
• Satu atau beberapa variabel dapat juga didefinisikan pada saat structure tersebut dideklarasikan. – Contoh: X dan Y adalah variabel bertipe struct Mahasiswa
struct Mahasiswa{ char nama[20]; float ip; int semester; } X,Y; • Jika dalam program dibutuhkan satu variabel structure, maka deklarasi structure bisa tanpa nama. • Contoh: struct{ char nama[20]; float ip; int semester; } X;
Kuliah Minggu ke 13
2
Algoritma dan Pemrograman
4/13/2008
Cara Akses Field • Bentuk umum: <structure_variable>. <structure_pointer>→ • Contoh: X.semester = 4; X.ip = 3.75; Mahasiswa *ptr = &X; ptr→semester = 4; • Membaca data dari keyboard: scanf(“%d”,&X.semester); scanf(“%s”, X.nama); • Besar memori yang diperlukan oleh structure sama dengan jumlah dari memori yang diperlukan oleh setiap field-nya.
Pointer dan Structure
temp struct bookRec{ float price; char name[7]; }; typedef struct bookRec Book Book temp; scanf("%d %s", &temp.price, temp.name);
Kuliah Minggu ke 13
3
Algoritma dan Pemrograman
4/13/2008
Pointer dan Structure aPtr temp struct bookRec{ float price; char name[7]; }; typedef struct bookRec Book Mengapa diperlukan kurung? Book *aPtr; Book temp; aPtr = &temp; scanf("%d %s", &(aPtr->price), aPtr->name);
Inisialisasi Structure • Structure dapat diinisialisasi pada saat sebuah variabel didefinisikan. Contoh: struct point{ int x; int y; }; struct point maxpt = {320, 200};
Kuliah Minggu ke 13
4
Algoritma dan Pemrograman
4/13/2008
Structure dan Fungsi • Passing Structure Elements ke Fungsi Contoh: void cetak(int sem) { printf(“Semester=%d\n”,sem); } void main() { struct Mahasiswa Mhs; Mhs.semester = 4; cetak(Mhs.semester); }
•
Passing Structure ke Fungsi (by value) Contoh: void cetak(struct Mahasiswa X) { printf(“Nama=%s\n”,X.nama); printf(“IP = %f\n”,X.ip); } void main() { Mahasiswa X; cetak(X); }
Kuliah Minggu ke 13
5
Algoritma dan Pemrograman
4/13/2008
• Passing Structure ke Fungsi (by pointer) Contoh: struct DataBaseRec {
/* Structure Sangat Besar */
}; typedef struct DataBaseRec DataBase;
DataBase readNewEntry(DataBase DBase) {
/* Sejumlah kode */ return DBase; }
void printDataBase(DataBase DBase) {
/* Sejumlah kode */ }
Kuliah Minggu ke 13
6
Algoritma dan Pemrograman
4/13/2008
void readNewEntry(DataBase* (DataBase* DBasePtr) {
/* Sejumlah Kode */ }
Alamat Database
void printDataBase(const const DataBase* Database* DBasePtr) {
/* Sejumlah kode */ }
Database tidak bisa berubah dalam fungsi ini.
Catatan: Passing by pointer • Untuk memungkinkan sebuah fungsi mengakses dan mengubah sebuah objek. • Untuk structure besar bisa membuat lebih efisien. • Gunakan specifier const bila mana sebuah konstanta dibutuhkan.
Kuliah Minggu ke 13
7
Algoritma dan Pemrograman
4/13/2008
• Structure bisa menjadi return value dari suatu fungsi Contoh: struct Mahasiswa Mhs; .. struct Mahasiswa Entry(char *nama, int sem, float ip) { strcpy(Mhs.nama,nama); Mhs.semester = sem; Mhs.ip = ip; return(Mhs); }
Latihan 1.
Apa yang akan dicetak dari program berikut ini:
#include <stdio.h> struct rumah { float luas; int kamar; int lantai; char alamat[40]; }; int main(void) { struct rumah budi = {120.0, 5, 2, “Jl Ciputat 25"}; struct rumah *tanda; tanda = &budi; printf("%d %d\n", budi.kamar, tanda->lantai); printf("%s \n", budi.alamat); printf("%c %c\n", tanda->alamat[3], budi.alamat[4]); return 0; }
Kuliah Minggu ke 13
8
Algoritma dan Pemrograman
4/13/2008
Latihan 2. Buat sebuah structure template yang akan menangani nama bulan, singkatan nama bulan 3 huruf, jumlah hari dalam bulan, dan nomor bulan. 3. Definisikan sebuah array of 12 structures terurut dengan structure template di soal 1 dan beri nilai awal untuk tahun bukan kabisat. 4. Tulis sebuah fungsi yang, ketika diberi nomor bulan, mengembalikan total hari dalam tahun tersebut sampai ke dan meliputi bulan tersebut. Anggap bahwa structure template dari soal 1 dan array of structures yang sesuai dinyatakan secara eksternal.
Kuliah Minggu ke 13
9