프로그래밍/Io

80컬럼 컨솔에 19단표 출력하기 예제 for Io

Scripter 2008. 4. 7. 12:03

다음 소스 코드는 80컬럼 컨솔에 19단표 출력하기 예제 (2) for Groovy 에 올려진 Groovy 소스 코드를 Io 소스 코드로 고친 것이다. C, C++, Java, Groovy 언어에서는 블럭을 둘러싸는 기호로 중괄호 열기 기호"{"와 중괄호 닫기 기호"}" 를 많이 사용하였지만, Io 언어에서는 반복구문, 제어구문까지 모두 메소드(함수)이므로, 함수의 괄호 열기 기호 "("와 괄호 닫기 기호")"를 많이 사용한다는 것을 잊지 말아야 한다.

Groovy 언어에서 변수 처음 사용 시에

        def varName = value

처럼 def 예약어를 사용하듯이 Io에서는

        varName := value

처럼 (등호 "=" 대신)  := 를 사용한다. 일단 변수가 생성되고 나면 나중에는 그 변수가 아무 타입의 값이나 참조해도 된다.

        a := "string"    // 스트링 타입 참조
        a = 200           // 숫자 타입 참조



    Io 언어의 for 반복문 예
          for(i, 1, 19, i println)


    Io 언어의 if ... 조건문 예
          i := 20
          if(i > 0) then((i .. " is positive.") println)


    Io 언어의 if ... else ... 조건문 예
          i := -30
          if(i > 0) then((i .. " is positive.") println) else((i .. " is not positive.") println)
    또는
          i := -30
          if(i > 0) then(
              (i .. " is positive.") println
          ) else(
              (i .. " is not positive.") printl
          )


    Io 언어의 if ... elseif ... else ... 조건문 예
          i := 0
          if(i > 0) then(
              (i .. " is positive.") println
          ) elseif(i < 0) then(
              (i .. " is negative.") println
          ) else(
              (i .. " is zero.") println
          )

   * Io 소스에 한글이 포함된 경우 반드시 UTF-8 인코딩으로 저장해야 한다.
   * 그렇지 않으면 에러기 난다.
   * Ubuntu에서는 OS 자체에서 UTF-8을 기본으로 하고 있으므로,
   * 한글 처리에 아무 문제가 없을 것이다.

 

  1. /*
  2.  *  Filename: testForFor.io
  3.  *
  4.  *  Execute:  io testForFor.io
  5.  *
  6.  *  Date:  2008. 4. 7.
  7.  */
  8. getDan := method(dan,
  9.     t := list("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
  10.     for (j, 0, 18,
  11.         sa := "" .. dan
  12.         if (sa size < 2) then (
  13.             sa = " " .. sa
  14.         )
  15.         sb := "" .. (j + 1)
  16.         if (sb size < 2) then (
  17.             sb = " " .. sb
  18.         )
  19.         sval := "" .. (dan*(j + 1))
  20.         if (sval size < 2) then (
  21.             sval = "  " .. sval
  22.         ) elseif (sval size < 3) then (
  23.             sval = " " .. sval
  24.         )
  25.         t atPut(j,  sa .. " x " .. sb .. " = " .. sval )
  26.     )
  27.     t
  28. )
  29. // 19단표를 모두 80컬럼 컨솔에 출력한다.
  30. printAllNineteenDan := method(
  31.     arr := List clone
  32.     for (i, 2, 19,
  33.         arr append( getDan(i) )
  34.     )
  35.     // 아래는 배열 대신 수정불가(immutable) 리스트를 사용하는 Groovy 코드이다.
  36.     d := list( 2, 7, 11, 16 )      // 각 줄단위 블럭의 첫단
  37.     counter := list( 5, 4, 5, 4 )    // 각 줄단위 블럭에 속한 단의 개수
  38.     lines := list("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
  39.     for (k, 0, d size - 1,
  40.         // 80 바이트 길이의 한 줄씩 완성
  41.         for (i, 0, 18,
  42.             lines atPut(i, arr at(d at(k) -2) at(i) )
  43.             for (j, 1, counter at(k) - 1,
  44.                 lines atPut(i, lines at(i) .. "   " ..  arr at (d at(2) - 2 + j) at(i) )
  45.            )
  46.         )
  47.         // 8-바이트 길이의 한 줄씩 출력
  48.         for (i, 0, 18,
  49.             lines at(i) println
  50.         )
  51.         "" println
  52.     )
  53. )
  54. printAllNineteenDan()




실행> io testForFor.io

 2 x  1 =   2    3 x  1 =   3    4 x  1 =   4    5 x  1 =   5    6 x  1 =   6
 2 x  2 =   4    3 x  2 =   6    4 x  2 =   8    5 x  2 =  10    6 x  2 =  12
 2 x  3 =   6    3 x  3 =   9    4 x  3 =  12    5 x  3 =  15    6 x  3 =  18
 2 x  4 =   8    3 x  4 =  12    4 x  4 =  16    5 x  4 =  20    6 x  4 =  24
 2 x  5 =  10    3 x  5 =  15    4 x  5 =  20    5 x  5 =  25    6 x  5 =  30
 2 x  6 =  12    3 x  6 =  18    4 x  6 =  24    5 x  6 =  30    6 x  6 =  36
 2 x  7 =  14    3 x  7 =  21    4 x  7 =  28    5 x  7 =  35    6 x  7 =  42
 2 x  8 =  16    3 x  8 =  24    4 x  8 =  32    5 x  8 =  40    6 x  8 =  48
 2 x  9 =  18    3 x  9 =  27    4 x  9 =  36    5 x  9 =  45    6 x  9 =  54
 2 x 10 =  20    3 x 10 =  30    4 x 10 =  40    5 x 10 =  50    6 x 10 =  60
 2 x 11 =  22    3 x 11 =  33    4 x 11 =  44    5 x 11 =  55    6 x 11 =  66
 2 x 12 =  24    3 x 12 =  36    4 x 12 =  48    5 x 12 =  60    6 x 12 =  72
 2 x 13 =  26    3 x 13 =  39    4 x 13 =  52    5 x 13 =  65    6 x 13 =  78
 2 x 14 =  28    3 x 14 =  42    4 x 14 =  56    5 x 14 =  70    6 x 14 =  84
 2 x 15 =  30    3 x 15 =  45    4 x 15 =  60    5 x 15 =  75    6 x 15 =  90
 2 x 16 =  32    3 x 16 =  48    4 x 16 =  64    5 x 16 =  80    6 x 16 =  96
 2 x 17 =  34    3 x 17 =  51    4 x 17 =  68    5 x 17 =  85    6 x 17 = 102
 2 x 18 =  36    3 x 18 =  54    4 x 18 =  72    5 x 18 =  90    6 x 18 = 108
 2 x 19 =  38    3 x 19 =  57    4 x 19 =  76    5 x 19 =  95    6 x 19 = 114

 7 x  1 =   7    8 x  1 =   8    9 x  1 =   9   10 x  1 =  10
 7 x  2 =  14    8 x  2 =  16    9 x  2 =  18   10 x  2 =  20
 7 x  3 =  21    8 x  3 =  24    9 x  3 =  27   10 x  3 =  30
 7 x  4 =  28    8 x  4 =  32    9 x  4 =  36   10 x  4 =  40
 7 x  5 =  35    8 x  5 =  40    9 x  5 =  45   10 x  5 =  50
 7 x  6 =  42    8 x  6 =  48    9 x  6 =  54   10 x  6 =  60
 7 x  7 =  49    8 x  7 =  56    9 x  7 =  63   10 x  7 =  70
 7 x  8 =  56    8 x  8 =  64    9 x  8 =  72   10 x  8 =  80
 7 x  9 =  63    8 x  9 =  72    9 x  9 =  81   10 x  9 =  90
 7 x 10 =  70    8 x 10 =  80    9 x 10 =  90   10 x 10 = 100
 7 x 11 =  77    8 x 11 =  88    9 x 11 =  99   10 x 11 = 110
 7 x 12 =  84    8 x 12 =  96    9 x 12 = 108   10 x 12 = 120
 7 x 13 =  91    8 x 13 = 104    9 x 13 = 117   10 x 13 = 130
 7 x 14 =  98    8 x 14 = 112    9 x 14 = 126   10 x 14 = 140
 7 x 15 = 105    8 x 15 = 120    9 x 15 = 135   10 x 15 = 150
 7 x 16 = 112    8 x 16 = 128    9 x 16 = 144   10 x 16 = 160
 7 x 17 = 119    8 x 17 = 136    9 x 17 = 153   10 x 17 = 170
 7 x 18 = 126    8 x 18 = 144    9 x 18 = 162   10 x 18 = 180
 7 x 19 = 133    8 x 19 = 152    9 x 19 = 171   10 x 19 = 190

11 x  1 =  11   12 x  1 =  12   13 x  1 =  13   14 x  1 =  14   15 x  1 =  15
11 x  2 =  22   12 x  2 =  24   13 x  2 =  26   14 x  2 =  28   15 x  2 =  30
11 x  3 =  33   12 x  3 =  36   13 x  3 =  39   14 x  3 =  42   15 x  3 =  45
11 x  4 =  44   12 x  4 =  48   13 x  4 =  52   14 x  4 =  56   15 x  4 =  60
11 x  5 =  55   12 x  5 =  60   13 x  5 =  65   14 x  5 =  70   15 x  5 =  75
11 x  6 =  66   12 x  6 =  72   13 x  6 =  78   14 x  6 =  84   15 x  6 =  90
11 x  7 =  77   12 x  7 =  84   13 x  7 =  91   14 x  7 =  98   15 x  7 = 105
11 x  8 =  88   12 x  8 =  96   13 x  8 = 104   14 x  8 = 112   15 x  8 = 120
11 x  9 =  99   12 x  9 = 108   13 x  9 = 117   14 x  9 = 126   15 x  9 = 135
11 x 10 = 110   12 x 10 = 120   13 x 10 = 130   14 x 10 = 140   15 x 10 = 150
11 x 11 = 121   12 x 11 = 132   13 x 11 = 143   14 x 11 = 154   15 x 11 = 165
11 x 12 = 132   12 x 12 = 144   13 x 12 = 156   14 x 12 = 168   15 x 12 = 180
11 x 13 = 143   12 x 13 = 156   13 x 13 = 169   14 x 13 = 182   15 x 13 = 195
11 x 14 = 154   12 x 14 = 168   13 x 14 = 182   14 x 14 = 196   15 x 14 = 210
11 x 15 = 165   12 x 15 = 180   13 x 15 = 195   14 x 15 = 210   15 x 15 = 225
11 x 16 = 176   12 x 16 = 192   13 x 16 = 208   14 x 16 = 224   15 x 16 = 240
11 x 17 = 187   12 x 17 = 204   13 x 17 = 221   14 x 17 = 238   15 x 17 = 255
11 x 18 = 198   12 x 18 = 216   13 x 18 = 234   14 x 18 = 252   15 x 18 = 270
11 x 19 = 209   12 x 19 = 228   13 x 19 = 247   14 x 19 = 266   15 x 19 = 285

16 x  1 =  16   17 x  1 =  17   18 x  1 =  18   19 x  1 =  19
16 x  2 =  32   17 x  2 =  34   18 x  2 =  36   19 x  2 =  38
16 x  3 =  48   17 x  3 =  51   18 x  3 =  54   19 x  3 =  57
16 x  4 =  64   17 x  4 =  68   18 x  4 =  72   19 x  4 =  76
16 x  5 =  80   17 x  5 =  85   18 x  5 =  90   19 x  5 =  95
16 x  6 =  96   17 x  6 = 102   18 x  6 = 108   19 x  6 = 114
16 x  7 = 112   17 x  7 = 119   18 x  7 = 126   19 x  7 = 133
16 x  8 = 128   17 x  8 = 136   18 x  8 = 144   19 x  8 = 152
16 x  9 = 144   17 x  9 = 153   18 x  9 = 162   19 x  9 = 171
16 x 10 = 160   17 x 10 = 170   18 x 10 = 180   19 x 10 = 190
16 x 11 = 176   17 x 11 = 187   18 x 11 = 198   19 x 11 = 209
16 x 12 = 192   17 x 12 = 204   18 x 12 = 216   19 x 12 = 228
16 x 13 = 208   17 x 13 = 221   18 x 13 = 234   19 x 13 = 247
16 x 14 = 224   17 x 14 = 238   18 x 14 = 252   19 x 14 = 266
16 x 15 = 240   17 x 15 = 255   18 x 15 = 270   19 x 15 = 285
16 x 16 = 256   17 x 16 = 272   18 x 16 = 288   19 x 16 = 304
16 x 17 = 272   17 x 17 = 289   18 x 17 = 306   19 x 17 = 323
16 x 18 = 288   17 x 18 = 306   18 x 18 = 324   19 x 18 = 342
16 x 19 = 304   17 x 19 = 323   18 x 19 = 342   19 x 19 = 361


Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.