質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

512閲覧

指定IDの株価を降順にソートするプログラムを実装したいです

rft3

総合スコア7

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/07/09 10:24

編集2020/07/12 13:33

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日

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2020/07/11 11:38

values.txt の 765、2457、133 の意味は何ですか? 銘柄数、日数、株価? 133 ... の個数は? 指定IDは? read_date() で読み込む N と M が dates.txt に見当たりませんが、どうなっているのですか?
rft3

2020/07/12 13:24

すみません、追記します。
kazuma-s

2020/07/12 14:06 編集

日本語の通じない人だなあ。 「values.txt の 765、2457、133 の意味は何ですか?」と尋ねているんです。 「765 は○○です。」と答えるべきでしょう。 追記されたのは、「(株価配列)」、「 個数は合計10万以上」、「(日付)」の 3つだけ。 ふざけているんですか? 「read_date() で読み込む N と M 」にも無回答ですね。
guest

回答1

0

自己解決

自己解決しました。sort_data関数内は問題ではなかったです。

投稿2020/07/15 12:02

rft3

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問