#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 =");
layar->setCursorPos(8, 30);
/* Input jari-jari ke dalam variabel str */
str = getString(layar, str, 15);
/* Ubah str menjadi numerik double lalu simpan di jari2 */
jari2 = atof(str);
/* Hitung luas dan keliling lingkaran */
luas = M_PI * pow(jari2, 2);
keliling = 2 * M_PI * jari2;
layar->setCursorPos(9, 10);
layar->writeString("Luas =");
layar->setCursorPos(9, 30);
/* Ubah menjadi string, maks. angka 10 digit */
gcvt(luas, 10, str2);
layar->writeString(str2);
layar->setCursorPos(10, 10);
layar->writeString("Keliling =");
layar->setCursorPos(10, 30);
/* Ubah menjadi string, maks. angka 10 digit */
gcvt(keliling, 10, str2);
layar->writeString(str2);
layar->setCursorPos(12, 10);
layar->writeString("Tekan ENTER ...");
getString(layar, str2, 0);
delete layar; return EXIT_SUCCESS;
}
UCHAR *getString(Screen *scr, UCHAR *str, UCHAR max)
{
UCHAR key, i, x, y;
key = i = 0;
while (TRUE)
{
asm mov ah, 0x00;
asm int KEY_INT;
asm mov key, al;
if ((key == KEY_BACKSPACE) && (i > 0))
{
scr->getCursorPos(&y, &x);
scr->setCursorPos(y, --x);
scr->writeChar(KEY_SPACE);
*(str + i) = NULL; i--;
}
if ((key >= 32) && (key <= 126) && (i < max))
{
scr->getCursorPos(&y, &x);
scr->writeChar(key);
scr->setCursorPos(y, ++x);
*(str + i) = key; i++;
}
if ((key == KEY_TAB) && (i < max))
{
scr->getCursorPos(&y, &x);
scr->writeChar(KEY_SPACE);
scr->setCursorPos(y, ++x);
*(str + i) = KEY_SPACE; i++;
}
if (key == KEY_RETURN)
{
*(str + i) = NULL;
break;
}
if (i == max) *(str + i) = NULL;
}
return str;
}
Gambarnya Sebagai Berikut :
Penjelasannya :
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.
0 komentar:
Posting Komentar