BTemplates.com

Diberdayakan oleh Blogger.

Pages

Pages - Menu

Popular Posts

Rabu, 07 November 2007

Menterjemahkan Angka Romawi dengan Visual Foxpro


&& FUNCTION Rom2Lat
&& PARAMETERS _cBil,_Mode
&& Function Rom2Lat
&& Untuk merubah angka romawi menjadi bilBulPos Latin
&& Parameter _cBil,_Mode
&&  _cBil Angka Romawi
&&  _Mode untuk menentuka Nlai Return, _Mode berupa 0 atau 1
&& Return : Jika _Mode=0, BilBulPos, -1 jika tak dapat diterjemahkan
&&               Jika _Mode=1, Expresi String dari Bil
&& Contoh :
&& Rom3Lat(XII) ==> 12
&& Rom2Lat("YZ") ==> -1
&& Rom2Lat("XII",1) ==>  "10+1+1"
&& Catatan : Function BacaDrKanan()

FUNCTION Rom2Lat
PARAMETERS _cBil,_Mode
IF VARTYPE(_cBil)<>"C"
        RETURN -1
ENDIF
IF LEN(_cBil)>99
        RETURN -1
ENDIF
IF VARTYPE(_Mode)="C"
        _Mode=VAL(_Mode)
ENDIF
IF VARTYPE(_Mode)<>"N"
        _Mode=0
ENDIF
IF _Mode<=0 .or. _Mode>1
        _Mode=0
ENDIF
_cBil=BacaDrKanan(HapusBlank(_cBil))
_ncBil=LEN(_cBil)
_BalikRom=""
FOR _kesekian=1 TO _ncBil
        _CharKei=SUBSTR(_cBil,_kesekian,1)
        _vKei=CharRom2Lat(_CharKei)
        IF _kesekian<_ncBil
                _NexChar=SUBSTR(_cBil,_kesekian+1,1)
                _vNexChar=CharRom2Lat(_NexChar)
                IF _vNexChar<_vKei
                        _BalikRom=_BalikRom+ALLTRIM(STR(_vKei))+"-"
                ELSE
                        _BalikRom=_BalikRom+ALLTRIM(STR(_vKei))+"+"
                ENDIF
        ELSE
                _BalikRom=_BalikRom+ALLTRIM(STR(_vKei))
        ENDIF
NEXT
IF _Mode=1
        RETURN _BalikRom
ENDIF
RETURN INT(Trump(_BalikRom))

&& FUNCTION Trump
&& Ini merupakan subfunction untuk function Rom2Lat
&& Untuk memnterjenahkan String berisi + dan - menjadi operasi &
&& Contoh :
&& Trump("11+10+2-2") ===> 21
&& Sama atrinya jika kita pakai & sbb :
&& xx="11+10+2-2"
&& ? &xx  ===> 21
&& Trump tidak dapat dipergunakan untuk string dengan operasi perkalian atau pembagian

FUNCTION Trump
PARAMETERS _BalikRom
_Kali=1000
_nBalik=0
_BalikRom=_BalikRom
DO WHILE _Kali>1
        _PosPlus=RAT("+",_BalikRom)
        _PosMin=RAT("-",_BalikRom)
        DO CASE
                CASE _PosPlus>_PosMin && Tanda + ada di belakang
                        _StringNBuncit=VAL(SUBSTR(_BalikRom,_PosPlus+1))
                        _nBalik=_nBalik+_StringNBuncit
                        _BalikRom=LEFT(_BalikRom,_PosPlus-1)
                CASE _PosPlus<_PosMin
                        _StringNBuncit=VAL(SUBSTR(_BalikRom,_PosMin+1))
                        _nBalik=_nBalik-_StringNBuncit
                        _BalikRom=LEFT(_BalikRom,_PosMin-1)
                CASE _PosPlus=0 .and. _PosMin=0
                        _StringNBuncit=VAL(_BalikRom)
                        _nBalik=_nBalik+_StringNBuncit
                        _BalikRom=""
                        EXIT
        ENDCASE
        _Kali=_Kali-1
ENDDO
RETURN _nBalik

&& Function CharRom2Lat
&& Untuk merubah 1 digit angka dasar romawi menjadi bilBulPos Latin
&& Parameter _cBil Angka Dasar Romawi (I,V,X, L,C,D,M)
&& Return : BilBulPos, 1 atau 5 atau 10, 50 atau 100 atau 500 atau 1000
&& Contoh :
&& Rom3Lat("C") ==> 100
&& Rom2Lat("c") ==> 100

FUNCTION CharRom2Lat
PARAMETERS _cBil
IF VARTYPE(_cBil)<>"C"
        RETURN -1
ENDIF
_cBil=UPPER(HapusBlank(_cBil))
DO CASE
        CASE _cBil="V"
                _Balik=5
        CASE _cBil="X"
                _Balik=10
        CASE _cBil="L"
                _Balik=50
        CASE _cBil="C"
                _Balik=100
        CASE _cBil="D"
                _Balik=500
        CASE _cBil="M"
                _Balik=1000
        OTHERWISE
                _Balik=1
ENDCASE
RETURN _Balik

0 komentar:

Posting Komentar