回答編集履歴

7

細かい部分の修正

2017/10/19 11:35

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,5 @@
1
+ **修正前の質問タイトル:『C言語 配列 魔法陣の和』に対する指摘**
2
+
1
3
  魔法陣ではなく魔方陣だと思いますが、どちらにせよ意味が通じません。
2
4
 
3
5
  > 魔方陣(まほうじん、英:Magic square)とは、**n×n 個の正方形**の方陣に数字を配置し、縦・横・対角線のいずれの列についても、その列の数字の合計が同じになるもののことである。**特に1から方陣のマスの総数 n2 までの数字を1つずつ過不足なく使ったものを言う**。
@@ -36,13 +38,13 @@
36
38
 
37
39
 
38
40
 
39
- 追記を受けて
41
+ 質問の追記/修正を受けて
40
42
 
41
43
  ---
42
44
 
43
45
  とりあえずこんなコードを組んでみました。
44
46
 
45
- 『ある座標を打ち込まれたときに、可能な限り左下に突き進んだ座標を返す』
47
+ **『ある座標を打ち込まれたときに、可能な限り左下に突き進んだ座標を返す』**
46
48
 
47
49
  ```C
48
50
 
@@ -144,7 +146,7 @@
144
146
 
145
147
  - なぜ上記のようなコードを例として示したのか?
146
148
 
147
- - コードがところどころ書き換えられているが、真意はなにか?
149
+ - コードがところどころ(特に変数名が)書き換えられているが、真意はなにか?
148
150
 
149
151
  - 『左下から右上へ』の**一直線**の和を考えるときに、二重ループが必要か?
150
152
 
@@ -171,3 +173,7 @@
171
173
  - 特定の入力の下で動かない
172
174
 
173
175
  - 結果が想定通りでない
176
+
177
+
178
+
179
+ 今回はわりあい期待する結果が自明ですが、それでも期待する入出力は書いた方がよいです。

6

修正

2017/10/19 11:35

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -88,9 +88,9 @@
88
88
 
89
89
  int x, y;
90
90
 
91
- printf("x?"); scanf("%ud", &x);
91
+ printf("x?"); scanf("%d", &x);
92
92
 
93
- printf("y?"); scanf("%ud", &y);
93
+ printf("y?"); scanf("%d", &y);
94
94
 
95
95
 
96
96
 

5

追記に対して

2017/10/19 10:49

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -36,6 +36,124 @@
36
36
 
37
37
 
38
38
 
39
+ 追記を受けて
40
+
41
+ ---
42
+
43
+ とりあえずこんなコードを組んでみました。
44
+
45
+ 『ある座標を打ち込まれたときに、可能な限り左下に突き進んだ座標を返す』
46
+
47
+ ```C
48
+
49
+ #include <stdio.h>
50
+
51
+ #include <stdlib.h>
52
+
53
+ #define X 4
54
+
55
+ #define Y 3
56
+
57
+
58
+
59
+ int main(void) {
60
+
61
+ int mat[Y][X]={
62
+
63
+ {1, 7, 1, 5},
64
+
65
+ {0, 2, 8, 1},
66
+
67
+ {4, 0, 2, 8}
68
+
69
+ };
70
+
71
+
72
+
73
+ printf("配列mat[Y][X]:\n");
74
+
75
+ for(int yi=0; yi<Y; yi++){
76
+
77
+ for(int xi=0; xi<X; xi++){
78
+
79
+ printf("%d ", mat[yi][xi]);
80
+
81
+ }
82
+
83
+ printf("\n");
84
+
85
+ }
86
+
87
+
88
+
89
+ int x, y;
90
+
91
+ printf("x?"); scanf("%ud", &x);
92
+
93
+ printf("y?"); scanf("%ud", &y);
94
+
95
+
96
+
97
+ if(!(0 <= x && x < X)) exit(1);
98
+
99
+ if(!(0 <= y && y < Y)) exit(1);
100
+
101
+
102
+
103
+ while(x > 0 && y < Y - 1) {
104
+
105
+ x--; y++;
106
+
107
+ }
108
+
109
+ printf("x:%d y:%d\n", x, y);
110
+
111
+
112
+
113
+ return 0;
114
+
115
+ }
116
+
117
+ ```
118
+
119
+
120
+
121
+ **実行例**
122
+
123
+ ```
124
+
125
+ 配列mat[Y][X]:
126
+
127
+ 1 7 1 5
128
+
129
+ 0 2 8 1
130
+
131
+ 4 0 2 8
132
+
133
+ x?1
134
+
135
+ y?1
136
+
137
+ x:0 y:2
138
+
139
+ ```
140
+
141
+
142
+
143
+ 次の三点を考えてみてください。
144
+
145
+ - なぜ上記のようなコードを例として示したのか?
146
+
147
+ - コードがところどころ書き換えられているが、真意はなにか?
148
+
149
+ - 『左下から右上へ』の**一直線**の和を考えるときに、二重ループが必要か?
150
+
151
+
152
+
153
+ どうしてもわからなければ、わからない点を自分なりに整理してコメントをください。
154
+
155
+
156
+
39
157
  ---
40
158
 
41
159
  teratailには、上記のようにコードを見やすく表示する機能があります。

4

x y の導入

2017/10/19 10:49

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -20,11 +20,11 @@
20
20
 
21
21
  printf("配列a[M][N]:\n");
22
22
 
23
- for(int i=0; i<M; i++){
23
+ for(int y=0; y<M; y++){
24
24
 
25
- for(int j=0; j<N; j++){
25
+ for(int x=0; x<N; x++){
26
26
 
27
- printf("%d ", a[i][j]);
27
+ printf("%d ", a[y][x]);
28
28
 
29
29
  }
30
30
 

3

引用の強調

2017/10/19 10:22

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,10 +1,10 @@
1
1
  魔法陣ではなく魔方陣だと思いますが、どちらにせよ意味が通じません。
2
2
 
3
- > 魔方陣(まほうじん、英:Magic square)とは、n×n 個の正方形の方陣に数字を配置し、縦・横・対角線のいずれの列についても、その列の数字の合計が同じになるもののことである。特に1から方陣のマスの総数 n2 までの数字を1つずつ過不足なく使ったものを言う。
3
+ > 魔方陣(まほうじん、英:Magic square)とは、**n×n 個の正方形**の方陣に数字を配置し、縦・横・対角線のいずれの列についても、その列の数字の合計が同じになるもののことである。**特に1から方陣のマスの総数 n2 までの数字を1つずつ過不足なく使ったものを言う**
4
4
 
5
5
 
6
6
 
7
- 引用元:[魔方陣 - Wikipedia](https://ja.wikipedia.org/wiki/%E9%AD%94%E6%96%B9%E9%99%A3)
7
+ 引用元:[魔方陣 - Wikipedia](https://ja.wikipedia.org/wiki/%E9%AD%94%E6%96%B9%E9%99%A3) (**太字は引用者**)
8
8
 
9
9
  ご提示のプログラムのどこに魔方陣があるのでしょうか。
10
10
 

2

引用元書いてなかった

2017/10/19 10:17

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -3,6 +3,8 @@
3
3
  > 魔方陣(まほうじん、英:Magic square)とは、n×n 個の正方形の方陣に数字を配置し、縦・横・対角線のいずれの列についても、その列の数字の合計が同じになるもののことである。特に1から方陣のマスの総数 n2 までの数字を1つずつ過不足なく使ったものを言う。
4
4
 
5
5
 
6
+
7
+ 引用元:[魔方陣 - Wikipedia](https://ja.wikipedia.org/wiki/%E9%AD%94%E6%96%B9%E9%99%A3)
6
8
 
7
9
  ご提示のプログラムのどこに魔方陣があるのでしょうか。
8
10
 

1

追記

2017/10/19 10:15

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -39,3 +39,15 @@
39
39
  teratailには、上記のようにコードを見やすく表示する機能があります。
40
40
 
41
41
  編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
42
+
43
+
44
+
45
+ また、質問をする際には、上手くいかない点を明確にした方がよいです。
46
+
47
+ - コンパイルが出来ない
48
+
49
+ - 実行中に落ちる
50
+
51
+ - 特定の入力の下で動かない
52
+
53
+ - 結果が想定通りでない