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

第4話 2次元ループの意味

2次元の意味を考えていただくために、
もう一度プログラムの文章とプログラムの実行結果と (i、j)の動きを見てください。
自然配列を発生させるプログラムの文章
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
  int i,j,k;
  k=0;
  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      k++;
      if(k<10){
        cout<<"00"<<k<<" ";
      }
      else{
        if(k<100){
          cout<<"0"<<k<<" ";
        }
        else{
          cout<<k<<" ";
        }
      }
    }
    cout<<endl;
  }
}
実行結果
C言語
(i、j)の動き
(1、1)→(1、2)→(1、3)→(1、4)→(1、5)→(1、6)→(1、7)→(1、8)→(1、9)→(1、10)→
(2、1)→(2、2)→(2、3)→(2、4)→(2、5)→(2、6)→(2、7)→(2、8)→(2、9)→(2、10)→
(3、1)→(3、2)→(3、3)→(3、4)→(3、5)→(3、6)→(3、7)→(3、8)→(3、9)→(3、10)→
(4、1)→(4、2)→(4、3)→(4、4)→(4、5)→(4、6)→(4、7)→(4、8)→(4、9)→(4、10)→
(5、1)→(5、2)→(5、3)→(5、4)→(5、5)→(5、6)→(5、7)→(5、8)→(5、9)→(5、10)→
(6、1)→(6、2)→(6、3)→(6、4)→(6、5)→(6、6)→(6、7)→(6、8)→(6、9)→(6、10)→
(7、1)→(7、2)→(7、3)→(7、4)→(7、5)→(7、6)→(7、7)→(7、8)→(7、9)→(7、10)→
(8、1)→(8、2)→(8、3)→(8、4)→(8、5)→(8、6)→(8、7)→(8、8)→(8、9)→(8、10)→
(9、1)→(9、2)→(9、3)→(9、4)→(9、5)→(9、6)→(9、7)→(9、8)→(9、9)→(9、10)→
(10、1)→(10、2)→(10、3)→(10、4)→(10、5)→(10、6)→(10、7)→(10、8)→(10、9)→(10、10)
---以後、専門用語なしのVBAから借用---

 入門  初心者  基礎  →  vba

動いていってから、
visual  →  2次元の意味 

---以上、専門用語なしのVBAから借用---

結局、実行結果
C言語
は実際にコンピュータが動く順番を示しています。
表示の番号順にプログラムは処理をしています。
001を表示→002を表示→003を表示→・・・→099を表示→100を表示
の順にコンピュータは処理を実行しています。動きは、
#include<iostream>
using namespace std;
int main(){
  int i,k;
  k=0;
  
for(i=0;i<10;i++){
    k++;
    if(k<10){
      cout<<"0"<<k<<" ";
    }
    else{
      cout<<k<<" ";
    }
  
}
  cout<<endl;
}

ならば
入門
と直線(1方向のみ)に動くのに対して、横方向と縦方向の2方向に動きます。
数学では直線を1次元、平面を2次元といいますが、1,2はもっている方向の数です。
それと同様に、
#include<iostream>
using namespace std;
int main(){
  int i,k;
  k=0;
  
for(i=0;i<10;i++){
    k++;
    if(k<10){
      cout<<"0"<<k<<" ";
    }
    else{
      cout<<k<<" ";
    }
  
}
  cout<<endl;
}
は1方向のみにしか動かないので1次元ループといい、
#include<iostream>
using namespace std;
int main(){
  int i,j,k;
  k=0;
  
for(i=0;i<10;i++){
    
for(j=0;j<10;j++){
      k++;
      if(k<10){
        cout<<"00"<<k<<" ";
      }
      else{
        if(k<100){
          cout<<"0"<<k<<" ";
        }
        else{
          cout<<k<<" ";
        }
      }
    
}
    cout<<endl;
  
}
}
は2方向に動く(平面上に動く)ので2次元ループというのです。
専門用語を用いない本講義では、
2方向の繰り返し(ループ)を『同じことの横縦の繰り返し』と呼んでいるわけです。
2次元+ループですから、
『横縦の同じことの繰り返し』『横縦に同じことを繰り返す』とも呼びたいと思います。
2方向の動き=平面上の動きであることを示すために、
横縦の繰り返しとしているわけです。
そして、ランダムな数字を2次元上に発生させる
#include<stdlib.h>
#include<ctime>
using namespace std;
int main(){
  int i,j,w;
  srand(static_cast<unsigned int>(time(0)));
  
for(i=0;i<10;i++){
    
for(j=0;j<10;j++){
      w=rand()%100;
      if(w<10){
        cout<<"0"<<w<<" ";
      }
      else{
        cout<<w<<" ";
      }
    
}
    cout<<endl;
  
}
}
---以後、専門用語なしのVBAからの借用ですので、数字の動きだけに注目してください。---
入門
の場合でも、動き方の順番は
2次元の意味

---以上、専門用語なしのVBAから借用---

となっています。
横に動いてから縦に動くわけです。
入れ子式人形
  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      w=rand()%100;
      if(w<10){
        cout<<"0"<<w<<" ";
      }
      else{
        cout<<w<<" ";
      }
    }
    cout<<endl;
  }
の中の人形
    for(j=0;j<10;j++){
      w=rand()%100;
      if(w<10){
        cout<<"0"<<w<<" ";
      }
      else{
        cout<<w<<" ";
      }
   
 }

が先に動き、中の人形が一通り任務を遂行し終わると、
外の人形がそのたびに1つだけ動くのです。


 入門  初心者  基礎  →  vba


visual  →  2次元の意味 

---同じく専門用語なしのVBAからの借用---

動き方は10×10=100通りです。長方形の面積の求め方と同じです。
2次元ループを理解していただくためには、
実際にどう動くかを把握しなければならないのです。

さて、次の課題です。
C言語
を実現するために第3の箱kを用意しましたが、
実は2つの箱iとjのみでも同じ結果を得るプログラムを組むことが可能です。
それを考えてください。
ヒントは、10進数の成り立ち
56=5×10+6
にあります。




第3話へ 第5話へ

a

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