teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

8

削除禁止の規約により再掲

2018/05/31 00:15

投稿

s_clalis
s_clalis

スコア17

title CHANGED
File without changes
body CHANGED
@@ -1,25 +1,133 @@
1
- ### 前提・実現したいこと
1
+ ### 前提・実現したいこと
2
2
 
3
- ここに質問の内容を詳しく書いてください。
4
- (例)PHP(CakePHP)で●●なシステム作っいます。
3
+  ファイルから1行ずつデータ`char`型配列に読み込み、`int`型に変換しから配列の平均を除去・正規化し内積を計算して相関係数を算出るプログラムを作る
5
- ■■な機能を実装中に以下エラーメッセージが発生しました。
4
+  勉強のためにポインタと動的確保を使ってみることとする
6
5
 
7
- ### 発生している問題・エラーメッセージ
6
+ ### 発生している問題・エラーメッセージ
8
7
 
9
- ```
8
+  4つのファイル別のデータを各配列に入れて利用したいのですが、想定したとおりに構造ができず困っています。(`data_raw[]`に各4ファイルの階層がありその中の`data_raw[][]`に数値が一行づつ入っている構造)
10
- エラーメッセージ
9
+  今のところファイルの先頭の行が全ての`data_raw[]`に入ってしまいます。これを`data_raw[][]`に入れたいです。
11
- ```
10
+
11
+
12
12
 
13
- ### 該当ソースコード
13
+  他方法を選ぶべきでしたらご教授いただけると幸いです。
14
14
 
15
- ```ここに言語名を入力
16
- ソースコード
15
+ ### 該当のソースコード
17
- ```
18
16
 
19
- ### 試したこと
17
+ ```C
18
+ #include "targetver.h"
20
19
 
21
- ここに問題に対して試したことを記載してください。
20
+ #define _CRT_SECURE_NO_WARNINGS
21
+ #define F_C 4 //file_count
22
+ #define D_S 85 //data_size
22
23
 
24
+ #include <math.h>
25
+ #include <stdio.h>
23
- ### 補足情報(FW/ツールのバージョンなど)
26
+ #include <stdlib.h>
27
+ #include <tchar.h>
24
28
 
29
+
30
+ double in_pro(double v1[], double v2[], int size);
31
+
32
+ int main(void)
33
+ {
34
+ FILE *fp;
35
+ int n = 0;
36
+ int sum[F_C], data[F_C][D_S];
37
+ char *filename[F_C] = { "rdata1.txt", "rdata2.txt", "rdata3.txt", "rdata4.txt" };
38
+ char ***data_raw;
39
+ double u1[] = { 1, 0, 0 };
40
+ double u2[] = { 0, sqrt(3) / 2, 0.5 };
41
+ double u3[] = { 0, 0.5, -sqrt(3) / 2 };
42
+ double xn[] = { 2, -1, 1 };
43
+ double a[3];
44
+ double x[6];
45
+ double g[3];
46
+
47
+ data_raw = (char ***)malloc(sizeof(char **) * F_C);
48
+ for (size_t i = 0; i < F_C; i++)
49
+ {
50
+ data_raw[i] = (char **)malloc(sizeof(char *) * D_S);
51
+ for (size_t j = 0; j < D_S; j++)
52
+ {
53
+ data_raw[i][j] = (char *)malloc(sizeof(char) * 0x10);
54
+ }
55
+ }
56
+
57
+ for (size_t i = 0; i < F_C; i++)
58
+ {
59
+ if ((fp = fopen(filename[i], "r")) == NULL)
60
+ {
61
+ fprintf(stderr, "Failed to opening %s.\n", filename[i]);
62
+ exit(EXIT_FAILURE);
63
+ }
64
+
65
+ while (fgets(data_raw[i][n], 0x10, fp) != NULL)
66
+ {
67
+ n++;
68
+ //puts(data_raw[i][n]);
69
+ }
70
+ n = 0;
71
+ }
72
+
73
+ for (size_t i = 0; i < F_C; i++)
74
+ {
75
+ for (size_t j = 0; j < D_S; j++)
76
+ {
77
+ data[i][j] = atoi(data_raw[i][j]);
25
- ここにより詳細な情報を記載してください。
78
+ sum[i] += data[i][j];
79
+ }
80
+ sum[i] /= D_S;
81
+ printf("%d\n", sum[i]);
82
+ }
83
+
84
+
85
+ printf("***\tH30\tDSP1-3\t23\t***\n\n");
86
+
87
+ printf("u1:[%f, %f, %f]\n", u1[0], u1[1], u1[2]);
88
+ printf("u2:[%f, %f, %f]\n", u2[0], u2[1], u2[2]);
89
+ printf("u3:[%f, %f, %f]\n \n", u3[0], u3[1], u3[2]);
90
+
91
+ x[0] = in_pro(u1, u1, 3);
92
+ x[1] = in_pro(u1, u2, 3);
93
+ x[2] = in_pro(u1, u3, 3);
94
+ x[3] = in_pro(u2, u2, 3);
95
+ x[4] = in_pro(u2, u3, 3);
96
+ x[5] = in_pro(u3, u3, 3);
97
+
98
+ printf("u1 * u1 : %f\n", x[0]);
99
+ printf("u1 * u2 : %f\n", x[1]);
100
+ printf("u1 * u3 : %f\n", x[2]);
101
+ printf("u2 * u2 : %f\n", x[3]);
102
+ printf("u2 * u3 : %f\n", x[4]);
103
+ printf("u3 * u3 : %f\n \n", x[5]);
104
+
105
+ a[0] = in_pro(xn, u1, 3);
106
+ a[1] = in_pro(xn, u2, 3);
107
+ a[2] = in_pro(xn, u3, 3);
108
+
109
+ printf("a1[%f], a2[%f], a3[%f]\n \n", a[0], a[1], a[2]);
110
+
111
+ for (size_t i = 0; i < 3; i++) g[i] = a[0] * u1[i] + a[1] * u2[i] + a[2] * u3[i];
112
+
113
+ printf("g[%f, %f, %f]\n", g[0], g[1], g[2]);
114
+
115
+
116
+ fclose(fp);
117
+ return 0;
118
+ }
119
+
120
+ double in_pro(double v1[], double v2[], int size)
121
+ {
122
+ int i;
123
+ double x = 0;
124
+ for (i = 0; i < size; i++) x += v1[i] * v2[i];
125
+
126
+ return x;
127
+ }
128
+ ```
129
+
130
+ ### 補足情報(FW/ツールのバージョンなど)
131
+
132
+ VisualStudio2015
133
+ VCコンパイラ

