プログラミング入門II
2019.07.12

Back to index page



  1. 本日の作業内容

  2. 宿題の結果について

    大変残念なことに,今回は解答用紙を使用しないという採点対象外になる例が出てしまいました.解答は焦らずに,まずは解答用紙への番号と名前の記入から始めましょう.

    解答用紙不使用: b1843

    他には以下の不備がありました.

    解答用紙に番号と名前無し: b1835
    インデントの不備: b1839

    以下はいつものように問題のある解答の例です.参考にして下さい.

                            if(attend[1][i] < attend[1][j])
                            {
                                    tmp = attend[1][i];
                                    attend[1][i] = attend[1][j];
                                    attend[1][j] = tmp;
                                    
                                    tmp = fc[i][6];
                                    fc[i][6] = fc[j][6];
                                    fc[j][6] = tmp;
                                    
                                    
                            }
    

    下半分の処理がおかしいですね.なので,結果が以下のようになってしまいます.

    Sanf   Gaina  Dort   Bayern Ars    Liv    Barca  R. Mad 
     13277   1903  80841  75000  59899  52983  76051  61020 
    
    Sanf   Gaina  Dort   Bayern Ars    Liv    Barca  R. Mad 
     80841  76051  75000  61020  59899  52983  13277   1903 
    

    エディオンスタジアムの収容人員をはるかに超えてますがな!バードスタジアムもこれでは周りの田んぼで観るしか無いし.

            for(i = 0;i < 2;i++)
            {
                    for(j = 0;j < 8;j++)
                    {
                            if(i == 0)
                            {
                                    printf("%1s     ",fc[j]);
                            }
                            else
                            {
                                    printf("%6d     ",attend[i][j]);
                            }
                    }
                    printf("\n");
            }
    

    このところ左揃えの演習問題をちょくちょく出しているので,質問すればいいのに.教科書p.27からの「書式指定子」のところの説明をよく読んでおいて下さい.

            for(i=1;i<2;i++)
            {
                    for(j=0;j<8;j++)
                    {
                            printf(" %d ",attend[i][j]);
                    }
            }
    

    外側の for 文は1回しか実行しないけど,何のため?

                            if(attend[1][j]<attend[1][j+1])
                            {
                                    yi=attend[0][j];attend[0][j]=attend[0][j+1];attend[0][j+1]=yi;
                                    yi=attend[1][j];attend[1][j]=attend[1][j+1];attend[1][j+1]=yi;
                            }
                    }
    

    並べ替えの処理はいろいろなところに解答例として出ているので,もう一度見なおして下さい.

            for(i=0;i<=7;i++)
            {                               
                    for(j=i+1;j<=7;j++)
                    {                               
                            if(str[i] <= str[j])
                            {
                                    tmp = str[i];
                                                            
                                    str[i] = str[j];  
                                    
                                    str[j] = tmp;
                            }
                    }
                    
                    for(j=0;j<=7;j++)
                    {
                            if(str[i] == attend[1][j])
                            {       
                                    ary[i] = attend[0][j];
                            }       
                    }
            }
    

    こちらも同じ.並べ替えは毎回同じパターンでやっているので,それをその時の変数に合わせるだけなので,ちゃんと見ておいて下さい.

  3. 前回の復習

    2次元配列の文字配列を活用すると,添字で指定するだけで文や節,句などの文字列を画面に出力することができることを学習しました.この使い方で,あらかじめ文字列が決まっているじゃんけんやトランプのカードのようなものを表示するプログラムで if 文を使わないでも対応する文字を表示できました.重要な機能なので,これからも何度か使用することになるでしょう.

    一方で,数値データの並べ替えに,データにつけられた名前も一緒に並べ替えて,表形式での画面表示を以前よりもわかりやすくすることもできるようになりました.こちらもこれからも使用することになる重要な処理です.

    いずれにしても,前回同様,配列の添字が何を参照しているのか,考えながらプログラムを考える習慣をつけてください.

  4. 文字列配列

    配列が2次元以上になると,プログラムに入力する際に要素の見通しが悪くなることもあります.そのような場合には,以下のような表現を使うこともできます.

    	char bb[6][6][11] = {{"HR!", "Out", "Out", "Out", "Out", "Single hit"},
    			{"Out", "3B hit", "Out", "Out", "Single hit", "Out"},
    			{"Out", "Out", "2B hit", "Single hit", "Out", "Out"},
    			{"Out", "Out", "Single hit", "2B hit", "Out", "Out"},
    			{"Out", "Single hit", "Out", "Out", "Single hit", "Out"},
    			{"Single hit", "Out", "Out", "Out", "Out", "Single hit"}};
    

    これを使うと,サイコロ野球ゲームでプレイの判定には if 文のような条件分岐が不要になります.

  5. 実習

    実習の演習問題(予習用)はこちらです.

  6. 次回の予習範囲

    次回は配列についの総まとめです.確認テストも実施します.これまでの内容をしっかり復讐しておいてください.

  7. 宿題

    宿題の問題を見ることができるのは16日10時以降です.レポート提出システムから閲覧してください.


目次ページに戻る