• 締切済み

C言語のプログラミング問題(難解)について

C言語のプログラミング問題(難解)について教えてください! C言語の勉強し始めましたが次の問題のプログラミングが分かりません 分かる方がいましたらよろしくお願いします。 以下の問題です。 次の作業を実現するためのプログラミングを描け。 機能名:リストファイルの分割処理 ■概要:部門1、部門2の商品が混合して書かれたファイルがある。 部門毎に分けたファイルを新たに作成する。 ■条件 (1)ファイルを1行ずつ読み込み、ポインタで受け取り関数で渡すこと。 (2)出力ファイルの最終行には各部門の品種数を入力すること (3)出力ファイルは固定長とし、空きが出る場合は半角スペースでレコード長を合わせること。 (4)エラー発生時にはエラーメッセージを表示し、終了すること。 ■ファイルレイアウト(入力ファイル) レコード長:26(固定長) 長さ 項目名 1 |部門コード1 1 |(区切り文字カンマ) 6 |商品名1 1 |(区切り文字カンマ) 1 |部門コード2 1 |(区切り文字カンマ) 6 |商品名2 1 | (区切り文字カンマ) 1 |部門コード゛3 1 |(区切り文字カンマ) 6 | 商品名3 ■ファイルレイアウト(出力ファイル) レコード長:20(固定長) 長さ | 項目名 6 |商品名1 1 ||(区切り文字カンマ) 6 |商品名2 1 ||(区切り文字カンマ) 6 |商品名3 (1)入力ファイル(LIST_INPUT.txt) 1,菓子A,1,菓子B,1,菓子C 2,野菜A,2,野菜B,2,野菜C 1,菓子D,1,菓子E,2,野菜D 1,菓子F,1,菓子G,2,野菜E 1,菓子H,2,野菜F,1,菓子I 1,菓子J,1,菓子K,2,野菜G (2)出力ファイル1(菓子)(LIST1.txt) 菓子A,菓子B,菓子C 菓子D,菓子E,菓子F, 菓子G,菓子H,菓子I 菓子J,菓子K 11 (3)出力ファイル2(LIST2,txt) 野菜A,野菜B,野菜C 野菜D,野菜E,野菜F 野菜G 7 *出力ファイルの最終行に品種数を追加すること。 よろしくお願い致しますm(__)m

みんなの回答

  • aid-u
  • ベストアンサー率75% (22/29)
回答No.5

いきなりこの問題を解くのが難しいのであれば、以下のように段階的に解いてはどうでしょうか。 どのようなステップを踏むのが良いかは、自分の考えてみてください。 1.入力ファイルをそのまま一つの出力ファイルにコピーする。 2.入力ファイルをそのまま二つの出力ファイルにコピーする。 3.出力データを固定長レコードに変換する処理を追加する。 4.部門毎に出力ファイルを切り替える処理を追加する。 5.計数処理を追加する。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

> C言語の基礎的な関数は独学で習得しましたがファイル処理やポインタのに関する知識は曖昧な理解になっています。 なら、まずはそこをしっかり理解することをお勧めします。 特にポインタはCを象徴する、と言える、最大の利点であり最大の弱点です。 曖昧のまま先に進めばもっとわからなくなりますよ。 また、質問するにしても、もう少し自分で考えた上で、わからないポイントをはっきりさせないと。 人のソースをただだらだら見ても、理解した気になるだけで、勉強にはなりませんよ。

kbrkt7038
質問者

補足

ご回答有難うございます。 これから自分で実際にプログラムを動かしながら学習していきたいと思います。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

>ファイル処理やポインタのに関する知識は曖昧な理解になっています。 だったら、そこをあいまいなままにしておかず、基礎を頭にたたき込んでから 今回のような応用問題に取り組んでみてはどうでしょうか。

kbrkt7038
質問者

補足

ご回答有難うございます。 指摘して頂いた通り、もう一度、基礎学習(特にポインタとアルゴリズムの知識)を行います。

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.2

> 実は2週間ほど前から独学(問題集を用いて)でC言語の学習をしておりまして 独学ならなおさら、まずは自分で書いたコードを提示して「どうでしょう?」と質問しましょう。 今の段階で模範解答見ても仕方ないよ。

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.1

難解・・・・なのかな 学校か何かの課題なのでしょうか。 1から全て教えろって事ですか? ・入力ファイルを開く ・出力ファイル2つ分を開く ・ファイルから一行単位に読み込む。 ・1行分のデータを3つの商品に分割する ・各商品の部門文字よりA/Bの何れの出力ファイルに出力するかを判定する ・出力ファイル用のバッファへ蓄積(商品数のカウントアップ) ・出力バッファに3個分データが蓄積されたら、出力ファイルの書き出し ・入力ファイルが終端に達したら、それぞれの出力ファイルに商品数を書き出してファイルを閉じる 大雑把に処理の流れを羅列すると上記のようになる。 このときに、どの処理をサブ関数化するか? どういった情報を引数にするか? どういった場合にエラーが発生しうるか? そういった点を更に詰めれば、処理のフローはほぼ完成する。 そしたら、フローに従って処理をコード化する。 確かに、チョチョイって感じではないね。 ファイルIOやポインタ等に関する知識は習得済みなんですよね?

kbrkt7038
質問者

お礼

有難うございます。感謝します。 実は2週間ほど前から独学(問題集を用いて)でC言語の学習をしておりまして その演習問題(解答がない)のプログラミングの答えを教えて頂きたく質問させていただきました。 C言語の基礎的な関数は独学で習得しましたがファイル処理やポインタのに関する知識は曖昧な理解になっています。 大変申し分け御座いませんが、もし宜しければ、この演習問題の模範的なプログラミングの解答を教えて頂けないでしょうか? 無理難題を押し付けてしまい申し訳ございません。

kbrkt7038
質問者

補足

相互リンクは以下の通りでございます http://dixq.net/forum/viewtopic.php?f=3&t=8338