컴퓨터 프로그래밍에서 꼭 알아두어야 할 주요 진법은 당연히 10진법, 2진법, 8진법, 16진법이다.
다음은 0 에서 15 까지의 정수를 10진법, 2진법, 8진법, 16진법의 표로 만들어 보여주는 Julia 소스 코드이다. 진법 변환에 필요한 함수
convertAtoI(string, radix)
convertItoA(number, radix)
를 Julia 코드로 자체 작성하여 사용하였다.
- ## Filename: makeRadixTable.jl
- ## Show the radix table with 10-, 2-, 8-, 16-radices.
- ##
- ## Execute: julia makeRadixTable.jl
- ##
- ## Date: 2013. 3. 5.
- ## Author: pkim __AT__ scripts ((DOT)) pe ((DOT)) kr
- BASE36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- # The function println() is defined already in Julia language.
- # function println(s...)
- # if length(s) > 0
- # println(s[1])
- # else
- # println("")
- # end
- function printUsage()
- println("Usage: julia makeRadixTable.jl")
- println("Show the radix table with 10-, 2-, 8-, 16-radices.")
- end
- function convertItoA(num, radix)
- isNegative = false
- if num < 0
- isNegative = true
- num = -num
- end
- arr = ""
- q, r = num, 0
- while q >= radix
- # q, r = divmod(q, radix)
- r = mod(q, radix)
- q = div(q, radix)
- arr *= BASE36[r+1]
- end
- arr *= BASE36[q + 1]
- if isNegative
- arr *= "-"
- end
- return reverse(arr)
- end
- function convertAtoI(srcStr, radix)
- isNegative = false
- ret = 0
- m = length(srcStr)
- val = 0
- c = srcStr[1]
- if c == '-'
- isNegative = true
- elseif c >= '0' && c <= '9'
- ret = int(c) - int('0')
- elseif c >= 'A' && c <= 'Z'
- ret = (int(c) - int('A')) + 10
- elseif c >= 'a' && c <= 'z'
- ret = (int(c) - int('a')) + 10
- end
- if ret >= radix
- println(" Invalid character!")
- return ret
- end
- for i = 2:m
- c = srcStr[i]
- ret *= radix
- if c >= '0' && c <= '9'
- val = int(c) - int('0')
- elseif c >= 'A' && c <= 'Z'
- val = (int(c) - int('A')) + 10
- elseif c >= 'a' && c <= 'z'
- val = (int(c) - int('a')) + 10
- end
- if val >= radix:
- println(" Invalid character!")
- return ret
- end
- ret *= val
- end
- return ret
- end
- function toWidth(s, width)
- t = s
- if width > length(s)
- t = " "^(width - length(s)) * s
- elseif width < -length(s)
- t = s * " "^(-width - length(s))
- end
- return t
- end
- function makeTable()
- sbuf = ""
- abuf = ""
- tbuf = ""
- for i = 1:4
- sbuf *= "+-------"
- end
- sbuf *= "+"
- println(sbuf)
- sbuf = "| Dec"
- sbuf *= "\t| Bin"
- sbuf *= "\t| Oct"
- sbuf *= "\t| Hex |"
- println(sbuf)
- sbuf = ""
- for i = 1:4
- sbuf *= "+-------"
- end
- sbuf *= "+"
- println(sbuf)
- for i = 0:15
- sbuf = "| " * toWidth(string(i), 2)
- abuf = convertItoA(i, 2)
- tbuf = " | " * toWidth(abuf , 4)
- sbuf *= tbuf
- abuf = convertItoA(i, 8)
- tbuf = " | " * toWidth(abuf , 2)
- sbuf *= tbuf
- abuf = convertItoA(i, 16)
- tbuf = " | "* toWidth(abuf , -2) * " |"
- sbuf *= tbuf
- println(sbuf)
- end
- sbuf = ""
- for i = 1:4
- sbuf *= "+-------"
- end
- sbuf *= "+"
- println(sbuf)
- end
- if length(ARGS) > 0 && "-h" == ARGS[1]
- printUsage()
- exit(1)
- end
- makeTable()
실행> julia makeRadixTable.jl
+-------+-------+-------+-------+ | Dec | Bin | Oct | Hex | +-------+-------+-------+-------+ | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | | 2 | 10 | 2 | 2 | | 3 | 11 | 3 | 3 | | 4 | 100 | 4 | 4 | | 5 | 101 | 5 | 5 | | 6 | 110 | 6 | 6 | | 7 | 111 | 7 | 7 | | 8 | 1000 | 10 | 8 | | 9 | 1001 | 11 | 9 | | 10 | 1010 | 12 | A | | 11 | 1011 | 13 | B | | 12 | 1100 | 14 | C | | 13 | 1101 | 15 | D | | 14 | 1110 | 16 | E | | 15 | 1111 | 17 | F | +-------+-------+-------+-------+
'프로그래밍 > Julia' 카테고리의 다른 글
삼각형 출력 예제를 통한 여러 가지 소스 비교 with Julia (0) | 2013.03.05 |
---|---|
7비트 ASCII 코드표 만들기 예제 with Julia (0) | 2013.03.05 |
대화형 모드의 진법(radix) 변환 예제 with Julia (0) | 2013.03.05 |
황금비율(golden ratio) 구하기 with Julia (0) | 2013.03.05 |
조립제법(Horner의 방법) 예제 for Julia (0) | 2013.03.03 |