授業メモ\\ レコード型(一般形)  ・複数の変数をパッキングしたもの おべんとう  →主食 ・白米  →おかず   ・卵焼き   ・たこさんウィンナー   ・回鍋肉   ・ほうれんそうのおひたし 一つのキャラクターやオブジェクトに関連する複数の変数たちを、ばらばらに扱っていくのはしんどい →お弁当箱に詰めればいいじゃん。 RAV4の色は? Eliseの値段は? レコード型をC++,C言語などで表現する方法 → 構造体 Vec2 v = {2, 3};//構造体 v.x = 2;↑これと一緒 v.y = 3; v{ x, y} v.x v.y P1(x1,y1) P2(x2,y2)の距離 distance = √{(x2-x1)^2 + (y2-y1)^2} struct 構造体名 { メンバを並べる。; }; 構造体名 変数名; 構造体型の変数ができる。 変数名.メンバ名 でメンバにアクセス(代入、読み出し) //構造体の話ここまで 関数 ・何度も呼ばれる処理をサブルーチンとして書いておく →値を返すタイプのサブルーチン:ファンクション(関数) →値を返さない処理だけのサブルーチン:プロシージャ(手続き) C++/Cではどっちも関数っていうよ!  戻り値あり 戻り値の型を指定  戻り値なし void型を指定 仮引数⇒処理内容で使う値を外部から取り込む仕組み 引数なし(void) 省略形  () 戻り値の型 関数名(仮引数リスト) {  処理内容 return(戻り値); } void 関数名(仮引数リスト) {  処理内容 } 実引数を関数に渡すと、仮引数にその値がコピーされて、 関数の中で使われる値はすべて、実引数のコピーになるよ。 ===== 構造体の宣言と構造体型の変数 ===== #include #include using namespace std; //構造体の宣言(こういう構造体があるよと教えるだけ) struct Vec2 { double x; double y; }; //struct Car //{ // string type; // float color[3];//r,g,bで3つ // int price; // string maker; //}; //あるベクトル(2次元)にスカラーをかける!そのかけたベクトルを返したい Vec2 mulVec(Vec2 v, double scalar) { Vec2 retV; retV.x = scalar * v.x; retV.y = scalar * v.y; return(retV); } //入力したベクトルとスカラーをかけたベクトルを表示しましょう //1.ベクトルvecのx、yを入力 //2.かけるスカラー量lengthを入力 //3.かけた結果を、retv に代入して表示する // ただし表示は自作関数 void PrintVec2(引数考えろ)を使うこと // Vec2 vv{3,2}; // PrintVec2(vv);の結果は (3, 2)になるよ void PrintVec2(Vec2 v) { cout << "(" << v.x << ", " << v.y << ")"; } void HelloWorldInf() { while (true) cout << "hello world" << endl; } double VecLength(Vec2 v) { return(sqrt(v.x * v.x + v.y * v.y)); } //Vec2型を受け取って、単位ベクトル化したベクトルを返す関数 //ルートは sqrt(値)で求められる (#include が必要) Vec2 NormalizeVec2(Vec2 v) { Vec2 retV; double length = VecLength(v); retV.x = v.x / length; retV.y = v.y / length; return(retV); } int main() { Vec2 v1, v2; v1.x = 1.0; //長さ1のベクトル v1.y = 1.0; v2 = mulVec(v1, 3.0); //v1を3倍したベクトルを返すよ cout << "v1(x, y) ="; PrintVec2(v1); cout << endl; //PrintVec2を使って、v1を表示 cout << "v2(x, y) ="; PrintVec2(v2); cout << endl; //PrintVec2を使って、v2表示 Vec2 nv2; nv2 = NormalizeVec2(v2); cout << VecLength(nv2) << endl; //cout << "v1(x, y) = "; //PrintVec2(v1); return 0; } ===== 構造体の宣言と初期化 ===== #include #include #include using namespace std; struct student { string name;//名前 int age; //年齢 double height;//身長 double weight;//体重 }; /// /// 渡された学生個人のデータを表示する関数 /// /// /// 一人の学生の個人データを表す構造体型 /// void PrintStu(student _stu) { cout << "-------------------" << endl; cout << "Name: " << _stu.name << endl; cout << " Age: " << _stu.age << endl; cout << " HGT: " << _stu.height << endl; cout << " WGT: " << _stu.weight << endl; cout << "-------------------" << endl; } int main() { const int STUNUM = 5; //int arr[5] = { 1,3,5,6,8 }; student myStu[STUNUM] = { { "sato", 18, 192.0, 97.0 }, { "yamada", 20, 165.0, 48.0 }, { "suzuki", 16, 168.0, 58.0 }, { "sasaki", 32, 154.0, 70.0 }, {"yoshida", 67, 185.0, 88.0 } }; for (int i = 0; i < STUNUM; i++) { PrintStu(myStu[i]); } return 0; }