Running Text

Selamat Nyasar di Blogku...

Kamis, 11 Februari 2010

Struct

Struktur(struct) adalah pengelompokan variabel-variabel yang bernaung dalam satu nama yang sama. Berbeda dengan array yang berisi kumpulan variabel-variabel yang bertipe sama dalam satu nama, maka suatu struktur dapat terdiri atas variabel-variabel yang berbeda tipenya dalam satu nama struktur.

Variabel-variabel yang membentuk suatu struktur, selanjutnya disebut sebagai elemen dari struktur atau field. Dengan demikian dimungkinkan suatu struktur dapat berisi elemen-elemen data berbeda tipe seperti char, int, float, double, dan lain-lain. Contoh sebuah struktur adalah informasi data tanggal (date) yang berisi:

-day
-month, dan
-year

Mendefinisikan dan Mendeklarasikan Struktur
Suatu struktur didefinisikan dengan menggunakan kata kunci struct. Contoh pendefinisian sebuah tipe data struktur :

struct date 
{
int month;
int day;
int year;
};
struct date 
{
int month, day, year;
};

yang mendefinisikan sebuah tipe data struktur bernama date yang memiliki tiga buah elemen (field) berupa :
- day
- month
- year



Untuk mendeklarasikan sebuah variabel today yang bertipe struktur date pernyataan yang diperlukan adalah sebagai berikut:


Pernyataan di atas menyatakan bahwa variabel today bertipe struktur date.

Dalam mendefinisikan sebuah struktur, elemen yang terkandung di dalamnya bisa juga berupa sebuah struktur, contoh :

struct date 
{
int month, day, year;

};

struct person 
{
char name[30];

struct date birthday;

};

struct person student; //deklarasi var student


Diagram struktur data dari variabel student dapat digambarkan sbb :



Mengakses Elemen Struktur
Elemen dari suatu variabel struktur dapat diakses dengan menyebutkan nama variabel struktur diikuti dengan operator titik (‘.’) dan nama dari elemen strukturnya. Cara penulisannya sebagai berikut:

variabel_struktur.nama_field

Untuk memberikan data nama ke field name dari variabel student di atas, maka pernyataan yang diperlukan misalnya adalah :

strcpy(student.name, "MUHAMMAD IHSAN");

Pada pernyataan di atas, student.name dapat dibaca sebagai "field name dari student". Contoh berikut merupakan instruksi untuk mengisikan data pada field birthday :

student.birthday.day = 10;

Sedangkan untuk mendapatkan isi suatu field dari variabel struktur, contohnya :

  • tgl = student.birthday.day;
  • puts(student.name);

Contoh pertama merupakan instruksi untuk memberikan isi dari field day ke variabel tgl. Sedangkan contoh kedua merupakan instruksi untuk menampilkan isi dari field name.

Menginisialisasi Struktur
Sebuah struktur juga bisa diinisialisasi pada saat dideklarasikan. Hal ini serupa dengan inisialisasi array, yaitu elemen-elemennya dituliskan di dalam sepasang kurung kurawal (‘{ }‘) dengan masing-masing dipisahkan dengan koma. Deklarasi struktur didahului dengan kata kunci static, contoh:

static struct zodiak bintang =
{"Sagitarius", 22, 11, 21, 12};

Aplikasi Perpustakaan Sederhana

Program ini adalah sebuah aplikasi yang dirancang untuk mengelola data peminjaman buku mahasiswa di perpustakaan


Cara menjalankan aplikasi ini:
  1. Pilih menu dengan mengetikan nomor menu yang telah tersedia. Misalnya: ketikkan nomor “1” untuk meng-Entry Data (Mahasiswa & Buku) kemudian tekan enter.
  2. Masukkan data-data yang diminta seperti NRP mahasiswa, Nama Mahasiswa, Jumlah buku, dan Kode buku kemudian tekan enter. Tekan tombol enter kembali untuk menampilkan Menu.
  3. Untuk menampilkan kembali data yang telah diisi ketikkan no “4” kemudian tekan enter
Berikut adalah Source Codenya:

#include
#include
#include
#include

typedef struct type_mhs mhs;
typedef struct type_buku buku;

struct type_mhs
{
int nrp;
char nama[20];
mhs *next;
buku *prev;
};

