Anda di halaman 1dari 12

Struktur (Structure) pada bahasa pemrograman C

Struktur (Structure) pada bahasa pemrograman C


Variabel tunggal adalah sebuah elemen tunggal dari sebuah tipe, contohnya int atau float. Array mempunyai elemen yang banyak untuk tipe yang sama. Structure memungkinkan variabel-variabel dengan elemen-elemen (dikenal sebagai member) dari lebih dari satu tipe untuk dibuat. Contoh: Misalkan kita ingin mencatat nama orang (nama keluarga), umur (dalam tahun), dan tingginya (dalam meter), untuk melakukannya kita akan menyimpan: sebuah string (array dari karakter) sebuah integer (sebuah int) dan sebuah bilangan riil (float) Berikut adalah structure C untuk menyimpan data diatas: struct { char nama [12]; int umur; float tinggi; } orang_a, orang_b; Kita telah menciptakan 2 variable struktur orang_a dan orang_b yang mempunyai elemenelemen yang dibutuhkan. umur, tinggi dll dikenal sebagai member

Alternatif Deklarasi Struktur pada bahasa pemrograman C


Cara alternatif untuk mendefinisikan struktur (perhatikan kesamaan dengan cara mendefinisikan tipe enum): struct orang { char nama [12]; int umur;

float tinggi; }; Disini sebuah tag orang telah dideklarasikan untuk struktur ini yang dapat digunakan seperti nama tipe, jadi untuk mendeklarasikan variable dengan struktur ini pada setiap saat: struct orang orang_a, orang_b;

Alternatif Deklarasi Struktur pada bahasa pemrograman C


CATATAN: kita menggunakan kata kunci struct diikuti dengan tag yang kita definisikan sebelumnya (orang pada kasus ini) dan kemudian variabel sebanyak yang kita inginikan dari struktur tsb. dipisahkan dengan koma. Dengan metode tag, kita dapat terus mendefiniskan struktur lebih lanjut dengan pengaturan yang sama kapan saja yang kita inginkan, jika tag ini dapat dilihat (dengan aturan lingkup yang biasanya)

Mengakses Member Struktur pada bahasa pemrograman C


Struktur dapat dikirimkan sebagai parameter fungsi dan digunakan sebagai nilai return fungsi: struct orang cek_tinggi (struct orang x) { if(x.tinggi > 2.0) { printf(Terlalu tinggi!); x.tinggi = 0; } return (x); }

Array dari Struktur pada bahasa pemrograman C


Kita sudah lihat bahwa array dapat digunakan sebagai member dari sebuah struktur, struktur sendiri dapat menjadi elemen dari array: struct orang banyak_orang[10]; Mendefinisikan sebuah array 10 elemen dari struktur ber-tag orang, anda dapat mengakses elemen individu

sbb: banyak_orang[2].umur = 32; Mengakses member umur pada struktur ketiga dari array struktur bernama banyak_orang

Inisialisasi Struktur pada bahasa pemrograman C


Inisialisasi dapat dilakukan hanya dengan: struct orang baru = {Peter, 38, 1.78}; Berarti: baru.nama berisi Peter baru.umur berisi 38 baru.tinggi berisi 1.78 Catatan: urutannya sesuai dengan urutan dimana member dari struktur yang terdefinisi

Definisi Tipe (Type Definition) pada bahasa pemrograman C


Cara lain mendefinisikan struktur typedef struct { char nama [12]; int umur; float tinggi; } orang; Kemudian gunakan tipe baru orang ini seperti tipe lain untuk membuat variabel dari tipe baru ini: orang orang_a, orang_b; Dimana orang sekarang tipe yang merepresentasikan struktur dan jadi orang_a dan orang_b adalah variabel dengan tipe struktur diatas. typedef dapat digunakan untuk mendefinisikan semua jenis nama tipe baru, disini mendefinisikan tipe float baru: typedef float rupiah, hari_gajian [5]; Kemudian kita bisa mendeklarasikan variabel menggunakan nama ini: rupiah gaji_dia; hari_gajian gaji_kerjaan1, gaji_kerjaan2; typedef meningkatkan kemampuan baca dan membuat mudah perubahan global (misalnya

membuat semua penggunaan rupiah dengan double bukan float), hanya mengubah typedef!

Penyimpanan Variabel pada bahasa pemrograman C


Ketika kita mendeklarasikan variabel dalam sebuah program, kompiler menyediakan ruangan (space) yang besarnya sesuai untuk tipe variabel itu. Ketika program run, variabel itu dialokasikan sebuah lokasi spesifik di dalam memory komputer: Jadi jika kita menulis: int a; kita mendeklarasikan sebuah variabel integer yang disebut a. Ketika statemen C ini dikompile di PC, sebuah space memory dengan besar yang sesuai akan dialokasikan untuk memegang sesuatu dengan ukuran int.

