• 締切済み

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% (2126/6288)
回答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

関連するQ&A

  • ファイルから一行ずつ読み込むとき、@F[0] と $_ は違う?

    データファイルを一行ずつ読み込んで、文字列を一文字ずつコンマ区切りにしたいと思っています。たとえば、   xyz → x,y,z としたいと思っています。 今、data.txt に  abc  defgh という2行が書いてあります。  perl -nla -e '@chars= split(//,@F[1]); print join(",",@chars);' data.txt とすると  a,b,c  d,e,f,g,h という出力が無事に得られました。 どうせ、data.txt は一列しか使っていないので、 @F[0] の代りに $_ を使ってみました。  perl -nle '@chars= split(//, $_); print join(",",@chars);' data.txt しかし、結果は  a,b,c,  d,e,f,g,h, のように、各行の最後に余計なコンマが付いてしまいます。 なぜでしょうか? 一列しかデータがないので、@F[0] と $_ は同じだと思っていたのですが、なにか違うのでしょうか?

    • ベストアンサー
    • Perl
  • プログラミングの問題です。

    下記のプログラムのソースが全くわかりません。 しっかりとした回答お願いします!結構至急なのでよろしくお願いします。 (ア) 身体測定データ保存処理:学籍番号、氏名、身長、体重を表す変数は全て文字列(char[])型とし、これをカンマ区切りで連結し一つの文字列を生成する。これを身体測定データファイル body.txt に追記する。これを、学籍番号L00000が入力されるまで繰り返す。 (イ) 身体測定データ検索処理:身体測定データファイル body.txtを開き、一行ずつ文字列に読み込む。文字列の先頭から最初のカンマが現れるまでの部分文字列が入力された学籍番号と一致するか否かを判定する。一致する場合はファイルから読み取った行をそのまま表示した上でプログラムを終了させ、一致しない場合には次の行を読み込む。これを EOF(ファイル終了)に到達するまで繰り返す。

  • c言語:ファイルの入出力

    2つの行列をファイルから読み込み、その積をファイルに出力するプログラムを 作りたいのですが、参考書を読んでもよくわからないので教えて頂きたいです。 テキストファイルの文字列のコピーなどは、参考書を見てできたのですが、 ファイル入出力を使った数値の計算がいまいち理解できませんでした。 注意点は以下の通りです。 ・ファイルはカンマ区切りのテキストファイルとし、入力ファイルはエクセルで作成。拡張子は.csv。 ・ファイル名はキーボードから入力できるようにする。 よろしくお願いします。

  • C言語のプログラミングで文字コードを表示する方法を教えてください。

    ファイル名<sample-utf8.txt> 32 30 30 38 e5 b9 b4 35 e6 9c 88 32 37 e6 97 a5 0d 0a ef bc 92 ef bc 90 ef bc 90 ef bc 98 e5 b9 b4 ef bc 95 e6 9c 88 ef bc 92 ef bc 97 e6 97 a5 0d 0a e8 a8 88 e7 ae 97 e6 a9 9f e3 82 b7 e3 82 b9 e3 83 86 e3 83 a0 ef bc 91 テキストメモの文字を表示するプログラムをC言語で作りたいのですがわかりません。どなたかソースコードを教えていただけると助かります。よろしくお願いします。

  • c言語について教えてほしい

    教えてください。 現在c言語を自習していますが、偶然にこういう問題を見ましたが、なかなか解けなくて、助けがほしいです。お願いします。 問題: fopen,fputs,fcloseを使って、次のプログラムを作成しなさい。文字列とファイル名を入力させ、ファイルを生成する。(入力したファイル名に拡張子.txtを付与する。) 表示イメージ: 文字列を入力して下さい。 ファイル書き込みテストをします。注意します (←入力する) ファイル名を入力して下さい。 testei (←入力する) ファイルの書き込みに成功しました。 ファイルイメージ: testi.txt (←入力したファイル名 拡張子.txtが付与される) ファイル書き込みテストをします。注意します (←入力した文字列)

  • C言語について

    C言語の理解で行き詰まってしまい、ポイントを教えていただきたく質問させて頂きました。 抽象的な説明で申し訳ありません。 よろしくお願いします。 悩んでいるポイントは以下になります。 ファイルを保存してからは、プログラム内で system 関数を使って、 外部プログラムを実行する。 最初は、文字コードをEUCに変換して、ファイルに保存します。 system("nkf -e (抽出データを保存したファイル名) > data.txt"); 次に、形態素解析をして名詞などを取り出して、またファイルに格納する。 system("chasen data.txt | ./cs.pl > key.txt"); また、臨時で保存しておいたファイルを削除する。 unlink("data.txt"); 以上ですが、質問がわかりづらい場合は教えてください。 よろしくお願いします。

  • C言語でこんなことは可能ですか?

    現在あるプログラムを作りたいと思いC言語の勉強をしています。 それに伴い、下記のプログラムはC言語で作成可能でしょうか。 例) Aのフォルダ内にbというファイル(txt)があるとして、 bのファイル内の「ありがとう」という文字を検索し表示させるプログラム は作成可能でしょうか。表記としては --------------------------------- ファイル名 | 検索文字 ---------------------------------  A    | ありがとう  -------------------------------- としたいと思っているのですが・・・ よろしくお願いします。

  • C言語のプログラミングですが、

    C言語のプログラミングですが、 255文字以内の文字列をキーボードから入力して、下記の各処理を行うプログラム(※入力した文字データは配列に入力)はどのようにしたらいいでしょうか?(入力例:acFNkeexFFg) ・入力した文字列の最後の文字を出力 ・入力した文字列⇒逆に並べ替えて出力 ・入力した文字列⇒縦に出力(1文字ずつ) ・入力した文字列の中に「F」が何個あるか ただし、使えるのはfor文・配列・if文ぐらいでそれ以上レベルの高いものは使わないで下さい。 … char str[255]; int i,n,na,nb,nc; printf("Input Strings= "); scanf("%s",str); for(i=0;str[i]!='¥0';i++){ n=i; } printf("The last character= %c",str[n]); くらいまでしか分かりません…

  • [C言語]2つのファイルを用いたプログラムについて

    こんにちは、最近C言語でファイルを扱うプログラムについて学習しているものです。 2つのファイルを用いて合計値と平均値を求めるプログラムについての質問です。 具体的には、以下に示すようなものをC言語で作成しようとしています。 例えば、以下の2つのデータファイルがあるとします。 /*(1)価格表.txt*/ わかめ 195 醤油 300 電球 298 … … … … 納豆 88 (約2000種類) /*(2)買い物リスト.txt*/ 納豆 えび 醤油 … (約500種類) この2つのファイルを用いて、「買い物リスト.txt」に書いてあるすべての商品価格の合計値と、価格の平均値を「価格表.txt」を用いて求めるプログラムをC言語で作成してみたいと考えています。 「価格表.txt」の商品数が少なければ、switch文を用いてプログラムを作成することができると思うのですが、「価格表.txt」の商品数が2000種類くらいある場合だと、どのようにプログラムを作成すればよいかわかりません。 よろしければご教授ください。OSはUbuntuを使っております。 よろしくお願いいたします。

  • 2つのファイルを用いたC言語のプログラムについて

    こんにちは、最近C言語でファイルを扱うプログラムについて学習しているものです。 2つのファイルを用いて合計値と平均値を求めるプログラムについての質問です。 具体的には、以下に示すようなものをC言語で作成しようとしています。 例えば、以下の2つのデータファイルがあるとします。 /*(1)価格表.txt*/ わかめ 195 醤油 300 電球 298 … … … … 納豆 88 (約2000種類) /*(2)買い物リスト.txt*/ 納豆 えび 醤油 … (約500種類) この2つのファイルを用いて、(2)買い物リスト.txtに書いてあるすべての商品価格の合計値と、価格の平均値を「価格表.txt」を用いて求めるプログラムをC言語で作成してみたいと考えています。 「価格表.txt」の商品数が少なければ、switch文を用いてプログラムを作成することができると思うのですが、「価格表.txt」の商品数が2000種類くらいある場合だと、どのようにプログラムを作成すればよいかわかりません。 よろしければご教授ください。OSはUbuntuを使っております。 よろしくお願いいたします。

専門家に質問してみよう