Tipe data string (nama lain array karakter) sangat sering dipakai dalam pembuatan program, khususnya yang berkaitan dengan pengolahan data berupa kata-kata (kumpulan huruf alpha numerik). Semua bahasa pemrograman mendukung penggunaan konsep string, bahkan untuk bahasa pemrograman generasi terbaru (semisal java, delphi, VB) telah memiliki tipe data string sendiri, bukan lagi memakai array karakter. Lebih dari itu dalam konsep OOP, class string sudah dilengkapi dengan fungsi-fungsi standar yang komplit.
Dalam artikel ini saya akan membahas satu bagian kecil saja tentang string dalam bahasa C++. Kunci utama mengolah tipe data string adalah dengan memahami aturan bahwa karakter terakhir (ujung belakang) sebuah data string SELALU berisi karakter NULL (''). Aturan ini perlu kita camkan ketika akan membuat fungsi-fungsi manipulasi data string, antara lain: menghitung panjang string, menggabungkan dua buah string, mengkopi isi string, mencari data ke dalam string, memotong bagian dalam sebuah string, dst.
Contoh yang akan saya tunjukkan disini adalah program untuk menghitung panjang sebuah string. Perlu Anda ketahui bahwa sebenarnya fungsi-fungsi baku manipulasi string sebenarnya sudah difasilitasi oleh bahasa C++ dengan memakai library string.h, programmer tinggal memanggil fungsinya. Namun tujuan saya membuat contoh ini adalah lebih untuk menguatkan ketrampilan dalam coding bukan sekedar menggunakan.
Dalam library string.h sudah terdapat fungsi length() untuk mengetahui panjang sebuah string. Disini kita akan belajar membuat program yang tujuannya sama denga fungsi length() tersebut. Perhatikan source code berikut:
#include "stdio.h"
void main()
{
char namaku[30];
printf("Ketikkan Nama = "); gets(namaku);
printf("Panjang Nama Anda = ");
for(int i=0; namaku[i] != ''; i++); //loop sampai ketemu NULL
printf("%d karakter", i); //i berisi info panjang string
}
Penjelasan:
Teknik menghitung panjang string di atas adalah dengan membaca satu demi satu isi array karakternya. Selama karakter yang dibaca bukanlah karakter NULL maka i akan terus bertambah satu. Dengan demikian i-lah yang menampung info tentang jumlah karakter di dalam string. Berani mencoba? Selamat Belajar! :D
Mengenal Pointer di C++
Tipe data pointer merupakan salah satu fitur yang diberikan oleh bahasa C, sebagaimana bahasa Pascal juga mendukungnya. Berbeda dengan jenis tipe data umumnya, tipe data pointer berfungsi untuk menyimpan alamat memori sebuah data melalui variabelnya. Jadi isi sebuah variabel bertipe pointer adalah alamat, bukan nilai data. Sebagai contoh sederhana kita punya variabel pointer integer bernama px (cirinya diawali dengan simbol bintang):
int x, *px;
x = 10;
px = &x;
Pada contoh di atas, perintah x = 10 berarti mengisikan data 10 di lokasi memori milik x. Sedangkan perintah px = &x berarti mengisikan alamat variabel x ke dalam px. Jadi di dalam px berisi alamat memori (kode heksadesimal) sedangkan di dalam x berisi datanya. Lebih jelasnya kita lihat contoh berikut ini:
#include "stdio.h"
void main()
{
int *pi, *pj, k;
int data [] = {10, 20, 30}; //array integer dengan 3 elemen
pi = &data[1]; //pi menunjuk alamat data 20
pj = &data[0]; //pj menunjuk alamat data 10
k = 100;
k = k + *pi + *pj; //100 + 20 + 10 = 130
k = k + *pi; //130 + 20 = 150
k = k - *pj; //150 - 10 = 140
k++; //140 + 1 = 141
k = k + *(pj + 1); //141 + 20 = 161
for(int i=0; i<=5; i++) //menampilkan isi memori di sekitar pj
{
printf("Isi pj = %d di alamat %p\n", *(pj+i), (pj+i));
}
k = k - *(pi - 1); //161 - 10 = 151
printf("K = %d\n", k);
}
Silahkan dicoba di rumah. Any question? Selamat belajar :)
int x, *px;
x = 10;
px = &x;
Pada contoh di atas, perintah x = 10 berarti mengisikan data 10 di lokasi memori milik x. Sedangkan perintah px = &x berarti mengisikan alamat variabel x ke dalam px. Jadi di dalam px berisi alamat memori (kode heksadesimal) sedangkan di dalam x berisi datanya. Lebih jelasnya kita lihat contoh berikut ini:
#include "stdio.h"
void main()
{
int *pi, *pj, k;
int data [] = {10, 20, 30}; //array integer dengan 3 elemen
pi = &data[1]; //pi menunjuk alamat data 20
pj = &data[0]; //pj menunjuk alamat data 10
k = 100;
k = k + *pi + *pj; //100 + 20 + 10 = 130
k = k + *pi; //130 + 20 = 150
k = k - *pj; //150 - 10 = 140
k++; //140 + 1 = 141
k = k + *(pj + 1); //141 + 20 = 161
for(int i=0; i<=5; i++) //menampilkan isi memori di sekitar pj
{
printf("Isi pj = %d di alamat %p\n", *(pj+i), (pj+i));
}
k = k - *(pi - 1); //161 - 10 = 151
printf("K = %d\n", k);
}
Silahkan dicoba di rumah. Any question? Selamat belajar :)
Tipe Data Struct (Structure) dalam Bahasa C
Manfaat tipe data struct secara umum adalah untuk menyimpan paket (sekumpulan) data ke dalam satu buah nama variabel saja. Kumpulan data tersebut diikat sedemikian rupa menjadi satu. Kumpulan data di dalam sebuah struct bisa mempunyai tipe data dasar yang beraneka ragam. Kumpulan data dalam sebuah struct sangat dianjurkan membentuk sebuah kesatuan makna berkaitan dengan nama struct-nya. Misal, jika struct-nya bernama segitiga maka isi struct-nya antara lain: alas, tinggi, luas dan keliling. Konsep yang lebih lanjut dapat juga dalam sebuah struct terdapat struct lagi (nested struct). Contoh deklarasinya sbb:
struct mhs {
int NPM;
char nama[20];
float IPK;
} data[20];
Contoh di atas menunjukkan bahwa dibuat struct bernama "mhs" dengan isian data NPM, nama dan IPK. Sedangkan nama variabelnya adalah data. Dalam kasus tsb variabel data dibuat berupa array dengan ukuran 20. Artinya kita akan membuat array untuk menampung data struct mhs sebanyak 20. Konsep struct seringkali dikaitkan dengan array karena logikanya penyimpanan data itu tidak cukup satu item saja, tetapi lebih dari itu.
Contoh Program Sederhana:
Dalam operasi struct yang umum digunakan adalah: penambahan data, penampilan data, pencarian data, edit serta hapus data. Berikut ini contoh sederhananya yang saya sarankan untuk dimodifikasi dengan menambahkan menu program yang bisa diulang-ulang. Selamat mencoba :D
#include "stdio.h"
struct mhs
{ int npm;
float ipk;
int terhapus; //untuk menyimpan status data. bernilai 0 jika masih ada, dan 1 jika sdh dihapus
}data[3]; //array of struct dengan 3 elemen
void main()
{ int i, cari, ketemu;
printf("Isikan data\n");
for(i=0;i<3;i++)
{ printf("NPM = "); scanf("%d", &data[i].npm);
printf("IPK = "); scanf("%f", &data[i].ipk);
data[i].terhapus = 0;
};
printf("Isi data\n"); //menampilkan data
for(i=0;i<3;i++)
{ if (data[i].terhapus == 0) //tampilkan data yg belum terhapus
printf("NPM = %d\tIPK = %f\n", data[i].npm, data[i].ipk);
};
printf("Cari NPM = "); scanf("%d", &cari); ketemu = 0; //awal pencarian data
for(i=0;i<3;i++)
{ if (cari == data[i].npm)
ketemu = 1;
}
if (ketemu == 1)
printf("NPM ditemukan\n");
else
printf("NPM tidak ada\n");
printf("Cari NPM hapus = "); scanf("%d", &cari); //awal penghapusan data
for(i=0;i<3;i++) //cari dulu data yang akan dihapus. misal berdasar NPM
{ if ((cari == data[i].npm) && (data[i].terhapus == 0)) //cek juga status datanya
{ data[i].terhapus = 1; break; //sekali ketemu ubah status, keluar loop
}
}
printf("Isi data\n"); //menampilkan data setelah dihapus
for(i=0;i<3;i++)
{ if (data[i].terhapus == 0) //tampilkan data yang statusnya belum terhapus
printf("NPM = %d\tIPK = %f\n", data[i].npm, data[i].ipk);
};
printf("Cari NPM edit = "); scanf("%d", &cari); //awal edit data
for(i=0;i<3;i++) //cari dulu data yg akan di-edit. misal berdasar NPM
{ if (cari == data[i].npm && (data[i].terhapus == 0)) //cek juga status data
{ printf("Masukkan data baru:\n");
printf("NPM = "); scanf("%d", &data[i].npm);
printf("IPK = "); scanf("%f", &data[i].ipk);
data[i].terhapus = 0;
}
}
printf("Isi data\n"); //tampilkan lagi isi data yg telah berubah
for(i=0;i<3;i++)
{ if ((data[i].terhapus == 0))
printf("NPM = %d\tIPK = %f\n", data[i].npm, data[i].ipk);
};
}
NB: please, remember my last words in my last slide yesterday. Good Luck.
struct mhs {
int NPM;
char nama[20];
float IPK;
} data[20];
Contoh di atas menunjukkan bahwa dibuat struct bernama "mhs" dengan isian data NPM, nama dan IPK. Sedangkan nama variabelnya adalah data. Dalam kasus tsb variabel data dibuat berupa array dengan ukuran 20. Artinya kita akan membuat array untuk menampung data struct mhs sebanyak 20. Konsep struct seringkali dikaitkan dengan array karena logikanya penyimpanan data itu tidak cukup satu item saja, tetapi lebih dari itu.
Contoh Program Sederhana:
Dalam operasi struct yang umum digunakan adalah: penambahan data, penampilan data, pencarian data, edit serta hapus data. Berikut ini contoh sederhananya yang saya sarankan untuk dimodifikasi dengan menambahkan menu program yang bisa diulang-ulang. Selamat mencoba :D
#include "stdio.h"
struct mhs
{ int npm;
float ipk;
int terhapus; //untuk menyimpan status data. bernilai 0 jika masih ada, dan 1 jika sdh dihapus
}data[3]; //array of struct dengan 3 elemen
void main()
{ int i, cari, ketemu;
printf("Isikan data\n");
for(i=0;i<3;i++)
{ printf("NPM = "); scanf("%d", &data[i].npm);
printf("IPK = "); scanf("%f", &data[i].ipk);
data[i].terhapus = 0;
};
printf("Isi data\n"); //menampilkan data
for(i=0;i<3;i++)
{ if (data[i].terhapus == 0) //tampilkan data yg belum terhapus
printf("NPM = %d\tIPK = %f\n", data[i].npm, data[i].ipk);
};
printf("Cari NPM = "); scanf("%d", &cari); ketemu = 0; //awal pencarian data
for(i=0;i<3;i++)
{ if (cari == data[i].npm)
ketemu = 1;
}
if (ketemu == 1)
printf("NPM ditemukan\n");
else
printf("NPM tidak ada\n");
printf("Cari NPM hapus = "); scanf("%d", &cari); //awal penghapusan data
for(i=0;i<3;i++) //cari dulu data yang akan dihapus. misal berdasar NPM
{ if ((cari == data[i].npm) && (data[i].terhapus == 0)) //cek juga status datanya
{ data[i].terhapus = 1; break; //sekali ketemu ubah status, keluar loop
}
}
printf("Isi data\n"); //menampilkan data setelah dihapus
for(i=0;i<3;i++)
{ if (data[i].terhapus == 0) //tampilkan data yang statusnya belum terhapus
printf("NPM = %d\tIPK = %f\n", data[i].npm, data[i].ipk);
};
printf("Cari NPM edit = "); scanf("%d", &cari); //awal edit data
for(i=0;i<3;i++) //cari dulu data yg akan di-edit. misal berdasar NPM
{ if (cari == data[i].npm && (data[i].terhapus == 0)) //cek juga status data
{ printf("Masukkan data baru:\n");
printf("NPM = "); scanf("%d", &data[i].npm);
printf("IPK = "); scanf("%f", &data[i].ipk);
data[i].terhapus = 0;
}
}
printf("Isi data\n"); //tampilkan lagi isi data yg telah berubah
for(i=0;i<3;i++)
{ if ((data[i].terhapus == 0))
printf("NPM = %d\tIPK = %f\n", data[i].npm, data[i].ipk);
};
}
NB: please, remember my last words in my last slide yesterday. Good Luck.
Subscribe to:
Posts (Atom)