情報科学演習
2011.12.12

Back to index page



  1. 本日の作業内容

  2. 金曜日のメンター学習室中止について

    関係者一同出張のため,次回金曜日12月16日のメンター学習室は実施しません. 御迷惑をお掛けしますが,御容赦のほどよろしくお願いします.

  3. 宿題の結果について

    例によって問題のある解答例です.よくある間違いもありますが,珍答が増えて きているように思いますので,基本をしっかり学習しましょう.なお,インデン トのおかしい答案が大量に出始めました.注意してください.

            int a, b, c, d, i, j;
            a = rand() % 71 + 230;
            c = 199;
            printf("My student number: s114099\n\n");
            printf("Prime numbers between 200 and %d\n", a);
            for(i=200;i<=a;i++){
                    b = 0;
                    c++;
                    d = 0;
                    for(j=1;j<=a;j++){
                            d++;
                            if(c % d == 0)
                                    b++;
                    }
                    if(b==2)
                            printf("%d ",c);
            }
            printf("\n\n");
    

    変数の c は不要です.他にも類似の余分な変数のある答案が出ていま す.前回注意したのは,for 文の外では変数 i の使用に注 意が必要ということで,ループの中では思う存分 i を活用してくださ い.

            for(i=200;i<=a;i++){
                    b = 0;
            for(j=1;j<=a;j++)                     |  これらの行は字下げが必要
                    if(i % j == 0)                |
                            b++;                  |
            if(b==2)                              |
                            printf("%d ",i);         この行はもっと左に
            }
    
    
    
            for(i=200; i<=a; i++){
                            b = 0;                |  この行はもっと左に
    
                    for(j=1; j<=a; j++)
                            if(0 == i % j )
                                    b++;
            if(b==2)                              |  これらの行はもっと右に
                    printf("%d ", i);             |
    
            }
    
    
    
    
            for(i=200; i<=a; i++){
                    k=0;
            for(j=1; j<=i; j++){                  |  字下げ
                                    if(i%j==0)       もっと左に
                                            k++;     これもいっしょに左
                            }
                            if(k==2)                  これも左
                                    printf(" %d",i);  これも
    
    
                    }       printf(" \n");            改行してからprintf
                    printf(" -------------------------------\n");     この行はもっと左
    
    
    
    
            for(i=200;i<=r;i++){
                    for(j=2;j<=i;j++)
                            if(i%j==0)break;
                                    if(j==i)                  このifは上のifの中では無いので2つめのforと先頭がいっしょ
                                            printf("%d ",i);
    

    上記は全てインデントのおかしいものです.

            for(i=200; i<=a; i++){
                    b = i % 2;
                    c = i % 3;
                    d = i % 5;
                    e = i % 7;
                    f = i % 11;
                    g = i % 13;
                    h = i % 17;
                    if(b != 0)
                            if(c != 0)
                                    if(d != 0)
                                            if(e != 0)
                                                    if(f != 0)
                                                            if(g != 0)
                                                                    if(h != 0)
                                                                            printf("%d ", i);
            }
    

    出てきましたね.自動処理では無いものはプログラミングの価値がありません. 残念ながら0点です.

            for(i=200;i<=a;i++){
                    count = 0;
                    for(j=1;j<=i;j++){
                            if(i % j == 0)
                                    count = count + 1;
                            if(count == 2 && j == i)
                                    printf("%d ", i);
                    }
    
            }
    

    ただしく動作はしていますが,&& j == i は不要です.

            for(i=200;i<=r;i++)
            {
                    for(j=2; i%j != 0 ;j++)
                    {
                            if(i/2==j)
                            {
                                    printf("%d ",i);
                                    break;
                            }
                    }
            }
    

    中括弧 { の位置が慣習的な方法と違います.教科書のようにつけてく ださい.

            for(i=200;i<=a;i++){
                    i++;
    

    for 文の式3で i++ を指定しているのに,またfor 文の中に i++ があるのが不思議です.

            for(i = 200; i <= a; i++){
                    b = 0;
                    for(j = 1; j <= a; j++){
                            if(1 % j == 0)
                                    b++;
                    }
    

    1 % j という意味のわからない式があるので,ただしく動作していま せん.

            for(i=150;i<=a;i++){
            for(i=1;i<=a;i++){
                    b = a % i;
            if(b==0)
                    printf("%d ", a);
            }}
    

    インデントもおかしいのですが,処理が何をしたいのかさっぱりわかりません.

            for(i=200; i<b; i++){
    
                    sum1 = sum1 + 1;
            printf("%d ", sum1);
            }
    

    これも何がしたいのか,さっぱりわかりません.これは0点です.

  4. 前回の復習

    例題4.8と実習課題のiiiではスペースと改行の役割が少し異なってい ました.スペースでは見づらいのでハイフンに直したものを以下に示します.こ の違いに注意してください.

    --------------------------*
    -----------------*
    ----------*
    -----*
    --*
    -*
    --*
    -----*
    ----------*
    -----------------*
    --------------------------*
    

    X------------------X
    -X----------------X-
    --X--------------X--
    ---X------------X---
    ----X----------X----
    -----X--------X-----
    ------X------X------
    -------X----X-------
    --------X--X--------
    ---------XX---------
    ---------XX---------
    --------X--X--------
    -------X----X-------
    ------X------X------
    -----X--------X-----
    ----X----------X----
    ---X------------X---
    --X--------------X--
    -X----------------X-
    X------------------X
    

  5. 多重の for

    前回に引き続き多重のループの練習を今日も行いますが,ループの処理の学習の 初期には変数の値がどのように変化しているのか,注意して行くと間違いに気づ いたり,処理の無駄に気づいたりということが多いので,分からなくなってきた ら,メモ用紙などに変数の値の遷移を書いて見直してみてください.

  6. 実習

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

  7. 次回の予習範囲

    教科書のp.42からp.48の while 文と,p.51の練習問題10と11を予習し てきてください.予習の確認のため,次回は授業の最初に小テストを行いますの で,while 文についてしっかり予習しておいてください.

  8. 宿題

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


目次ページに戻る