プログラミング入門  情報科学演習
2013.12.16

Back to index page



  1. 本日の作業内容

  2. 小テストについて

    授業の最初に配列に関する小テストを実施します.いつものように柱のところの席は使用しないで下さい.

  3. 宿題の結果について

    今回は残念な答案がいくつか出てきました.以下のようになっています.

    無限ループ b1322

    解答用紙不使用 b1371

    大馬鹿もん b1313 b1375

    以下は問題のあるプログラムのいくつかの例です.まったくおかしいものについてはここには挙げていません.

                    if(sum == 1)
                            printf("oxooooooooooooo\n\n");
                    if(sum == 2)
                            printf("ooxoooooooooooo\n\n");
                    if(sum == 3)
                            printf("oooxooooooooooo\n\n");
                    if(sum == 4)
                            printf("ooooxoooooooooo\n\n");
                    if(sum == 5)
                            printf("oooooxooooooooo\n\n");
                    if(sum == 6)
                            printf("ooooooxoooooooo\n\n");
                    if(sum == 7)
                            printf("oooooooxooooooo\n\n");
                    if(sum == 8)
                            printf("ooooooooxoooooo\n\n");
                    if(sum == 9)
                            printf("oooooooooxooooo\n\n");
                    if(sum == 10)
                            printf("ooooooooooxoooo\n\n");
                    if(sum == 11)
                            printf("oooooooooooxooo\n\n");
                    if(sum == 12)
                            printf("ooooooooooooxoo\n\n");
                    if(sum == 13)
                            printf("oooooooooooooxo\n\n");
    
                    if(sum > 14 ){
                            sum -= a;
                            printf("Too large to go. Cast dice again!\n\n");
                    }
    
    絶対やっちゃだめなのがひさしぶりに出ました.零点です.

                    if(sum<15){
                            while(j<sum-1){
                                    printf("o");
                                    j++;
                            }
                            printf("x");
                            j=0;
                            while(j<15-sum){
                                    printf("o");
                                    j++;
                            }
    
    二つの while 分に別ける発想がいけません.

            while(sum!=15){
                    int num = rand() % 6 + 1;
                    printf("\n\nDice: %d    ",num);
                    sum+=num;
                    if(sum>15){
                            printf("Too large to go. Cast dice again!");
                            sum-=num;
                    }
                    else
                            i=1;
                            while(i<=15){
                                    if(i==sum)
                                            printf("x");
                                    else
                                            printf("o");
                            i++;
                            }
            }
    
    わかりづらいですが,else i=1; にしか係らないようになっています.変です.

    以下はインデントのおかしいものです.

                            while(i<=15){
                                    if(i==sum)
                                            printf("x");
                                    else
                                            printf("o");
                                    i++;
                            }
                    if(sum>15){
                            printf("Too large to go. Cast dice again!");
                            sum-=a;
                    }
    
    if の位置はおかしいですね.

                    else{
                    printf("oooooooooooooox");
                    printf("\nGaol!\n\n");
                    }
    
    else の中の処理が下がっていません.

        while(sum<15){
            printf("\n\n\n");
            i=1;
            a=rand() % 6+1;
            sum+=a;
            printf("Dice: %d    ", a);
            if(sum<15)
                    while(i<=15){
                            if(i==sum)
                                    printf("x");
                            else
                                    printf("o");
                            i++;
                    }
    
    途中からインデントの幅が変わります.

                    else if(i>15){
                            i-=j;
                            printf("Too large to go. Cast dice again!\n");
            }
            else{
            printf("oooooooooooooox\n");
            printf("Goal!\n\n");
            }
    
    else の上の閉じ括弧の位置がおかしいし,その後,else の中身が下がっていません.

                                    while(j<=14){
                                            j++;
                                            printf("o");
                                                    if(j==i)
    
    なぜ if は下がるのでしょうか?

    main()
    {
        srand((unsigned) time(NULL));
    
            int a, i, j=1;
    
    まだいました.

            printf("-----------------------\n");
    
        return(0);
    }
    
    こちらもまだいました.一刻も早くコピペから脱却しましょう.

                    printf("\n\n");
                    }
    
    閉じ中括弧の上には来ないと何度も言っています.

            while(ichi != 15){
                            j = 0;
                            dice = rand() % 6 + 1;
    
                            if(dice <= 15 - ichi){
                                            ichi += dice;
                                            printf("\nDice: %d  ",dice);
                                            while(j<=14){
                                                            j++;
                                                            if(j==ichi)
                                                                    printf("x");
                                                            else
                                                                    printf("o");
                                            }
                                    printf("\n");
                            }
                            else if(dice >= 15 - ichi)
                                                    printf("\nDice: %d  Too large to go. Cast dice again!\n",dice);
    
    いつまで経っても好き勝手な位置に書く人がいます.

                            }
                    }
                    printf("oooooooooooooox\n");
                    printf("Goal!\n\n");
    
                    printf("-----------------------\n""\n");
    
                    return(0);
    }
    
    これもインデントが多すぎます.

                    if(sum<15){
                            i=1;
                            while(i<=14){
                                    if(i==sum)
                                            printf("x");
                                            printf("o");
                                            i++;
                            }
                            printf("\n\n");
            }
    
    変な位置にありますね.

  4. 前回の復習

  5. 1次元配列

    この授業の最後の難関である配列です.これが使えないと実際のプログラミング では困ります.複数の並んだ値を一つの名前で保存できる便利な機能ですので, 必ず使えるようになってください.

    例えば,1日の気温を1時間ごとに自動で測定するシステムがあるとします.午前0 時から午後11時まで24個の温度を,

    temp0, temp1, temp2, .... , temp23

    のようにたくさんの変数を使用して記憶しておくことは無駄ですし,後から使う ときにやりにくい面が多いことになります.そこで,配列 temp として 1時間ごとの温度を

    temp[0], temp[1], temp[2], ... , temp[23]

    のようにしておくと,変数名としては1つの temp だけで済みますし, 時間を添字として利用することで読み出しが簡単になります.

    今日からのポイントは値が何番目に入っているかを示す「添字」の使い方です.この添字を for 文などと組み合わせて自動的に処理する方法を理解しましょ う.

  6. 実習

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

  7. 次回の予習範囲

    教科書のp.59-65を予習してきてください.

  8. 宿題

    授業の終わりに宿題の案内をします.ただ し,問題を見ることができるのは17日以降です.


目次ページに戻る