A. Konversi Nilai String Menjadi
Numerik atau Sebaliknya
Semua nilai yang dimasukan
melalui keyboard pada dasarnya adalah karakter atau rangkaian karakter
(string). Nilai numerik yang dimasukan menggunakan fungsi standar scanf,
cscanf, fscanf, gets dan cin pada dasarnya adalah nilai string yang telah
mengalami proses konversi dari string menjadi bilangan bulat integer atau
bilangan real (floating point dan double). Agar kita bisa
menggunakan fungsi getString yang telah kita buat untuk memasukan data numerik,
maka string yang dimasukan melalui fungsi getString harus dikonversi menjadi
numerik. Begitu juga sebaliknya, untuk menampilkan data numerik menggunakan
fungsi anggota writeString dari class Screen, maka data tersebut harus
dikonversi menjadi representasi stringnya. Berikut ini adalah fungsi-fungsi
konversi yang dapat kita gunakan.
//
Konversi string s menjadi bentuk numerik integer-nya
int atoi(const
char *s);
// Konversi
string s menjadi bentuk numerik double-nya
double
atof(const char *s);
// Konversi
numerik double menjadi representasinya dalam bentuk
// null
terminated string
char
*gcvt(double value, int ndec, char *buf);
Fungsi atoi
digunakan untuk mengkonversi nilai numerik integer dalam bentuk representasi
string menjadi bilangan numerik integer sebenarnya. Prototype fungsi
atoi dideklarasikan pada file header stdlib.h. Fungsi atof digunakan untuk
mengubah nilai numerik float dan double dalam bentuk representasi
string menjadi nilai numerik double yang sesungguhnya. Prototype fungsi atof
dideklarasikan dalam file header math.h. Jika fungsi atoi dan atof digunakan
untuk mengkonversi nilai numerik dalam representasi string menjadi nilai
numerik sesungguhnya, maka fungsi gcvt digunakan untuk mengubah nilai numerik
menjadi representasi stringya.
Untuk lebih
memahami ketiga fungsi konversi yang telah dibahas sebelumnya, berikut ini
adalah contoh program untuk mempraktekkan ketiga fungsi tersebut. Simpan
program berikut ini dengan nama project contoh16.ide pada direktori yang sama
dengan file screen.cpp. Pada saat pembuatan project, pilihlah mode Emulation
atau Floating Point pada group box Math Support di jendela New Target. Hal ini
dilakukan karena pada program contoh16.cpp akan dilakukan perhitungan bilangan
numerik real.
contoh16.
#include
<math.h> /* Deklarasi prototype atof */
#include <stdlib.h> /* Deklarasi prototype gcvt */
#include "screen.cpp" /* Fungsi anggota writeString
*/
#define KEY_INT 0x16 /* Nomor interupsi keyboard */
#define KEY_BACKSPACE 0x08 /* Tombol Backspace */
#define KEY_RETURN 0x0d /* Tombol Enter */
#define KEY_TAB 0x09 /* Tombol Tab */
#define KEY_SPACE 0x20 /* Tombol spasi */
#define NULL 0x00 /* ASCII 0 */
#define TRUE 1
UCHAR *getString(Screen *scr, UCHAR *str, UCHAR max);
int main(void)
{
Screen *layar = new Screen();
double luas, keliling, jari2;
UCHAR *str, str2[16];
layar->setMode(0x03);
layar->setCursorPos(5, 10);
layar->writeString("Luas dan Keliling
Lingkaran");
layar->setCursorPos(6, 10);
layar->writeString("---------------------------");
layar->setCursorPos(8, 10);
layar->writeString("Panjang jari-jari ="); 44
layar->setCursorPos(8,
30);
Perhatikanlah baris 35 pada
program contoh16.cpp! Pada baris tersebut, nilai str yang sebelumnya dimasukkan
menggunakan fungsi getString diubah menjadi nilai numerik yang sesungguhnya
lalu disimpan dalam variabel jari2. Kemudian perhatikan baris 46. Pada baris 46
tertulis gcvt(luas, 10, str). Maksudnya adalah nilai dari variabel luas akan
diubah menjadi representasi stringnya yang disimpan pada variabel str. Banyak
karakter yang dapat ditampung adalah 10 karakter. Demikian juga yang dilakukan
pada baris 54.
B. Membuat Class untuk Operasi pada
Keyboard
Setelah memahami teknik-teknik
memasukan data melalui keyboard menggunakan teknik inline assembly, pada sub bab
ini akan dibuat pustaka class (class library) yang mengenkapsulasi semua
fungsi operasi keyboard yang telah dibuat sebelumnya. Jadi, fungsi getKey,
getSpecialKey, getString, getPwdString dan getKeyState akan menjadi fungsi
anggota class Keyboard. Class Keyboard akan bertindak seperti class Screen pada
file screen.cpp, yaitu menyediakan antarmuka untuk operasi input menggunakan
keyboard. Pada class Keyboard akan ditambahkan dua fungsi anggota baru, yaitu
fungsi hideCursor (untuk menyembunyikan kursor) dan fungsi showCursor (untuk
menampilkan kursor). Karena class Keyboard yang akan dibuat menggunakan class
Screen maka file kode program class Keyboard, keyboard.cpp, harus disimpan
dalam direktori yang sama. Berikut ini adalah kode program class Keyboard.
keyboard.cpp:
/*
keyboard.cpp
*/
#define KEY_INT 0x16 /* Nomor interupsi keyboard */
#define KEY_BACKSPACE 0x08 /* Tombol Backspace */
#define KEY_RETURN 0x0d /* Tombol Enter */
#define KEY_TAB 0x09 /* Tombol Tab */
#define KEY_SPACE 0x20 /* Tombol spasi */
#define STATE_RSHIFT 0x01 /* Status Shift Kanan */
#define STATE_LSHIFT 0x02 /* Status Shift Kiri */
#define STATE_CTRL 0x04 /* Status CTRL */
#define STATE_ALT 0x08 /* Status ALT */
#define STATE_SCROLL 0x10 /* Status Scroll Lock */
#define STATE_NUM 0x20 /* Status Num Lock */
#define STATE_CAPS 0x40 /* Status Caps Lock */
#define STATE_INS 0x80 /* Status INS */
#define NULL 0 /* ASCII 0 */
#define TRUE 1
class Keyboard
{
private:
Screen *screen;
Untuk mempraktekkan cara
menggunakan class Keyboard, berikut ini akan diberikan contoh program. Program
berikut ini adalah program sederhana untuk menghitung besar beda potensial
dengan mengalikan besar tahanan dengan besar arus listrik. Pengguna hanya harus
memasukan nilai kuat arus listrik dan besar tahanan. Simpan project
contoh17.ide dan kode program contoh17.cpp berikut ini pada direktori yang sama
dengan file screen.cpp dan keyboard.cpp.
contoh17.cpp:
#include <math.h>
#include <stdlib.h>
#include "screen.cpp"
#include "keyboard.cpp"
int main(void)
{
Screen *layar = new Screen();
Keyboard *tombol = new Keyboard(layar);
unsigned long int v, i, r;
UCHAR *str, str2[16];
layar->setMode(0x03);
layar->setCursorPos(5, 14);
layar->writeString("Menghitung Beda Potensial");
layar->setCursorPos(7, 14);
layar->writeString("Besar arus (ampere) =");
layar->setCursorPos(7, 38);
str = tombol->getString(str2, 10);
i = atoi(str);
layar->setCursorPos(8, 14);
layar->writeString("Besar tahanan (ohm) =");
layar->setCursorPos(8, 38);
str = tombol->getString(str2, 10);
r = atoi(str);
v = i * r;
gcvt(v, 10, str2);
layar->setCursorPos(9, 14);
layar->writeString("Beda potensial (volt) =");
layar->setCursorPos(9, 38);
layar->writeString(str2);
layar->setCursorPos(11, 14);
layar->writeString("Tekan SHIFT ...");
tombol->hideCursor();
while (TRUE)
{
if ((tombol->getKeyState(STATE_RSHIFT)) ||
(tombol->getKeyState(STATE_LSHIFT)))
break;
}
delete layar; delete tombol;
return EXIT_SUCCESS;
}


Tidak ada komentar:
Posting Komentar