7

closed

2018/05/31 00:15

投稿

s_clalis
s_clalis

スコア17

title CHANGED
File without changes
body CHANGED
File without changes

6

closed

2018/05/30 09:25

投稿

s_clalis
s_clalis

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- C言語の3次元配列(文字列)の動的確保並びにfgetsによる読み込み
1
+ C言語の3次元配列(文字列)
body CHANGED
@@ -1,133 +1,25 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
+ ここに質問の内容を詳しく書いてください。
3
-  ファイルから1行ずつデータを`char`型配列に読み込み、`int`型に変換してから配列の平均を除去・正規化し内積を計算して相関係数を算出するプログラムを作
4
+ (例)PHP(CakePHP)で●●なシステムを作っています
4
-  勉強のためにポインタと動的確保を使ってみることとする
5
+ ■■な機能を実装中に以下エラーメッセージが発生しました。
5
6
 
6
7
  ### 発生している問題・エラーメッセージ
7
8
 
8
-  4つのファイル別のデータを各配列に入れて利用したいのですが、想定したとおりに構造ができず困っています。(`data_raw[]`に各4ファイルの階層がありその中の`data_raw[][]`に数値が一行づつ入っている構造)
9
+ ```
9
-  今のところファイルの先頭の行が全ての`data_raw[]`に入ってしまいます。これを`data_raw[][]`に入れたいです。
10
+ エラーメッセージ
11
+ ```
10
12
 
11
-
12
-
13
-  他の方法を選ぶべきでしたらご教授いただけると幸いです。
14
-
15
13
  ### 該当のソースコード
16
14
 
