API Basic Arithmetic ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

+, -, *, /, MOD

ClassicUO โ€ข Basic

์‚ฐ์ˆ ์‹์€ ๊ฐ’์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. +๋Š” ๋”ํ•˜๊ธฐ, -๋Š” ๋นผ๊ธฐ ๋˜๋Š” ๋ถ€ํ˜ธ ๋ฐ˜์ „, *๋Š” ๊ณฑํ•˜๊ธฐ, /๋Š” ๋‚˜๋ˆ„๊ธฐ, MOD๋Š” ์ •์ˆ˜ ๋‚˜๋จธ์ง€์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๊ฑฐ๋‚˜ RETURN์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ ๊ตฌ๋ฌธ

left + right
left - right
-right
left * right
left / right
left MOD right
(expression)

๋งค๊ฐœ๋ณ€์ˆ˜

  • left โ€” ์™ผ์ชฝ ์ˆซ์ž ํ”ผ์—ฐ์‚ฐ์ž: ๋ฆฌํ„ฐ๋Ÿด, ์„ ์–ธ๋œ ๋ณ€์ˆ˜, ๊ด„ํ˜ธ์‹ ๋˜๋Š” ํ•จ์ˆ˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ๋‹จํ•ญ ๋งˆ์ด๋„ˆ์Šค์—๋Š” ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • right โ€” ์˜ค๋ฅธ์ชฝ ์ˆซ์ž ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. /์—์„œ๋Š” ์ œ์ˆ˜์ž…๋‹ˆ๋‹ค. MOD๋Š” Integer๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค์—๋„ 0์ด ์•„๋‹ˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 0.5๋Š” 0์œผ๋กœ ์ž˜๋ ค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • operator / precedence โ€” ์šฐ์„ ์ˆœ์œ„๋Š” ๋‹จํ•ญ ๋งˆ์ด๋„ˆ์Šค, ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„์˜ * / MOD๋ฅผ ์™ผ์ชฝ๋ถ€ํ„ฐ, ์ดํ•ญ + -๋ฅผ ์™ผ์ชฝ๋ถ€ํ„ฐ ๊ณ„์‚ฐํ•˜๋Š” ์ˆœ์„œ์ž…๋‹ˆ๋‹ค. ๊ด„ํ˜ธ๋กœ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จํ•ญ ํ”Œ๋Ÿฌ์Šค, ๊ฑฐ๋“ญ์ œ๊ณฑ ^, ์—ญ์Šฌ๋ž˜์‹œ ์ •์ˆ˜ ๋‚˜๋ˆ—์…ˆ์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

์ •์ˆ˜์˜ +, -, *, ๋‹จํ•ญ ๋งˆ์ด๋„ˆ์Šค๋Š” Integer์ž…๋‹ˆ๋‹ค. ์ฐธ์—ฌํ•˜๋Š” ์ˆซ์ž ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ Decimal์ด๋ฉด Decimal์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. /๋Š” ํ•ญ์ƒ Decimal์ด๋ฉฐ 5/2=2.5์ž…๋‹ˆ๋‹ค. MOD๋Š” Integer๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์‚ฐ๋œ ์ˆซ์ž์ด๋ฉฐ ์„ฑ๊ณต ์—ฌ๋ถ€๋‚˜ ์•„์ดํ…œ ์ˆ˜๋ผ๋Š” ์˜๋ฏธ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

๋™์ž‘

  • MOD๋Š” ๋‘ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ถ€ํ˜ธ ์žˆ๋Š” 32๋น„ํŠธ ์ •์ˆ˜๋กœ ๋ฐ”๊พธ๊ณ  ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ ์†Œ์ˆ˜ ๋ถ€๋ถ„์„ 0 ๋ฐฉํ–ฅ์œผ๋กœ ์ž๋ฆ…๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ๋ถ€ํ˜ธ๋Š” ํ”ผ์ œ์ˆ˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. -17 MOD 5=-2, -2147483648 MOD -1=0์ž…๋‹ˆ๋‹ค. mOd์ฒ˜๋Ÿผ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ์„ž์–ด๋„ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • MOD์˜ ์ œ์ˆ˜๊ฐ€ 0์ด๋ฉด TRY/CATCH๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. /๋Š” ๋ถ€๋™์†Œ์ˆ˜์  ๋‚˜๋ˆ—์…ˆ์œผ๋กœ, 0์ด ์•„๋‹Œ ๋ถ„์ž๋ฅผ 0์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ๋ถ€ํ˜ธ ์žˆ๋Š” Infinity, 0/0์€ NaN์ž…๋‹ˆ๋‹ค. ์œ ํ•œํ•œ ๊ฐ’์ด ํ•„์š”ํ•˜๋ฉด ์ œ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜์„ธ์š”.
  • ์ •์ˆ˜ +, -, *, ๋ถ€ํ˜ธ ๋ฐ˜์ „์€ ์˜ค๋ฒ„ํ”Œ๋กœ ์‹œ ํ•˜์œ„ 32๋น„ํŠธ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ๋” ํฐ ์ •์ˆ˜ํ˜•์œผ๋กœ ์ž๋™ ํ™•์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทผ์‚ฟ๊ฐ’์„ ํ—ˆ์šฉํ•˜๋Š” ํฐ ๊ณ„์‚ฐ์€ ๋จผ์ € ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ Decimal๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋™์†Œ์ˆ˜์ ์—๋Š” ์ด์ง„ ๋ฐ˜์˜ฌ๋ฆผ ์˜ค์ฐจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜ ์ˆซ์ž ์—ฐ์‚ฐ์ž๋Š” ํ…์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. String+String์€ ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•˜๊ณ  String+Integer๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž ํ…์ŠคํŠธ๋Š” CDbl ๋“ฑ์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์„ธ์š”. ์ค‘์œ„ MOD๋Š” ๋ณ„๋„ BasicMod ํ•จ์ˆ˜๋ณด๋‹ค ์ •์ˆ˜ ํ…์ŠคํŠธ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.
  • ํ‰๊ฐ€๊ธฐ์—์„œ ์‹์˜ ์ˆœ์„œ๋Œ€๋กœ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์—ฐ์‚ฐ์ž ํ† ํฐ์„ ์„ ํƒํ•˜์—ฌ InjectionValue๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ด„ํ˜ธ ์•ˆ์˜ ์‹์€ ๋จผ์ € ๋๋‚ฉ๋‹ˆ๋‹ค. ํ”ผ์—ฐ์‚ฐ์ž ์ž์ฒด๊ฐ€ ํ•ด๋‹น API๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ํ•œ ์ด๋™, ๋Œ€๊ธฐ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

