授業メモ
レコード型(一般形)
・複数の変数をパッキングしたもの
おべんとう
→主食
・白米
→おかず
・卵焼き
・たこさんウィンナー
・回鍋肉
・ほうれんそうのおひたし
一つのキャラクターやオブジェクトに関連する複数の変数たちを、ばらばらに扱っていくのはしんどい
→お弁当箱に詰めればいいじゃん。
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 <iostream> #include <cmath> 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 <cmath>が必要) 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 <iostream> #include <cmath> #include <string> using namespace std; struct student { string name;//名前 int age; //年齢 double height;//身長 double weight;//体重 }; /// <summary> /// 渡された学生個人のデータを表示する関数 /// </summary> /// <param name="_stu"> /// 一人の学生の個人データを表す構造体型 /// </param> 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; }