第25講 様々なループ文
第4話 while文、do...while文による2次元ループ

第3話問題解答例
while文の場合
#pragma endregion

  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int **a,**b,i;
           String^ w;

           a=(int**)malloc(100);
           for(i=0;i<5;i++)a[i]=(int*)malloc(20);
           b=(int**)malloc(100);
           for(i=0;i<5;i++)b[i]=(int*)malloc(20);

           f1(a); //データ1発生

           w=L"";//データ1表示 
           w=f2(a,w);
           label1->Text=w;

           f3(b); //データ2発生

           w=L"";//データ2表示
           w=f4(b,w);
           label2->Text=w;

           w=L"";//データ1とデータ2の和の計算と表示
           w=f5(a,b,w);
           label3->Text=w;

        }

        void f1(int** a){
          int i,j;
          i=0;
          while(i<5){
            j=0;
            while(j<5){
              a[i][j]=5*i+j+1;
              j++;
            }
            i++;
          }
        }

        String^ f2(int** a,String^ w ){
          int i,j;
          i=0;
          while(i<5){
            j=0;
            while(j<5){
              if(a[i][j]<10)w+=L"0"+(a[i][j]).ToString()+L" ";
              if(a[i][j]>=10)w+=(a[i][j]).ToString()+L" ";
              j++;
            }
            w+=L"\n";
            i++;
          }
          return w;
        }

        void f3(int** b){
          int i,j;
          i=0;
          while(i<5){
            j=0;
            while(j<5){
              b[j][i]=5*i+j+1;
              j++;
            }
            i++;
          }
        }

        String^ f4(int** b,String^ w){
          int i,j;
          i=0;
          while(i<5){
            j=0;
            while(j<5){
              if(b[i][j]<10)w+=L"0"+(b[i][j]).ToString()+L" ";
              if(b[i][j]>=10)w+=(b[i][j]).ToString()+L" ";
              j++;
            }
            w+=L"\n";
            i++;
          }
          return w;
        }

        String^ f5(int** a,int** b,String^ w){
          int i,j;
          i=0;
          while(i<5){
            j=0;
            while(j<5){
              if((a[i][j]+b[i][j])<10)w+=L"0"+(a[i][j]+b[i][j]).ToString()+L" ";
              if((a[i][j]+b[i][j])>=10)w+=(a[i][j]+b[i][j]).ToString()+L" ";
              j++;
            }
            w+=L"\n";
            i++;
          }
          return w;
        }

  };
}

do...while文の場合
#pragma endregion

  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int **a,**b,i;
           String^ w;

           a=(int**)malloc(100);
           for(i=0;i<5;i++)a[i]=(int*)malloc(20);
           b=(int**)malloc(100);
           for(i=0;i<5;i++)b[i]=(int*)malloc(20);

           f1(a); //データ1発生

           w=L"";//データ1表示 
           w=f2(a,w);
           label1->Text=w;

           f3(b); //データ2発生

           w=L"";//データ2表示
           w=f4(b,w);
           label2->Text=w;

           w=L"";//データ1とデータ2の和の計算と表示
           w=f5(a,b,w);
           label3->Text=w;

        }

        void f1(int** a){
          int i,j;
          i=0;
          do{
            j=0;
            do{
              a[i][j]=5*i+j+1;
              j++;
            }while(j<5);
            i++;
          }while(i<5);
        }

        String^ f2(int** a,String^ w ){
          int i,j;
          i=0;
          do{
            j=0;
            do{
              if(a[i][j]<10)w+=L"0"+(a[i][j]).ToString()+L" ";
              if(a[i][j]>=10)w+=(a[i][j]).ToString()+L" ";
              j++;
            }while(j<5);
            w+=L"\n";
            i++;
          }while(i<5);
          return w;
        }

        void f3(int** b){
          int i,j;
          i=0;
          do{
            j=0;
            do{
              b[j][i]=5*i+j+1;
              j++;
            }while(j<5);
            i++;
          }while(i<5);
        }

        String^ f4(int** b,String^ w){
          int i,j;
          i=0;
          do{
            j=0;
            do{
              if(b[i][j]<10)w+=L"0"+(b[i][j]).ToString()+L" ";
              if(b[i][j]>=10)w+=(b[i][j]).ToString()+L" ";
              j++;
            }while(j<5);
            w+=L"\n";
            i++;
          }while(i<5);
          return w;
        }

        String^ f5(int** a,int** b,String^ w){
          int i,j;
          i=0;
          do{
            j=0;
            do{
              if((a[i][j]+b[i][j])<10)w+=L"0"+(a[i][j]+b[i][j]).ToString()+L" ";
              if((a[i][j]+b[i][j])>=10)w+=(a[i][j]+b[i][j]).ToString()+L" ";
              j++;
            }while(j<5);
            w+=L"\n";
            i++;
          }while(i<5);
          return w;
        }

  };
}


それでは皆さん、while文による3次元ループに挑戦してみましょう。
Form1を
として、
実行結果が
となるようなプログラミングを考えてみてください。


第3話へ 第5話へ

戻る

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座