Minggu, 26 Juni 2016

ALGORITMA PEMROGRAMAN C++ Lanjutan

Contoh 1
Berikut  ini  adalah  contoh  sederhana  penggunaan  int86  untuk  mencetak  karakter
menggunakan  interupsi  BIOS  10  heksadesimal  servis  09  heksadesimal.

baris 1 sampai baris 3 pada program diatas merupakan penentuan header yang akan
digunakan, yaitu conio.h, dos.h dan stdlib.h. Header conio.h digunakan karena pada baris 18
kita akan menggunakan fungsi  clrscr dan pada baris 20 kita akan menggunakan fungsi getch.
Header  dos.h  digunakan  karena  pada  baris  9  kita  mendeklarasikan  variabel  in  dan  out
menggunakan tipe union REGS serta pada baris 19 kita akan memanggil fungsi int86. Header
stdlib.h  digunakan  karena  pada  baris  22  kita  akan  menggunakan  nilai  konstanta
EXIT_SUCCESS.
Pada baris 5 kita mendeklarasikan konstanta dengan nama VIDEO_INT yang bernilai
10  heksadesimal.  Konstanta  ini  digunakan  saat  memanggil  fungsi  video  int86  untuk
menjalankan interupsi 10 heksadesimal servis 9 heksadesimal.

Contoh 2
Berikut  ini  adalah  program  dengan  tujuan  yang  sama  seperti  pada  contoh01.cpp
untuk mencetak huruf A di layar. Perbedaannya adalah fungsi int86 digantikan dengan kodekode  inline  assembly.

Perhatikanlah  baris  11  sampai  dengan  baris  16!  Instruksi  mov  ah,  0x09  artinya
menyimpan nilai 9 heksadesimal kedalam register AH. Demikian juga dengan instruksi  mov
bh, 0x00  atau  mov cl, 0x01. Dalam pemrograman bahasa assembly  opcode  mov digunakan
untuk memberikan nilai kedalam suatu operand, dalam hal ini register AH, AL,  BH,  BL dan
sebagainya.  Kemudian  amati  pula  baris  17.  Pada  baris  17  instruksi  int  VIDEO_INT  bukan
berarti  mendeklarasikan  variabel  VIDEO_INT  dengan  tipe  data  integer,  melainkan
menjalankan  interupsi  yang  nilai  interupsinya  disimpan  dalam  konstanta  VIDEO_INT,  yaitu
10
0x10  atau  10  heksadesimal.  Dalam  pemrograman  bahasa  assembly  opcode  int  digunakan
untuk menjalankan interupsi sesuai dengan nomor interupsi sesudah kata kunci int.

Contoh 3
berikut  ini  adalah  program  untuk  memilih  mode  video  01
heksadesimal (16 warna, 25 baris dan 40 kolom) kemudian mengembalikannya menjadi mode
video  normal  menggunakan  fungsi  int86.

Pada  contoh  diatas,  setiap  terjadi  pergantian  mode  video  akan  selalu  menimbulkan
efek  clear  screen.  Bagaimana  cara  menghilangkan  efek clear  screen  ini?  Jawabnya  adalah
dengan  menset  bit  ke-7  pada  register  AL  menjadi  1.

Contoh 4
  Berikut  ini  adalah  contoh  yang  sama
seperti  pada  contoh3.cpp,  namun  bit  ke-7  pada  register  AL  akan  diset  menjadi  1  dan
menggunakan teknik inline assembly.

Kedua  contoh  program  sebelumnya  digunakan  untuk  mengubah  mode  video.
Bagaimana jika kita tidak mengetahui mode video yang sedang digunakan? Jawabnya adalah
dengan menjalankan interupsi 10 heksadesimal servis 0f heksadesimal
.

Contoh 5
Register  AH  berisi  banyaknya  kolom,  register  AL  berisi  nomor  mode  video  yang  digunakan dan register BH berisi nomor halaman  tampilan yang digunakan
Berikut ini adalah contoh  programnya.