1. ์šฐ์„ ์ˆœ์œ„์™€ ๊ด„ํ˜ธ

# plain=2+3*4๋Š” ๊ณฑ์…ˆ์„ ๋จผ์ € ๊ณ„์‚ฐํ•˜์—ฌ 14๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. grouped=(2+3)*4๋Š” 20์ž…๋‹ˆ๋‹ค. Main์€ plain*100+grouped=1420์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋‘ ๊ณ„์‚ฐ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
SUB Main()
    VAR plain = 2 + 3 * 4
    VAR grouped = (2 + 3) * 4
    RETURN plain * 100 + grouped
END SUB

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

plain=2+3*4๋Š” ๊ณฑ์…ˆ์„ ๋จผ์ € ๊ณ„์‚ฐํ•˜์—ฌ 14๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. grouped=(2+3)4๋Š” 20์ž…๋‹ˆ๋‹ค. Main์€ plain100+grouped=1420์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋‘ ๊ณ„์‚ฐ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

2. ์™„์„ฑ๋œ ๋ฌถ์Œ๊ณผ ๋‚จ์€ ์•„์ดํ…œ

# DescribeBatches๋Š” total=27, size=5๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. size ๊ฒ€์‚ฌ๋Š” 0 ์ดํ•˜์˜ ๋ฌถ์Œ ํฌ๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. Fix(total/size)๋Š” 5.4๋ฅผ ์™„์„ฑ๋œ 5๋ฌถ์Œ์œผ๋กœ ๋ฐ”๊พธ๊ณ , total mOd size๋Š” ๋‚จ์€ 2๊ฐœ๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. CStr๋กœ ๋ฐ˜ํ™˜ ๋ฌธ์ž์—ด "5:2"๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ณด์กฐ ํ•จ์ˆ˜ ์ „์ฒด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
Option Explicit On
FUNCTION DescribeBatches(total, size)
    IF size <= 0 THEN
        RETURN "invalid"
    END IF
    VAR whole = Fix(total / size)
    VAR remaining = total mOd size
    RETURN CStr(whole) + ":" + CStr(remaining)
END FUNCTION
SUB Main()
    RETURN DescribeBatches(27, 5)
END SUB

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

DescribeBatches๋Š” total=27, size=5๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. size ๊ฒ€์‚ฌ๋Š” 0 ์ดํ•˜์˜ ๋ฌถ์Œ ํฌ๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. Fix(total/size)๋Š” 5.4๋ฅผ ์™„์„ฑ๋œ 5๋ฌถ์Œ์œผ๋กœ ๋ฐ”๊พธ๊ณ , total mOd size๋Š” ๋‚จ์€ 2๊ฐœ๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. CStr๋กœ ๋ฐ˜ํ™˜ ๋ฌธ์ž์—ด "5:2"๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ณด์กฐ ํ•จ์ˆ˜ ์ „์ฒด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

3. ์ž˜๋ชป๋œ ์ œ์ˆ˜ ์ฒ˜๋ฆฌ

# 10 MOD 0์€ unusedResult์— ๋Œ€์ž…ํ•˜๊ธฐ ์ „์— ์˜ค๋ฅ˜๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. CATCH๋Š” problem์— ์˜ค๋ฅ˜๋ฅผ ์ €์žฅํ•˜๊ณ  caught=TRUE๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Main์˜ ๋ฐ˜ํ™˜๊ฐ’ 1์€ ์ด ์˜ˆ์ œ์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ํ‘œ์‹œ์ด๋ฉฐ ์‹คํŒจํ•œ MOD์˜ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
Option Explicit On
SUB Main()
    VAR caught = FALSE
    TRY
        VAR unusedResult = 10 MOD 0
    CATCH problem
        caught = TRUE
    END TRY
    RETURN caught
END SUB

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

10 MOD 0์€ unusedResult์— ๋Œ€์ž…ํ•˜๊ธฐ ์ „์— ์˜ค๋ฅ˜๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. CATCH๋Š” problem์— ์˜ค๋ฅ˜๋ฅผ ์ €์žฅํ•˜๊ณ  caught=TRUE๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Main์˜ ๋ฐ˜ํ™˜๊ฐ’ 1์€ ์ด ์˜ˆ์ œ์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ํ‘œ์‹œ์ด๋ฉฐ ์‹คํŒจํ•œ MOD์˜ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


en ยท ru ยท uk ยท fr ยท de ยท it ยท es ยท zh-tw ยท ja ยท ko

Basic