情報・知能工学系 山本一公 kyama@tut.jp プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公 kyama@tut.jp
課題1の採点結果から 学籍番号・氏名・プログラムの説明・実行結果を忘れずに 最後にコンパイル・実行チェックを忘れずに 提出直前に修正してコンパイルできないまま提出、なんてことがないように 課題1−1は、ほぼ問題無し 課題1−2 仕様を満たしていない fprintf()を使っていて、バイナリ出力になっていない
前回の課題の解説・ポイント 課題2-1 課題2-2 “4-i”で良い 行列の要素数が“ N”なら、 “Nーiー1” 初期化が必要 for (i = 0; i < 5; i++) vb[i] = va[5 - i - 1]; innerprod = 0.0; for (i = 0; i < n; i++) innerprod += a[i] * b[i];
今日の内容 教科書 p.102~ 配列 配列の応用 多次元配列(2次元配列) 素数を求めるプログラム unsigned long switch文じゃないところで使うbreak for文のおさらい コンマ演算子
多次元配列(1) 先週やった配列は1次元配列 配列の添え字を増やすと 多次元配列に! 2次元配列(行列) もっと次元を増やすことも可能 mc[0][0] mc[0][1] mc[0][2] mc[1][0] mc[1][1] mc[1][2] /* int型で、配列名が mc で、2行3列の行列だったら */ int mc[2] [3]; /* 厳密には「1次元配列の配列の配列」である */ int (((mc)[2]) [3])[4]; ←こういう書き方はしないけど
多次元配列(2) 初期化 ぱっと見、分かり易く 他にも /* 最初から値を入れておきたい */ int mc[2][3] = { {1, 2, 3}, {4, 5, 6} }; int mc[2][3] = { {1, 2, 3}, {4, 5, 6}, ←余分にコンマを書いても良い }; Fig.5-5を見よ int mc[][3] = { {1, 2, 3}, {4, 5, 6} } ←最初の要素数は省略可 int mc[2][3] = { 1, 2, 3, 4, 5, 6 }; ←途中の波括弧は省略可 int mc[2][3] = { {1, 2}, {4} } ←足りない要素は0で初期化される
素数を求める(1) アルゴリズムと実装の話 素数 1とその数自身以外に正の約数が存在しない1より大きな自然数 その数(no)を2~no-1で割ってみて、どの数でも割り切れなかったら素数 List 5-15
素数を求める(2) unsigned long break文 32ビットの符号なし整数 0~4,294,967,295 (232-1) 今の処理系だとunsigned long longが使えることも break文 switch文の中じゃなくても使える 一番近い(内側の)繰り返し文から抜ける for文、while文、do-while文
素数を求める(3) 2より大きい2の倍数は素数じゃない for文のおさらい 奇数に対してのみ計算する List 5-16 for文の制御 p.74, Fig.4-7 式1は、前処理がなければ省略可能 式2を省略すると、無限ループ 式3も、することがなければ省略可能
素数を求める(4) 3以上の素数は2の倍数で割り切れない noより小さい素数での除算において 一度も割り切れることがなければ素数 奇数だけで割ればよい List 5-17 noより小さい素数での除算において 一度も割り切れることがなければ素数 素数の倍数で割り切れるのなら、その前に素数で割り切れているはず 計算した素数を覚えておいて、素数で割る 配列 prime[] に素数を覚える
素数を求める(5) noの平方根以下の素数での除算において一度も割り切れなければ素数 コンマ演算子 n × m = m × n なので、noの平方根より大きい数で割り切れるなら、その前に割り切れているはず List 5-19 コンマ演算子 左から順番に演算 教科書の例では式は2つだが、もっと並べて書ける 式の値は一番右側の式
今週の課題 教科書 p.103, 演習5-7のプログラムを作成せよ。行列の要素は整数型でよい。 課題3-1のプログラムを、行列のサイズ(行数、列数)と行列の要素をキーボードから入力できるように拡張せよ。 1つめの行列をn行×k列、2つめの行列をk行×m列とし、結果の行列をn行×m列とせよ。 配列は#defineで定義した要素数で定義し、入力された行列のサイズがその数を越える場合には再入力させるようにプログラムを作成せよ。
レポートについて 電子メールで提出 提出先は prog2@slp.cs.tut.ac.jp Subjectを「プログラミング演習2 課題3提出 学籍番号・氏名 」とすること C言語ソースファイルを添付する メールの本文には何も書かなくて良いです ソースファイルの頭にコメントで以下の情報を入れる 学籍番号・氏名 プログラムの説明(どのように動くのか、工夫した点等) 実行結果(長い場合は一部)を貼る 提出締切は、10月31日(水) 12:00 (1週間後)
授業用Webサイト URL: http://www.slp.cs.tut.ac.jp/~kyama/programming2/ 課題のpdfファイルが置いてあります。 授業で使ったpptファイルを置いていきます。 質問メールは、以下のどちらかのアドレスまで kyama@tut.jp prog2@slp.cs.tut.ac.jp C-515へ直接質問しに来ても構いません