Contoh 6
Berikut ini adalah contoh program untuk menampilkan huruf A dan Z dengan warna
dasar biru dan  warna huruf putih.

Program  diatas  terdiri  dari  empat  fungsi,  yaitu  fungsi  main,  getCursorPos, setCursorPos dan writeChar. Fungsi getCursorPos berguna untuk mengetahui posisi kursor, fungsi  ini  mengirimkan  parameter  y  dan  x  secara  acuan.  Setelah  pemanggilan  fungsi, parameter x menyimpan posisi kolom kursor sedangkan parameter y menyimpan posisi baris kursor.  Fungsi setCursorPos  digunakan  untuk  memindahkan  posisi  kursor,  fungsi  ini mengirimkan parameter y dan x secara nilai. Parameter y digunakan untuk menentukan posisi baris  sedangkan  parameter  x  untuk  menentukan  posisi  kolom  kursor.
Fungsi  writeChar  digunakan  untuk  menampilkan  karakter,  fungsi  ini  mengirimkan
parameter letter dan attr secara nilai. Parameter letter berisi karakter yang akan ditampilkan
sedangkan  parameter  attr  menentukan  atribut  karakter  (warna  karakter  dan  warna  dasar).

Contoh 7
Setelah memahami cara menampilkan karakter dengan warna karakternya, tentu kita
akan bertanya bagaimana cara menampilkan string (rangkaian karakter) dengan warna-warna
karakternya. Untuk menjawab pertanyaan ini marilah pelajari kode program berikut ini.

Program contoh7.cpp  merupakan pengembangan dari program contoh06.cpp. Pada
program contoh7.cpp terdapat fungsi writeString, fungsi ini menggunakan parameter str dan
attr. Parameter str dikirimkan secara acuan dan berisi rangkaian karakter (string) yang akan
dicetak.  Sedangkan  parameter  attr  dikirimkan  secara  nilai  untuk  menentukan  warna  string
saat  ditampilkan.  Fungsi  writeString  memanggil  fungsi  writeChar  untuk  mencetak  rangkaian karakternya satu per satu.

Contoh 8
Berikut ini adalah contoh sederhana untuk membaca karakter pada posisi tertentu dilayar. Untuk menyederhanakan kode program, contoh  berikut  akan  menggunakan  fungsi  standar  gotoxy,  textcolor,  textbackground,  cprintf dan int86.

Pada  program  diatas,  fungsi  yang  dibuat  untuk  membaca  karakter  dan  warna
atributnya  adalah  fungsi  getCharAttr.  Fungsi  ini  mengirimkan  parameter  dengan  tipe  data
unsigned  character  secara  acuan.  Setelah  fungsi  tersebut  dijalankan,  parameter  attr  berisi
nilai  warna  atribut  dari  karakter  sedangkan  fungsi  getCharAttr  sendiri  mengembalikan  nilai karakter yang dibaca

Contoh 9
Berikut  ini  adalah  contoh  program  yang  sangat  sederhana  untuk  membuat  sebuah
bingkai.  Program  ini  akan  menggunakan  fungsi  writeChar,  writeString,  setCursorPos  yang
telah dibuat pada program sebelumnya.


 Sebelum melanjutkan ke contoh 10, kita sebelumnya harus membuat class yang nantinya digunkanan dalam menampilkan hasil outpout program, nama classnya Screen.cpp yang ditulis ke text editor.

Contoh 10
berikut  ini  adalah  demonstrasi penggunaan pustaka screen.cpp. Maksud dari programnya adalah untuk memberikan contoh penggunaan  fungsi  anggota  setActivePage  dan  setVisualPage  yang  merupakan  fungsi anggota  dari  objek  Screen.

Ketika  program  diatas  dijalankan  maka  muncul  tulisan  “Halaman  pertama”  dan
“Halaman ke dua” secara bergantian dengan jeda waktu selama tiga detik. Tulisan ”Halaman
pertama” ditampilkan pada halaman 0 sedangkan “Halaman ke dua” pada halaman 1.