struct type_buku
{
int kode;
char judul[15];
buku *next;
};

mhs *head, *tail, *baru_mhs, *temp_mhs, *hapus_mhs;
buku *baru_buku, *temp_buku, *hapus_bk;
int temp = 1, valid = 1;

void allocate_mhs(mhs mahasiswa)
{
baru_mhs = (mhs *)malloc(sizeof(mhs));

if(baru_mhs==NULL)
printf("Alokasi Memory Gagal!\n");

else
{
baru_mhs = (mhs *)malloc(sizeof(mhs));
strcpy(baru_mhs->nama, mahasiswa.nama);
baru_mhs->nrp = mahasiswa.nrp;
baru_mhs->next=NULL;
baru_mhs->prev=NULL;
}
}

void allocate_buku(buku book)
{
baru_buku = (buku *)malloc(sizeof(buku));

if(baru_buku==NULL)
printf("Alokasi Memory Gagal!\n");

else
{
baru_buku = (buku *)malloc(sizeof(buku));
baru_buku->kode = book.kode;
strcpy(baru_buku->judul, book.judul);
baru_buku->next = NULL;
}
}

void sisip_awal()
{
baru_mhs->next=head;
head=baru_mhs;
}

void sisip_akhir()
{
tail->next=baru_mhs;
tail=baru_mhs;
}

void sisip_before(int x)
{
temp_mhs=head;
while(temp_mhs->next->nrp!=x)
temp_mhs=temp_mhs->next;

baru_mhs->next=temp_mhs->next;
temp_mhs->next=baru_mhs;
}

void sisip_urut()
{
if(baru_mhs->nrpnrp)
sisip_awal();

else
{
temp_mhs=head;

while(temp_mhs!=NULL)
{
if(baru_mhs->nrp==temp_mhs->nrp)
{
printf("\nNrp %d sudah ada dalam Daftar\n", temp_mhs->nrp);
temp = 0;
break;
}

else if(baru_mhs->nrpnrp)
{
sisip_before(temp_mhs->nrp);
break;
}

else
temp_mhs=temp_mhs->next;
}

if(temp_mhs==NULL)
sisip_akhir();
}
}

void free_x(mhs *x)
{
free(x);
x->next=NULL;
}

void hapus_awal()
{
temp_mhs=head;
head=temp_mhs->next;
free_x(temp_mhs);
}

void hapus_akhir()
{
temp_mhs=head;

while(temp_mhs->next!=tail)
temp_mhs=temp_mhs->next;

tail=temp_mhs;
hapus_mhs=temp_mhs->next;
temp_mhs->next=NULL;
free_x(hapus_mhs);
}

void hapus_after(int x)
{
temp_mhs=head;

while(temp_mhs->next->nrp!=x)
temp_mhs=temp_mhs->next;

hapus_mhs=temp_mhs->next;
temp_mhs->next=hapus_mhs->next;
free_x(hapus_mhs);
}

void hapus_mahasiswa(int x)
{
if(head==tail&&head->nrp==x)
{
temp_mhs=head;
free_x(temp_mhs);
head=tail=NULL;
printf("\nData kosong !!!\n");
valid = 1;
}

else if(head->nrp==x)
hapus_awal();

else
{
if(tail->nrp==x)
hapus_akhir();

else
{
hapus_mhs=head;

while(hapus_mhs!=NULL&&hapus_mhs->nrp!=x)
{
temp_mhs=hapus_mhs;
hapus_mhs=hapus_mhs->next;
}

if(hapus_mhs==NULL)
printf("\n\nNrp %d tidak ada dalam daftar !!!\n\n", x);

else
{
temp_mhs->next=hapus_mhs->next;
free_x(hapus_mhs);
}
}
}
}

