プログラミング入門I
2019.01.28

Back to index page



  1. 本日の作業内容

  2. 確認テストについて

    最終の確認テストを授業の後半で行います.演習問題をしっかり検討して準備していてください.

  3. 前回の宿題について

    今回の宿題については,私の方のアップロード失敗のミスがあり,みなさんにはご迷惑をおかけしました.少し甘めに採点しましたので,ご容赦ください.

    さて,しかしながら問題のある答案はチェックさせて頂いております.残念なのはコンパイルエラーがあったことです.提出前の確認をよろしくお願いします.

    コンパイルエラー: b1806

    警告: b1860 b1755
    ハイフンライン無し: b1820 b1821 b1831 b1763
    インデント不適切: b1804 b1821 b1823 b1842 b1848 b1854 b1859 b1863 b1864 b1202 b1718 b1769

    今回の中身に関しては,表示に関する注意事項がわかってもらえなかったことによる問題が多く見られました.すなわち,

                  printf(" *P");
    

    のように点の位置を表す記号と点の名称を同時に表示させようとするものでした.そうすると,「プロットが重なった例」のように本来名称Pが表示されるべきところが点Qのプロットで上書きされる状況が再現されなくなりますので,条件を満足していません.また,そのあたりの重なりを場合分けで出そうとすると,やたらと条件が細かく別れて if の乱立になるのでそれをしなくても良いように表示の優先順位を決めました.詳しくは,解答例を参考にしてください.細かい場合分けを行った皆さん,お疲れ様でした.

            x1 = rand() % 4 + 1;
            y1 = rand() % 4 + 1;
            x2 = rand() % 4 + 1;
            y2 = rand() % 4 + 1;
    

    乱数の基本がこの時点でもわかっていない人が数名いました.

            for(y=5;y>=1;y--)
            {
                    printf("%d |",y);
                    if(y == b)
                    {
                            for(x=0; x<=a-1;x++)
                            {
                                    printf(" ");
                            }
                            printf("*P\n");                 
                    }
                    else if(y == d)
                    {
                            for(x=0;x<=a-1;x++)
                            {
                                    printf(" ");
                            }
                            printf(" *Q\n");
                    }
                    else
                    {
                            printf("\n");
                    }
            
            }
    

    上の例は,例えば座標がP(1,3)とQ(3,3)のように同じ y 座標を持っていてしかもPよりもQの x 座標が大きい時に,すでに改行されてしまっているので,表示できません.

  4. 前回の復習

    本格的な多重のループの問題に挑戦しましたが,基本は手順(アルゴリズム)を考えることです.どういう順番に何をすると目的が達成されるのかを一つ一つ考えてください.そのためには,メモなど紙に書いて考えること,変数の値がどのように変わっていくのか,自分で手作業で確認していくことが重要でした.忘れないようにしましょう.

  5. まとめ

    2重の for 文の基本は以下のようなものでした.

    • 外側の for 文が縦に行を進めていく

    • 内側の for 文は各行を左から右へ進む

    • 反復処理の部分と単発の処理の部分を切り分ける

    • 適切な場所に改行を入れて行を整理する

    • 内側の反復処理により和などを求める場合には,和を格納する変数の初期化は反復処理の直前に置く

  6. 実習

    実習の演習問題は当日ご案内します.

  7. 宿題

    授業は今回が最後ですが,宿題は出しますので,最後のチャレンジをよろしくお願いします.


目次ページに戻る