Pemrograman Grafik C/C++ # 4

Turbo C++ menggunakan BGI (Borland Graphics Interface) untuk menampilkan gambar berwarna. Beberapa file pendukung grafik yang penting ialah:

  • Graphics.h, berisi deklarasi variable-variable penting grafik
  • *.bgi, berisi data pengendali kartu grafik. Pada komputer yang memakai mode grafik VGA, pengendali  grafiknya ialah egavga.bgi.
  • *.chr, berisi data huruf (font) misalnya gothic.chr yang berisi data huruf model gothic.

Program berikut merupakan contoh pemrograman grafik Turbo C++ (dari folder examples) yang akan menerima data temperatur dari user, lalu dapat disimpan ke disk serta dibaca dan ditampilkan dalam bentuk grafik bar.

/*Program membaca temperatur lalu menampilkan Bar
Dimodifikasi oleh Muhammad Wali
Tanggal 21 Februari 2011 */
//Program membaca temperatur lalu menampilkan Bar
#include
#include
#include
#include
#include
/* Prototipe / deklarasi fungsi */
void get_temps(void);
void table_view(void);
void min_max(int num_vals, int vals[], int *min_val, int
max_val);
float avg_temp(int num_vals, int vals[]);
void graph_view(void);
void save_temps(void);
void read_temps(void);
/* definisi konstanta global*/
#define TRUE 1
#define READINGS 8
/* struktur data Global */
int temps[READINGS];
int main(void)
{
while (TRUE)
{
printf(“\nMenu Program Plotting Temperatur \n”);
printf(“\tE – Masukkan data temperatur \n”);
printf(“\tS – Simpan data ke disk\n”);
printf(“\tR – Baca file disk \n”);
printf(“\tT – Melihat data dalam format tabel \n”);
printf(“\tG – Tampilan grafik \n”);
printf(“\tX – Keluar dari program \n”);
printf(“\nTekan salah satu kunci di atas: “);
switch (toupper(getche()))
{
case ‘E’: get_temps(); break;
case ‘S’: save_temps(); break;
case ‘R’: read_temps(); break;
case ‘T’: table_view(); break;
case ‘G’: graph_view(); break;
case ‘X’: exit(0);
}
}
}
/* Definisi Fungsi */
void get_temps(void)
{
char inbuf[130];
int reading;
printf(“\nMasukkan temperatur-temperatur\n”);
for (reading = 0; reading < READINGS; reading++)
{
printf(“\nMasukkan bacaan ke # %d: “, reading + 1);
gets(inbuf);
sscanf(inbuf, “%d”, &temps[reading]);
}
}
void table_view(void)
{
int reading, min, max;
clrscr(); /* Bersihkan layar */
printf(“Membaca\t\tTemperatur(F)\n”);
for (reading = 0; reading < READINGS; reading++)
printf(“%d\t\t\t%d\n”, reading + 1, temps[reading]);
min_max(READINGS, temps, &min, &max);
printf(“Temperatur minimum: %d\n”, min);
printf(“Temperatur maksimum: %d\n”, max);
printf(“Temperatur rata-rata: %f\n”, avg_temp(READINGS,
temps));
}
void min_max(int num_vals, int vals[], int *min_val, int
*max_val)
{
int reading;
*min_val = *max_val = vals[0];
for (reading = 1; reading < num_vals; reading++)
{
if (vals[reading] < *min_val) *min_val = vals[reading]; else if (vals[reading] > *max_val)
*max_val = vals[reading];
}
}
float avg_temp(int num_vals, int vals[])
{
int reading, total = 0;
for (reading = 0; reading < num_vals; reading++)
total += vals[reading];
return (float) total/reading; //casting
}
void graph_view(void)
{
int graphdriver = DETECT, graphmode;
int reading, value;
int maxx, maxy, left, top, right, bottom, width;
int base; /* sumbu x */
int vscale = 1.5; /* nilai skala vertikal */
int space = 10; /* spasi antara bar */
char fprint[20]; /* teks terformat untuk sprintf */
initgraph(&graphdriver, &graphmode, “..\\bgi”);//direktori bgi
if (graphresult() < 0) /* Pastikan inisialisasi driver ok
*/
return;
maxx = getmaxx(); /* daerah terjauh */
width = maxx /(READINGS + 1); /* skala dan spasi */
maxy = getmaxy() – 100; /* ruang untuk teks */
left = 25;
right = width;
base = maxy / 2; /* untuk nilai negatif */
for (reading = 0; reading < READINGS; reading++) { value = temps[reading] * vscale; if (value > 0)
{
top = base – value; /* layar atas */
bottom = base;
setfillstyle(HATCH_FILL, 1);
}
else
{
top = base;
bottom = base – value; /* layar bagian bawah */
setfillstyle(WIDE_DOT_FILL, 2);
}
bar(left, top, right, bottom);
left +=(width + space); /* spasi kiri untuk bar
berikutnya */
right +=(width + space); /* ujung kanan untuk bar
berikutnya*/
}
outtextxy(0, base, “0 -“);
outtextxy(10, maxy + 20, “Plot dari Pembacaan temperatur “);
for (reading = 0; reading < READINGS; reading++)
{
sprintf(fprint, “%d”, temps[reading]);
outtextxy((reading *(width + space)) + 25, maxy + 40,
fprint);
}
outtextxy(50, maxy+80, “Tekan sembarang tombol”);
getch(); /* menunggu penekanan key*/
closegraph();
}
void save_temps(void)
{
FILE * outfile;
char file_name[40];
printf(“\nSimpan sebagai nama file apa ? “);
while (kbhit()); /* jika ditekan*/
gets(file_name);
if ((outfile = fopen(file_name,”wb”)) == NULL)
{
perror(“\nMembuka file gagal ! “);
return;
}
fwrite(temps, sizeof(int), READINGS, outfile);
fclose(outfile);
}
void read_temps(void)
{
FILE * infile;
char file_name[40] = “test”;
printf(“\nBaca dari file mana? “);
while (kbhit());
gets(file_name);
if ((infile = fopen(file_name,”rb”)) == NULL)
{
perror(“\nBuka file gagal! “);
return;
}
fread(temps, sizeof(int), READINGS, infile);
fclose(infile);
}

Perhatikan bahwa pada program di atas, fungsi terlebih dahulu harus dideklarasikan dengan menuliskan nama fungsi dan dapat diikuti dengan tipe data parameter yang diinginkan. Setelah fungsi dideklarasikan, definisikanlah fungsi. Anda juga dapat langsung mendefinisikan fungsi asalkan fungi-fungsi tersebut ditulis di atas fungsi main. Untuk deteksi dan inisialisasi driver grafik, digunakan fungsi yang ada di BGI (Borland Graphics Interface )sebagai berikut.

void graph_view(void)
{
int graphdriver = DETECT, graphmode;
….
initgraph(&graphdriver, &graphmode, “..\\bgi”);//direktori bgi

Beberapa fungsi yang berhubungan dengan pembacaan dan penulisan file pada disk ialah fopen, fwrite, fread, dan fclose.

void save_temps(void)
{
FILE * outfile;
char file_name[40];
printf(“\nSimpan sebagai nama file apa ? “);
while (kbhit()); /* jika ditekan*/
gets(file_name);
if ((outfile = fopen(file_name,”wb”)) == NULL)
{
perror(“\nMembuka file gagal ! “);
return;
}
fwrite(temps, sizeof(int), READINGS, outfile);
fclose(outfile);
}

Program di atas akan mencoba menyimpan suatu file dengan meminta nama file tertentu dari user. Fungsi fwrite digunakan untuk menulis ke dalam disk, lalu ditutup dengan perintah fclose.

void read_temps(void)
{
FILE * infile;
char file_name[40] = “test”;
printf(“\nBaca dari file mana? “);
while (kbhit());
gets(file_name);
if ((infile = fopen(file_name,”rb”)) == NULL)
{
perror(“\nBuka file gagal! “);
return;
}
fread(temps, sizeof(int), READINGS, infile);
fclose(infile);
}

Program di atas akan mencoba membuka file menggunakan perintah fopen dan jika file dibuka dengan sukses, file akan dibaca menggunakan perintah fread.


Tinggalkan komentar