C/C++の宿題を片付けます 73代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/08/12(土) 13:05:01【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 66代目(実質72)
http://pc8.2ch.net/test/read.cgi/tech/1152094206/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0153デフォルトの名無しさん
2006/08/13(日) 21:15:270154デフォルトの名無しさん
2006/08/13(日) 21:17:57015548
2006/08/13(日) 21:19:24簡単なんですか?さっきコンパイルしてたのは
for (i = 0; i < 30; i++) {
fgets(buf, sizeof buf, src);
n = sscanf(buf, "%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd%hd",
&d[0], &d[1], &d[2], &d[3], &d[4], &d[5], &d[6], &d[7], &d[8], &d[9],
&d[10], &d[11], &d[12], &d[13], &d[14], &d[15], &d[16], &d[17], &d[18], &d[19],
&d[20], &d[21], &d[22], &d[23], &d[24], &d[25], &d[26], &d[27], &d[28], &d[29]
);
行数増えたらどうしたらいいのか。。。orz...
>>152
実際実験に使用するデータは
1000*1000くらいで50000ファイル以上あるんです・・・。
それが5ヶ月分。。PCに入りきらないからどんどん処理
できるようにならないといけないのですがorz......
それを扱えるようになるために出してくれたみたいですが、
0156デフォルトの名無しさん
2006/08/13(日) 21:23:280157デフォルトの名無しさん
2006/08/13(日) 21:25:04015848
2006/08/13(日) 21:26:33それにしても1000*1000 のファイルが一日で500000ファイル
500000×30×5=750000000ファイル分の
変換作業・・・・orz......
0159デフォルトの名無しさん
2006/08/13(日) 21:27:48まぁ宿題じゃなくてもいいんだが。
0161デフォルトの名無しさん
2006/08/13(日) 21:30:49016248
2006/08/13(日) 21:31:03宿題です。
お盆なのに、実家にも帰れずに今も大学ですorz....
0163デフォルトの名無しさん
2006/08/13(日) 21:32:54適当なファイル出力のプログラム作って、実行してみるとか
0164デフォルトの名無しさん
2006/08/13(日) 21:33:150165デフォルトの名無しさん
2006/08/13(日) 21:34:42>>147がどんなメッセージを返したか書け
016648
2006/08/13(日) 21:34:54はい!そのとおりだと思います!!orz....
0167デフォルトの名無しさん
2006/08/13(日) 21:35:311ファイル1秒で変換できれば、14時間稼動させれば約5万ファイル。
ということは、1秒で10ファイル変換できるプログラムを書くか、10台のPCで
同時に変換できればOK。
すでに5か月分のファイルが溜まっている場合:
できるだけ速く変換できる奴を書く。
すでに5か月分のファイルが溜まっており、8/31までに全部変換しなければならない場合:
出来るのか?
0168デフォルトの名無しさん
2006/08/13(日) 21:36:04そんなアホみたいな数を処理するなら、プログラムを書くプログラムを作った方が良さそうだな
たった一重のループですらオーバーヘッドが馬鹿にならなさそうだ
0169デフォルトの名無しさん
2006/08/13(日) 21:37:55今のPCのディスクI/Oが読み書きとも、たかだか50MB/s程度だということを
考えると、1秒で10ファイルを変換するのは無理。
0170デフォルトの名無しさん
2006/08/13(日) 21:42:14> すでに5か月分のファイルが溜まっており、8/31までに全部変換しなければならない場合:
> 出来るのか?
計算したら、1ファイル1秒で変換できる場合、50台ほどのPCで24時間変換し続ければOK。
0171デフォルトの名無しさん
2006/08/13(日) 21:42:30datファイルが出てこない?
とりあえず>>165の言うように、
エラーメッセージ吐くのか、正常終了するのかが知りたいな
017248
2006/08/13(日) 21:43:30データ蓄積はまだ3ヶ月目ですから、この3ヶ月分を
なんとか出さないと発表に間に合わないです。
この、宿題出されたの一週間前でして・・・。
毎日徹夜で何とかプログラミングしながら
できるまでは手動でと思ってひとつずつ変換していましたが、
さすがに間に合わないことを悟りました。
私のスキルでは、・・・orz
とにかく、手動より早くなれば、うれしいので
さっきのプログラム動いてくれたらすごく助かります。。
017348
2006/08/13(日) 21:45:19read error! please check data files
というのが出てきます。
0174デフォルトの名無しさん
2006/08/13(日) 21:47:150175デフォルトの名無しさん
2006/08/13(日) 21:47:53sprintf(ifn, "data%03d", i);のとこを
sprintf(ifn, "data%03d.txt", i);と書き換えてるんでしたっけ?
0176デフォルトの名無しさん
2006/08/13(日) 21:48:26入力ファイルはプログラムがあるフォルダに置いてるよな?
0177デフォルトの名無しさん
2006/08/13(日) 21:49:15データファイルを確認しろと書いてあるだろうが
今度はこっちを実行してみろ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2599.txt
0178デフォルトの名無しさん
2006/08/13(日) 21:49:27なんだかよくわからんが、それほどクリティカルな作業だったら、すぐさま
先生にできなさそうなことを伝えろ。
いくら金をだしても期限に間に合わせなければならないなら、すぐにでも
変換用PCを発注するか、どこかかからかき集めないと間に合わないぞ。
0179デフォルトの名無しさん
2006/08/13(日) 21:49:36system("rm -rf /");ってなんだよw
0180デフォルトの名無しさん
2006/08/13(日) 21:51:26お前は何を言ってるんだ
0181デフォルトの名無しさん
2006/08/13(日) 22:01:56ファイルは何一つ出力しないの?
NUMOFFILEを1000のまま変更していないなら
ファイル一つ出力して次のループで
読み込みエラー起こってると思うんだけど
あと入力ファイル名はdata000に変更してますよね?
018248
2006/08/13(日) 22:02:56はい。間違いのないデータでそちらのを
コンパイル後、実行してみました。
やっぱりdatファイルの中身が空っぽなんですよねorz
018348
2006/08/13(日) 22:04:52となります。
そして中身は空っぽの0MBになってしまうんですよね。。
0184デフォルトの名無しさん
2006/08/13(日) 22:05:07だからエラー内容書けと
それとその間違いのないデータってのは、ちゃんとdata000ってファイル名なんだろうな?
0185デフォルトの名無しさん
2006/08/13(日) 22:05:29一体どのデータファイルを使ってるんだ?
0186デフォルトの名無しさん
2006/08/13(日) 22:06:290187デフォルトの名無しさん
2006/08/13(日) 22:08:09018848
2006/08/13(日) 22:09:27>>104
のデータを使用しています。
名前もdata000です。
もうひとつdata005と言うのも作りマシた。
data000は出てきましたが中身が空。data005は出てきませんorz
0189デフォルトの名無しさん
2006/08/13(日) 22:16:50異常があった時点で終了するようにしてあるからdata005が処理されないのは当然
fwriteで止まるならまだしも一つめのfscanfでエラーが出るのは解せんな
もうあんたの環境かコンパイラが腐ってるとしか思えない
0190デフォルトの名無しさん
2006/08/13(日) 22:17:06連番でなければ出てこないよ。
[フォルダオプション]の「登録されている拡張子を表示しない」の
チェック外れてる?
data000を読み込んでないって線が有力なんだけど
0191デフォルトの名無しさん
2006/08/13(日) 22:19:320192デフォルトの名無しさん
2006/08/13(日) 22:19:320193デフォルトの名無しさん
2006/08/13(日) 22:20:55>>177を実行してるならファイルが無い時点でfatal error吐かせるようにしてるからそれはないだろう
019448
2006/08/13(日) 22:21:21チェックはずしました!
でもどうしても中身がありません(;へ;)
datファイルは出てきてるのに・・・。
なかみまっさら0MBです。。。
019548
2006/08/13(日) 22:26:44000と001は出てきましたが002,003,004,005は無反応
000と001はやはりまっさらでしたorz
0196デフォルトの名無しさん
2006/08/13(日) 22:29:47うpしてみた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2600.lzh
とりあえずこれコンパイルして実行してみてくれる?
0197デフォルトの名無しさん
2006/08/13(日) 22:30:00019848
2006/08/13(日) 22:45:01C++ Builderでやったらうまくいきました。
コマンドプロンプト・・・
一回目は駄目でしたが二回目うまくいきました〜!!
ありがとうございます!!!
0199デフォルトの名無しさん
2006/08/13(日) 22:51:400200デフォルトの名無しさん
2006/08/13(日) 22:53:110201デフォルトの名無しさん
2006/08/13(日) 22:54:40020248
2006/08/13(日) 22:55:55みなさんありがとうございました。
バイナリーから戻すときはこれの逆をやればいいのですね?(*^^*)
なんだか希望の光が見えてきました♪
0203デフォルトの名無しさん
2006/08/13(日) 22:57:02まあ暇なやつも多かったんだろうがw
020448
2006/08/13(日) 22:58:31このプログラム、私にはよくわからないところがあるのですが、、
あまりループしてないように見えます。
#define NUMOFFILE 3
これってどういう意味なのでしょうか?
よろしければ教えていただけませんか?
0205デフォルトの名無しさん
2006/08/13(日) 23:01:22処理するファイルの数です
今回3つのファイルを同梱したので3にしましたけど
処理するファイルが増えればそれに合せてやって下さい。
まぁ、その数はコマンドライン引数から受け取るのがいいと思うけど
0206デフォルトの名無しさん
2006/08/13(日) 23:01:46ファイルの数を3に設定してる。一番外側のループは三回しか回らない。
それを1000にすれば、data000〜data999までループする。
0207デフォルトの名無しさん
2006/08/13(日) 23:03:08「逆」は、freadしてfprintfだぞ。
わからなければ、再度>>1の書式で質問しろよ。
0208デフォルトの名無しさん
2006/08/13(日) 23:07:020209デフォルトの名無しさん
2006/08/13(日) 23:08:01いや、話をややこしくしないでくれ
021048
2006/08/13(日) 23:09:22本当に親切にしていただきまして
どうもありがとうございます。
皆様のことは忘れません。
では、残りの日数できっちり終わらせるように
がんばりまっす!!
0211デフォルトの名無しさん
2006/08/13(日) 23:14:11fopenの第2引数にbつけるの逆にするだけじゃないの?
0212デフォルトの名無しさん
2006/08/13(日) 23:15:30んなこたぁない
0213デフォルトの名無しさん
2006/08/13(日) 23:15:39ちなみに、実際は1000x1000のデータで、ファイル名も実際と異なるし、ファイル数も違うのなら、
最初からそういう条件にしといたほうが良かったと思うぞ。
なお、関連質問は別スレにしてくれな。
お前の質問だけで埋まるのもアレだし。
0214デフォルトの名無しさん
2006/08/13(日) 23:16:41>>48が信じちゃうだろ!
0215デフォルトの名無しさん
2006/08/13(日) 23:18:15だね、申し訳ない
0216デフォルトの名無しさん
2006/08/13(日) 23:18:420217デフォルトの名無しさん
2006/08/13(日) 23:19:03さて、次の宿題どぞ〜
0218デフォルトの名無しさん
2006/08/13(日) 23:19:41バイナリ形式に変換するだけのソフトに高速化もへったくれもあるか?
0219デフォルトの名無しさん
2006/08/13(日) 23:20:20198. 無題 ほげげ - 2006/08/13(Sun) 23:19 No.2601
#include <stdio.h>
#include <stdlib.h>
#define NUMOFFILE 3 /*外のループの数*/
#define ROW 30
#define COLUMN 30
int main(void)
{
int i, j, k;
short n;
char ifn[8], ofn[12];
FILE *ifp, *ofp;
for (i=0; i<NUMOFFILE; ++i)
{
sprintf(ifn, "data%03d", i);
sprintf(ofn, "data%03d.dat", i);
ifp = fopen(ifn, "r");
ofp = fopen(ofn, "wb");
for (j=0; j<ROW*COLUMN; ++j)
{ k = fread(&n, sizeof(short), 1, ofp
0220デフォルトの名無しさん
2006/08/13(日) 23:21:13022148
2006/08/13(日) 23:23:22了解しました!
一週間たってもどうにもならなかったら
またお邪魔するかもしれません。
すみません。。。
0222デフォルトの名無しさん
2006/08/13(日) 23:23:38ん?あるでしょ?
>>177だと1000*1000のデータだと、100万回のfscanf, fwriteを実行するわけだから。
呼び出す回数を減らしたからといって、速くなるわけではないかもしれないけど。
0223デフォルトの名無しさん
2006/08/13(日) 23:24:060224デフォルトの名無しさん
2006/08/13(日) 23:25:450225デフォルトの名無しさん
2006/08/13(日) 23:27:48時間取られるのはI/O待ちだろし、あんま意味なくね?
0226デフォルトの名無しさん
2006/08/13(日) 23:28:22動かしてみないとわからんけど。
022748
2006/08/13(日) 23:36:21。。実験データはファイル番号続きじゃないorz
数値にとびがあって、よみこんでくれない。。。
0228デフォルトの名無しさん
2006/08/13(日) 23:37:020229226
2006/08/13(日) 23:40:52大量のファイルを処理しなければならないなら、これは効くね。
023048
2006/08/13(日) 23:44:00>>226
その方法は上級者向けの方法ですね。
本に載っていましたが、危ないから気をつけろと書いてありました。
0231226
2006/08/13(日) 23:54:01上級者向け・・・なのか?
まぁ参考までに。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2602.txt
0232デフォルトの名無しさん
2006/08/13(日) 23:55:58ifp=fopen(...);のあとに
if(ifp==NULL)continue;
0233デフォルトの名無しさん
2006/08/13(日) 23:59:19その数値データはいったいなんのデータ?そしてどのように集計するのが最終目標?
023448
2006/08/14(月) 00:01:10反対にするには
そうすればいいんですね!!なるほど
>>226
どうもありがとうございます。
1000*1000形式にしてくださったのですね!
これで、三日ぶりに眠れるかも知れないです♪
うれしいです。ありがとうございます。
023648
2006/08/14(月) 00:06:03malloc を使用したらどこかでfreeをいれないといけないと
本で見た気がするのですが、入れるとしたらどこに入れたらいいか
お教えいただけるとうれしいです。
0237デフォルトの名無しさん
2006/08/14(月) 00:08:27023848
2006/08/14(月) 00:12:30ある場所の状態を測定しているデータです。
状態は時間をおって変化してるのでそれを
数値化してあります。
データ数が多いので、すべてバイナリーで保存し
必要な数値は.txtに読み出して使う予定です。
数値データは後ほどすべてを積算し平均化して揺らぎをのぞく
計算をしてから発表する予定です。揺らぎをのぞくのがたいへん
なようですね
023948
2006/08/14(月) 00:13:57free(n)ですね?
ありがとうございました。
0240デフォルトの名無しさん
2006/08/14(月) 00:18:411ヶ月で150GB、5ヶ月で750GB。
HDD買ったほうがいいんじゃね?
バイナリに変換しても150GBだよ?
とか、いまさら言ってみる。
0241デフォルトの名無しさん
2006/08/14(月) 00:20:29それ、思いっきり計算間違ってますが・・・
0242デフォルトの名無しさん
2006/08/14(月) 00:21:29気象の観測データか何かですか?
0243デフォルトの名無しさん
2006/08/14(月) 00:24:020244デフォルトの名無しさん
2006/08/14(月) 00:25:18024548
2006/08/14(月) 00:26:27うちのPCおかしいのだろうか・・・。
0246デフォルトの名無しさん
2006/08/14(月) 00:35:46圧縮技術があるじょのいこ
024748
2006/08/14(月) 00:38:17残念です。
気象観測よりももっともっと小さい領域です。
0248デフォルトの名無しさん
2006/08/14(月) 00:39:46024948
2006/08/14(月) 00:42:10ごめんなさい。。
>>242サンへの返信です
0250デフォルトの名無しさん
2006/08/14(月) 00:42:43逆。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2603.txt
寝ろ。
0251デフォルトの名無しさん
2006/08/14(月) 00:44:33025248
2006/08/14(月) 00:58:44ごめんなさい。
>>250
ありがとうございます。
なんだか、前から知ってる人のようなかんじ・・・
なんかみなさん素敵だな〜
どうもありがとうございました。
おかげさまで3日ぶりに眠れそうです。
明日またがんばります〜♪
■ このスレッドは過去ログ倉庫に格納されています