質問編集履歴

7

ソースコードの編集

2016/07/22 08:44

投稿

tomopichan2002
tomopichan2002

スコア17

test CHANGED
File without changes
test CHANGED
@@ -10,6 +10,12 @@
10
10
 
11
11
  自分で組んでみたのですが、動きません。
12
12
 
13
+ 関数Yの宣言ののかのifで、エラーが出ます。
14
+
15
+ 表示された警告文:thread 1:EXE_BAD_ACCESS (code=2. address=0x7fff5f3ffffc)
16
+
17
+ 警告文を読んでも指示が書いてないので、わかりません。
18
+
13
19
  アドバイスをいただけると嬉しいです。
14
20
 
15
21
 

6

ソースコードの修正

2016/07/22 08:44

投稿

tomopichan2002
tomopichan2002

スコア17

test CHANGED
File without changes
test CHANGED
@@ -26,164 +26,268 @@
26
26
 
27
27
 
28
28
 
29
- //result_int = a^b-c
29
+ //式の編集 a^b-c = result
30
-
31
- //a_double,b_double,cは、ソースを編集して手動で入力する仕様にしようと思います
30
+
32
-
33
-
34
-
35
- double a_double = 9;
31
+ double a_double = 1;
36
-
32
+
37
- double b_double = 2;
33
+ double b_double = 1;
38
-
34
+
39
- unsigned c = 3;
35
+ unsigned c = 1;
40
-
41
-
42
36
 
43
37
  unsigned a_int,b_int,result_int;
44
38
 
