アフィリエイト広告を利用しています

広告

posted by fanblog

2017年10月15日

《その79》 ヘッダファイル と ソースファイル(p.377演習10-1,演習10-2)


今回の演習問題のプログラムは、ヘッダファイルとソースファイルの2つで構成する形で実現しました。

演習問題を解く前に、
コンパイルが成功したコンソールアプリケーションを実行する方法を再確認しておきたいと思います。


コンソールアプリケーションを実行する方法

デバッグ(D) → デバッグなしで開始(H)

Visual Studio Community 2017 を利用してコンソールアプリケーションを実行する場合
は、コマンドプロンプトがプログラム実行直後に消えてしまわないように、
本ブログの《その6》に書いてある次の手順を一度行っておいてください。

◆ ソリューションエクスプーラーで
プロパティ → リンカー → システム → サブシステム → コンソールを選択

デバッグ(D) → デバッグなしで開始(H)
の代わりに
Ctrl+F5キー
でコンソールアプリケーションを実行することもできます。




新版明解C++入門編 p.377 演習10-1
 名前・身長・体重などをメンバとしてもつ《人間クラス》を自由に定義せよ。

  2つのファイル Human.h
HumanTest.cpp
を順に記述します。


// Human.h
#include <string>

class Human {
private:
std::string name; // 氏名
std::string country; // 国籍
double height; // 身長(cm)
double weight; // 体重(kg)
public:
Human(std::string n, std::string c, double h, double w) {
name = n; country = c; height = h; weight = w;
}

std::string namae() { return name; }
std::string kokuseki() { return country; }
double shinchou() { return height; }
double taijuu() { return weight; }

double bmi() { // 肥満指数BMI
return weight / height / height * 10000;
}
double standard_w() { // 標準体重(kg)
return height * height * 22 / 10000;
}
};


// HumanTest.cpp
#include <iomanip>
#include <iostream>
#include <string>
#include "Human.h"
using namespace std;

int main() {
Human saitou("斉藤とまと", "日本", 176.5, 58.0);

cout << "◆" << saitou.namae() << '\n';
cout << " 国籍 " << saitou.kokuseki() << '\n';
cout << fixed << setprecision(1);
cout << " 身長 " << saitou.shinchou() << "cm\n";
cout << " 体重 " << saitou.taijuu() << "kg\n";
cout << " BMI " << saitou.bmi() << '\n';
cout << " 標準体重 " << saitou.standard_w() << "kg\n";
}

c10_01.png



新版明解C++入門編 p.377 演習10-2
 自動車クラス Car にデータメンバやメンバ関数を自由に追加せよ(ナンバーを表すデータメンバを追加する、燃費を表すデータメンバを追加する、移動による燃料残量の計算に燃費を反映させる、タンク容量を表すデータメンバを追加する、給油のためのメンバ関数を追加する etc…)。

  2つのファイル Car.h
CarTest.cpp
を順に記述します。


// Car.h
#include <cmath>
#include <string>
#include <iostream>

class Car {
std::string name, number;
int width, length, height;
double tank_capa, km_p_L;
double fuel_level;
double xp, yp;

public:
Car(std::string num, std::string nam, int w, int l, int h, double t, double km) {
number = num; name = nam; width = w; length = l; height = h; tank_capa = t; km_p_L = km;
fuel_level = 0.0; xp = yp = 0.0;
}

bool refueling(double gas) {
if (fuel_level + gas > tank_capa) {
fuel_level = tank_capa;
return false;
}
else {
fuel_level += gas;
return true;
}
}

void print_spec() {
std::cout << "【スペック】" << "\n";
std::cout << "------------" << "\n";
std::cout << "名前:" << name << "\n";
std::cout << "車幅:" << width << "mm\n";
std::cout << "車長:" << length << "mm\n";
std::cout << "車高:" << height << "mm\n";
std::cout << "タンク容量:" << tank_capa << "L\n";
std::cout << "燃費:" << km_p_L << "km/L\n";
std::cout << "------------" << "\n";
}

void print_situation() {
std::cout << "・現在地 x:" << xp << "km y:" << yp << "km\n";
std::cout << "・燃料残量:" << fuel_level << "L" << '\n';
}

bool move(double dx, double dy) {
double dist = sqrt(dx * dx + dy * dy);
if (dist > fuel_level * km_p_L)
return false;
else {
fuel_level -= dist / km_p_L;
xp += dx;
yp += dy;
return true;
}
}
};


// CarTest.cpp
#include <iostream>
#include "Car.h"
using namespace std;

int main()
{
Car myCar("横浜012-3456", "ランドクルーザー", 1980, 4950, 1870, 90, 6.6);
myCar.print_spec();

while (true) {
myCar.print_situation();
cout << '\n';
int move;
cout << "[ 0…到着 /1…移動 /2…給油 ]:"; cin >> move;
if (move == 0) break;
if (move == 2) {
double gas;
do {
cout << "給油量[L]:"; cin >> gas;
} while (gas < 0);
if (!myCar.refueling(gas))
cout << "\a燃料が多過ぎます!\n満タンまで入れました。\n";
}
else {
double dx, dy;
cout << "X方向の移動距離[km]:"; cin >> dx;
cout << "Y方向の移動距離[km]:"; cin >> dy;
if (!myCar.move(dx, dy)) {
cout << "\a燃料が不足!\n";
}
}
}
}

c10_021.png

c10_022.png

c10_023.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6858754
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。