ここから本文です

以下の課題が出ました。 わかる方いらっしゃいましたらお願いします。

tha********さん

2008/1/2012:31:47

以下の課題が出ました。
わかる方いらっしゃいましたらお願いします。

[課題]プログラムの作成前に,下記ファイルをエディタで作成して保存しておくこと.

名前:test.dat (空白はスペース1つを入れて各行で改行する 全て半角)

1 1.3
3 4.0
2 8.4
4 3.5
1 2.6
5 3.4
3 5.7

作成した test.dat は
品物 個数 単価(ドル) の関係を示しているとする.

A 1 1.3
B 3 4.0
C 2 8.4
D 4 3.5
E 1 2.6
F 5 3.4
G 3 5.7

test.datを読み込み,各品物の合計金額を円に換算して
ファイル(enn.dat)に書き込むプログラムを作成しなさい.
ただし,1ドルは108円とする.

enn.datの中身の例(一円以下は四捨五入)

A 140
B 1296
C 1814
D 1512
E 281
F 1836
G 1847

レポートにはenn.datの中身を示しなさい.

閲覧数:
742
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

編集あり2008/1/2115:15:45

C言語は色々面倒なので、C++で書きました。
ご参考に
(VC6.0以上あれば、ファイル名を.cppにすればコンパイルできます)
(test.datをcppファイルと同じフォルダの下に置いてください)

#include <fstream>
#include <string>

using namespace std;

#define RATE 108 //ドル→日本円

void main()
{
ifstream ifs("test.dat");
string str((istreambuf_iterator<char>(ifs)),istreambuf_iterator<char>());
string str_name,str_count,str_value;
size_t cur_line(0),cur_space,next_space,line_end;
int result;

while(str.find("\n",cur_line) != string::npos)//行ごとに処理する
{
cur_space = str.find(" ",cur_line); //最初のスペース
next_space = str.find(" ",cur_space + 1); //次のスペース
line_end = str.find("\n",next_space); //改行

str_name = str.substr(cur_line,cur_space - cur_line); //スペースの間から値を受け取る
str_count = str.substr(cur_space,next_space - cur_space);
str_value = str.substr(next_space,line_end - next_space);

result = static_cast<int>(atof(&str_count[0]) * atof(&str_value[0])*RATE + 0.5); //文字列を数字に変換して計算&四捨五入

ofstream ofs("enn.dat",ios::app);
ofs << str_name <<" "<< result <<endl; //出力

cur_line = line_end + 1; //次の行へ
}
}

この回答は投票によってベストアンサーに選ばれました!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる