SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
アルゴリズムとデータ構造

  2011.12.9 (WEB用)
今日の内容
           第4章 ループと配列

• 4.1   for ループ
プログラムの処理イメージ
 # datatype.rb
 str 1= ARGV[0]
 str2 = ARGV[1]
 print str1 + str2      # oddeven.rb
 n1 = str1.to_i         n = ARGV[0].to_i
 n2 = str2.to_i         if n % 2 == 0 then
 print n1 + n2, “¥n”       puts “#{n}は偶数です.”
 print n1 / n2, “¥n”                           # sumsquare.rb
                        else                   n = ARGV[0].to_i
                           puts “#{n}は奇数です.”   sum = 0
                        end                    for i in 1 .. n
                                                 sum += I ** 2
上から下へ1行1行                                      end
単純処理                                           puts sum
                       条件分岐で実行文を
                       選択的に処理
                                               ループ文で実行文を
                                               繰り返し処理
for ループで繰り返す
 1 # forloop1.rb
 2 for i in 5 .. 10
 3     puts i
 4 end
上のスクリプト実行すると以下のように6行の結果が出力される
   > ruby forloop1.rb
   5
   6
   7
   8
   9
   10
for ループで繰り返す
1 # forloop1.rb
2 for i in 5 .. 10
3     puts i
4 end


  for ループを使って繰り返し処理をしている。
for ループで繰り返す
1 # forloop1.rb
2 for i in 5 .. 10
3     puts i
4 end

          ループ変数      範囲リテラル
             ↓        ↓
           for i in 5 .. 10
               処理文
           end
for ループで繰り返す
1 # forloop1.rb
2 for i in 5 .. 10     #i=5
3     puts i
4 end
    まずはじめに”5”が i に代入され、3行目を実行。
  > ruby forloop1.rb
  5
for ループで繰り返す
1 # forloop1.rb
2 for i in 5 .. 10     #i=6
3     puts i
4 end
      次に一旦2行目に戻り、”6”が i に代入される
  > ruby forloop1.rb
  5
for ループで繰り返す
1 # forloop1.rb
2 for i in 5 .. 10      #i=6
3     puts i
4 end
                     再び3行目を実行
  > ruby forloop1.rb
  5
  6
for ループで繰り返す
1 # forloop1.rb
2 for i in 5 .. 10     #i=7
3     puts i
4 end
                これを1つずつ繰り返す
  > ruby forloop1.rb
  5
  6
  7
for ループで繰り返す
1 # forloop1.rb
2 for i in 5 .. 10     #i=8
3     puts i
4 end
                これを1つずつ繰り返す
  > ruby forloop1.rb
  5
  6
  7
  8
for ループで繰り返す
1 # forloop1.rb
2 for i in 5 .. 10     #i=9
3     puts i
4 end
                これを1つずつ繰り返す
  > ruby forloop1.rb
  5
  6
  7
  8
  9
for ループで繰り返す
1 # forloop1.rb
2 for i in 5 .. 10     # i = 10
3     puts i
4 end
  範囲の終値(ここでは10)までくると、ループはストップ
  > ruby forloop1.rb
  5
  6
  7
  8
  9
  10
範囲オブジェクト
[初期値] .. [終値] のように書かれたリテラルは
    範囲オブジェクトとして扱われる


           5 .. 10
            ↑
          範囲演算子
範囲オブジェクト
 下の例では 「5から10までの整数」 を表しており
初期値と終値(初期値<終値)には整数しか使えない


            5 .. 10

       [5, 6, 7, 8, 9, 10]
問題 4-1
• for ループを使って、”おはよう!” という文字列を
  100回改行しながら出力するプログラムを書きなさい。

• ファイル名は “ohayou.rb”
  (自分が分かればファイル名は何でも構いません)
問題 4-1 解答例

# ohayou.rb
for i in 1 .. 100
   puts “おはよう!”
end
出力行数の調べ方

  # ohayou.rb
  for i in 1 .. 100
     puts “おはよう!”
  end
 実際に何行出力されたかを調べるには、以下のように