39
+ unsigned square_root_of_result;
40
+
45
- unsigned square_root_of_result,primenumbercount,compositenumbercount;
41
+ unsigned primenumbercount = 0,compositenumbercount = 0;
46
-
42
+
47
- Unsgined i;
43
+ unsigned i;
44
+
48
-
45
+ int result_experimental;
46
+
49
-
47
+ unsigned result_processed;
50
-
48
+
49
+
50
+
51
- //最終的にaを増加させる予定のfor文です
51
+ //プロトタイプ宣言
52
+
52
-
53
+ int X();
54
+
55
+ int Y();
56
+
53
- //for(a_int=a_int;a_int<=100;a_int++){
57
+ //result_intが0や負の数にならないようにするための関数
58
+
59
+
60
+
54
-
61
+ for(a_double=a_double;a_double<=5;a_double++){
55
-
62
+
63
+
56
64
 
57
65
  double result_double = pow(a_double,b_double);
58
66
 
67
+
68
+
69
+ result_int = result_double;
70
+
71
+ a_int = a_double;
72
+
73
+ b_int = b_double;
74
+
75
+
76
+
77
+ if(a_int*b_int<=c){
78
+
79
+
80
+
81
+ a_double++;
82
+
83
+
84
+
85
+ X();
86
+
87
+
88
+
89
+ result_experimental = Y();
90
+
91
+
92
+
93
+ }
94
+
95
+
96
+
97
+ result_experimental = result_int - c;
98
+
99
+
100
+
101
+ result_int = result_experimental;
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+ unsigned prime_structure[result_int];
110
+
111
+
112
+
113
+ for(i=0;i<result_int;++i){
114
+
115
+
116
+
117
+ prime_structure[i] = 1;
118
+
119
+
120
+
121
+ }
122
+
123
+
124
+
125
+ prime_structure[0] = 0;//1は素数ではない
126
+
127
+
128
+
129
+ square_root_of_result = sqrt(result_int);
130
+
131
+
132
+
133
+ //エラトステネスのふるい
134
+
135
+ unsigned num,j;
136
+
137
+
138
+
139
+ for(i=0;i<square_root_of_result;i++){
140
+
141
+
142
+
143
+ if(prime_structure[i] == 1){
144
+
59
145
 
60
146
 
61
- //double型の値をunsigned型に代入します
62
-
63
- result_int = result_double;
64
-
65
- a_int = a_double;
66
-
67
- b_int = b_double;
68
-
69
-
70
-
71
- result_int = result_int - c;
72
-
73
-
74
-
75
- //配列prime_structureの定義
76
-
77
- unsigned prime_structure[result_int];//0~result-1 result個
78
-
79
-
80
-
81
- for(i=0;i<result_int;++i){//0~result-1 添え字
82
-
83
-
84
-
85
- prime_structure[i] = 1;
147
+ num=i+1;
148
+
149
+
150
+
151
+ for(j=num*2-1;j<result_int;j=num+j){
152
+
153
+
154
+
155
+ prime_structure[j]=0;
156
+
157
+
158
+
159
+ }
160
+
161
+
162
+
163
+ }
164
+
165
+
166
+
167
+ }
168
+
169
+ //エラトステネスのふるい fin
170
+
171
+
172
+
173
+ if(prime_structure[result_int-1] == 0){
174
+
175
+
176
+
177
+ printf("@%dは、素数\n",result_int);
178
+
179
+
180
+
181
+ primenumbercount++;
182
+
183
+
184
+
185
+ }
186
+
187
+
188
+
189
+ else{
190
+
191
+
192
+
193
+ printf("@%dは、非素数\n",result_int);
194
+
195
+
196
+
197
+ compositenumbercount++;
198
+
199
+
200
+
201
+ }
202
+
203
+
204
+
205
+ double allcount = primenumbercount+compositenumbercount;//necessary
206
+
207
+ double primenumbercount_double = primenumbercount;
208
+
209
+ double probability = primenumbercount_double/allcount*100;//necessary
210
+
211
+ printf("a^%d-%dの確率は、%f%%です。\n",b_int,c,probability);//necessary
212
+
213
+
214
+
215
+ }//for fin
216
+
217
+
218
+
219
+ }//main fin
220
+
221
+
222
+
223
+
224
+
225
+ int rem(a_double,a_int,b_double,b_int,result_int,c,result_experimental){
226
+
227
+
228
+
229
+ double result_double = pow(a_double,b_double);
230
+
231
+
232
+
233
+ result_int = result_double;
234
+
235
+ a_int = a_double;
236
+
237
+ b_int = b_double;
238
+
239
+
240
+
241
+ result_experimental = result_int - c;
242
+
243
+
244
+
245
+ Y();
246
+
247
+
248
+
249
+ return 0;
250
+
251
+
252
+
253
+ }
254
+
255
+
256
+
257
+
258
+
259
+ int ram(result_experimental,result_processed){
260
+
261
+
262
+
263
+ if(result_experimental<0){
264
+
265
+
266
+
267
+ X();
86
268
 
87
269
 
88
270
 
89
271
  }
90
272
 
91
-
92
-
93
- prime_structure[0] = 0;//1は素数ではない
273
+
94
-
95
-
96
-
274
+
97
- for(i=0;i<result_int-1;++i){
275
+ else{
98
-
99
-
100
-
276
+
277
+
278
+
101
- square_root_of_result = sqrt(result_int);
279
+ result_processed = result_experimental;
280
+
281
+
282
+
102
-
283
+ }
284
+
285
+
286
+
103
- printf("%d",square_root_of_result);
287
+ return result_processed;//正の数になったresultを返す
104
-
105
-
288
+
289
+
106
290
 
107
291
  }
108
292
 
109
-
110
-
111
- //エラトステネスのふるい
112
-
113
- for (i = 0; i < square_root_of_result; i++) {
114
-
115
-
116
-
117
- if (prime_structure[i] == 1){// prime[i]が素数なら
118
-
119
-
120
-
121
- for (unsigned j = (i+1); (i+1) * j <= result_int-1; j++){
122
-
123
-
124
-
125
- prime_structure[(i+1) * j - 1] = 0; // 素数の倍数は素数ではない
126
-
127
-
128
-
129
- }
130
-
131
-
132
-
133
- }
134
-
135
-
136
-
137
- }
138
-
139
-
140
-
141
- if(prime_structure[result_int-1] == 1){
142
-
143
-
144
-
145
- printf("%dは、素数\n",result_int);
146
-
147
- primenumbercount++;
148
-
149
-
150
-
151
- }
152
-
153
-
154
-
155
- else{
156
-
157
-
158
-
159
- printf("%dは、非素数\n",result_int);
160
-
161
- compositenumbercount++;
162
-
163
-
164
-
165
- }
166
-
167
-
168
-
169
- //}//for文の終了
170
-
171
-
172
-
173
- unsigned allcount = primenumbercount+compositenumbercount;
174
-
175
-
176
-
177
- double probability = primenumbercount/allcount;
178
-
179
-
180
-
181
- printf("a^%d-%dの確率は、%fです。",b_int,c,probability);
182
-
183
-
184
-
185
-
186
-
187
- }//main関数の終わり
188
-
189
293
  ```

5

ソースコードの修正

2016/07/22 08:39

投稿

tomopichan2002
tomopichan2002

スコア17

test CHANGED
File without changes
test CHANGED
@@ -44,6 +44,8 @@
44
44
 
45
45
  unsigned square_root_of_result,primenumbercount,compositenumbercount;
46
46
 
47
+ Unsgined i;
48
+
47
49
 
48
50
 
49
51
  //最終的にaを増加させる予定のfor文です
@@ -72,15 +74,15 @@
72
74
 
73
75
  //配列prime_structureの定義
74
76
 
75
- unsigned prime_structure[result_int-1];//0~result-1 result個
77
+ unsigned prime_structure[result_int];//0~result-1 result個
76
78
 
77
79
 
78
80
 
79
- for(unsigned i=0;i<=result_int-1;i++){//0~result-1 添え字
81
+ for(i=0;i<result_int;++i){//0~result-1 添え字
80
82
 
81
83
 
82
84
 
83
- prime_structure[result_int-1] = 1;
85
+ prime_structure[i] = 1;
84
86
 
85
87
 
86
88
 
@@ -88,19 +90,27 @@
88
90
 
89
91
 
90
92
 
91
- prime_structure[0] = 0;
93
+ prime_structure[0] = 0;//1は素数ではない
92
94
 
93
-
94
95
 
95
- square_root_of_result = sqrt(result_int);
96
96
 
97
+ for(i=0;i<result_int-1;++i){
98
+
99
+
100
+
101
+ square_root_of_result = sqrt(result_int);
102
+
97
- printf("%d",square_root_of_result);
103
+ printf("%d",square_root_of_result);
104
+
105
+
106
+
107
+ }
98
108
 
99
109
 
100
110
 
101
111
  //エラトステネスのふるい
102
112
 
103
- for (unsigned i = 0; i < square_root_of_result; i++) {
113
+ for (i = 0; i < square_root_of_result; i++) {
104
114
 
105
115
 
106
116
 
@@ -162,9 +172,13 @@
162
172
 
163
173
  unsigned allcount = primenumbercount+compositenumbercount;
164
174
 
175
+
176
+
177
+ double probability = primenumbercount/allcount;
178
+
165
179
 
166
180
 
167
- printf("a^%d-%dの確率は、%d/%dです。",b_int,c,primenumbercount,allcount);
181
+ printf("a^%d-%dの確率は、%fです。",b_int,c,probability);
168
182
 
169
183
 
170
184
 

4

エラトステネスに変更

2016/07/21 23:39

投稿

tomopichan2002
tomopichan2002

スコア17

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  C言語のプログラムについての質問です。
2
2
 
3
- a^b-cの式の変数を変更して、算出された値が素数なのかどうかをエラトネスのふるいで
3
+ a^b-cの式の変数を変更して、算出された値が素数なのかどうかをエラトステネスのふるいで
4
4
 
5
5
  判定するプログラムを書こうとしています。
6
6
 
@@ -98,7 +98,7 @@
98
98
 
99
99
 
100
100
 
101
- //エラトネスのふるい
101
+ //エラトステネスのふるい
102
102
 
103
103
  for (unsigned i = 0; i < square_root_of_result; i++) {
104
104
 

3

ソースの修正

2016/07/20 13:54

投稿

tomopichan2002
tomopichan2002

スコア17

test CHANGED
File without changes
test CHANGED
@@ -6,11 +6,9 @@
6
6
 
7
7
  例えば、b=2,c=3だと、a^2-3のようにして、
8
8
 
9
- For文で(a+1)^2-3のように変化させたいです。
9
+ for文で(a+1)^2-3のように変化させたいです。
10
10
 
11
11
  自分で組んでみたのですが、動きません。
12
-
13
- あと、type specifier missing.defaults to 'int'と警告文がでるのですがどうすれば解消されますか。
14
12
 
15
13
  アドバイスをいただけると嬉しいです。
16
14
 
@@ -26,49 +24,63 @@
26
24
 
27
25
  int main(void){
28
26
 
29
-
27
+
30
28
 
29
+ //result_int = a^b-c
30
+
31
+ //a_double,b_double,cは、ソースを編集して手動で入力する仕様にしようと思います
32
+
33
+
34
+
35
+ double a_double = 9;
36
+
37
+ double b_double = 2;
38
+
39
+ unsigned c = 3;
40
+
41
+
42
+
43
+ unsigned a_int,b_int,result_int;
44
+
31
- unsigned power(unsigned a,b);//power関数の宣言
45
+ unsigned square_root_of_result,primenumbercount,compositenumbercount;
32
46
 
33
47
 
34
48
 
35
- //a^b-c結果をresultとしま
49
+ //最終的にaを増加させる予定for文で
36
50
 
37
-
38
-
39
- unsigned a = 3;
40
-
41
- unsigned b = 3;
42
-
43
- unsigned c = 3;
44
-
45
- unsigned result,square_root_of_result,primenumbercount,compositenumbercount;
51
+ //for(a_int=a_int;a_int<=100;a_int++){
46
52
 
47
53
 
48
54
 
49
- for(a=a;a<=100;a++){//変数aを変化させるためのfor文です。
55
+ double result_double = pow(a_double,b_double);
50
56
 
51
-
57
+
52
58
 
53
- unsigned i = power(a,b);
59
+ //double型の値をunsigned型に代入します
54
60
 
55
- result = i - c;//power関数の呼び出し resultの計算
61
+ result_int = result_double;
56
62
 
63
+ a_int = a_double;
64
+
65
+ b_int = b_double;
66
+
67
+
68
+
57
- printf("%d",result);
69
+ result_int = result_int - c;
58
70
 
59
71
 
60
72
 
61
73
  //配列prime_structureの定義
62
74
 
63
- unsigned prime_structure[result-1];//0~result-1 result個
75
+ unsigned prime_structure[result_int-1];//0~result-1 result個
64
76
 
65
77
 
66
78
 
67
- for(unsigned i=0;i<=result-1;i++){//0~result-1 添え字
79
+ for(unsigned i=0;i<=result_int-1;i++){//0~result-1 添え字
68
80
 
69
81
 
70
82
 
71
- prime_structure[result-1] = 1;
83
+ prime_structure[result_int-1] = 1;
72
84
 
73
85
 
74
86
 
@@ -80,7 +92,7 @@
80
92
 
81
93
 
82
94
 
83
- square_root_of_result = sqrt(result);
95
+ square_root_of_result = sqrt(result_int);
84
96
 
85
97
  printf("%d",square_root_of_result);
86
98
 
@@ -92,15 +104,15 @@
92
104
 
93
105
 
94
106
 
95
- if (prime_structure[i] == 1){
107
+ if (prime_structure[i] == 1){// prime[i]が素数なら
96
108
 
97
109
 
98
110
 
99
- for (unsigned j = (i+1); (i+1) * j <= result-1; j++){
111
+ for (unsigned j = (i+1); (i+1) * j <= result_int-1; j++){
100
112
 
101
113
 
102
114
 
103
- prime_structure[(i+1) * j - 1] = 0;
115
+ prime_structure[(i+1) * j - 1] = 0; // 素数の倍数は素数ではない
104
116
 
105
117
 
106
118
 
@@ -116,11 +128,11 @@
116
128
 
117
129
 
118
130
 
119
- if(prime_structure[result-1] == 1){
131
+ if(prime_structure[result_int-1] == 1){
120
132
 
121
133
 
122
134
 
123
- printf("%dは、素数\n",result);
135
+ printf("%dは、素数\n",result_int);
124
136
 
125
137
  primenumbercount++;
126
138
 
@@ -134,6 +146,8 @@
134
146
 
135
147
 
136
148
 
149
+ printf("%dは、非素数\n",result_int);
150
+
137
151
  compositenumbercount++;
138
152
 
139
153
 
@@ -142,84 +156,20 @@
142
156
 
143
157
 
144
158
 
145
- }
159
+ //}//for文の終了
160
+
161
+
162
+
163
+ unsigned allcount = primenumbercount+compositenumbercount;
146
164
 
147
165
 
148
166
 
149
- printf("a^%d-%dの確率は、%d/%dです。",b,c,primenumbercount,primenumbercount+compositenumbercount);
167
+ printf("a^%d-%dの確率は、%d/%dです。",b_int,c,primenumbercount,allcount);
150
168
 
151
169
 
152
170
 
153
171
 
154
172
 
155
- }
156
-
157
-
158
-
159
- //power関数の定義 pow関数はdouble型なのでint型のpower関数を作りました。
160
-
161
-
162
-
163
- unsigned power(unsigned a,b){
173
+ }//main関数の終わり
164
-
165
-
166
-
167
- unsigned result;
168
-
169
-
170
-
171
- if(b==1){
172
-
173
-
174
-
175
- result = a;
176
-
177
-
178
-
179
- }
180
-
181
-
182
-
183
- else if(b==2){
184
-
185
-
186
-
187
- result = a*a;
188
-
189
-
190
-
191
- }
192
-
193
-
194
-
195
- else{
196
-
197
-
198
-
199
- result = a*a;
200
-
201
-
202
-
203
- for(unsigned i = b-2;i>=0;--i){
204
-
205
-
206
-
207
- result = result*a;
208
-
209
-
210
-
211
- }
212
-
213
-
214
-
215
- }
216
-
217
-
218
-
219
- return result;
220
-
221
-
222
-
223
- }
224
174
 
225
175
  ```

