授業で使ったreplitのソース(実行可能)
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
//2つの値を表示する関数
void printAB(double _a, double _b)
{
cout << "(a, b) = (" << _a << ", " << _b << ")" << endl;
}
//2つの変数の値を入れ替える関数(交換できない(´;ω;`))
//changeAB(0.0, 128.7); _a <- 0.0 _b <- 128.7
void changeAB(double _a, double _b)
{
double tmp;
tmp = _a; //tmpにaを保存
_a = _b;
_b = tmp;
}//<-仮引数_a, _bの生存範囲
//値の交換、参照渡しバージョン //アドレスの中身を書き換えてね &
void changeAB_ref(double &_a, double &_b)
{
double tmp;
tmp = _a; //tmpにaを保存
_a = _b; //_a = は、_aに引数で渡されたアドレスの中身に代入される
_b = tmp; //_b = は、_bに引数で渡されたアドレスの中身に代入される
}
//値の交換、ポインタ渡しバージョン(アドレス渡し)
void changeAB_addr(double* _a, double* _b)
{
// _a, _b :実引数のアドレス
// *_a, *_b:実引数があるアドレスの中身の値
double tmp;
tmp = *_a;
*_a = *_b;
*_b = tmp;
}
//実引数に何を代入して関数に渡しても、必ず5に変更しやがる関数
void change5(double &_var)
{
_var = 5.0;
}
int main() {
double a,b;
a = 0.0;
b = 128.7;
printAB(a, b);
//double tmp;
//tmp = a; //tmpにaを保存
//a = b;
//b = tmp;
//changeAB(a, b); // changeAB(0.0, 128.7);
//changeAB_ref(a, b);//参照私の呼び方
//変数のアドレスを取り出す演算子 &
//ちゃんと変数がある場所のアドレスを渡さないとエラーになるよ(大変だよ)
changeAB_addr(&a, &b);
printAB(a, b);
change5(a);
change5(b);
printAB(a, b);
//値の交換はstd::swap(a,b)を使うと楽(同じ型同士だけだよ)
a = 0.0;
b = 5.2;
std::swap(a,b);
printAB(a, b);
int iarr[5] = {1, 3, 2, 4, 5};
cout << "スワップ前:" << endl;
for(int i=0;i<5;i++)
cout << "iarr[" << i << "]=" << iarr[i] << endl;
std::swap(iarr[1],iarr[2]);
cout << "スワップ後:" << endl;
for(int i=0;i<5;i++)
cout << "iarr[" << i << "]=" << iarr[i] << endl;
//夏休み中に教科書の、
//①3つのソート(選択、バブル、挿入)のアルゴリズムを疑似言語で書く
//②疑似言語を見ながら、C++で配列のソートをするプログラムを3つ作ってみる
//③3つのアルゴリズムのひどさを体感する。(配列数増やすといいよ)
//配列の値の初期化は乱数とか使うとらくちんかな。
return 0;
}