Menemukan Alamat (Address) pada bahasa pemrograman C


Bukan hal yang mudah untuk memperkirakan di mana di dalam memory variabel tertentu akan ditempatkan: C adalah bahasa pemrograman yang portabel, berarti sebuah program yang ditulis di C dapat dikompile (dengan kompiler yang sesuai) untuk berjalan di system komputer yang berbeda (PC, SUN, Main Frame, dll) masing-masing dengan struktur memory yang sangat berbeda. Pada saat tertentu ketika sebuah program berjalan, tempat yang sebenarnya dalam memory dimana operating system mengalokasikan untuk variabel mungkin bervariasi tergantung pada apa saja yang terjadi pada komputer pada saat itu. Operator address & dalam C adalah operator tunggal (unary) yang menyediakan sarana untuk mendapatkan address pada saat waktu berjalan (run time) dari sebuah objek, jadi &a akan mengembalikan lokasi saat ini dari variabel a yang berarti memberikan address dari a. Kita telah menggunakan operator ini dengan scanf,

contohnya scanf( %c, &a); menggunakan & operator untuk memberikan fungsi scanf alamat dari tempat dimana untuk menaruh karakter yang akan diterima.

Pointer pada bahasa pemrograman C


Kita telah melihat bahwa kita dapat mendapatkan address dari sesuatu dengan operator &, C menyediakan sebuah sarana menyimpan alamat: tipe pointer. Variabel pointer adalah kontainer yang didesain untuk menyimpan alamat (address) dari sesuatu (variabel yang lain,Dll) Kita dapat mendeklarasikan variabel pointer menjadi tipe pointer yang sesuai untuk menyimpan address dari sebuah tipe tertentu dari objek C, contohnya deklarasi dibawah mendefinisikan variabel pointer yang sesuai untuk menyimpan address yang mengarah pada variabel dengan tipe yang terkait. Catatan: * di depan dari identifier pada deklarasi membuatnya pointer untuk tipe itu dan bukan variabel untuk tipe itu. int *p_to_int; float *p_to_float; int *p_to_int adalah variabel pointer yang cocok untik menyimpan alamat dari variabel integer (penggunaan istilah p_ juga membantu daya baca, tapi bukan esensial) dan variabel pointer yang lain yang cocok untuk menampung alamat dari float bernama float *p_to_float.

Mereferensi Pointer pada bahasa pemrograman C


Sekarang kita mempunyai sarana untuk mendapatkan alamat dari objek, operator & dan sarana untuk menciptakan sebuah tempat penyimpanan untuk menampung alamat itu, sebuah pointer (diciptakan dengan meletakkan sebuah * sebelum identifier pada deklarasi). Mari kita gunakan: it*it Sebuah var. data dan pointer ke int int a, p_int;

... p_int = &a;

Indirection atau DereferencingPointer pada bahasa emrograman C


Kita dapat mengakses sebuah lokasi dengan alamat yang disimpan dalam sebuah pointer. Kita gunakan operator indirection tunggal (unary) * yang berarti lokasi yang ditunjukkan oleh, contoh: int a, *p_a; ... p_a = &a; *p_a = 10; Disini kita telah mendeklarasikan sebuah variabel int a dan sebuah pointer ke int p_a. Kemudian kita meng-assign kepada pointer alamat dari variabel a dengan menggunakan operator alamat & dan mereferensi ke a dengan tidak langsung dengan pointer ini menggunakan operator indirection * dan meng-assign kepada a nilai 10 Contoh lain: int a = 20, b, *p_1; p_1 = &a; b = *p_1 * 2; p_1 = &b; a = *p_1; printf(a = %d, a); Tampilan: a = 40

Pengiriman Parameter By Reference pada bahasa pemrograman C


Parameter Aktual dikirim ke fungsi biasanya dikirim by value (jadi nilai dari variabel dikopi ke fungsi) Untuk memberikan kepada fungsi akses langsung kepada, jadi kemampuan untuk memodifikasi, beberapa variabel diluar, kita dapat menggunakan pointer sebagai parameter yang mengirim alamat (address) dari variabel kepada fungsi jadi dapat menggunakan address by reference menggunakan operator indirection untuk

