Structures Data structures Struct merupakan suatu struktur data yang menggabungkan beberapa data dengan berbagai tipe data yang memiliki ukuran yang berbeda (heterogen) di kelompokan dalam satu deklarasi unik dan saling berkaitan, dengan format sbb : struct model_name { type1 element1; type2 element2; type3 element3; . . } object_name; dimana model_name adalah nama untuk model tipe stukturnya dan parameter optional object_name merupakan identifier yang valid untuk objek struktur. Diantara kurung kurawal { } berupa tipe dan sub-identifier yang mengacu ke elemen pembentuk struktur. Jika pendefinisian stuktur menyertakan parameter model_name (optional), maka parameter tersebut akan menjadi nama tipe yang valid ekuivalen dengan struktur. Contoh : struct products { char name [30]; float price; }; products apple; products orange, melon; Didefinisikan model struktur products dengan dua field : name dan price, dengan tipe yang berbeda. Kemudian tipe struktur tadi (products) digunakan untuk mendeklarasikan tiga objek : apple, orange dan melon. Ketika dideklarasikan, products menjadi nama tipe yang valid seperti tipe dasar int, char atau short dan dapat mendeklarasikan objects (variables) dari tipe tersebut. Optional field yaitu object_name dapat dituliskan pada akhir deklarasi struktur untuk secara langsung mendeklarasikan object dari tipe struktur. Contoh : struct products { char name [30]; float price; } apple, orange, melon; Sangat penting untuk membedakan antara structure model, dan structure object. model adalah type, dan object adalah variable. Kita dapat membuat banyak objects (variables) dari satu model (type). Struct dapat dideklarasikan secara bertingkat, yaitu salah satu field struct bertipe struct lainnya (nested Structure) . Selain itu struct juga dapat digabungkan dengan array, struct yang field-nya berupa array atau array yang setiap elemennya berupa structure. AP3/TI/Ayuliana,ST/2009 1 Structure sebagai parameter Structure dapat dikirim ke function sebagai parameter, jika structure ini hanya merupakan data masukan, maka dapat dikirimkan dengan call by value, tetapi bila structure yang dikirimkan akan mengalami perubahan nilai maka pengiriman parameter harus dengan call by reference dengan mengirimkan pointer to struct. Struct juga dapat menjadi return type sebuah function. Contoh struct1 (pass by reference): #include<stdio.h> #include<conio.h> struct t_hitung{ int x; int y; }; int Hitung(struct t_hitung *Nilai){ int y; y=Nilai->y*5+2; Nilai->x=25; return y; } int main(){ struct t_hitung *Angka; int m; Angka->x=5, Angka->y=10; m = Hitung(Angka); printf("x= %d\ny= %d\nm= %d",Angka->x,Angka->y, m); return 0; } Contoh struct2 (array structures) : #include<stdio.h> #include<conio.h> #define X 5 struct products{ char name[30]; float price; }; int main(){ int i, j, jml; struct products Apple[X]; char temp[30]; float Harga; printf("Berapa jenis apel [Max %d]: ", X); scanf("%d", &jml); for(i=0;i<jml;i++){ printf("Masukkan nama buah ke-%d: ", i+1); flushall();gets(temp);strcpy(Apple[i].name, temp); printf("Masukkan harga buah : "); scanf("%f", &Harga);Apple[i].price=Harga; } printf("\n\nHasil :\n"); for(j=0;j<jml;j++) printf("%s Rp %.2f\n",Apple[j].name, Apple[j].price); return 0; } AP3/TI/Ayuliana,ST/2009 2 Operasi File File adalah sebuah organisasi dari sejumlah record. Masing-masing record bisa terdiri dari satu atau beberapa field. Setiap field terdiri dari satu atau beberapa byte. MEMBUKA FILE Untuk membuka atau mengaktifkan file, fungsi yang digunakan adalah fungsi fopen(). File dapat berupa file biner atau file teks. File biner adalah file yang pola penyimpanan di dalam disk dalam bentuk biner, yaitu seperti bentuk pada memori (RAM) computer. File teks adalah file yang pola penyimpanan datanya dalam bentuk karakter. Penambahan yang perlu dilakukan untuk menentukan mode teks atau biner adalah “t” untuk file teks dan “b” untuk file biner. Prototype fungsi fopen() ada di header fungsi “stdio.h” Bentuk umum : file *fopen(char *namafile, char *mode); Keterangan : ♦ namafile adalah nama dari file yang akan dibuka/diaktifkan. ♦ mode adalah jenis operasi file yang akan dilakukan terhadap file. Jenis-jenis operasi file : ♦r : menyarakan file hanya dapat dibaca (file harus sudah ada) ♦w : menyatakan file baru akan dibuat/diciptakan (file yang sudah ada akan dihapus) ♦a : untuk membuka file yang sudah ada dan akan dilakukan proses penambahan data (jika file belum ada, otomatis akan dibuat) ♦ r+ : untuk membuka file yang sudah ada dan akan dilakukan proses pembacaan dan penulisan. ♦ w+ : untuk membuka file dengan tujuan untuk pembacaan atau penulisan. Jika file sudah ada, isinya akan dihapus. ♦a+ : untuk membuka file, dengan operasi yang akan dilakukan berupa perekaman maupun pembacaan. Jika file sudah ada, isinya akan dihapus. Contoh : pf = fopen(“COBA.TXT”, “w”); MENUTUP FILE Untuk menutup file, fungsi yang digunakan adalah fclose(). Prototype fungsi fclose() ada di header file “stdio.h”. Bentuk Umum : int fclose(FILE *pf); atau int fcloseall(void); MELAKSANAKAN PROSES FILE ♦ Menulis Karakter, untuk menulis sebuah karakter, bentuk yang digunakan adalah : putc(int ch, file *fp) Dimana : fp adalah pointer file yang dihasilkan oleh fopen() dan ch adalah karakter yang akan ditulis. AP3/TI/Ayuliana,ST/2009 3 Contoh : #include “stdio.h” #include “conio.h” #define CTRL_Z 26 void main() { file *pf; /* pointer ke file */ char kar; /* ciptakan file */ if((pf = fopen(“COBA.TXT”, “w”)) == NULL){ cputs(“File tak dapat diciptakan !\r\n”); exit(1); } /* selesai */ while((kar=getche()) != CTRL_Z) putc(kar, pf); fclose(pf); } /* tulis ke file */ /* tutup file */ ♦ Membaca Karakter, untuk membaca karakter dari file, fungsi yang digunakan adalah: getc(file *fp); Dimana fp adalah pointer file yang dihasilkan oleh fopen() dan fungsi feof(), digunakan untuk mendeteksi akhir file. Pada saat membaca data foef(file *fp) Contoh : #include “stdio.h” #include “conio.h” void main(){ file *pf; char kar; /* pointer ke file */ /* buka file */ if((pf = fopen(“COBA.TXT”, “r”)) == NULL) { cputs(“File tak dapat dibuka !\r\n”); exit(1); } /* selesai */ while((kar=getc(pf)) != EOF) putch(kar); /* tampilkan ke layar */ fclose(pf); /* tutup file */ } AP3/TI/Ayuliana,ST/2009 4