授業メモ\\
レコード型(一般形)
・複数の変数をパッキングしたもの
おべんとう
→主食
・白米
→おかず
・卵焼き
・たこさんウィンナー
・回鍋肉
・ほうれんそうのおひたし
一つのキャラクターやオブジェクトに関連する複数の変数たちを、ばらばらに扱っていくのはしんどい
→お弁当箱に詰めればいいじゃん。
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;
}