今日の内容
- for文
はじめに
前回はFizzBuzz問題に挑戦してみました。今回は、for文について学んでいきます。また、実際にfor文を使って、九九の表と累乗の表を作ってみましょう。
for文
前回でもfor文について少し学びましたが、もう一度復習してみましょう。
for文とは、ループ処理のうちの一つで、主に「この処理を、n回繰り返したい」というときに使われる構文です。
文法は言語によって異なりますが、Rustでは次のようになります。
for 変数 in a..b {処理}
これは「変数」が「a」から「bの1つ前」まで繰り返します。
また、
for 変数 in a..=b {処理}
このようにすることで、「a」から「b」まで繰り返すこともできます。
九九の表を作ろう
さて、for文を使って、九九の表を作成してみましょう。以下のような表になります。
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,
for文を使ってどのようにすれば九九の表を作れるでしょうか。
答えはこのようになります。
fn main(){
for y in 1..10{
for x in 1..10{
print!("{:3},",x*y);
}
println!("");
}
}
/******** 出力結果 *******
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,
*************************/
for文の中にfor文が入っていますね。
上から1行ずつ実行されるので、その順番に動作を予測していきましょう。
1行目のmain関数は既に学んだので大丈夫ですね。
2行目が早速for文になっています。変数「y」が「1」から「10の1つ前」までインクリメントしながら繰り返されます。
3行目もfor文になっています。変数「x」が「1」から「10の1つ前」までインクリメントしながら繰り返されます。ここで、2行目のfor文の「{ }(ブロック)」の中に入っているので「y」が1増えるたびに「x」が1から9まで繰り返されます。
4行目はprint!マクロになっています。これは改行なしで文字列を画面出力するマクロです。ここまではすでに第二回「画面出力」で学びました。しかし、その中身が異様ですね。"{}"(プレースホルダ)も学びましたが、"{:3}"は初めて見る方もいるかと思います。まあ、なんてことないのですが、右詰めです。今回のように文字列を揃えて綺麗に出力したいときによくつかわれます。今回は":3"となっているので、右に文字を詰めて、足りない文字数分は、スペースで埋める、という意味になります。ですので、
1,2,3,4,5,6,7,8,9
2,4,6,8,10,12,14,16,18,
ではなく、
1, 2, 3, 4, 5, 6, 7, 8, 9
2, 4, 6, 8, 10, 12, 14, 16, 18,
このように揃えて出力することができます。
5行目は閉じカッコですので、二個目のforのループ処理の端を示しています。
6行目は、横に全て表示しきったとき、改行をはさみたいので、println!マクロをつかって、改行だけをしています。
7行目はまた閉じカッコです。これは一個目のforのループ処理の端を示しています。
8行目はmain関数の端を示しています。
このようにして、九九の表を作成することができました。
次はx,x^2,x^3の表を(1≦x≦100)で出力するプログラムを作成してみましょう。
完成した表はこちらです。
x x^2 x^3
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728
13 169 2197
14 196 2744
15 225 3375
16 256 4096
17 289 4913
18 324 5832
19 361 6859
20 400 8000
21 441 9261
22 484 10648
23 529 12167
24 576 13824
25 625 15625
26 676 17576
27 729 19683
28 784 21952
29 841 24389
30 900 27000
31 961 29791
32 1024 32768
33 1089 35937
34 1156 39304
35 1225 42875
36 1296 46656
37 1369 50653
38 1444 54872
39 1521 59319
40 1600 64000
41 1681 68921
42 1764 74088
43 1849 79507
44 1936 85184
45 2025 91125
46 2116 97336
47 2209 103823
48 2304 110592
49 2401 117649
50 2500 125000
51 2601 132651
52 2704 140608
53 2809 148877
54 2916 157464
55 3025 166375
56 3136 175616
57 3249 185193
58 3364 195112
59 3481 205379
60 3600 216000
61 3721 226981
62 3844 238328
63 3969 250047
64 4096 262144
65 4225 274625
66 4356 287496
67 4489 300763
68 4624 314432
69 4761 328509
70 4900 343000
71 5041 357911
72 5184 373248
73 5329 389017
74 5476 405224
75 5625 421875
76 5776 438976
77 5929 456533
78 6084 474552
79 6241 493039
80 6400 512000
81 6561 531441
82 6724 551368
83 6889 571787
84 7056 592704
85 7225 614125
86 7396 636056
87 7569 658503
88 7744 681472
89 7921 704969
90 8100 729000
91 8281 753571
92 8464 778688
93 8649 804357
94 8836 830584
95 9025 857375
96 9216 884736
97 9409 912673
98 9604 941192
99 9801 970299
100 10000 1000000
まずは自分で考えて作成してみましょう。
また、模範解答を載せますが、解説はしません。九九の表の解説がわかれば、それより簡単なのですぐに理解できると思います。
//答え
fn main(){
println!(" x x^2 x^3");
for x in 1..101{
println!("{:3} {:5} {:7}", x, x*x, x*x*x);
}
}
どうでしょうか。できましたでしょうか。
おわりに
おつかれさまでした。今回は、100DaysOfCode 四日目として、for文について学びました。
mapを使ったりしてもっと美しく表示できるようにしたかったですが、時間がないのでここまでにします。(そもそもmapをあまり理解できてないということはおいといて)
次回はフィボナッチ数列を求めるプログラムを作成します。
ご精読、ありがとうございました。