다음은 초등학교에서 배우는 나눗셈 계산표를 만들어주는 Io 소스 코드이다.
Io는 한글 사용에 다소 문제가 있어 소스 코드에 한글을 전혀 사용하지 못하였다.
나눗셈 계산표를 완성하고 나서 약수, 배수 관계를 알려준다.
- /*
- * Filename: makeDivisionTable.io
- *
- * Purpose: Make a division table in a handy written form.
- *
- * Execute: io makeDivisionTable.io 12345 32
- * io makeDivisionTable.io 500210 61
- *
- * Date: 2008/05/15
- * Author: PH Kim [ pkim ((AT)) scripts.pe.kr ]
- */
- printUsage := method(
- writeln("Using: io makeDivisionTable.io [numerator] [denominator]")
- writeln("Make a division table in a handy written form.")
- )
- simplify := method(v, width,
- t := "" .. v
- if ((t size) > 2 and (t slice(t size - 2) == ".0")) then (
- t = t silce(t size - 2)
- )
- len := t size
- if (len < width) then (
- t = " " slice(0, width - len) .. t
- )
- t
- )
- makeTable:= method(numer, denom, quotient,
- strNumer := "" .. numer
- strDenom := "" .. denom
- strQuotient := "" .. quotient
- lenN := strNumer size
- lenD := strDenom size
- lenQ := strQuotient size
- offsetLeft := 3 + lenD + 3
- spaces := " "
- uline := "_" repeated(lenN + 2)
- sline := "-" repeated(lenN)
- bias := lenN - lenQ
- writeln(spaces slice(0, offsetLeft) .. spaces slice(0, bias) .. quotient)
- writeln(spaces slice(0, offsetLeft - 2) .. uline)
- write(" " .. strDenom .. " ) " .. strNumer)
- strTmpR := strNumer slice(0, bias + 1)
- tmpR := strTmpR asNumber
- tmpSub := 0
- oneDigit := nil
- for (i, 0, lenQ - 1,
- if (strQuotient slice(i, i + 1) == "0") then (
- if (i < lenQ - 1) then (
- oneDigit = strNumer slice(bias + i + 1, bias + i + 2)
- write(oneDigit)
- strTmpR = strTmpR .. oneDigit
- tmpR = strTmpR asNumber
- )
- ) else (
- writeln("")
- tmpSub = (strQuotient slice(i, i + 1)) asNumber * denom
- writeln(spaces slice(0, offsetLeft ) .. simplify(tmpSub, bias + i + 1))
- writeln(spaces slice(0, offsetLeft) .. sline)
- tmpR = tmpR - tmpSub
- if (tmpR == 0 and i < lenQ - 1) then (
- write(spaces slice(0, offsetLeft) .. spaces slice(0, bias + i + 1))
- ) else (
- write(spaces slice(0, offsetLeft) .. simplify(tmpR, bias + i + 1))
- )
- strTmpR = tmpR asString
- if (i < lenQ - 1) then (
- oneDigit = strNumer slice(bias + i + 1, bias + i + 2)
- write(oneDigit)
- strTmpR = strTmpR .. oneDigit
- tmpR = strTmpR asNumber
- )
- )
- )
- writeln("")
- return tmpR
- )
- if (args size < 3) then (
- printUsage()
- exit(1)
- )
- a := (args at(1)) asNumber
- b := (args at(2)) asNumber
- if (a <= 0) then (
- writeln("Numerator: " .. a)
- writeln("Numerator should be a positive integer.")
- exit(1)
- ) elseif (b <= 0) then (
- writeln("Denominator: " .. b)
- writeln("Denominator should be a positive integer.")
- exit(1)
- )
- q := (a / b) floor
- r := a % b
- write("The result of " .. a .. " / " .. b .. " is ")
- write("quotient " .. q .. ", and ")
- writeln("trmainder " .. r)
- writeln("")
- k := makeTable(a, b, q)
- if (k == r) then (
- writeln("\nThe remainder is " .. k)
- )
- if (k == 0) then (
- writeln(a .. " = " .. b .. " x " .. q)
- writeln(a .. " is a mupltiple of " .. b .. ".")
- writeln(b .. " is a divisor of " .. a .. ".")
- ) else (
- writeln(a .. " = " .. b .. " x " .. q .. " + " .. r)
- writeln(a .. " is not a mupltiple of " .. b .. ".")
- )
실행> io makeDivisionTable.io 500210 61
The result of 500210 / 61 is quotient 8200, and trmainder 10
8200
________
61 ) 500210
488
------
122
122
------
10
The remainder is 10
500210 = 61 x 8200 + 10
500210 is not a mupltiple of 61.
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > Io' 카테고리의 다른 글
이진 파일을 읽어서 16진수로 보여주는 HexView 소스 with Io (0) | 2013.08.05 |
---|---|
삼각형 출력 예제를 통한 여러 가지 소스 비교 with Io (0) | 2008.05.02 |
7비트 ASCII 코드표 만들기 예제 with Io (0) | 2008.05.02 |
진법(radix) 표 만들기 예제 with Io (0) | 2008.05.01 |
대화형 모드의 진법(radix) 변환 예제 with Io (0) | 2008.04.30 |