第14講 フリーストア配列とCLI配列
第6話 1次元CLI配列の学習
第5話問題解答例
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^
e) {
array<int>^ a=gcnew array<int>(5);
int i;
for(i=0;i<5;i++)a[i]=i+1;
String^ w=L"";
for(i=0;i<5;i++)w+=a[i].ToString()+L" ";
label1->Text=w;
}
フリーストア配列のときは、関数終了直前に必ず削除しなければなりませんでしたが、
CLI配列では、関数の終了と同時に変数は消滅しますので、削除は必要ありません。
(コピーペースト用
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
array<int>^ a=gcnew array<int>(5);
String^ w=L"";
int i;
for(i=0;i<5;i++)a[i]=i+1;
for(i=0;i<5;i++)w+=a[i].ToString()+L" ";
label1->Text=w;
}
)
では皆さん問題です。
この解答例では、すべてSystem::Void button1_Clickで処理させていますが、
データ作成部分とデータ表示部分を関数f(a)、g(a)に独立させて、
System::Void button1_Clickが
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^
e) {
array<int>^ a=gcnew array<int>(5);
f(a);
g(a);
}
となるようにしてください。解答例は20行下。
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^
e) {
array<int>^ a=gcnew array<int>(5);
f(a);
g(a);
}
void f(array<int>^ x){
int i;
for(i=0;i<5;i++)x[i]=i+1;
}
void g(array<int>^ x){
String^ w=L"";
int i;
for(i=0;i<5;i++)w+=x[i].ToString()+L" ";
label1->Text=w;
}
(コピーペースト用
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
array<int>^ a=gcnew array<int>(5);
f(a);
g(a);
}
void f(array<int>^ x){
int i;
for(i=0;i<5;i++)x[i]=i+1;
}
void g(array<int>^ x){
String^ w=L"";
int i;
for(i=0;i<5;i++)w+=x[i].ToString()+L" ";
label1->Text=w;
}
)
さらに、System::Void button1_ClickでString^ w=L"";を定義して、
それをfに送り、fからかえしてもらいSystem::Void button1_Clickで表示させるプログラムに変更してください。
つかり、関数gを不要にしてください。
解答例は20行下。
解答例
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
array<int>^ a=gcnew array<int>(5);
String^ w=L"";
w=f(a,w);
label1->Text=w;
}
String^ f(array<int>^ x,String^ w){
int i;
for(i=0;i<5;i++)x[i]=i+1;
for(i=0;i<5;i++)w+=x[i].ToString()+L" ";
return(w);
}
(コピーペースト用
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
array<int>^ a=gcnew array<int>(5);
String^ w=L"";
w=f(a,w);
label1->Text=w;
}
String^ f(array<int>^ x,String^ w){
int i;
for(i=0;i<5;i++)x[i]=i+1;
for(i=0;i<5;i++)w+=x[i].ToString()+L" ";
return(w);
}
)
次に、2次元CLI配列に挑戦しましょう。
2次元配列を宣言するには、
array<要素の型,2>^ g=gcnew array<要素の型,2>(要素数,要素数);
とします。例えば、
array<int,2>^ a=gcnew array<int,2>(5,8);
と宣言して、実行結果がとなるソフトを作りましょう。
1つだけ注意しておきます。
2次元CLI配列の場合、添え字の使い方はa[i][j]ではなく、a[i,j]です。
第11講第6話へ 第12講第1話へ 第13講第10話へ 第14講第5話へ 第14講第7話へ
vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