다음은 초등학교에서 배우는 나눗셈 계산표를 만들어주는 Boo 소스 코드이다.
나눗셈 계산표를 완성하고 나서 약수, 배수 관계를 알려준다.
한글 출력을 정상적으로 볼려면 소스파일을 UTF-8 인코딩으로 저장해야 한다.
- # Filename: makeDivisionTable.boo
- #
- # Purpose: Make a division table in a handy written form.
- #
- # Execute: booi makeDivisionTable.boo 12345 32
- # booi makeDivisionTable.boo 500210 61
- #
- # Date: 2009/04/01
- # Author: PH Kim [ pkim ((AT)) scripts.pe.kr ]
- import System
- def printUsage():
- # print("Using: booi makeDivisionTable.boo [numerator] [denominator]")
- # print("Make a division table in a handy written form.")
- print("사용법: booi makeDivisionTable.boo [피제수] [제수]")
- print("손으로 작성한 형태의 나눗셈 표를 만들어준다.")
- def simplify(v as double, width as int):
- t = "${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 as long):
- t = v % 10L
- suffix = "은"
- if "2459".IndexOf("${t}") >= 0:
- suffix = "는"
- return suffix
- def makeTable(numer as long, denom as long, quotient as long):
- strNumer = "${numer}"
- strDenom = "${denom}"
- strQuotient = "${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] + "${quotient}")
- print(spaces[0:offsetLeft - 2] + uline)
- write(" " + strDenom + " ) " + strNumer)
- strTmpR = strNumer[0: bias + 1]
- tmpR as long = Convert.ToInt64(strTmpR)
- tmpSub as long = 0L
- oneDigit = null
- for i in range(0, lenQ):
- if strQuotient[i: i + 1] == "0":
- if i + 1 < lenQ:
- oneDigit = strNumer[bias + i + 1: bias + i + 2]
- write(oneDigit)
- strTmpR = strTmpR + oneDigit
- tmpR = Convert.ToInt64(strTmpR)
- else:
- tmpSub = Convert.ToInt64(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:
- write(spaces[0: offsetLeft] + spaces[0: bias + i + 1])
- else:
- write(spaces[0: offsetLeft] + simplify(tmpR, bias + i + 1))
- strTmpR = "${tmpR}"
- if i + 1 < lenQ:
- oneDigit = strNumer[bias + i + 1: bias + i + 2]
- write(oneDigit)
- strTmpR = strTmpR + oneDigit
- tmpR = Convert.ToInt64(strTmpR)
- return tmpR
- def write(s):
- Console.Write(s)
- if len(argv) < 2:
- printUsage()
- Environment.Exit(1)
- a as long
- b as long
- try:
- a = Convert.ToInt64(argv[0])
- b = Convert.ToInt64(argv[1])
- except ValueError:
- print("피제수: ${argv[0]}, 제수: ${argv[1]}")
- print("숫자 입력에 오류가 있습니다.")
- Environment.Exit(1)
- if a <= 0L:
- print("피제수: ${a}")
- print("피제수는 양의 정수라야 합니다.")
- Environment.Exit(1)
- elif b <= 0L:
- print("제수: ${b}")
- print("제수는 양의 정수라야 합니다.");
- Environment.Exit(1)
- q as long = a / b
- r as long = a % b
- write("나눗셈 ${a} ÷ ${b} 의 결과: ")
- write("몫: ${q}, ")
- print("나머지: ${r}")
- k as long = makeTable(a, b, q)
- if k == r:
- print("\n나머지: ${k}")
- if k == 0L:
- print("${a} = ${b} x ${q}")
- print("${a}${getSuffix(a)} ${b}의 배수(mupltiple)이다.")
- print("${b}${getSuffix(b)} ${a}의 약수(divisor)이다.")
- else:
- print("${a} = ${b} x ${q} + ${r}" % (a, b, q, r))
- print("${a}${getSuffix(a)} ${b}의 배수(mupltiple)가 아니다.")
실행> booi makeDivisionTable.boo 500210 61
나눗셈 500210 ÷ 61 의 결과: 몫: 8200, 나머지: 10 8200 ________ 61 ) 500210 488 ------ 122 122 ------ 10 나머지: 10 500210 = 61 x 8200 + 10 500210은 61의 배수(mupltiple)가 아니다.
'프로그래밍 > Boo' 카테고리의 다른 글
황금비율(golden ratio) 구하기 with Boo (0) | 2009.04.01 |
---|---|
현재 시각 알아내기 for Boo (0) | 2009.04.01 |
조립제법(Horner의 방법) 예제 for Boo (0) | 2009.04.01 |
80컬럼 컨솔에 19단표 출력하기 예제 for Boo (0) | 2009.04.01 |
(최대공약수 구하기) while... 반복문 예제 for Boo (0) | 2009.04.01 |