‫お帰りなさい｡
‫何か始める前に､ ちょっとチャレンジしてみたいことがあります｡ それは､ このフォー・ループをここに持ってくることです｡
‫このネストされたforループを調整して､ このコンソールやforループ全般が行列のすべての要素を出力するのではなく､
‫奇数の要素だけを出力するようにします｡
‫だから､ 2→4→6と8だけ｡
‫なので､ そうなるようにコードの調整をお願いします｡
‫そして､ ちょっとしたヒントとして､ modulo演算子だけでなく､ if文も使う必要があります｡
‫なるほど｡
‫ですから､ ビデオをパスして､ これを実行し､ コードを私たちの思い通りにするために､
‫自分で試してみたと思います｡
‫そして､ 必要なのはi j位置の行列のモジュロ2をチェックするifステートメントです｡
‫つまり､ これは何かを2で割ったときのモジュロの余りが0になるかどうかを比較するものです｡
‫つまり､ 余りが0であれば､ 偶数であることがわかるのです｡
‫なるほど､ 基本的にはそうなるんですね｡
‫だから､ もしそうであれば､ その数字をプリントし､ そうでなければそれ以外のものをプリントする｡
‫ここにコンソールだけのステートメントを追加することもできますよね？
‫魂のようであり､ ただの空虚な空間であり､ それ以上でもない｡
‫なるほど｡
‫これでプリントアウトされるわけです｡
‫そして､ 偶数の2､ 4､ 6､ 8を具体的にプリントする｡
‫ということなんですね｡
‫モジュロ演算子だけでなく､ F文もみんな必要なんです｡
‫これがモジュロ演算子で､ 余りを扱うことができるわけです｡
‫さて､ ところで､ ここで1が結果であれば､ つまり余りが1であれば､ 奇数であることがわかる｡
‫では､ もう一度実行してみましょう｡
‫そして､ 行列からは奇数しか出てきませんよね｡
‫だから､ これはあなたへのちょっとした挑戦状だったんです｡
‫では次に､ 行列の対角要素を表示する方法について見てみましょう｡
‫例えば1､ 5､ 9というわけだ｡
‫あるいは7､ 5､ 3｡
‫実はその逆もあるんです｡
‫3､ 5､ 7
‫では､ 実際にどうすればそれを実現できるのか｡
‫ここで作ったネストされたforループを見ると､ IがゼロでJがゼロであることが分かります｡
‫このときのIとJを見ると､ Iは1､ Jは1､ このときのIは2､ Jは2である｡
‫ですから､ 対角線を持ちたいのであれば､ IとJが同じでなければならないことが分かっています｡
‫だから､ 少なくともこの対角線上にある4つの1､ 5､ 9､ 4､ 7､ 5､ 3は､
‫別の話になる｡
‫しかし､ 9時5分の1については､ 基本的に非常にシンプルな方法で､ 行列があるかどうかをチェックすればよいのです｡
‫さて､ 実はあなたへの挑戦状です｡
‫試してみてください｡
‫ぜひお試しください｡
‫なるほど｡
‫だから､ チェックしてほしい｡
‫それがどうした？
‫これを確認する必要があります｡
‫IはJに等しいか｡
‫そして､ もしそうなら､ その値をプリントアウトする｡
‫それ以外の場合は､ 空欄を印刷する｡
‫では､ 早速実行してみましょう｡
‫そして､ 1､ 5､ 9が出ることを確認します｡
‫今はこれをもう少し見栄えよくしたい｡
‫また､ コントロールブライトラインステートメントを使用して､ スペースを空けて､ 次のように表示させることもできます｡
‫だから､ 美的な理由から1､ 5､ 9｡
‫だから､ ここで実現できることなのです｡
‫もちろん､ もっと複雑なロジックを作成することも可能です｡
‫そこでできることは､ 対角線上の値を置き換えることです｡
‫さて､ 例えば､ ただプリントアウトするだけでなく､ 割り付けをすることもできます｡
‫というように､ 別の値を割り当てることができます｡
‫例えば全部が1であるべきだ｡
‫だから､ それはできることかもしれません｡
‫そして､ その下のfor eachステートメントを実際にやってみましょう｡
‫もう一度実行してみましょう｡
‫そして､ 今度は1､ 2､ 3､ 4､ 1､ 6､ 7､ 8､ 1､ となるのがわかるだろう｡
‫では､ 基本的にこの5と9を1に置き換えてください｡
‫さて､ これはネストされたforループを使った方法の一例に過ぎません｡
‫実は､ たった1つのforループを使うだけでできるんです｡
‫もちろん､ もう少し簡単なもので､ ちょっとしたチャレンジでもいいんです｡
‫1つのforループだけでやってみる｡
‫なるほど｡
‫だから､ 基本的にはここになるんです｡
‫そこで､ このforループを使って､ 行列の長さを取得し､ いわば列の長さを通して､
‫Iをプリントアウトしているのです｡
‫つまり､ 基本的には1､ この場合はゼロゼロと言っているわけです｡
‫この場合､ 1つです｡
‫この場合､ 2､ 2｡
‫つまり､ これが先ほどお見せした数字の位置になります｡
‫なるほど｡
‫これを実行すると､ 1､ 5､ 9も出るはずだ｡
‫見てみましょう､ 私たちは159を得ることができます｡
‫では､ 3､ 5､ 7を取得する場合はどうでしょう？
‫では､ ビデオを一時停止して､ 代わりに3､ 5､ 7をプリントアウトするロジックを探してみてください｡
‫なるほど｡
‫今度は､ どこから目をつければいいのか､ どこから手をつければいいのかを考える必要があるため､ 少し複雑になります｡
‫RJ なぜなら､ 基本的に必要なのは､ 私たちの目が最初から始まって､ 1つずつ上がっていくことだからです｡
‫だから､ 1列ずつ見ていくんです｡
‫でも､ RJ｡
‫この場合の最大値から2つ下がるそうです｡
‫なるほど｡
‫だから
‫なるほど｡
‫さて､ ここでちょっとしたトリックを紹介したいと思います｡
‫だから､ 3､ 5､ 7から､ したがって､ 4つのループがあるところで何かを使うことができるのです｡
‫変数に対抗しなければならないこと｡
‫では､ 通常､ forループを見てみましょう｡
‫4を入力して､ タブを2回押せばいいんです｡
‫4つのループは通常このような形になっています｡
‫そうだろ？
‫つまり､ カウンタ変数ieと長さがあり､ 今回のケースでは長さはハードコードされているので､
‫あらかじめ3になっています｡
‫ここでは､ ちょうど3行になることが分かっています｡
‫もちろん､ matrix get lengthのように､ matrix get lengthと言うこともできます｡
‫0次元の場合｡
‫ところで､ ここでコンマを加えて､ Jを2として開始し､ Jをデクリメントすることも可能です｡
‫各反復の場合｡
‫そうそう｡
‫そこで､ 今度は変数に対抗しなければなりません｡
‫つまり､ アイカウンターを用意し､ 同時にjカウントも変数にしていますが､ あくまでアイの値に基づいて制限しているのです｡
‫つまり､ この方法は行数と同じ数の列を持つ行列に対してのみ正しく動作します｡ そうでない場合は､ 前に行ったようにネストしたforループを使用しなければならないからです｡
‫ですから､ これはうまくいきませんので､ そのまま行列の位置IとJをコンソールに書き込んでください｡
‫では､ 見てみましょう｡ 3､ 5､ 7が表示されているのがわかりますね｡
‫そこで今回は､ 右上から左下へ｡
‫でも､ これはあくまでフォローアップの一例です｡
‫あまり一般的な方法ではないので､ 使用する際には注意が必要です｡
‫これは少し読みにくいので､ 開発時に考慮すべき点でもあります｡
‫だから､ 簡単な例で使うなら､ たぶん大丈夫だと思います｡
‫しかし､ 例がもっと複雑になると､ これはかなり混乱します｡ アプリケーションをダブルチェックするとき､
‫あるいは第3の開発者や第2の開発者がやってきてコードをチェックするとき､ かなり混乱する可能性があります｡
‫ですから､ コードを書くときは常にそのことを考慮してください｡
‫できるだけわかりやすく､ 読みやすい文章を心がけましょう｡