15
+ ```ここに言語名を入力
16
+ ソースコード
17
- ```C
17
+ ```
18
- #include "targetver.h"
19
18
 
20
- #define _CRT_SECURE_NO_WARNINGS
19
+ ### 試したこと
21
- #define F_C 4 //file_count
22
- #define D_S 85 //data_size
23
20
 
24
- #include <math.h>
25
- #include <stdio.h>
21
+ ここに問題に対して試したことを記載してください。
26
- #include <stdlib.h>
27
- #include <tchar.h>
28
22
 
29
-
30
- double in_pro(double v1[], double v2[], int size);
31
-
32
- int main(void)
33
- {
34
- FILE *fp;
35
- int n = 0;
36
- int sum[F_C], data[F_C][D_S];
37
- char *filename[F_C] = { "rdata1.txt", "rdata2.txt", "rdata3.txt", "rdata4.txt" };
38
- char ***data_raw;
39
- double u1[] = { 1, 0, 0 };
40
- double u2[] = { 0, sqrt(3) / 2, 0.5 };
41
- double u3[] = { 0, 0.5, -sqrt(3) / 2 };
42
- double xn[] = { 2, -1, 1 };
43
- double a[3];
44
- double x[6];
45
- double g[3];
46
-
47
- data_raw = (char ***)malloc(sizeof(char **) * F_C);
48
- for (size_t i = 0; i < F_C; i++)
49
- {
50
- data_raw[i] = (char **)malloc(sizeof(char *) * D_S);
51
- for (size_t j = 0; j < D_S; j++)
52
- {
53
- data_raw[i][j] = (char *)malloc(sizeof(char) * 0x10);
54
- }
55
- }
56
-
57
- for (size_t i = 0; i < F_C; i++)
58
- {
59
- if ((fp = fopen(filename[i], "r")) == NULL)
60
- {
61
- fprintf(stderr, "Failed to opening %s.\n", filename[i]);
62
- exit(EXIT_FAILURE);
63
- }
64
-
65
- while (fgets(data_raw[i][n], 0x10, fp) != NULL)
66
- {
67
- n++;
68
- //puts(data_raw[i][n]);
69
- }
70
- n = 0;
71
- }
72
-
73
- for (size_t i = 0; i < F_C; i++)
74
- {
75
- for (size_t j = 0; j < D_S; j++)
76
- {
77
- data[i][j] = atoi(data_raw[i][j]);
78
- sum[i] += data[i][j];
79
- }
80
- sum[i] /= D_S;
81
- printf("%d\n", sum[i]);
82
- }
83
-
84
-
85
- printf("***\tH30\tDSP1-3\t23\t***\n\n");
86
-
87
- printf("u1:[%f, %f, %f]\n", u1[0], u1[1], u1[2]);
88
- printf("u2:[%f, %f, %f]\n", u2[0], u2[1], u2[2]);
89
- printf("u3:[%f, %f, %f]\n \n", u3[0], u3[1], u3[2]);
90
-
91
- x[0] = in_pro(u1, u1, 3);
92
- x[1] = in_pro(u1, u2, 3);
93
- x[2] = in_pro(u1, u3, 3);
94
- x[3] = in_pro(u2, u2, 3);
95
- x[4] = in_pro(u2, u3, 3);
96
- x[5] = in_pro(u3, u3, 3);
97
-
98
- printf("u1 * u1 : %f\n", x[0]);
99
- printf("u1 * u2 : %f\n", x[1]);
100
- printf("u1 * u3 : %f\n", x[2]);
101
- printf("u2 * u2 : %f\n", x[3]);
102
- printf("u2 * u3 : %f\n", x[4]);
103
- printf("u3 * u3 : %f\n \n", x[5]);
104
-
105
- a[0] = in_pro(xn, u1, 3);
106
- a[1] = in_pro(xn, u2, 3);
107
- a[2] = in_pro(xn, u3, 3);
108
-
109
- printf("a1[%f], a2[%f], a3[%f]\n \n", a[0], a[1], a[2]);
110
-
111
- for (size_t i = 0; i < 3; i++) g[i] = a[0] * u1[i] + a[1] * u2[i] + a[2] * u3[i];
112
-
113
- printf("g[%f, %f, %f]\n", g[0], g[1], g[2]);
114
-
115
-
116
- fclose(fp);
117
- return 0;
118
- }
119
-
120
- double in_pro(double v1[], double v2[], int size)
121
- {
122
- int i;
123
- double x = 0;
124
- for (i = 0; i < size; i++) x += v1[i] * v2[i];
125
-
126
- return x;
127
- }
128
- ```
129
-
130
23
  ### 補足情報(FW/ツールのバージョンなど)
