第6講 同じことの横縦の繰り返し(2次元ループ)

第6話 繰り返しを数える(コントロールする)数の始め方

#include<iostream>
using namespace std;
int main(){
  int i,j;
  for(i=0;i<10;i++){
    for
(j=0;j<10;j++){
      if(
10*i+j+1<10){
        cout<<"00"<<10*i+j+1<<" ";
      }
      else{
        if(10*i+j+1<100){
          cout<<"0"<<10*i+j+1<<" ";
        }
        else{
          cout<<10*i+j+1<<" ";
        }
      }
    }
    cout<<endl;
  }
}

2次元の意味
---専門用語なしのVBAから借用---
C言語
において1つだけ異質なのは、100です。
ここだけ3桁の整数なのです。
なので、
#include<iostream>
using namespace std;
int main(){
  int i,j;
  for(i=0;i<10;i++){
    for
(j=0;j<10;j++){
      if(
10*i+j+1<10){
        cout<<"00"<<10*i+j+1<<" ";
      }
      else{
        if(10*i+j+1<100){
          cout<<"0"<<10*i+j+1<<" ";
        }
        else{
          cout<<10*i+j+1<<" ";
        }
      }
    }
    cout<<endl;
  }
}


#include<iostream>
using namespace std;
int main(){
  int i,j;
  for(i=0;i<10;i++){
    for
(j=0;j<10;j++){
      if(
10*i+j<10){
        cout<<"0"<<10*i+j<<" ";
      }
      else{
        cout<<10*i+j+1<<" ";
      }
    }
    cout<<endl;
  }
}

と訂正する方が自然です。
これの実行結果を予想してください。
答えは30行下です。







































答え
vba
この結果は
00,01,02,03,04,05,06,07,08,09
10,11,12,13,14,15,16,17,18,19
20,21,22,23,24,25,26,27,28,29
             ・
             ・
             ・
90,91,92,93,94,95,96,97,98,99
に対応しています。
ですから、2次元ループを理解していただくための最も自然な課題は、
2013
を実現するプログラム
#include<iostream>
using namespace std;
int main(){
  int i,j;
  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      if(10*i+j<10){
        cout<<"0"<<10*i+j<<" ";
      }
      else{
        cout<<10*i+j<<" ";
      }
    }
    cout<<endl;
  }
}
を考えよ、であるわけです。
同じことの繰り返しをコントロールする数を、
わかりやすさを優先して、
for(i=1;i<?;i++)
と1から始めることが多かったわけですが、
実は0から始める方が自然であるということが今回の話題から理解していただけたでしょうか。
もちろん、いくつから始めるからは課題によりますし、
プログラマーの好みでもあるわけです。
プログラムという行為は、真に創造的な行為でして、自由なものです。
ですから、
2010
を実現するためには、
#include<iostream>
using namespace std;
int main(){
  int i,j;
  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      if(10*i+j<10){
        cout<<"0"<<10*i+j<<" ";
      }
      else{
        cout<<10*i+j<<" ";
      }
    }
    cout<<endl;
  }
}

でも、
#include<iostream>
using namespace std;
int main(){
  int i,j;
  for(i=1;i<11;i++){
    for(j=1;j<11;j++){
      if(10*i+j<10){
        cout<<"0"<<10*(i-1)+j-1<<" ";
      }
      else{
        cout<<10*(i-1)+j-1<<" ";
      }
    }
    cout<<endl;
  }
}

でも
#include<iostream>
using namespace std;
int main(){
  int i,j;
  for(i=6;i<16;i++){
    for(j=2;j<12;j++){
      if(10*i+j<10){
        cout<<"0"<<10*(i-6)+j-2<<" ";
      }
      else{
        cout<<10*(i-6)+j-2<<" ";
      }
    }
    cout<<endl;
  }
}

でもよいわけです。
今まで解答と必ずを付けてきた理由は、
プログラムの場合答えは無数にあるからです。

以上を断った上で、
同じことの繰り返しをコントロールする数は、
0から始めるのが自然である、とあえて繰り返しておきましょう。
普通はものごとは1から数え始めるのですが、
プログラミングの場合は、0から数え始めることが多いのです。
0から数え始まるということを理解していませんと、
第8講で学ぶ予定になっている配列の理解に支障を来します。
因みに、第7講では、社長と社員(親分と子分)を学ぶ予定になっています。

さて、最後にとても難しい課題を出してこの話を閉めます。
2桁以下のランダムな数字を発生させるプログラムを考えてください。

入門


第5話へ 第7話へ

a

初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
VC++入門
VBA入門
専門用語なしのVBA入門
VB入門
初心者のためのEclipseによるJava入門