第5講 配列の学習
第3話 2次元配列
まず、簡単なForm1を作り、2次元データを出力させてみましょう。
実行をダブルクリックして、次のように出力されるプログラミングをして下さい。
もちろん配列の学習ですから、
int a[10][10];
と宣言しそれを利用してください。
label1に表示させるために
Srring^ w;
を用意してください。
wは、w=w+a[i][j].ToString()+L" ";
のように使えましたね。
1行目を01等としているのは、半角スペースを入れても
とずれてしまいます。半角スペースと半角英数の大きさが微妙に違うためです。
仮に全角スペースにしても
でうまくいきません。
うまく揃えられればそれでいいのですが、
いろいろ試行錯誤してもよい方法がないので、
で妥協しているわけです。
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;
}
};
}
では次の課題です。プログラミングを少し変更して、表示結果が
となるようにするにはどうしたらよいでしょうか。
プログラミング例は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カ所だけです。
との関係を転置といいますが、
iとjを反対にするだけで転置が可能です。
さて、また課題です。表示結果が、
となるようプログラミングして下さい。
プログラミング例は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桁以下のランダムデータを発生させて、
のように表示させてください。
冒頭に
#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つ用意して、
となるようにプログラミングして下さい。データは2つともランダムデータです。
解答例は次話で。
第2話へ 第4話へ
vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る