ruby の実行コマンドの後にパイプ (|)とwc コマンド (wc –l)
        を組み合わせることで確認できる
  > ruby ohayou.rb | wc -l
  100       <= 100行出力されていることが分かる
問題 4-2
• for ループを使って、 5, 10, 15, .... , 100 と、100まで
  の5の倍数を改行しながら出力するプログラムを書
  きなさい。

• ヒント:終値は 100 にする必要はない。

• ファイル名は “multiple.rb” (任意可)
問題 4-2 解答例1

# multiple.rb
for i in 1 .. 20
   puts i * 5
end
問題 4-2 解答例2

# multiple.rb
for i in 1 .. 100   # 1から100まで全ての整数
   if i % 5 == 0    # 5の倍数かチェック
       puts i
   end
end
和を計算する
 1   # sumsquare.rb
 2   n = ARGV[0].to_i
 3   sum = 0
 4   for i in 1 .. n
 5      sum += i
 6   end
 7   puts sum

 繰り返し処理は数の和を計算する時によく使われます
1からある数まで足し合わせるプログラムを見てみましょう
和を計算する
 1   # sumsquare.rb
 2   n = ARGV[0].to_i
 3   sum = 0
 4   for i in 1 .. n
 5      sum += i
 6   end
 7   puts sum

範囲オブジェクトの終値をコマンドラインから取得(2行目)

  数を足し合わせていくための変数を用意(3行目)
       (最初は0を代入しておく)
和を計算する
1   # sumsquare.rb
2   n = ARGV[0].to_i
3   sum = 0
4   for i in 1 .. n
5      sum += i
6   end
7   puts sum

    あとは 1からn までの範囲で for ループにより
               sum += i
        の計算を繰り返す(4~6行目)
和を計算する
1   # sumsquare.rb
2   n = ARGV[0].to_i
3   sum = 0
4   for i in 1 .. n
5      sum += i
6   end
7   puts sum

      足し合わされた合計値を出力(7行目)
問題 4-3
• 正の整数 n が与えられたとき、 2n - 1 は 1, 3, 5, ....
  と、「1から数えて n番目」の奇数の値になる。コマン
  ドラインから正の整数 n を受け取って、1 から 2n - 1
  までの奇数の和を求めるプログラムを書きなさい。


• ファイル名は “odd_sum.rb” (任意可)
問題 4-3 解答例

# odd_sum.rb
n = ARGV[0].to_i
sum = 0
for i in 1 .. n
   sum += 2 * i - 1
end
puts sum
for の二重ループ
1 # 9x9.rb
2 for i in 1 .. 9
3    for j in 1 .. 9
4        print “#{i * j} “
5    end
6    puts
7 end

 forループの中に別のforループを使っている例

九九の計算をする場合について考えてみましょう
for の二重ループ
1 # 9x9.rb                 第1ループ
2 for i in 1 .. 9 第2ループ
3    for j in 1 .. 9
4        print “#{i * j} “
5    end
6    puts
7 end

          第1ループはループ変数が i
          第2ループはループ変数が j
for の二重ループ
1 # 9x9.rb
2 for i in 1 .. 9            #i=1
3    for j in 1 .. 9
4        print “#{i * j} “
5    end
6    puts
7 end

i = 1 に対して 1×1, 1×2, ..., 1×9と順に計算され
    (3~5行目)、次の段に行く前に改行(6行目)
9x9.rb の実行結果


> ruby 9x9.rb
123456789
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
問題4-4
9x9.rb を改良して、下のように整形された出力をしなさい。
      (ヒント: 数字は常に3桁の幅に納まっている)

 > ruby 9x9.rb
  1 2 3 4 5 6 7 8 9
  2 4 6 8 10 12 14 16 18
  3 6 9 12 15 18 21 24 27
  4 8 12 16 20 24 28 32 36
  5 10 15 20 25 30 35 40 45
  6 12 18 24 30 36 42 48 54
  7 14 21 28 35 42 49 56 63
  8 16 24 32 40 48 56 64 72
  9 18 27 36 45 54 63 72 81