131
24
 
132
- VisualStudio2015
25
+ ここにより詳細な情報を記載してください。
133
- VCコンパイラ

5

タイトルを変更し画像を追加しました

2018/05/30 09:19

投稿

s_clalis
s_clalis

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- C言語の3次元配列(文字列)の動的確保並びに利用方法
1
+ C言語の3次元配列(文字列)の動的確保並びにfgetsによる読み込み
body CHANGED
@@ -8,6 +8,8 @@
8
8
   4つのファイル別のデータを各配列に入れて利用したいのですが、想定したとおりに構造ができず困っています。(`data_raw[]`に各4ファイルの階層がありその中の`data_raw[][]`に数値が一行づつ入っている構造)
9
9
   今のところファイルの先頭の行が全ての`data_raw[]`に入ってしまいます。これを`data_raw[][]`に入れたいです。
10
10
 
11
+
12
+
11
13
   他の方法を選ぶべきでしたらご教授いただけると幸いです。
12
14
 
13
15
  ### 該当のソースコード

4

質問自体を変更しました。

2018/05/30 08:38

投稿

s_clalis
s_clalis

スコア17

title CHANGED
File without changes
body CHANGED
@@ -1,17 +1,15 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
-  ファイルから1行ずつデータをchar型配列に読み込み、int型に変換してから配列の平均を除去・正規化し内積を計算して相関係数を算出するプログラムを作る。
3
+  ファイルから1行ずつデータを`char`型配列に読み込み、`int`型に変換してから配列の平均を除去・正規化し内積を計算して相関係数を算出するプログラムを作る。
4
4
   勉強のためにポインタと動的確保を使ってみることとする。
5
5
 
6
6
  ### 発生している問題・エラーメッセージ
7
7
 
8
-  4つのファイル別のデータを各配列に入れて利用したいのですが、想定したとおりに構造ができず困っています。
8
+  4つのファイル別のデータを各配列に入れて利用したいのですが、想定したとおりに構造ができず困っています。(`data_raw[]`に各4ファイルの階層がありその中の`data_raw[][]`に数値が一行づつ入っている構造)
9
+  今のところファイルの先頭の行が全ての`data_raw[]`に入ってしまいます。これを`data_raw[][]`に入れたいです。
10
+
9
11
   他の方法を選ぶべきでしたらご教授いただけると幸いです。
10
12
 
11
- ```
12
- 0x0FE0BAC1 (ucrtbased.dll) で例外がスローされました (ConsoleApplication1.exe 内): 0xC0000005: 場所 0xFDFDFDFD への書き込み中にアクセス違反が発生しました
13
- ```
14
-
15
13
  ### 該当のソースコード
16
14
 
17
15
  ```C

3

前提と実現したいことを更新しました。

2018/05/30 08:31

投稿

s_clalis
s_clalis

スコア17

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,7 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
-  ファイルからデータを配列に読み込み、配列の平均を除去・正規化し内積を計算して相関係数を算出するプログラムを作る。
3
+  ファイルから1行ずつデータをchar型配列に読み込み、int型に変換してから配列の平均を除去・正規化し内積を計算して相関係数を算出するプログラムを作る。
4
+  勉強のためにポインタと動的確保を使ってみることとする。
4
5
 
5
6
  ### 発生している問題・エラーメッセージ
6
7
 

2

2018/05/30 07:56

投稿

s_clalis
s_clalis

スコア17

title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ### 発生している問題・エラーメッセージ
6
6
 
7
-  3つのファイル別のデータを各配列に入れて利用したいのですが、想定したとおりに構造ができず困っています。
7
+  4つのファイル別のデータを各配列に入れて利用したいのですが、想定したとおりに構造ができず困っています。
8
8
   他の方法を選ぶべきでしたらご教授いただけると幸いです。
9
9
 
10
10
  ```

1

2018/05/29 23:53

投稿

s_clalis
s_clalis

スコア17

title CHANGED
File without changes
body CHANGED
File without changes