Contoh 11
Berikut  ini  adalah  contoh  program  yang  menunjukan  cara  melakukan  input  satu karakter menggunakan  interupsi  16  heksadesimal  servis  0  yang  ditulis  dengan  teknik  inline assembly  dan  memanfaatkan  pustaka  class  screen.cpp  yang  telah  dibuat  pada  bab sebelumnya.

Pada kode program contoh11.cpp fungsi getKey adalah fungsi yang digunakan untuk input  satu  karakter.  Fungsi  getKey  tidak  memerlukan  parameter  d an  mengembalikan  nilai bertipe  unsigned  character  (didefinisikan  dalam  file  screen.cpp  sebagi  UCHAR).  Nilai  yang dikembalikan oleh fungsi ini adalah karakter yang diketikan pada tombol keyboard.  Fungsi ini sama dengan fungsi standar getch.

Contoh 12
Berikut  ini  memberikan  contoh  cara  mendeteksi  penekanan  tombol  F1,  F2,  F3,  dan  F4.

Pada  kode  program  contoh12.cpp  fungsi  getSpecialKey  adalah  fungsi  yang digunakan  untuk  mendeteksi  penekanan  tombol-tombol  khusus.   Perhatikanlah  pada  baris kelima sampai baris kedelapan, karena setiap tombol khusus memiliki kode tersendiri maka pada baris kelima sampai kedelapan dideklarasikan konstanta untuk tombol F1 sampai F4. Kode  scan  untuk  tombol  F1  adalah  3b  heksadesimal,  F2  adalah  3c  heksadesimal,  dan seterusnya.

Contoh 13
Setelah  memahami  ide  dasar  memasukan  rangkaian  karakter,  project  contoh13.ide
berikut  ini  akan  memberikan  contoh  bagaimana  menerapkan  ide  tersebut  menggunakan
teknik  inline  assembly.


Pada  program  contoh13.cpp,  fungsi  yang  digunakan  untuk  memasukan  string
adalah  fungsi  getString.  Fungsi  getString  menerima  tiga  parameter,  yaitu  scr  dengan  tipe
data Screen yang dikirimkan secara referensi, str dengan tipe data unsigned character yang
dikirimkan  secara  referensi  dan  parameter max  dengan  tipe  data  unsigned  character  yang
dikirimkan  secara  nilai.  Parameter  scr  digunakan  untuk  mengetahui  posisi  kursor  dan
memindahkan  posisi  kursor  pada  mode  layar  yang  digunakan  serta  menampilkan  karakter
yang  diketikan  melalui  keyboard.  Parameter  str  adalah  pointer  karakter  yang  digunakan
untuk  menunjukan  alamat  memori  dimana  karakter-karakter  yang  dimasukan  melalui
keyboard disimpan dalam memori. Sedangkan parameter max digunakan untuk menentukan
banyaknya karakter yang bisa dimasukan.

Contoh 14
Project  contoh14.ide  berikut  ini adalah  contoh  penerapan  ide  untuk memasukan  password.  Project  ini  akan  menggunakan pustaka  class  screen.cpp.

Fungsi  getPwdString  pada  program  contoh14.cpp  diatas  adalah  fungsi  yang digunakan untuk memasukan string password.  Perhatikanlah pada baris 129 dan 138! Pada baris  129  ketika  ada  karakter  alphanumerik  dan  simbol  yang  diketikan  maka  yang  akan ditampilkan  adalah  sebuah  asteriks,  demikian  juga  ketika  tombol  tab  yang  ditekan. Perbedaan  lain  antara  fungsi  getString  dan  getPwdString  adalah  karakter  tab  akan  tetap disimpan sebagai tab (ASCII 9) bukan sebagai spasi

Contoh 15
Berikut ini adalah contoh program untuk mengetahui cara menggunakan interupsi
16 heksadesimal servis 2.