問題4-4 解答例
# 9x9.rb
for i in 1 .. 9
   for j in 1 .. 9
       printf (%3d, i * j)
   end
   puts
end

Más contenido relacionado

La actualidad más candente

Precise garbage collection for c
Precise garbage collection for cPrecise garbage collection for c
Precise garbage collection for c
miura1729
 
条件分岐・繰り返し処理
条件分岐・繰り返し処理条件分岐・繰り返し処理
条件分岐・繰り返し処理
rippro
 

La actualidad más candente (20)

JavaScript関数のあれこれ
JavaScript関数のあれこれJavaScript関数のあれこれ
JavaScript関数のあれこれ
 
最適化の手前の数学
最適化の手前の数学最適化の手前の数学
最適化の手前の数学
 
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
 
[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
会津合宿2015Day3:D問題
 
勉強会課題①
勉強会課題①勉強会課題①
勉強会課題①
 
マーク&スイープ勉強会
マーク&スイープ勉強会マーク&スイープ勉強会
マーク&スイープ勉強会
 
Precise garbage collection for c
Precise garbage collection for cPrecise garbage collection for c
Precise garbage collection for c
 
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続V6でJIT・部分適用・継続
V6でJIT・部分適用・継続
 
関数
関数関数
関数
 
ライントレースで役立った「キュー」の話し
ライントレースで役立った「キュー」の話しライントレースで役立った「キュー」の話し
ライントレースで役立った「キュー」の話し
 
Erlang で再帰
Erlang で再帰Erlang で再帰
Erlang で再帰
 
Delimited Dynamic Binding
Delimited Dynamic BindingDelimited Dynamic Binding
Delimited Dynamic Binding
 
Qlik Tips 20220315 Null値の課題と対策
Qlik Tips 20220315 Null値の課題と対策Qlik Tips 20220315 Null値の課題と対策
Qlik Tips 20220315 Null値の課題と対策
 
Python勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージPython勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージ
 
rで踊るパスタ
rで踊るパスタrで踊るパスタ
rで踊るパスタ
 
全探索
全探索全探索
全探索
 
条件分岐・繰り返し処理
条件分岐・繰り返し処理条件分岐・繰り返し処理
条件分岐・繰り返し処理
 
言語処理系入門4
言語処理系入門4言語処理系入門4
言語処理系入門4
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
 

Destacado

Destacado (8)

2011年10月28日
2011年10月28日2011年10月28日
2011年10月28日
 
2012年1月13日
2012年1月13日2012年1月13日
2012年1月13日
 
2011年11月18日
2011年11月18日2011年11月18日
2011年11月18日
 
2011年11月11日
2011年11月11日2011年11月11日
2011年11月11日
 
2011年11月25日
2011年11月25日2011年11月25日
2011年11月25日
 
2011年12月2日
2011年12月2日2011年12月2日
2011年12月2日
 
公開鍵、秘密鍵ってなに?
公開鍵、秘密鍵ってなに?公開鍵、秘密鍵ってなに?
公開鍵、秘密鍵ってなに?
 
2012年1月20日
2012年1月20日2012年1月20日
2012年1月20日
 

Similar a 2011年12月9日

Ruby紹介(pdf)
Ruby紹介(pdf)Ruby紹介(pdf)
Ruby紹介(pdf)
Gohryuh
 
新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた
Tomoaki Ueda
 
フィボナッチ数列の作り方
フィボナッチ数列の作り方フィボナッチ数列の作り方
フィボナッチ数列の作り方
Tomoya Kawanishi
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
 
PFDS 8.4.3 Real-Time Deques
PFDS 8.4.3 Real-Time DequesPFDS 8.4.3 Real-Time Deques
PFDS 8.4.3 Real-Time Deques
昌平 村山
 
Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1
cohama
 

Similar a 2011年12月9日 (20)

cp-5. 繰り返し計算
cp-5. 繰り返し計算cp-5. 繰り返し計算
cp-5. 繰り返し計算
 
Ruby紹介(pdf)
Ruby紹介(pdf)Ruby紹介(pdf)
Ruby紹介(pdf)
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
あまぁいRcpp生活
あまぁいRcpp生活あまぁいRcpp生活
あまぁいRcpp生活
 
新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
フィボナッチ数列の作り方
フィボナッチ数列の作り方フィボナッチ数列の作り方
フィボナッチ数列の作り方
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
普通のコードがCodeGolfコードになるまで in Ruby
普通のコードがCodeGolfコードになるまで in Ruby普通のコードがCodeGolfコードになるまで in Ruby
普通のコードがCodeGolfコードになるまで in Ruby
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
第6回
第6回第6回
第6回
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
Ruby紹介3(pdf)
Ruby紹介3(pdf)Ruby紹介3(pdf)
Ruby紹介3(pdf)
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
PFDS 8.4.3 Real-Time Deques
PFDS 8.4.3 Real-Time DequesPFDS 8.4.3 Real-Time Deques
PFDS 8.4.3 Real-Time Deques
 
Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
WUPC2012
WUPC2012WUPC2012
WUPC2012
 

2011年12月9日

  • 2. 今日の内容 第4章 ループと配列 • 4.1 for ループ
  • 3. プログラムの処理イメージ # datatype.rb str 1= ARGV[0] str2 = ARGV[1] print str1 + str2 # oddeven.rb n1 = str1.to_i n = ARGV[0].to_i n2 = str2.to_i if n % 2 == 0 then print n1 + n2, “¥n” puts “#{n}は偶数です.” print n1 / n2, “¥n” # sumsquare.rb else n = ARGV[0].to_i puts “#{n}は奇数です.” sum = 0 end for i in 1 .. n sum += I ** 2 上から下へ1行1行 end 単純処理 puts sum 条件分岐で実行文を 選択的に処理 ループ文で実行文を 繰り返し処理
  • 4. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 3 puts i 4 end 上のスクリプト実行すると以下のように6行の結果が出力される > ruby forloop1.rb 5 6 7 8 9 10
  • 5. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 3 puts i 4 end for ループを使って繰り返し処理をしている。
  • 6. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 3 puts i 4 end ループ変数 範囲リテラル ↓ ↓ for i in 5 .. 10 処理文 end
  • 7. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 #i=5 3 puts i 4 end まずはじめに”5”が i に代入され、3行目を実行。 > ruby forloop1.rb 5
  • 8. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 #i=6 3 puts i 4 end 次に一旦2行目に戻り、”6”が i に代入される > ruby forloop1.rb 5
  • 9. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 #i=6 3 puts i 4 end 再び3行目を実行 > ruby forloop1.rb 5 6
  • 10. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 #i=7 3 puts i 4 end これを1つずつ繰り返す > ruby forloop1.rb 5 6 7
  • 11. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 #i=8 3 puts i 4 end これを1つずつ繰り返す > ruby forloop1.rb 5 6 7 8
  • 12. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 #i=9 3 puts i 4 end これを1つずつ繰り返す > ruby forloop1.rb 5 6 7 8 9
  • 13. for ループで繰り返す 1 # forloop1.rb 2 for i in 5 .. 10 # i = 10 3 puts i 4 end 範囲の終値(ここでは10)までくると、ループはストップ > ruby forloop1.rb 5 6 7 8 9 10
  • 14. 範囲オブジェクト [初期値] .. [終値] のように書かれたリテラルは 範囲オブジェクトとして扱われる 5 .. 10 ↑ 範囲演算子
  • 15. 範囲オブジェクト 下の例では 「5から10までの整数」 を表しており 初期値と終値(初期値<終値)には整数しか使えない 5 .. 10 [5, 6, 7, 8, 9, 10]
  • 16. 問題 4-1 • for ループを使って、”おはよう!” という文字列を 100回改行しながら出力するプログラムを書きなさい。 • ファイル名は “ohayou.rb” (自分が分かればファイル名は何でも構いません)
  • 17. 問題 4-1 解答例 # ohayou.rb for i in 1 .. 100 puts “おはよう!” end
  • 18. 出力行数の調べ方 # ohayou.rb for i in 1 .. 100 puts “おはよう!” end 実際に何行出力されたかを調べるには、以下のように ruby の実行コマンドの後にパイプ (|)とwc コマンド (wc –l) を組み合わせることで確認できる > ruby ohayou.rb | wc -l 100 <= 100行出力されていることが分かる
  • 19. 問題 4-2 • for ループを使って、 5, 10, 15, .... , 100 と、100まで の5の倍数を改行しながら出力するプログラムを書 きなさい。 • ヒント:終値は 100 にする必要はない。 • ファイル名は “multiple.rb” (任意可)
  • 20. 問題 4-2 解答例1 # multiple.rb for i in 1 .. 20 puts i * 5 end
  • 21. 問題 4-2 解答例2 # multiple.rb for i in 1 .. 100 # 1から100まで全ての整数 if i % 5 == 0 # 5の倍数かチェック puts i end end
  • 22. 和を計算する 1 # sumsquare.rb 2 n = ARGV[0].to_i 3 sum = 0 4 for i in 1 .. n 5 sum += i 6 end 7 puts sum 繰り返し処理は数の和を計算する時によく使われます 1からある数まで足し合わせるプログラムを見てみましょう
  • 23. 和を計算する 1 # sumsquare.rb 2 n = ARGV[0].to_i 3 sum = 0 4 for i in 1 .. n 5 sum += i 6 end 7 puts sum 範囲オブジェクトの終値をコマンドラインから取得(2行目) 数を足し合わせていくための変数を用意(3行目) (最初は0を代入しておく)
  • 24. 和を計算する 1 # sumsquare.rb 2 n = ARGV[0].to_i 3 sum = 0 4 for i in 1 .. n 5 sum += i 6 end 7 puts sum あとは 1からn までの範囲で for ループにより sum += i の計算を繰り返す(4~6行目)
  • 25. 和を計算する 1 # sumsquare.rb 2 n = ARGV[0].to_i 3 sum = 0 4 for i in 1 .. n 5 sum += i 6 end 7 puts sum 足し合わされた合計値を出力(7行目)
  • 26. 問題 4-3 • 正の整数 n が与えられたとき、 2n - 1 は 1, 3, 5, .... と、「1から数えて n番目」の奇数の値になる。コマン ドラインから正の整数 n を受け取って、1 から 2n - 1 までの奇数の和を求めるプログラムを書きなさい。 • ファイル名は “odd_sum.rb” (任意可)
  • 27. 問題 4-3 解答例 # odd_sum.rb n = ARGV[0].to_i sum = 0 for i in 1 .. n sum += 2 * i - 1 end puts sum
  • 28. for の二重ループ 1 # 9x9.rb 2 for i in 1 .. 9 3 for j in 1 .. 9 4 print “#{i * j} “ 5 end 6 puts 7 end forループの中に別のforループを使っている例 九九の計算をする場合について考えてみましょう
  • 29. for の二重ループ 1 # 9x9.rb 第1ループ 2 for i in 1 .. 9 第2ループ 3 for j in 1 .. 9 4 print “#{i * j} “ 5 end 6 puts 7 end 第1ループはループ変数が i 第2ループはループ変数が j
  • 30. for の二重ループ 1 # 9x9.rb 2 for i in 1 .. 9 #i=1 3 for j in 1 .. 9 4 print “#{i * j} “ 5 end 6 puts 7 end i = 1 に対して 1×1, 1×2, ..., 1×9と順に計算され (3~5行目)、次の段に行く前に改行(6行目)
  • 31. 9x9.rb の実行結果 > ruby 9x9.rb 123456789 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
  • 32. 問題4-4 9x9.rb を改良して、下のように整形された出力をしなさい。 (ヒント: 数字は常に3桁の幅に納まっている) > ruby 9x9.rb 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
  • 33. 問題4-4 解答例 # 9x9.rb for i in 1 .. 9 for j in 1 .. 9 printf (%3d, i * j) end puts end