情報科学演習
2011.12.19

Back to index page



  1. 本日の作業内容

  2. 小テスト

    C6クラスC7クラスで別々の小テストを実施します.

  3. 宿題の結果について

    再び,添付ファイル名や件名の間違いが出始めました.注意してください.例に よって,以下に興味深い間違いを列挙しますので,今後の参考にしてください.

            printf("Number of over displayed: %d\n\n",k);
            printf("\nNumber of ""over"" displayed: %d\n\n",count);
            printf("Number of 'over' displayed: %d\n" , sum);
            printf("\nNumber of ”over” displayed: %d\n\n",c);
    

    "over" を表示するのに苦労している後が見られます.最初のころに授 業でやったことを思い出すだけでよかったのですが…

                    for (j = 0 ; j <= 10 ; j++){
                            a = rand() % 100 + 1;
                            printf(" %3d ",a);
                            sum += a ;
                            if ( j == 10 )
                                    printf("   %3d",sum);
                            if(j == 10 && sum>500){
                                    printf("  over");
                                    n++;
                            }
    

    何人かに見られたパターンです.改行を入れるかどうかを if で判定 する必要はありません.内側の j に関するループが終了した時点で改 行すれば良いだけです.

    おかしい例左の修正例
                    for(j=1;j<=10;j++){
                            a = rand()%100+1;
                            sum+=a ;
                            printf("%3d ",a);
                    }
                            printf(" %4d",sum);
    
                    for(j=1;j<=10;j++){
                            a = rand()%100+1;
                            sum+=a ;
                            printf("%3d ",a);
                    }
                    printf(" %4d",sum);
    
            for(i=1;i<=10;i++){
                    int sum=0;
                    for(j=1;j<=10;j++){
                            int m;
                            m=rand()%100+1;
                            printf("%3d ",m);
                            sum+=m;
                            }
                            printf("%d",sum);
                            if(sum>=501){
                            printf(" over");
                            n++;
                            }
            printf("\n");
            }
    
            for(i=1;i<=10;i++){
                    int sum=0;
                    for(j=1;j<=10;j++){
                            int m;
                            m=rand()%100+1;
                            printf("%3d ",m);
                            sum+=m;
                    }
                    printf("%d",sum);
                    if(sum>=501){
                            printf(" over");
                            n++;
                    }
    		printf("\n");
            }
    
    
            for(i=1;i<=10;i++){
                    b=0;
    
                            for(j=1;j<=10;j++){
                                    a=rand()%100+1;
                                    printf("%3d ",a);
                                    b+=a;
                                                            }
    
            printf("  %d",b);
    
            if(b>=501){
                    c++;
                    printf("  over");
                                    }
    
            printf("\n");
                    }
    
    
            for(i=1;i<=10;i++){
                    b=0;
    
                    for(j=1;j<=10;j++){
                            a=rand()%100+1;
                            printf("%3d ",a);
                            b+=a;
                    }
    
    		printf("  %d",b);
    
    		if(b>=501){
                            c++;
                            printf("  over");
                    }
    
    		printf("\n");
    	}
    
    
            for(i=1; i<=10; i++){
                    sum = 0;
                    for(j=1; j<=10; j++){
                            num = rand () % 100 + 1;
                            sum += num;
                            printf("%3d ", num);
                    }
                    printf("  %3d ", sum);
            if(sum >= 501){
                    printf(" over");
                    count++;
            }
            printf("\n");
            }
    
    
            for(i=1; i<=10; i++){
                    sum = 0;
                    for(j=1; j<=10; j++){
                            num = rand () % 100 + 1;
                            sum += num;
                            printf("%3d ", num);
                    }
                    printf("  %3d ", sum);
    		if(sum >= 501){
                            printf(" over");
                            count++;
    		}
    		printf("\n");
            }
    
    
            for(i=1; i<=10; i++){
                    b = 0;
                    for(j=1; j<=10; j++){
    
            a = rand()% 100 + 1;
            b += a;
    
            printf("%d ",a);
                    }
    
            printf("  %d",b);
    
            if(b > 500){
                    printf("  over\n");
                    c ++;
            }
            else
                    printf("\n");
                            }
    
    
            for(i=1; i<=10; i++){
                    b = 0;
                    for(j=1; j<=10; j++){
    
    		         a = rand()% 100 + 1;
    			 b += a;
    
    			 printf("%d ",a);
                    }
    
    		printf("  %d",b);
    
    		if(b > 500){
                            printf("  over\n");
    			c ++;
    		}
    		else
                            printf("\n");
            }
    
    
            for(i=1;i<=10;i++){
                    wa = 0;
                    for(k=1;k<=10;k++){
                            rnd = rand() % 100 + 1;
                            wa += rnd;
                            printf("%3d",rnd);
            }
    
            printf("%5d",wa);
            if(wa > 500){
                    printf("   over\n");
                    over++;
            }
            else
                    printf("\n");
            }
    
    
            for(i=1;i<=10;i++){
                    wa = 0;
                    for(k=1;k<=10;k++){
                            rnd = rand() % 100 + 1;
                            wa += rnd;
                            printf("%3d",rnd);
    		}
    
    		printf("%5d",wa);
    		if(wa > 500){
                            printf("   over\n");
    			over++;
    		}
    		else
                            printf("\n");
            }
    

    インデントのおかしい答案が相変わらず多く見られます.上記は左側におかしい もの,右側にそれを修正したものを載せていますので,心当たりのある人はよく 見て理解して下さい.

                    if(sum < 501)
                            printf("  %3d\n", sum);
                    if(sum >= 501){
                            printf("  %3d  over\n", sum);
                            count++;
                    }
    

    場合の数が2つの場合には if で片方を選択した場合には残りは else で処理しましょう.間違いを防ぐ大事な方法です.

                            int b = rand() % 100 + 1;
                                            printf(" %d ",b);
    

    いろいろと間違いを含んでいる例です.まず,これは,実は for 文の 中なのですが,ループの中で int などで宣言をすることがおかしいで す.さらにインデントがおかしいですね.printf の行が下がり過ぎで す.そして,printf の中で %d を使用していますが,桁数 の指定をしていません.

                            if(n == 100)
                                    printf("%d ",n);
                            else if(n <= 9)
                                    printf("  %d ",n);
                            else
                                    printf(" %d ",n);
    

    これもprintf の中で桁数指定をすれば良いだけの話です.基本をしっ かり抑えていないと,いざと言うときこのような無駄なことをしてしまいます.

  4. 前回の復習

    for 文の式2の終了条件が定数でなく,変数になる場合を練習しました. これにより2次元の多様な表現が可能となります.今後も使用しますので, 覚えておいてください.

        for(i=1; i<=5; i++)
            for(j=1; j<=i; j++)
    

    上のように j に関する終了条件を i に依存させることで, 以下のような変数の変化が実現できます.

    (1,1)
    (2,1) (2,2) 
    (3,1) (3,2) (3,3) 
    (4,1) (4,2) (4,3) (4,4) 
    (5,1) (5,2) (5,3) (5,4) (5,5)
    

  5. while

    while 文は,for 文と異なり,終了条件(式2)しか指定しま せん.その分,自由度が高いので,熟練した人はよく使用します.最初は for 文の方が簡単なので,この授業では基本的に for 文を使用しますが,知っておいて損はありません.

  6. 実習

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

  7. 次回の予習範囲

    教科書のp.52-59を予習してきてください.また,配列に関する小テストを実施 しますので,予習をしっかりしてきてください.

  8. 宿題

    授業の終わりに宿題の案内をします.今回 は冬休みを挟んで1ヶ月近く間が開くので2段階で宿題を出します.一つ目の提出 期限は1/10(火)の午前10:00とし,その日の午後に新しい宿題を提示しますので その2つめの宿題の〆切は1/16(月)の午前10:00とします.案内に注意していて下 さい.

    なお,メンター学習室の開設は以下に示す日時で実施しますので,必要に応じて 利用してください.

    12/21(水) 1/6(金) 1/11(水) 1/13(金)


目次ページに戻る