다음은 초등학교에서 배우는 나눗셈 계산표를 만들어주는 Julia 소스 코드이다.
나눗셈 계산표를 완성하고 나서 약수, 배수 관계를 알려준다.
- ## Filename: makeDivisionTable.jl
- ##
- ## Purpose: Make a division table in a handy written form.
- ##
- ## Execute: julia makeDivisionTable.jl 12345 32
- ## julia makeDivisionTable.jl 500210 61
- ##
- ## Date: 2013. 3. 5.
- ## Author: pkim __AT__ scripts ((DOT)) pe ((DOT)) kr
- function printUsage()
- # println("Using: julia makeDivisionTable.jl [numerator] [denominator]")
- # println("Make a division table in a handy written form.")
- println("사용법: julia makeDivisionTable.jl [피제수] [제수]")
- println("손으로 작성한 형태의 나눗셈 표를 만들어준다.")
- end
- function simplify(v, width)
- t = string(v)
- slen = length(t)
- if slen >=2 && t[slen-1:slen] == ".0"
- t = t[0:slen - 2]
- end
- slen = length(t)
- if slen < width
- t = " " ^(width - slen) * t
- end
- return t
- end
- function getSuffix(v)
- t = v % 10
- suffix = "은"
- if length(search("2459", "$t")) >= 1
- suffix = "는"
- end
- return suffix
- end
- function makeTable(numer, denom, quotient)
- strNumer = "$numer"
- strDenom = "$denom"
- strQuotient = "$quotient"
- lenN = length(strNumer)
- lenD = length(strDenom)
- lenQ = length(strQuotient)
- offsetLeft = 3 + lenD + 3
- spaces = " "
- uline = "_" ^ (lenN + 2)
- sline = "-" ^ lenN
- bias = lenN - lenQ
- println(spaces[1:offsetLeft] * spaces[1:bias] * "$quotient")
- println(spaces[1:offsetLeft - 2] * uline)
- print(" " * strDenom * " ) " * strNumer)
- strTmpR = strNumer[1: bias + 1]
- tmpR = int64(strTmpR)
- tmpSub = int64(0) :: Int64
- oneDigit = ""
- for i = 1:lenQ
- if strQuotient[i: i] == "0"
- if i + 1 <= lenQ
- oneDigit = strNumer[bias + i + 1: bias + i + 1]
- print(oneDigit)
- strTmpR = strTmpR * oneDigit
- tmpR = int64(strTmpR)
- end
- else
- println("")
- tmpSub = int64(strQuotient[i: i]) * denom
- println(spaces[1: offsetLeft] * simplify(tmpSub, bias + i))
- println(spaces[1: offsetLeft] * sline)
- tmpR = tmpR - tmpSub
- if tmpR == 0 && i + 1 <= lenQ
- print(spaces[1: offsetLeft] * spaces[1: bias + i])
- else
- print(spaces[1: offsetLeft] * simplify(tmpR, bias + i))
- end
- strTmpR = "$tmpR"
- if i + 1 <= lenQ
- oneDigit = strNumer[bias + i + 1: bias + i + 1]
- if oneDigit != ""
- print(oneDigit)
- strTmpR = strTmpR * oneDigit
- end
- tmpR = int64(strTmpR)
- end
- end
- end
- println("")
- return tmpR
- end
- if length(ARGS) < 2
- printUsage()
- exit(1)
- end
- a = 0
- b = 0
- try
- a = int64(ARGS[1])
- b = int64(ARGS[2])
- catch ex
- println(ex)
- @printf("피제수: %s, 제수: %s\n", ARGS[1], ARGS[2])
- println("숫자 입력에 오류가 있습니다.")
- exit(1)
- end
- if a <= 0
- @printf("피제수: %d\n", a)
- println("피제수는 양의 정수라야 합니다.")
- exit(1)
- elseif b <= 0
- @printf("제수: %d\n", b)
- println("제수는 양의 정수라야 합니다.")
- exit(1)
- end
- q = int64(floor(a / b))
- r = a % b
- @printf("나눗셈 %s ÷ %s 의 결과: ", a, b)
- @printf("몫: %d, ", q)
- @printf("나머지: %ld\n", r)
- println("")
- k = makeTable(a, b, q)
- if k == r
- @printf("\n나머지: %d\n", k)
- end
- if k == 0
- @printf("%d = %d x %d", a, b, q)
- @printf("%d%s %d의 배수(mupltiple)이다.\n", a, getSuffix(a), b)
- @printf("%d%s %d의 약수(divisor)이다.\n", b, getSuffix(b), a)
- else
- @printf("%d = %d x %d + %d\n", a, b, q, r)
- @printf("%d%s %d의 배수(mupltiple)가 아니다.\n", a, getSuffix(a), b)
- end
- # -*- encoding: ms949 -*-
- # Filename: makeDivisionTable.py
- #
- # Purpose: Make a division table in a handy written form.
- #
- # Execute: python makeDivisionTable.py 12345 32
- # python makeDivisionTable.py 500210 61
- #
- # Date: 2008/05/15
- # Author: PH Kim [ pkim ((AT)) scripts.pe.kr ]
- import sys
- def printUsage():
- # print("Using: python makeDivisionTable.py [numerator] [denominator]")
- # print("Make a division table in a handy written form.")
- print("사용법: python makeDivisionTable.py [피제수] [제수]")
- print("손으로 작성한 형태의 나눗셈 표를 만들어준다.")
- def simplify(v, width):
- t = "%ld" % v
- if t[-2:] == ".0":
- t = t[0:len(t) - 2]
- slen = len(t)
- if slen < width:
- t = " " * (width - slen) + t
- return t
- def getSuffix(v):
- t = v % 10L
- suffix = "은"
- if "2459".find("%d" % t) >= 0:
- suffix = "는"
- return suffix
- def makeTable(numer, denom, quotient):
- strNumer = "%ld" % numer
- strDenom = "%ld" % denom
- strQuotient = "%ld" % quotient
- lenN = len(strNumer)
- lenD = len(strDenom)
- lenQ = len(strQuotient)
- offsetLeft = 3 + lenD + 3
- spaces = " "
- uline = "_" * (lenN + 2)
- sline = "-" * lenN
- bias = lenN - lenQ
- print(spaces[0:offsetLeft] + spaces[0:bias] + "%ld" % quotient)
- print(spaces[0:offsetLeft - 2] + uline)
- sys.stdout.write(" " + strDenom + " ) " + strNumer)
- strTmpR = strNumer[0: bias + 1]
- tmpR = long(strTmpR)
- tmpSub = 0L
- oneDigit = None
- for i in range(0, lenQ):
- if strQuotient[i: i + 1] == "0":
- if i + 1 < lenQ:
- oneDigit = strNumer[bias + i + 1: bias + i + 2]
- sys.stdout.write(oneDigit)
- strTmpR = strTmpR + oneDigit
- tmpR = long(strTmpR)
- else:
- tmpSub = long(strQuotient[i: i + 1]) * denom
- print(spaces[0: offsetLeft] + simplify(tmpSub, bias + i + 1))
- print(spaces[0: offsetLeft] + sline)
- tmpR = tmpR - tmpSub
- if tmpR == 0L and i + 1 < lenQ:
- sys.stdout.write(spaces[0: offsetLeft] + spaces[0: bias + i + 1])
- else:
- sys.stdout.write(spaces[0: offsetLeft] + simplify(tmpR, bias + i + 1))
- strTmpR = "%ld" % tmpR
- if i + 1 < lenQ:
- oneDigit = strNumer[bias + i + 1: bias + i + 2]
- if oneDigit != None:
- sys.stdout.write(oneDigit)
- strTmpR = strTmpR + oneDigit
- tmpR = long(strTmpR)
- return tmpR
- if len(sys.argv) < 3:
- printUsage()
- exit(1)
- a = None
- b = None
- try:
- a = long(sys.argv[1])
- b = long(sys.argv[2])
- except ValueError:
- print("피제수: %s, 제수: %s" % (sys.argv[1], sys.argv[2]))
- print("숫자 입력에 오류가 있습니다.")
- sys.exit(1)
- if a <= 0L:
- print("피제수: %ld" % a)
- print("피제수는 양의 정수라야 합니다.")
- sys.exit(1)
- elif b <= 0L:
- print("제수: %ld" % b)
- print("제수는 양의 정수라야 합니다.");
- sys.exit(1)
- q = a / b
- r = a % b
- sys.stdout.write("나눗셈 %ld ÷ %ld 의 결과: " % (a, b))
- sys.stdout.write("몫: %ld, " % q)
- print("나머지: %ld" % r)
- k = makeTable(a, b, q)
- if k == r:
- print("\n나머지: %ld" % k)
- if k == 0L:
- print("%ld = %ld x %ld" % (a, b, q))
- print("%ld%s %ld의 배수(mupltiple)이다." % (a, getSuffix(a), b))
- print("%ld%s %ld의 약수(divisor)이다." % (b, getSuffix(b), a))
- else:
- print("%ld = %ld x %ld + %ld" % (a, b, q, r))
- print("%ld%s %ld의 배수(mupltiple)가 아니다." % (a, getSuffix(a), b))
- end
실행> julia makeDivisionTable.jl 500210 61
나눗셈 500210 ÷ 61 의 결과: 몫: 8200, 나머지: 10 8200 ________ 61 ) 500210 488 ------ 122 122 ------ 10 나머지: 10 500210 = 61 x 8200 + 10 500210은 61의 배수(mupltiple)가 아니다.
'프로그래밍 > Julia' 카테고리의 다른 글
손으로 계산하는 긴자리 곱셈표 만들기 with Julia (0) | 2013.03.05 |
---|---|
문자열 거꾸로 하기 with Julia (0) | 2013.03.05 |
삼각형 출력 예제를 통한 여러 가지 소스 비교 with Julia (0) | 2013.03.05 |
7비트 ASCII 코드표 만들기 예제 with Julia (0) | 2013.03.05 |
진법(radix) 표 만들기 예제 with Julia (0) | 2013.03.05 |