void hapus_buku(int nrp)
{
int kode_bk;
char jawab;
buku *temp;
mhs *cari = head;

while(cari != NULL && cari->nrp != nrp)
{
cari = cari->next;

if(cari == NULL)
{
printf("\nNrp %d tidak ada dalam daftar !!!\n\n", nrp);
return;
}
}
hapus_bk = cari->prev;

do
{
hapus_bk = cari->prev;

printf("\tMasukkan Kode buku yang akan dihapus : ");
scanf("%d", &kode_bk);
fflush(stdin);

if(cari->prev->kode == kode_bk)
{
cari->prev = hapus_bk->next;
hapus_bk->next = NULL;
free(hapus_bk);
hapus_bk = NULL;

if(cari->prev == NULL)
{
printf("\nData Kosong !!!\n");
return;
}
else
{
printf("Lagi ? (y/t)");
scanf("%s", &jawab);
fflush(stdin);
puts("");

if(jawab == 'Y' || jawab == 'y')
continue;
else
break;
}
}

while(hapus_bk->kode != kode_bk)
{
temp = hapus_bk;
hapus_bk = hapus_bk->next;
}
temp->next = hapus_bk->next;
hapus_bk->next = NULL;
free(hapus_bk);
hapus_bk = NULL;

printf("Proses Lagi ? (y/t)");
scanf("%s", &jawab);
fflush(stdin);
puts("");
}while(jawab == 'Y' || jawab == 'y');
}

void tampil()
{
temp_mhs=head;

printf("\n****************************");
while(temp_mhs!=NULL)
{
printf("\nNrp : %d\n",temp_mhs->nrp);
printf("Nama : %s\n\n",temp_mhs->nama);
printf("============================\n");
printf("| Kode Buku | Judul Buku |\n");
temp_buku=temp_mhs->prev;
printf("----------------------------\n");

while(temp_buku!=NULL)
{
printf("|%12d|%13s|\n",temp_buku->kode,temp_buku->judul);
temp_buku=temp_buku->next;
}
printf("============================\n");

if(temp_buku==NULL)
temp_mhs=temp_mhs->next;
}
printf("****************************\n");
printf("\n");
}

void main()
{
mhs *mhs_temp;
//buku *book_temp;
mhs mahasiswa;
buku book;
int pil,n, i, nrp, ulang = 1, poin = 1, count;

printf("\t\t\t** PROGRAM PERPUSTAKAAN **\n");
printf("\t\t\t±±±±±±±±±±±±±±±±±±±±±±±±±±\n\n");

while(ulang == 1)
{
temp = 1;
printf("MENU \t : 1. Entry Data. \t 4. Tampilkan Data\n");
printf(" \t 2. Hapus Mahasiswa \t 5. Exit\n");
printf(" \t 3. Hapus Buku\n");
printf("\nInputkan pilihan : ");
scanf("%d",&pil);
fflush(stdin);

if(pil == 1)
{
while(temp == 1){
printf("\nNRP mahasiswa = ");
scanf("%d", &mahasiswa.nrp);
fflush(stdin);
printf("Nama mahasiswa = ");
gets(mahasiswa.nama);
fflush(stdin);

allocate_mhs(mahasiswa);

if(valid == 1)
{
head = tail = baru_mhs;
valid = 0;
}

else
sisip_urut(n);

if(temp == 1)
{
printf("Jumlah buku = ");
scanf("%d", &n);
fflush(stdin);

for(i=1;i<=n;i++) { count = 1; printf("\nBuku ke-%d\n", i); printf("\tKode buku = "); scanf("%d", &book.kode); fflush(stdin); printf("\tNama buku = "); gets(book.judul); fflush(stdin); if(poin == 1) { allocate_buku(book); head->prev=baru_buku;
temp_buku=baru_buku;
poin = 0;
}

else
{
allocate_buku(book);
mhs_temp = head;
//book_temp = mhs_temp->prev;

while(mhs_temp != NULL && /*book_temp*/mhs_temp->prev != NULL)
{
if(/*book_temp->kode*/mhs_temp->prev->kode == baru_buku->kode)
{
printf("\nKode buku sudah ada !!!\n");
count = 0;
break;
}
mhs_temp = mhs_temp->next;
//book_temp = book_temp->next;
}

if(count == 0)
{
i--;
continue;
}

if(i==1)
{
baru_mhs->prev=baru_buku;
temp_buku=baru_buku;
}

else
{
temp_buku->next=baru_buku;
temp_buku=temp_buku->next;
}
}
}
temp = 0;
}

else
{
temp = 1;
continue;
}
}
}

else if(pil == 2)
{
printf("\nNrp Mahasiswa yang ingin dihapus datanya : ");
scanf("%d",&nrp);
fflush(stdin);
hapus_mahasiswa(nrp);
}

else if(pil==3)
{
printf("\nNrp Mahasiswa yang ingin dihapus data bukunya : ");
scanf("%d",&nrp);
fflush(stdin);
hapus_buku(nrp);
}

else if(pil==4)
tampil();

else if(pil==5)
ulang = 0;

else
printf("Pilihan Anda salah!\n");

puts(" ");
}

}

