プログラミング入門II
2019.06.24
Back to index page
- 本日の作業内容
- 宿題の結果について
まずは形式的な不備がいくつか出てきましたので,ご紹介します.気をつけましょう.
解答用紙に番号と名前無し: b1848
出力結果に番号なし: b1806 b1843
ハイフンライン無し: b1806
間違った番号出力: b1838
以下は気になるプログラムの例です.参考にしてください.
配列を int 型で作るのであれば,要素は26個で十分です.
大文字という条件だったのに…
for(i = 0; i <= 9; i++)
{
str[i] = rand() % 26 + 65;
printf("%c", str[i]);
}
|
これでは同じ文字が重複して出ます.
//入れ替え
for(i=0;i<10;i++)
{
for(j=i+1;j<=10;j++)
{
if(b[i] > b[j])
{
tmp = b[i];
b[i] = b[j];
b[j] = tmp;
}
}
}
|
配列の要素の個数が10個なので,上の添字で回すと余分なnull文字まで入れ替えます.なので,
こんなことになります
for(i = 0; i <= 9; i++)
{
for(j = 0; j <= 9; j++)
{
if(a[i] == a[j] && i != j)
{
while(a[i] == a[j])
{
num = rand() % 26 + 65;
a[j] = num;
}
if(i > j)
{
i = j - 1;
}
}
}
}
|
重複させないために工夫していますが,これがデータ数が多くなった場合に処理が重くなる原因になります.最初に重複しないようにすれば良いだけです.
for(i = 0; i <= 9; i ++)
{
alpha[i] = rand() % 26 + 65;
for(j = 0; j <= i - 1; j ++)
{
if(alpha[j] == alpha[i])
{
i --;
}
}
}
|
こちらも同じです.工夫はしているのですが,毎回それよりも前の要素全部を当たらないといけないのは無駄な処理になります.
- 前回の復習
文字配列を体験しました.ただ,1次元の文字配列は文字コードによる処理でも同じようなことができるので,そこまで威力を発揮しません.2次元の文字列配列に期待しておいてください.
- 2次元配列
- 基本表現
2次元の配列は入れ物が2重になっているもので,例えば以下のように表すことも出来ます.
int ary[3][4] = {{5, 11, 2, 3}, {4, 15, 6, 9}, {12, 13, 1, 7}};
|
- データの2次元表現
教科書p.124のリスト6_8にあるように2次元の配列を用意すると,マトリックス状にデー
タを格納できます.これを利用して,表計算のようなことも出来ます.例えば,
次のような配列があるとします.
ary[3][3] = {{11, 12, 13}, {21, 22, 23}, {31, 32, 33}}
|
要素は例えば,ary[0][1] は12ですし,ary[2][0] は31です.
このとき,ふたつ目のインデックス(添字)が1に関する和を取ると,12+22+32の
足し算となります.これがデータを行と列に並べた場合の列に関する和となりま
す.
11 | 12 | 13 | | |
21 | 22 | 23 | 一つ目の添字が1のものはこの行 | ary[1][j] |
31 | 32 | 33 | | |
| 2つ目の添字が1のものはこの列 | | | |
| ary[i][1] | | | |
|
- データの関連付け
サイコロの目の出た頻度のデータは配列を用いると簡単に保存できることを以前に体験しました.ただ,出た目が多い順に並べ替えるような操作をすると,頻度の情報だけではどの目がどれだけ出たのかわからなくなります.そこで,サイコロの目と頻度とを2次元の配列でセットで格納しておけば,並べ替えが可能になります.例えば,
1, 17
2, 15
3, 10
4, 20
5, 21
6, 17
や,
1, 2, 3, 4, 5, 6
17, 15,10, 20, 21, 17
のように,セットで目と出た頻度を記録しておくと,並べ替えても目の情報を保持できます.
1, 17, 2, 15, 3, 10, 4, 20, 5, 21, 6, 17
のように1次元配列でも可能ですが,一つおきに意味が違う数値が並ぶので,少し面倒です.
- 実習
実習の演習問題(予習用)はこちらです.
- 次回の予習範囲
引き続き教科書のp.121-124とそれに加えてp.127-128を予習してきてください.
また,次回は授業の後半に確認テストを実施しますので,準備をよろしくおねがいします.
- 宿題
授業の終わりに宿題の案内をします.ただし,問題を見ることができるのは25日10時以降です.レポート提出システムから閲覧してください.
目次ページに戻る