第5講 配列の学習

第3話 2次元配列
まず、簡単なForm1を作り、2次元データを出力させてみましょう。
p
実行をダブルクリックして、次のように出力されるプログラミングをされてください。
もちろん配列の学習ですから、
int a[10][10];
と宣言しそれを利用してください。
i
label1に表示させるために
Srring^ w;
を用意してください。
wは、w=w+a[i][j].ToString()+L" ";
のように使えましたね。
1行目を01等としているのは、半角スペースを入れても
y
とずれてしまいます。半角スペースと半角英数の大きさが微妙に違うためです。
仮に全角スペースにしても
rでうまくいきません。
うまく揃えられればそれでいいのですが、
いろいろ試行錯誤してもよい方法がないので、
h
で妥協しているわけです。
01などとするにはw=w+L"0"+a[i][j].ToString()+L" "; 等とすればよいのです。
第4講で学んだif...else...文などを利用して、1桁の場合と2桁の場合に分けて、
表示できるようにされてください。
尚、改行はw=w+L"\n"; でできます。
2次元配列と2次元ループ(2次元for文)を利用されて、プログラミングされてください。
解答例は30行下。






















プログラミング例
#pragma endregion
   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           //変数の宣言
           int i,j,a[10][10];
           String^ w;

           //2次元データの発生
           for(i=0;i<10;i++){
             for(j=0;j<10;j++){
               a[i][j]=10*i+j;
             }
           }

           //2次元データの表示
           w=L"";
           for(i=0;i<10;i++){
             for(j=0;j<10;j++){
               if(a[i][j]<10)
                 w=w+L"0"+a[i][j].ToString()+L" ";
               else
                 w=w+a[i][j].ToString()+L" ";
             }
             w=w+L"\n";
           }
           label1->Text=w;

        }
};
}

では次の課題です。プログラミングを少し変更して、表示結果が
aとなるようにするにはどうしたらよいでしょうか。
プログラミング例は30行下。

























プログラミング例
#pragma endregion
   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           //変数の宣言
           int i,j,a[10][10];
           String^ w;

           //2次元データの発生
           for(i=0;i<10;i++){
             for(j=0;j<10;j++){
               
a[i][j]=10*j+i;
             }
           }

           //2次元データの表示
           w=L"";
           for(i=0;i<10;i++){
             for(j=0;j<10;j++){
               if(a[i][j]<10)
                 w=w+L"0"+a[i][j].ToString()+L" ";
               else
                 w=w+a[i][j].ToString()+L" ";
             }
             w=w+L"\n";
           }
           label1->Text=w;

        }
};
}
変更はa[i][j]=10*j+i;の1カ所だけです。
mzの関係を転置といいますが、
iとjを反対にするだけで転置が可能です。
さて、また課題です。表示結果が、
cとなるようプログラミングされてください。
プログラミング例は30行下。


























プログラミング例
#pragma endregion
   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           //変数の宣言
           int i,j,a[10][10];
           String^ w;

           //2次元データの発生
           for(i=0;i<10;i++){
             for(j=0;j<10;j++){
               a[i][j]=(i+j)%10;
             }
           }

           //2次元データの表示
           w=L"";
           for(i=0;i<10;i++){
             for(j=0;j<10;j++){
               w=w+a[i][j].ToString()+L" ";
             }
             w=w+L"\n";
           }
           label1->Text=w;

        }
};
}
ではこの話最後から2番の課題です。
2桁以下のランダムデータを発生させて、
jjのように表示させてください。
冒頭に
#pragma once
#include<stdlib.h>
namespace 2次元配列 {
とインクルードファイルstdlib.hを読み込むことを忘れないでください。
解答例は例によって30行下。
























解答例
#pragma once
#include<stdlib.h>
namespace 2次元配列 {
      ・
      ・
      ・
#pragma endregion
   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           //変数の宣言
           int i,j,a[10][10];
           String^ w;

           //2次元データの発生
           for(i=0;i<10;i++){
             for(j=0;j<10;j++){
               a[i][j]=rand()%100;
             }
           }

           //2次元データの表示
           w=L"";
           for(i=0;i<10;i++){
             for(j=0;j<10;j++){
               if(a[i][j]<10)
                 w=w+L"0"+a[i][j].ToString()+L" ";
               else
                 w=w+a[i][j].ToString()+L" ";
             }
             w=w+L"\n";
           }
           label1->Text=w;

        }
};
}

ではこの最後の話題です。
Labelをあと6つ用意して、
n
となるようにプログラミングされてください。データは2つともランダムデータです。
解答例は次話で。

第2話へ 第4話へ

025


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

数学研究室に戻る