Friday, January 18, 2008

Konversi Bilangan Biner, Octal dan Heksa

Ada seorang teman namanya Joko yang memintaku untuk membuat kode konversi bilangan decimal ke biner oktal dan heksa.

Ini adalah hasilnya, semoga bermanfaat. Dibuat dengan VFP

Konversi Decimal ke Biner

cNil = VAL(Thisform.text1.Value) &&(isikan variable nilai desimal disini)
cHasil = ''
DO WHILE NOT cNil <= 0
cBiner = MOD(cNil,2)
cHasil = cHasil + ALLTRIM(STR(cBiner))
cNil = INT(cNil / 2)
ENDDO

&& disini hasil perhitungan disusun balik biar sesuai dengan kaidah biner

n = LEN(ALLTRIM(cHasil))
cBalik = ''
DO WHILE NOT n <= 0
cBalik = cBalik + SUBSTR(cHasil,n,1)
n = n - 1
ENDDO

Konversi Decimal ke Oktal

cNil = VAL(Thisform.text1.Value) && Masukkan nilai desimal di variable ini

cHasil = ''

DO WHILE NOT cNil <= 0
cBiner = MOD(cNil,8)
cHasil = cHasil + ALLTRIM(STR(cBiner))
cNil = INT(cNil / 8)
ENDDO

n = LEN(ALLTRIM(cHasil))
cBalik = ''
DO WHILE NOT n <= 0
cBalik = cBalik + SUBSTR(cHasil,n,1)
n = n - 1
ENDDO

Konversi desimal ke Heksa desimal

cNil = VAL(Thisform.text1.Value)
cHasil = ''
DO WHILE NOT cNil <= 0
cBiner = MOD(cNil,16)
DO CASE
CASE cBiner = 10
cBiner = 'A'
CASE cBiner = 11
cBiner = 'B'
CASE cBiner = 12
cBiner = 'C'
CASE cBiner = 13
cBiner = 'D'
CASE cBiner = 14
cBiner = 'E'
CASE cBiner = 15
cBiner = 'F'
OTHERWISE
cBiner = ALLTRIM(STR(cBiner))
ENDCASE
cHasil = cHasil + cBiner
cNil = INT(cNil / 16)
ENDDO
n = LEN(ALLTRIM(cHasil))
cBalik = ''
DO WHILE NOT n <= 0
cBalik = cBalik + SUBSTR(cHasil,n,1)
n = n - 1
ENDDO

Hasil disimpan dalam variable cBalik

Semoga bermanfaat.


Menghitung Umur

Beberapa waktu yang lalu saya berdiskusi dengan teman chatting di PTPN IX yang intinya membahas masalah bagaimana membuat script untuk menghitung umur seseorang diambil dari tanggal lahir sampai hari ini.

Inilah hasil dari diskusi itu, dibuat dengan Visual Foxpro, untuk bahasa yang lain silahkan sesuaikan sendiri.

***********************


* nTgl = variable tanggal lahir, ini bisa diambil langsung dari form, atau berupa parameter.
* silahkan tentukan sendiri


nDay = DAY(DATE()) - DAY(nTgl)
*****************
IF MONTH(DATE()) <= MONTH(nTgl)
  nThn = (YEAR(DATE())-YEAR(nTgl))-1
  nBln = MONTH(DATE())+12 - MONTH(nTgl)
ELSE 
  nThn = YEAR(DATE())-YEAR(nTgl)
      nBln = MONTH(DATE())-MONTH(nTgl)
ENDIF 
nDay = DAY(DATE()) - DAY(nTgl)
IF nDay < 0 
DO CASE 
CASE ALLTRIM(STR(MONTH(DATE())))$'1 3 5 7 8 10 12'
nDay = nDay + 31
CASE ALLTRIM(STR(MONTH(DATE())))$'4 6 9 11'
nDay = nDay + 30
CASE MONTH(DATE())=2 AND MOD(YEAR(DATE()),4)=0
nDay = nDay + 29
      OTHERWISE 
      nDay = nDay + 28
ENDCASE
nBln = nBln - 1
ENDIF
DO CASE 
CASE nBln < 0
nThn = nThn - 1
nBln = 0
CASE nBln = 12 
nThn = nThn + 1
nBln = 0
ENDCASE 

***********

* output dari program ini,
Semoga bermanfaat. Terimakasih mbak Tari atas diskusi ini.