mengakses variabel aktual. Perhatikan contoh berikut: void swap_int (int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; P f ldif idlhi i Parameter formal dari fungsi adalah tipe pointer ke int. jadi di dalam fungsi x dan y tersedia sebagai pointer. Statemen di dalam fungsi menggunakan operator indirection * untuk mengakses sesuatu di luar yang ditunjukkan oleh x dan y dan pada kenyataannya memanipulasinya, dalam hal ini men-swap isi keduanya!

contoh by reference pada bahasa pemrograman C


#include void swap_int (int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } int main (void) { int a = 1, b = 20; /* lokal untuk main */ swap_int (&a, &b); printf(\na = %d, b = %d, a, b); return (0); } Penjelasan Contoh Jadi main mempunyai dua variabel integer, a dan b yang diinisialisi seperti diatas. Ketika main memanggil swap_int ia mengirimkan (mengkopi) alamat dari a dan b ke swap_int (dimana mereka disimpan di pointer a & b). Maka, swap_int meng-assign nilai dari a milik main ke temp, dan meng-assign nilai dari b milik main ke a milik main, sebelum meng-assign nilai dari temp ke b milik main. Maka swap_int telah dapat memanipulasi (menswap) a & b meskipun tidak kelihatan di swap_int

karena lokal untuk main saja. Tampilan akhir a = 20, b = 1

Konvensi Dokumentasi pada bahasa pemrograman C


Menambahkan komentar pada sumber program C akan memudahkan anda dan orang lain untuk membaca dan memahami. Menggunakan sebuah template komentar fungsi adalah disiplin yang baik, dapat menyertakan detail dari tujuan (& bagaimana menggunakan), detail dari parameter dan tipe return, dan ketergantungan (fungsi lain atau variabel yang dibutuhkan) ditambah sebuah daftar revisi.

Contoh Konvensi Dokumentasi pada bahasa pemrograman C


void swap_int (int *x, int *y) /* TUJUAN: fungsi untuk men-swap dua variabel DIBUAT OLEH: AWR 06 FEB 2004 INPUT: dua pointer ke integer, digunakan dengan me-load dengan alamat dari dua variabel yang akan di-swap. RETURN: tidak mengembalikan apapun REVISI: --{ int temp; temp = *x; *x = *y; *y = temp; } Untuk membantu daya baca (readability) lebih lanjut beberapa organisasi mengadopsi kebijakan konvensi penamaan untu variabel untuk meningkatkan daya baca, contoh: Variabel lokal mempunyai nama dimulai dengan l_nama Variabel global mempunyai nama dimulai dengan g_nama Variabel pointer mempunyai nama dimulai dengan p_nama

Variable temporer (sementara) (contohnya yang digunakan untuk menghitung loop) mempunyai nama yang dimulai dengan t_nama

Contoh Konvensi Dokumentasi pada bahasa pemrograman C


void swap_int (int *p_x, int *p_y) /* TUJUAN .... REVISI: 7 FEB 04 tambahan komentar oleh AWR 8 FEB 04 nama identifier diubah oleh AWR */ { int t_temp; t_temp = *p_x; *p_x = *p_y; *p_y = t_temp; }

/*Buatlah program untuk menentukan nilai elemen minimum dari sebuah array. contoh: Terdapat sebuah array dengan nilai setiap elemennya adlah sebagai berikut : 2 4 6 8 10 Maka program yang akan Anda buat nanti akan menghasilkan output sbb= Nilai minimum = 2 Nilai Maksimum = 10 */ #include <stdio.h> #include <conio.h> #define n 20 main() {

int b,nmaks,nmin,a[n],i; printf("Masukkan nilai maksimum 10: "); scanf("%d",&b); for(i=0;i<b;i++) { printf("Bilangan ke-%d: ",i+1); scanf("%d",&a[i]); } nmin=a[0]; for(i=1;i<b;i++) { if(nmin>a[i]) nmin=a[i]; } nmaks=a[0]; for(i=1;i<b;i++) { if(nmaks<a[i]) nmaks=a[i]; } printf("Nilai minimum : %d",nmin); printf("\nNilai Maksimum : %d",nmaks); getche(); }

Fungsi SWAP pada BubbleSorting Bahasa C 09.03 Tian Issac Newton No comments

#include<stdio.h> #include<conio.h> #include<stdlib.h> void swap (int*x, int*y) { int temp; temp = *x; *x = *y; *y = temp; } void bubblesort(int list[], int n) { int i,j; for(i=0;i<(n-1);i++) for(j=0;j<(n-(i+1);j++) if(list[j]>list[j+1]) swap(&list[j],&list[j+1]); } void printlist(int list[], list n) { int i; for(i=0;i<n;i++); } main() { const int max elements =5; int list[max_elements]; int i =0; printf("Masukkan data (5 angka):\n"); for(i = 0; i<max_elements;i++) scanf("%d",&list[i]); printf("\n list sebelum di sorting\n"); printlist(list,max_elements); bubblesort(list,max_elements); printf("\nlist setelah di sorting\n"); printlist(list,max_elements); getch();

return 0; }

Anda mungkin juga menyukai