C言語の勉強をしています。株価データの構造体の問題で、株価(values.txt)と日付(dates.txt)を読み込み、指定IDの株価を降順にソートするプログラムを実装したいのですが、sort_data内の条件を満たすコードの書き方がわかりません。どうかご教授お願いいたします。
[条件]
read_date関数:日付データdata/dates.txtを読み込む
sort_data関数:
• 指定IDの株価と日付をスペース区切りで出力する
• 右のようなソートコマンドに出力を渡す
実行方法 $ sort –n –r –k 1
実装したい実行結果
$ ./cpgm/sort_stock data/values.txt data/dates.txt 538
7370 2000年01月14日
7350 2000年01月25日
:
1625 2001年03月13日
1621 2001年03月19日
途中まで書いたソースコード↓
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <unistd.h> 5 6typedef struct{ 7 int id; 8 int code; // 銘柄コード 9 char *name; // 銘柄 10 char *cate; // 業種 11 char *url; 12 int *values;// 株価配列 13 int *dates;//日付 14} Stock; 15 16int N, M; // 銘柄数,営業日数 17Stock *stocks; // Stock構造体の配列 18 19void read_data(char *fn){ 20 FILE *fp = fopen(fn, "r"); 21 fscanf(fp, "%d %d\n", &N, &M); 22 stocks = (Stock *) malloc(N*sizeof(Stock)); 23 for(int i = 0; i < N; i++){ 24 stocks[i].values = (int *) malloc(M*sizeof(int)); 25 for(int j = 0; j < M; j++) 26 fscanf(fp, "%d ", &stocks[i].values[j]); 27 } 28 fclose(fp); 29} 30 31void read_date(char *fn){ 32 FILE *fp = fopen(fn, "r"); 33 fscanf(fp, "%d\n", &N, &M); 34 stocks = (Stock *) malloc(N*sizeof(Stock)); 35 for(int i = 0; i < N; i++){ 36 stocks[i].dates = (int *) malloc(M*sizeof(int)); 37 for(int j = 0; j < M; j++) 38 fscanf(fp, "%d ", &stocks[i].dates[j]); 39 } 40 fclose(fp); 41} 42 43void sort_data(int target){ 44 FILE *fp = 45//ここがわかりません。 46 47 48 fflush(fp); 49 sleep(5); 50 fprintf(fp, "exit\n"); 51 pclose(fp); 52} 53 54int main(int argc, char *argv[]){ 55 read_data(argv[1]); // data/values.txtの読み込み 56 read_date(argv[2]);//data/dates.txtの読み込み 57 printf("%d %d\n", N, M); 58 int target = atoi(argv[3])-1; 59 sort_data(target); 60} 61
values.txtの中身↓(株価配列)
765 2457
133 135 135 137 135 137 139 141 160 152 152 163 153 147 144 143 143 140 144 141 140 140 138
dates.txtの中身↓(日付) 2000年01月04日 2000年01月05日 2000年01月06日 2000年01月07日 2000年01月11日 2000年01月12日 ~~~ 2009年12月30日
回答1件
あなたの回答
tips
プレビュー