情報科学演習
2011.06.13

Back to index page



  1. 本日の作業内容

  2. 宿題の結果について

    前回も説明したとおり,ループの中での宣言は止めましょう.

            for(i=0; i<=100; i++){
                    int count = 0;
                    int num = 1000 + i;
                    for(j=2; j<num; j++){
                            if(!(num%j))
                                    count = 1;
                    }
                    if(!count)
                            printf("%d ", num);
            }
    

    少なくなりましたが,相変わらず以下のような発想をする人が残っています.注 意してください.また,なるべく早く質問するなり,メンター学習室に通うなり して基本的な考え方を習得してください.

             for(i=1000; i<=1100; i++)
    
            if(i % 2 == 0){
    
            if(i % 3 == 0)
    
       if(i % 4 == 0)
    
       if(i % 5 == 0)
    
       if(i % 6 == 0)
    
       if(i % 7 == 0)
    
       if(i % 8 == 0)
    
       if(i % 9 == 0)
    
       if(i % 10 == 0)
    
            if(i % 11 == 0)
    
       if(i % 12 == 0)
    
       if(i % 13 == 0)
    
       if(i % 14 == 0)
    
       if(i % 15 == 0)
    
       if(i % 16 == 0)
    
       if(i % 17 == 0)
    
       if(i % 18 == 0)
    
       if(i % 19 == 0)
    
       if(i % 20 == 0)
                    printf("");
    }
            else{
                    printf("%d ",i);
    

     
            for(n=1000; n<=1100; n++){
                    if(n % 2 != 0 && n % 3 != 0 && n % 4 != 0 && n % 5 != 0 && n %
    6 != 0 && n % 7 != 0 && n % 8 != 0 && n % 9 != 0 && n % 10 != 0 && n % 11 != 0
    && n % 12 != 0 && n % 13 != 0 && n % 14 != 0 && n % 15 != 0 && n % 16 != 0 && n % 17 != 0 && n % 18 != 0 && n % 19 != 0 && n % 20 != 0 && n % 21 != 0 && n % 22 != 0 && n % 23 != 0 && n % 24 != 0 && n % 25 != 0 && n % 26 != 0 && n % 27 != 0 && n % 28 != 0 && n % 29 != 0 && n % 30 != 0)
                    printf("%d ",n);
            }
    

    また,処理がややこしくなってきた関係で人の解答を丸写しする人が増えてきま した.元が間違っている場合には点数が低くなりますので,自分で判断するよう に習慣づけてください.試験では自力で解答しないといけないので,今から準備 が必要です.

    下の解答は結構多く見られたものですが,count=0; のところのインデ ントが間違っています.また,内側の for ループの終了条件も適切で はありません.

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

  3. 前回の復習

    例題4.8では2重の for 文を使用して2次元の座標のような考え方を実 現しています.すなわち,変数 i j を用意して以下のよ うな処理を考えると,

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

    以下のような座標的な処理が実現できますので,その位置で何をするか決めれば いろんな処理が出来ます.

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

  4. 多重の for

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

  5. 実習