Pada  program  contoh15.cpp,  fungsi  getKeyState  adalah  fungsi  yang  digunakan untuk mengetahui status tombol.  Perhatikanlah baris 7 sampai baris 14! Pada baris ketujuh sampai  keempat  belas  dideklarasikan  konstanta  STATE_RSHIFT  dan  STATE_INS.
Konstanta-konstanta ini digunakan untuk mengetahui status penekanan tombol Shift kanan
sampai  tombol  Ins.  Konstanta-konstanta  inilah  yang   dikirimkan  sebagai  parameter  pada
fungsi getKeyState. Pada baris 114, setelah interupsi dijalankan nilai register AL di -AND-kan
dengan  nilai  yang  dikirimkan  parameter  fungsi  getKeyState.

Contoh 16
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 stringy
Untuk  lebih  memahami  ketiga  fungsi  konversi  yang  telah  dibahas  sebelumnya,
berikut  ini  adalah  contoh  program  untuk  mempraktekkan  ketiga  fungsi  tersebut.

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

Sebelum lanjut ke contoh 17 kita harus membuat class keyboard.cpp untuk mendukung input yang telah ditbuat di screen.cpp
Contoh 17
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.



Contoh 18
Berikut  ini  adalah  contoh  program  untuk  mempraktekkan  interupsi  33
heksadesimal servis 0.

Fungsi  detectMouse  pada  contoh18.cpp  menerima  sebuah  parameter  yang dikirimkan  secara  referensi,  yaitu  btn.  Setelah  fungsi  detectMouse  dijalankan  maka parameter btn berisi nilai yang menunjukan jumlah tombol mouse. Fungsi detectMouse akan mengembalikan nilai lebih dari 0 jika mouse dan drivernya terinstal dengan benar dan akan mengembalikan nilai 0 jika mouse atau drivernya tidak terinstal.

Contoh 19
Berikut ini adalah contoh program untuk mempraktekkan cara menampilkan pointer mouse.

gram contoh19.cpp ketika dijalankan akan mendeteksi mouse. Jika mouse siap digunakan maka pointer mouse akan dimunculkan menggunakan fungsi showMouse, tetapi jika  mouse  tidak  terdeteksi  maka  akan  ditampilkan  pesan  bahwa  mouse  tidak  bis a digunakan.  Agar  pointer  mouse  dapat  ditampilkan,  program  contoh19.cpp  harus  dijalankan dalam  mode  full  screen,  caranya  adalah  dengan  menekan  tombol  kombinasi  ALT+Enter. Program akan berhenti secara otomatis setelah lima detik. Setelah bisa menampilkan pointer mouse

Contoh 20
Program  contoh20.ide  berikut  ini  akan  menunjukan  cara  menyembunyikan  pointer
mouse.

Program  contoh20.cpp  menambahkan  satu  fungsi  baru,  yaitu  fungsi  hideMouse
1.  Deteksi mouse, jika mouse tidak siap digunakan maka pesan bahwa mouse tidak siap digunakan  ditampilkan.  Kemudian  program  berhenti  secara  otomatis  setelah  jeda  lima
detik.
2.  Jika mouse terdeteksi, maka pointer mouse akan ditampilkan. Setelah jeda selama tujuh
detik pointer mouse akan disembunyikan. Setelah itu program berhenti secara otomatis
setelah jeda lima detik.

Contoh 21
Untuk mempraktekkan prosedur mengaktifkan dan menonaktifkan mouse, pelajari
kode program project contoh21.

Pada  program  contoh21.cpp  diatas,  fungsi  enableMouse  digunakan  untuk mengaktifkan driver mouse dan fungsi disableMouse digunakan untuk menonaktifkan driver mouse. Perbedaan  fungsi  enableMouse  dengan  fungsi  disableMouse  yang  telah  dibuat adalah  fungsi  disableMouse  mengembalikan  nilai  unsigned  character  yang  menunjukan apakah  interupsi  berhasil  dilakukan  atau  gagal,  sedangkan  fungsi  enableMouse  tidak mengembalikan nilai apapun.