2

ソースコードの内容を変更しました。

2016/07/20 13:15

投稿

tomopichan2002
tomopichan2002

スコア17

test CHANGED
File without changes
test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
 
30
30
 
31
- unsigned power(unsigned a,b,result);//power関数の宣言
31
+ unsigned power(unsigned a,b);//power関数の宣言
32
32
 
33
33
 
34
34
 
@@ -50,7 +50,7 @@
50
50
 
51
51
 
52
52
 
53
- unsigned i = power(a,b,result);
53
+ unsigned i = power(a,b);
54
54
 
55
55
  result = i - c;//power関数の呼び出し resultの計算
56
56
 
@@ -160,9 +160,13 @@
160
160
 
161
161
 
162
162
 
163
- unsigned power(unsigned a,b,result){
163
+ unsigned power(unsigned a,b){
164
+
165
+
166
+
164
-
167
+ unsigned result;
165
-
168
+
169
+
166
170
 
167
171
  if(b==1){
168
172
 

1

ソースコードを'''で囲いました。

2016/07/20 10:12

投稿

tomopichan2002
tomopichan2002

スコア17

test CHANGED
@@ -1 +1 @@
1
- c言語
1
+ C言語で素数を判定したい
test CHANGED
@@ -16,9 +16,11 @@
16
16
 
17
17
 
18
18
 
19
+ ```c
20
+
19
- ---#include <stdio.h>
21
+ #include <stdio.h>
20
-
22
+
21
- ---#include <math.h>
23
+ #include <math.h>
22
24
 
23
25
 
24
26
 
@@ -215,3 +217,5 @@
215
217
 
216
218
 
217
219
  }
220
+
221
+ ```