以下のTEST.csvの2列目の「年月日」が一致したものの中で1列目の値の最頻値を求めたいのですが、上手くできません。独学で学び始めたため、上手く理解できていない部分が多々あると思いますが、訂正箇所を指摘して頂ければ幸いです。
TEST.csv(10000行)
----------------
284,1990/3/1
360,1990/3/1
360,1990/3/1
361,1990/3/1
360,1990/3/2
360,1990/3/2
360,1990/3/2
360,1990/3/2
350,1990/3/3
350,1990/3/3
379,1990/3/4
379,1990/3/4
379,1990/3/4
360,1990/3/4
379,1990/3/5
360,1990/3/5
379,1990/3/5
379,1990/3/5
360,1990/3/5
・
・
・
----------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *fp;
int p[200];
char year[15];
int i, j, cnt, max, max_i;
int r;
fp = fopen("TEST.csv", "r");
if (fp == NULL) {
printf("file cannot open.\n");
exit(1);
}
i=0;
while(fscanf(fp,"%d,%s",&p[i],year)!=EOF ) {
++i;
}
fclose(fp);
for(r=0;year[r]<10000;r++)
if(year[r]==0){
for(max = max_i = j = 0; j < i; ++ j){
int k;
for(cnt = 0, k = j + 1; k < i; ++ k)
cnt += (p[j] == p[k]);
if(cnt > max)
max = cnt;
max_i = j;
}
for(j = 0; j < i; ++ j){
int k;
for(cnt = 0, k = j + 1; k < i; ++ k)
cnt += (p[j] == p[k]);
if(cnt == max)
printf("%d\n", p[j]);
}
}
return 0;
}
改善しなけらばならない部分が多いと思います・・・。
理想としては
1990/3/1,360
1990/3/2,360
・
・
・
という風にしたいのですが、まずは「年月日」が一致するものとおしの中で最頻値を求められるようにしないとですね。
No.1ベストアンサー
- 回答日時:
char year[15];
とchar15個分しか取ってないのに
> for(r=0;year[r]<10000;r++)
> if(year[r]==0){
なんて r>=15に成り得る操作しているのですから、この時点でいろいろとおかしいです。
「文字」と「文字列」と「配列」との関係がまだ理解しきれてないのではないでしょうか。
C言語での文字列の扱いは、他の言語に比べて難しいところがあります。
独習するのなら、文字列、配列、ポインタは特に重点的にやりましょう。
別解:
わざわざ面倒なCを使う積極的な理由が無いのなら、他の方法を使いましょう。
例えば、この程度なら、 Excelでも十分です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「an=(n-1)/(n+1)のときlim[n→∞...
-
マイナスからプラスへ転じた時...
-
2÷3などの余りについて
-
変数とパラメータとは違うもの...
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
「Aに対するBの割合」と「Aに対...
-
エクセルで可視セルにのみ値貼...
-
Excelで1つしかない値だけを抽...
-
二次関数と関数の違いは何ですか?
-
中間値の定理を用いて実数解を...
-
分散分析における誤差項が負値...
-
a^2の√=a が成り立たない場合
-
EXCELの分散分析表のP-値が....
-
10%引いた元の数字を出すには?
-
1/3 と 0.33・・・ 同じです...
-
値差の%計算方法について
-
収束する関数を探しています
-
「n進法から10進法への変換」
-
シグマを平均値で割る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マイナスからプラスへ転じた時...
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
Excelで1つしかない値だけを抽...
-
変数とパラメータとは違うもの...
-
「Aに対するBの割合」と「Aに対...
-
10C7 =10.9.8.7.6.5.4/7.6.5.4...
-
0 <= ある値Aのある値B乗 <= あ...
-
20'(角度)の計算がわかりま...
-
ある商品のロス率を5%見込み、...
-
中学数学 代表値について
-
Aの値からBの値を除するとは??
-
教えてください。数学Bの二項分...
-
エクセルで可視セルにのみ値貼...
-
a^2の√=a が成り立たない場合
-
比と比の値について。 a:b=a/b ...
-
EXCELの分散分析表のP-値が....
-
値差の%計算方法について
-
10%引いた元の数字を出すには?
-
パーセントの出し方を教えて下さい
おすすめ情報