Contoh 22
Dari prosedur yang telah dijelaskan diatas, dapat disimpulkan bahwa interupsi 33 heksadesimal  servis  3  selain  dapat  digunakan  untuk  mengetahui  posisi  koordinat  pointer mouse, juga dapat digunakan untuk mengetahui status penekanan tombol mouse. Berikut ini adalah  contoh  program  untuk  mempraktekan  interupsi  33  heksadesimal  servis  3.

Pada program contoh22.cpp, fungsi getMousePos menerima tiga  parameter, yaitu row,  col  dan  btn  yang  dikirimkan  secara  referensi.  Parameter  row  dan  col  yang  bertipe unsigned  integer  digunakan  untuk  menyimpan  posisi  baris  dan  kolom  pointer  mouse, sedangkan  parameter  btn  yang  bertipe  unsigned  character  digunakan  untuk  mengetahui apakah tombol kiri atau kanan ditekan. Perhatikanlah baris  49! Pada baris  49, variabel baris dan kolom dibagi dengan 8 setelah fungsi getMousePos dijalankan karena nilai baris yang dikembalikan akan berkisar dari 0 s.d 479 dan nilai kolom yang dikembalikan berkisar antara 0 s.d 639. Berikut ini adalah alur program contoh22.cpp:
1.  Deteksi mouse. Jika mouse tidak siap digunakan maka program dihentikan.
2.  Jika mouse siap digunakan maka lakukan perulangan terus-menerus untuk memeriksa
koordinat pointer mouse.
3.  Tampilkan posisi baris dan kolom pointer mouse.
4.  Periksa  apakah  tombol  kanan  mouse  diklik.  Jika  tombol  kanan  mouse  diklik  maka
hentikan perulangan dan program selesai.

Contoh 23
Berikut  ini  adalah  contoh  program  untuk  mempraktekkan  interupsi  33
heksadesimal  servis  4.

Fungsi  setMousePos  pada  program  contoh23.cpp  diatas  digunakan  untuk memindahkan pointer mouse. Fungsi setMousePos menerima parameter row dan col  yang bertipe  unsigned  integer  yang  dikrimkan  secara  nilai.  Parameter  row  digunakan  untuk menentukan  posisi  vertikal  pointer  mouse,  sedangkan  parameter  col  digunakan  untuk menentukan posisi horizontal mouse. Program contoh23.cpp baru berhenti ketika pengguna menekan tombol kiri mouse.

Contoh 24
Untuk  mempraktekkan  teori  yang  telah  dijelaskan  diatas,  project  contoh24.ide berikut  ini  memberikan  contoh  membatasi  posisi  vertikal  pointer  mouse  antara  baris  10 sampai  15  dan  posisi  horizontal  antara  kolom  30  sampai  60.

Pada  program  contoh24.cpp  fungsi  yang  digunakan  untuk  membatasi  koodinat posisi  mouse  adalah  fungsi  setMouseRegion.  Fungsi  setMouseRegion  menerima  empat parameter  bertipe  unsigned  integer  yang  dikirimkan  secara  nilai.  Parameter  y1  dan  y2 digunakan  untuk  menentukan  batas  vertikal,  sedangkan  parameter  x1  dan  x2  digunakan untuk menentukan batas horizontal.

Contoh 25
Berikut  ini  adalah  contoh  program  untuk  memberikan  contoh  cara  menggunakan interupsi  33  heksadesimal  servis  5.

Fungsi  getButtonClick  pada  program  contoh25.cpp  digunakan  untuk  mendeteksi penekanan tombol sebanyak beberapa kali. Parameter btn yang bertipe unsigned character digunakan  untuk  menentukan  tombol  mouse  (tombol  kiri  atau  kanan)  yang  akan  dibatasi penekanannya.  Parameter  col  dan  row  bertipe  unsigned  integer  yang  dikirimkan  secara referensi digunakan  untuk mengetahui posisi baris dan kolom pointer mouse ketika tombol mouse  terakhir  kali  ditekan.  Parameter  maxclick  bertipe  unsigned  integer  digunakan  untuk menentukan banyak penekanan tombol mouse.