プロが教えるわが家の防犯対策術!

大学の研究で使うデータ処理で困っています。
Microsoft Visual C++ 2008 Express Editionを使っています。

例えば、10個の値が縦一列に入ったtxtファイルがいくつかあったとして
-5,-3,-2,0,3,4,5,6,7,8,
だった場合には
プラス側の最大値・最小値をそれぞれ求め(この場合、最大は8、最小は3)
マイナス側の最大値・最小値をそれぞれ求め(この場合、最大は-2、最小は-5)
結果として表示される

0,1,2,3,4,5,6,7,8,9,
だった場合には
プラス側の最大値・最小値をそれぞれ求め(この場合、最大は9、最小は1)
マイナス側の最大値・最小値をそれぞれ求め(この場合、最大はありません、最小はありません)
結果として表示される

0,0,0,0,0,0,0,0,0,0
だった場合には
プラス側の最大値・最小値をそれぞれ求め(この場合、最大はありません、最小はありません)
マイナス側の最大値・最小値をそれぞれ求め(この場合、最大はありません、最小はありません)
結果として表示される


といったプログラムを作成したいです。教えてください!

A 回答 (4件)

本当に研究で使うデータ処理なのかなぁ?


こんな単純なデータ処理をして結果を表示するだけなんて研究に使うとは思えない。
むしろ課題を丸投げにしているように見える。

数値が縦一列に入っているということは各数値は改行で区切られているのだから、
ファイルをオープンして一行づつデータを読み取りながら、その数値の正負零を判定し、
(零を除いて)正負それぞれの最大最小を順次残していくようにすればよい。
最後に、残った最大最小の値を表示または非存在を表示する。
大した処理ではないと思われますが。。。

もしC言語が苦手だというのであれば、Excelなどの表計算ソフトのマクロで行っても
たいしたことは無いでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
あるデータからあるデータを引いた差分(変化量)が書き込まれた3000個のtxtファイルがあります。
電流 電圧1 電圧2 電圧3
といったように各項目に100個ずつ値が入っています。

それぞれの項目で最大最少を求めて新たなtxtファイルに書き込み、
この先の研究に使おうと思っています。
各項目で大きい順に並べ替えて1番目と100番目を取り出せばいいと思っていたら、
正負の値があったので欲しいデータが得られませんでした。

c言語はとても苦手です。参考にしてやってみます。

お礼日時:2010/12/09 17:57

最も手軽に実装できる手段は何だろうと


興味が沸いたので少し調べたら
windows7ならpower shellで

== test.txt ==
num
-2
-1
0
1
2
== test.txt ==

と書いたファイルを用意して
> Import-Csv C:\test.txt | Measure-Object num -max -min
Count : 3
Average :
Sum :
Maximum : 2
Minimum : -2
Property : num
って結果が返ってきました。便利だなあ。
    • good
    • 0
この回答へのお礼

便利なものもあるんですね!

お礼日時:2010/12/09 18:58

こういってはなんですが.....


なんで苦手なCをわざわざつかうんですか?
あなたがCを苦手、というのもありますが、C言語の方でも、こういう文字列をいろいろと操作するのを比較的苦手としています。

「C言語のプログラムを作る」ということ自体が目的でなければ、あなたができる方法でやればいいです。
特に、こんな一度しか使わないようなものは。
    • good
    • 0
この回答へのお礼

そうですよね。c言語は授業で唯一基礎的なことを習っており、
それ以外に選択肢も知識もなかったので使っていました。
C言語が、こういう文字列をいろいろと操作することを苦手なのは知りませんでした。

お礼日時:2010/12/09 19:02

テキスト処理を扱うにはawkと言うすばらしい言語があります。


UNIXのものでしたがcygwinにもあります。元々UNIXのコマンドなので簡単にスクリプトを書いて後はマシンにやらせると言う発想のものです(深く考えるより簡単にやってしまう)。

cygwinを導入したして回答します。

cat xxx.txt|awk \
'BEGIN {Pmax=0;Pmin=9999;Mmax=-9999;Mmin=0}
{
 if ($1>0) {
  if ($1>Pmax) {Pmax=$1}
  if ($1<Pmin) {Pmin=$1}
 }
 if ($1<0) {
  if ($1>Mmax) {Mmax=$1}
  if ($1<Mmin) {Mmin=$1}
 }
}
END {
 print "+最大値=" Pmax
 print "+最小値=" Pmin
 print "-最大値=" Mmax
 print "-最小値=" Mmin
}'

※インデンテーションのために全角空白が入っています。
    • good
    • 0
この回答へのお礼

少し調べてみたらテキスト処理にはもってこいの言語ですね。
この先に向けてインストールしてみます。

お礼日時:2010/12/10 12:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!