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

広告

posted by fanblog

2018年03月20日

《その342》 問題演習 p.449演習12-3



新版明解C++中級編 p.449 演習12-3
 次のプログラム lasttime.cpp は、以下のように動作する。
 ・初めての実行時には、「初めての実行」と画面表示
 ・二回目以後の実行時には、前回実行した日時を表示

 プログラム lasttime.cpp における現在の日時の取得を、クラス Date を利用して行うように変更したプログラムを作成せよ。
クラス Date とプログラム lasttime.cpp は、以下の通り。



// クラス Date
class Date {
int y; // 年
int m; // 月
int d; // 日
int h; // 時
int min; // 分
int s; // 秒
public:
Date() {
time_t current = time(NULL);
struct tm* local = localtime(&current);
y = local->tm_year + 1900;
m = local->tm_mon + 1;
d = local->tm_mday;
h = local->tm_hour;
min = local->tm_min;
s = local->tm_sec;
}

// 文字列作成
std::string to_string() const {
std::ostringstream so;
so << y << "年" << m << "月"
<< d << "日"
<< h << "時" << min << "分"
<< s << "秒";
return so.str();
}
};



// プログラム lasttime.cpp
#pragma warning(disable:4996)
#include <ctime>
#include <fstream>
#include <iostream>
using namespace std;

char fname[] = "lasttime.txt";

void get_data() {
ifstream fis(fname);

if (fis.fail())
// オープンに失敗した場合
cout << "初めての実行\n";
else {
// 前回日時の読込み・画面表示
int y, m, d, h, min, s;
fis >> y >> m >> d >> h
>> min >> s;
cout << "前回の実行は " << y << "年"
<< m << "月" << d << "日"
<< h << "時" << min << "分"
<< s << "秒\n";
}
}

// 今回の日時を書込む
void put_data() {
ofstream fos(fname);

if (fos.fail())
cout << "\aファイルをオープンでき"
"ません。\n";
else {
time_t current = time(NULL);
struct tm* local = localtime(&current);
fos << local->tm_year + 1900 << ' '
<< local->tm_mon + 1 << ' '
<< local->tm_mday << ' '
<< local->tm_hour << ' '
<< local->tm_min << ' '
<< local->tm_sec << '\n';
}
}

int main() {
get_data(); // 前回日時の読込み・画面表示
put_data(); // 今回の日時を書込む
}



// 解答

#pragma warning(disable:4996)
#include <ctime>
#include <sstream>
#include <fstream>
#include <iostream>
using namespace std;

class Date {
int y; // 年
int m; // 月
int d; // 日
int h; // 時
int min; // 分
int s; // 秒
public:
Date() {
time_t current = time(NULL);
struct tm* local = localtime(&current);
y = local->tm_year + 1900;
m = local->tm_mon + 1;
d = local->tm_mday;
h = local->tm_hour;
min = local->tm_min;
s = local->tm_sec;
}

// 文字列作成
std::string to_string() const {
std::ostringstream so;
so << y << "年" << m << "月"
<< d << "日"
<< h << "時" << min << "分"
<< s << "秒";
return so.str();
}
};

char fname[] = "lasttime.txt";

void get_data() {
ifstream fis(fname);

if (fis.fail())
// オープンに失敗した場合
cout << "初めての実行\n";
else {
// 前回日時の読込み・画面表示
ifstream fis("text.txt");
string str;
fis >> str;
cout << "前回の実行は " << str << '\n';
fis.close();
}
}

// 今回の日時を書込む
void put_data() {
ofstream fos(fname);

if (fos.fail())
cout << "\aファイルをオープンでき"
"ません。\n";
else {
ofstream fos("text.txt");
Date now;
fos << now.to_string() << '\n';
}
}

int main() {
get_data(); // 前回日時の読込み・画面表示
put_data(); // 今回の日時を書込む
}

h12_0301.png

h12_0302.png



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

お名前:

メールアドレス:


ホームページアドレス:

コメント:

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

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

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

 たまに、クリック お願いします 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日以上新しい記事の更新がないブログに表示されております。