第7講 4次および6次魔方陣の作成  
第2話 データ交換プログラムを考える

4次魔方陣や6次魔方陣を作るためには、

 1  2  3  4
 5  6  7  8
 9 10 11 12
13 14 15 16

例えば、1と16を交換しなければなりません。
つまり、a[0][0]とデータとa[3][3]のデータを交換しなければならないのです。

そこで、ここではデータ交換プログラムを考えます。
まず、新しいプロジェクトを作り
#include<iostream>
using namespace std;
using namespace System;
void f();
int main(){
   f();
}
void f(){
   int a,b;
   a=5;
   b=8;
   cout<<"a="<<a<<endl;
   cout<<"b="<<b<<endl;
}
とコーティングして、Ctrl+F5でビルドすると
入門
となります。
aのデータとbのデータを交換するにはどうしたらよいでしょうか。
もちろんここで考えているのは、再入力ではなく交換です。
次のようにしたらうまくいくでしょうか。
void f(){
   int a,b;
   a=5;
   b=8;
   cout<<"a="<<a<<endl;
   cout<<"b="<<b<<endl;
   cout<<"aとbのデータ交換"<<endl;
   b=a;
   a=b;
   cout<<"a="<<a<<endl;
   cout<<"b="<<b<<endl;
}
ところがビルドしてみると、
入門
というわけでうまくいきません。.
どうしてでしょうか。
実は、
   b=a;
とした瞬間にbのデータは消滅してしまいます。
初心者
理由は、データはひとつしか入らないので、5が入ってきたとき、8は箱から出て行ってしまいます。
そして、データは箱の中でしか生きられず、箱から出ると消滅の運命を辿るのです。
aの方のデータは箱の中にとどまっていますから消えることはありません。
   b=a;
という代入の操作の場合、aの箱から5を取り出して、それをbの箱に入れるわけではありません。
箱の中の値を参照(コピー)して、それをbの箱に入れるのです。
   b=a;
という操作をした瞬間に
基礎
をなってしまっていますので、次の操作
   a=b;
は何の意味もありません。
では、bのデータを残して交換するにはどうしたらよいでしょうか。
ヒントは、第3の箱を用意することです。

第1話へ 第3話へ


戻る


VB講義へ
VB講義基礎へ

vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)