Pointer

Konsep Dasar Pointer
Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain. Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain (yaitu obyek yang dikatakan ditunjuk oleh pointer). Sebagai contoh, px adalah variabel pointer dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi 1000. Sebagaimana diilustrasikan pada gambar di bawah ini


Variabel pointer px menunjuk ke variabel x

Mendeklarasikan Variabel Pointer
Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :

tipe *nama_variabel

dengan tipe dapat berupa sembarang tipe yang sudah dibahas pada bab-bab sebelumnya, maupun bab-bab berikutnya. Adapun nama_variabel adalah nama dari variabel pointer. Sebagai contoh :

int *px; //contoh 1
char *pch1, *pch2; //contoh 2

Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu data bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer yang menunjuk ke data bertipe char.


Ilustrasi pendeklarasian variabel pointer

Mengatur Pointer agar Menunjuk ke Variabel Lain
Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel, operator & (operator alamat, bersifat unary) bisa dipergunakan, dengan menempatkannya di depan nama variabel. Sebagai contoh, bila x dideklarasikan sebagai variabel bertipe int, maka

&x

berarti “alamat dari variabel x”. Adapun contoh pemberian alamat x ke suatu variabel
pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int) yaitu :

px = &x;

Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel x. Setelahpernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke variabel x.

Mengakses Isi Suatu Variabel Melalui Pointer
Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui pointer (pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan menggunakan operator indirection (tak langsung) berupa simbol * (bersifat unary).
Contoh penerapan operator * yaitu :

*px

yang menyatakan “isi atau nilai variabel/data yang ditunjuk oleh pointer px” . Sebagai contoh jika y bertipe int, maka sesudah dua pernyataan berikut

px = &x;
y = *px;

y akan berisi nilai yang sama dengan nilai x.
Kedua pernyataan di atas

px = &x;
y = *px;

sebenarnya dapat digantikan dengan sebuah pernyataan berupa

y = x;

Seandainya pada program di atas tidak terdapat pernyataan

px = &x;

namun terdapat pernyataan

y = *px;

maka y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk ke variabel x. Hal seperti ini harap diperhatikan. Kalau program melibatkan pointer, dan pointer belum diinisialisasi, ada kemungkinan akan terjadi masalah yang dinamakan “bug” yang bisa mengakibatkan komputer tidak dapat dikendalikan (hang).

Selain itu tipe variabel pointer dan tipe data yang ditunjuk harus sejenis. Bila tidak sejenis maka akan terjadi hasil yang tidak diinginkan.

Untuk lebih jelasnya lihat gambar berikut.


Ilustrasi kesalahan yang terjadi karena tipe tidak

Array

Dalam beberapa literatur, array sering disebut (diterjemahkan) sebagai larik. Array adalah kumpulan dari nilai-nilai data bertipe sama dalam urutan tertentu yang menggunakan sebuah nama yang sama. Nilai-nilai data di suatu array disebut dengan elemen-elemen array. Letak urutan dari elemen-elemen array ditunjukkan oleh suatu subscript atau indeks.

Mendeklarasikan Array Berdimensi Satu
Suatu array berdimensi satu dideklarasikan dalam bentuk umum berupa :

tipe_data nama_var[ukuran];

dengan :
  • tipe_data : untuk me nyatakan tipe dari elemen array, misalnya int, char, float.
  • nama_var : nama variabel array
  • ukuran : untuk menyatakan jumlah maksimal elemen array.
Contoh pendeklarasian array :
float nilai_tes[5];

menyatakan bahwa array nilai_tes mengandung 5 elemen bertipe float.

Mengakses Elemen Array Berdimensi Satu
Pada C, data array akan disimpan dalam memori yang berurutan. Elemen pertama mempunyai indeks bernilai 0. Jika variabel nilai_tes dideklarasikan sebagai array dengan 5 elemen, maka elemen pertama memiliki indeks sama dengan 0, dan elemen terakhir memiliki indeks 4. Bentuk umum pengaksesan array adalah sbb :

nama_var[indeks]

sehingga, untuk array nilai_tes, maka :
nilai_tes[0] elemen pertama dari nilai_tes
nilai_tes[4] elemen ke-5 dari nilai_tes

Contoh :

nilai_tes[0] = 70;
scanf(“%f”, &nilai_tes[2]);

Contoh pertama merupakan pemberian nilai 70 ke nilai_tes[0]. Sedangkan contoh 2 merupakan perintah untuk membaca data bilangan dari keyboard dan diberikan ke nilai_tes[2]. Pada contoh 2 ini

&nilai_tes[2]

berarti “alamat dari nilai_tes[2]”. Perlu diingat bahwa scanf() memerlukan argumen berupa alamat dari variabel yang digunakan untuk menyimpan nilai masukan.
Selengkapnya perhatikan contoh program di bawah ini.

Inisialisasi Array Berdimensi Satu
Sebuah array dapat diinisialisasi sekaligus pada saat dideklarasikan. Untuk mendeklarasikan array, nilai-nilai yang diinisialisasikan dituliskan di antara kurung kurawal ({}) yang dipisahkan dengan koma.

int jum_hari[12] =
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

Beberapa Variasi dalam Mendeklarasikan Array
Ada beberapa variasi cara mendeklarasikan sebuah array (dalam hal ini yang berdimensi satu), di antaranya adalah sebagai berikut :

  • int numbers[10];
  • int numbers[10] = {34, 27, 16};
  • int numbers[] = {2, -3, 45, 79, -14, 5, 9, 28, -1, 0};
  • char text[] = "Welcome to New Zealand.";
  • float radix[12] = {134.362, 1913.248};
  • double radians[1000];

String

Konstanta dan Variabel String
String merupakan bentuk data yang biasa dipakai dalam bahasa pemrograman untuk keperluan menampung dan memanipulasi data teks, misalnya untuk menampung (menyimpan) suatu kalimat. Pada bahasa C, string bukanlah merupakan tipe data tersendiri, melainkan hanyalah kumpulan dari nilai-nilai karakter yang berurutan dalam bentuk array berdimensi satu.

Konstanta String

Suatu konstanta string ditulis dengan diawali dan diakhiri tanda petik ganda, misalnya:
“ABCDE”
Nilai string ini disimpan dalam memori secara berurutan dengan komposisi sebagai
berikut:


Komposisi penyimpanan string dalam memori

Setiap karakter akan menempati me mori sebesar 1 byte. Byte terakhir otomatis
akan berisi karakter NULL (\0). Dengan mengetahui bahwa suatu string diakhiri nilai NULL, maka akhir dari nilai suatu string akan dapat dideteksi. Sebagai sebuah array karakter, karakter pertama dari nilai string mempunyai indeks ke-0, karakter kedua mempunyai indeks ke-1, dan seterusnya.

Variabel String
Variabel string adalah variabel yang dipakai utuk menyimpan nilai string.
Misalnya :

char name[15];

merupakan instruksi untuk mendeklarasikan variabel string dengan panjang maksimal 15
karakter (termasuk karakter NULL). Deklarasi tersebut sebenarnya tidak lain merupakan deklarasi array bertipe char.

Inisialisasi String
Suatu variabel string dapat diinisialisasi seperti halnya array yang lain. Namun tentu saja elemen terakhirnya haruslah berupa karakter NULL. Sebagai contoh :

char name[ ] = {'R','I','N', 'I',’\0’};


yang menyatakan bahwa name adalah variabel string dengan nilai awal berupa string :
“RINI” . Bentuk inisialisasi yang lebih singkat :

char name[ ] = “RINI”;


Pada bentuk ini, karakter NULL tidak perlu ditulis. Secara implisit akan disisipkan oleh
kompiler. Perlu diperhatikan, bila name dideklarasikan sebagai string, penugasan (assignment) suatu string ke variabel string seperti

name = “RINI”;

adalah tidak diperkenankan.


Memasukkan Data String
Pemasukan data string ke dalam suatu variabel biasa dilakukan dengan fungsi gets() atau scanf(). Bentuk umum pemakaiannya adalah sebagai berikut :

#include


gets(nama_array);


atau


#include


scanf(“%s”, nama_array);


Perhatikan :
  • nama_array adalah variabel bertipe array of char yang akan digunakan untuk menyimpan string masukan.
  • Di depan nama_array tidak perlu ada operator & (operator alamat), karena nama_array tanpa kurung siku sudah menyatakan alamat yang ditempati oleh elemen pertama dari array tsb.
  • Kalau memakai scanf(), data string masukan tidak boleh mengandung spasi.

Perlu diketahui, fungsi gets() akan membaca seluruh karakter yang diketik melalui
keyboard sampai tombol ENTER ditekan. Dalam hal ini tidak ada pengecekan terhadap batasan panjang array yang merupakan argumennya. Jika string yang dimasukkan melebihi ukuran array, maka sisa string (panjang string masukan dikurangi ukuran array plus karakter NULL) akan ditempatkan di lokasi sesudah bagian akhir dari array tersebut. Tentu saja kejadian seperti ini bisa menimbulkan hal yang tidak diinginkan, misalnya berubahnya isi variabel yang dideklarasikan sesudah array tersebut karena tertumpuki oleh string yang dimasukkan (overwrite), atau perilaku program yang sama sekali berbeda dengan kemauan user yang dalam hal ini pelacakan kesalahannya (debugging) sangat sulit dilakukan, atau bahkan terjadi penghentian program secara tidak normal.
Untuk mengatasi hal itu, disarankan untuk menggunakan fungsi fgets() untuk menggantikan fungsi gets() dalam memasukkan data string. Bentuk umum pemakaian fgets() adalah :

#include


fgets(nama_array, sizeof nama_array, stdin);


Menampilkan Isi Variabel String

Untuk menampilkan isi variabel string, fungsi yang digunakan adalah puts() atau printf(). Bentuk umum pemakaiannya adalah sebagai berikut :

#include


puts(var_string);


atau


printf("%s",var_string);


Dalam hal ini var_string adalah sebuah variabel yang berupa sebuah array of char.
Fungsi puts() akan menampilkan isi dari var_string dan secara otomatis menambahkan karakter '\n' di akhir string. Sedangkan fungsi printf() akan menampilkan isi variabel string tanpa memberikan tambahan '\n'. Sehingga, agar kedua pernyataan di atas memberikan keluaran yang sama, maka pada pernyataan printf() dirubah menjadi :

printf("%s\n", var_string);

Looping

Perulangan yang sudah diketahui berapa kali akan dijalankan, sebaiknya menggunakan perulangan for. Sedangkan yang belum diketahui berapakali akan diulangi maka dapat menggunakan while atau do-while. Menggunakan pernyataan while ketika kondisi perluangan diperiksa sebelum menjalankan pernyataan dan menggunakan do_while ketika perulangan kondisi perulangan tersebut diperiksa setelah menjalankan pernyataan. Pada pernyataan while, pemeriksaan terhadap loop dilakukan di bagian awal (sebelum tubuh loop). Pernyataan while akan diulangi terus selama kondisi bernilai
benar, atau diulangi selama kondisinya benar, jika kondisinya salah maka perulangan(loop) dianggap selesai. Lebih jelasnya, bentuk pernyataan while adalah sebagai berikut :

while (kondisi)pernyataan;

dengan pernyataan dapat berupa pernyataan tunggal, pernyataan majemuk ataupun pernyataan kosong. Dengan melihat gambar dibawah, tampak bahwa ada kemungkinan pernyataan yang merupakan tubuh loop tidak dijalankan sama sekali, yaitu kalau hasil pengujian kondisi while yang pertama kali ternyata bernilai salah.

Proses pengulangan terhadap pernyataan dijelaskan pada gambar berikut :
Diagram alir while

Rabu, 10 Februari 2010

Fungsi

Fungsi adalah suatu bagian program yang dirancang untuk melaksanakan tugas tertentu dan letaknya dipisahkan dari program yang menggunakannya. Elemen utama dari program bahasa C berupa fungsi-fungsi, dalam hal ini program dari bahasa C dibentuk dari kumpulan fungsi pustaka (standar) dan fungsi yang dibuat sendiri oleh pemrogram.
  • Program menjadi terstruktur, sehingga mudah dipahami dan mudah dikembangkan. Dengan memisahkan langkah-langkah detail ke satu atau lebih fungsi-fungsi, maka fungsi utama (main()) menjadi lebih pendek, jelas dan mudah dimengerti.
  • Dapat mengurangi pengulangan (duplikasi) kode. Langkah-langkah program yang sama dan dipakai berulang-ulang di program dapat dituliskan sekali saja secara terpisah dalam bentuk fungsi-fungsi. Selanjutnya bagian program yang membutuhkan langkah-langkah ini tidak perlu selalu menuliskannya, tetapi cukup memanggil fungsi-fungsi tersebut.

Dasar Fungsi
Fungsi standar C yang mengemban tugas khusus contohnya adalah :
printf(), yaitu untuk menampilkan informasi atau data ke layar.
scanf(), yaitu untuk membaca kode tombol yang diinputkan.

Pada umumnya fungsi memerlukan nilai masukan atau parameter yang disebut sebagai argumen. Nilai masukan ini akan diolah oleh fungsi. Hasil akhir fungsi berupa sebuah nilai (disebut sebagai return value atau nilai keluaran fungsi). Oleh karena itu fungsi sering digambarkan sebagai "kotak gelap" seperti ditunjukkan pada gambar dibawah ini.

Penggambaran sebagai kotak gelap di antaranya menjelaskan bahwa bagian dalam fungsi bersifat pribadi bagi fungsi. Tak ada suatu pernyataan di luar fungsi yang bisa mengakses bagian dalam fungsi, selain melalui parameter (atau variabel eksternal yang akan dibahas belakangan). Misalnya melakukan goto dari pernyataan di luar fungsi ke pernyataan dalam fungsi adalah tidak diperkenankan.

Bentuk umum dari definisi sebuah fungsi adalah sebagai berikut :

tipe-keluaran-fungsi nama-fungsi (deklarasi argumen)
{
tubuh fungsi
}

Keterangan :
tipe-keluaran-fungsi, dapat berupa salah satu tipe data C, misalnya char atau int .Kalau penentu tipe tidak disebutkan maka dianggap bertipe int (secara default).
tubuh fungsi, berisi deklarasi variabel (kalau ada) dan statemen-statemen yang akan melakukan tugas yang akan diberikan kepada fungsi yang bersangkutan. Tubuh fungsi ini ditulis di dalam tanda kurung kurawal buka dan kurung kurawal tutup. Sebuah fungsi yang sederhana bisa saja tidak mengandung parameter sama sekali dan tentu saja untuk keadaan ini deklarasi parameter juga tidak ada. Contoh :

int inisialisasi()
{
return(0);
}
inisialisasi()
{
return(0);
}

Memberikan Nilai Keluaran Fungsi
Suatu fungsi dibuat untuk maksud menyelesaikan tugas tertentu. Suatu fungsi dapat hanya melakukan suatu tugas saja tanpa memberikan suatu hasil keluaran atau melakukan suatu tugas dan kemudian memberikan hasil keluaran. Fungsi yang hanya melakukan suatu tugas saja tanpa memberikan hasil keluaran misalnya adalah fungsi untuk menampilkan hasil di layar.

Dalam tubuh fungsi, pernyataan yang digunakan untuk memberikan nilai keluaran fungsi berupa return. Sebagai contoh, pada fungsi inisialisasi() di atas terdapat pernyataan
return(0);
merupakan pernyataan untuk memberikan nilai keluaran fungsi berupa nol.

Fungsi Dengan Keluaran Bukan Integer
Untuk fungsi yang mempunyai keluaran bertipe bukan integer, maka fungsi haruslah didefiniskan dengan diawali tipe keluaran fungsinya (ditulis di depan nama fungsi). Sebagai contoh untuk menghasilkan nilai terkecil di antara dua buah nilai real, maka definisinya berupa :

float minimum(float x, float y)
{
if(x < y)
return(x);

else
return(y);
}

Perhatikan, di depan nama minimum diberikan tipe keluaran fungsi berupa float. Seluruh parameter sendiri juga didefinisikan dengan tipe float.
Khusus untuk fungsi yang dirancang tanpa memberikan nilai keluaran (melainkan hanya menjalankan suatu tugas khusus) biasa didefinisikan dengan diawali kata kunci void (di depan nama fungsi).