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

回答編集履歴

1

関数を使うコードを追加

2021/06/12 07:29

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  P[0][7], P[0][6], P[0][5], ... , P[0][0]
19
19
  ```
20
20
 
21
- だから、i = 7, 6, 5, ... , 0 で、j = 7, 6, ... , 0
21
+ だから、i = 7, 6, ... , 0 で、j = 7, 6, 5, ... , 0
22
22
 
23
23
  270度だったら、
24
24
  ```text
@@ -28,4 +28,56 @@
28
28
  P[0][0], P[1][0], P[2][0], ... , P[7][0]
29
29
  ```
30
30
 
31
- だから、j = 7, 6, ... , 0 で、i = 0, 1, 2, ... , 7
31
+ だから、j = 7, 6, ... , 0 で、i = 0, 1, 2, ... , 7
32
+
33
+ **追記**
34
+ 解決済みになりましたね。
35
+
36
+ 同じようなことを何度も書くのが嫌な場合は、
37
+ 違いだけを引数で切り替える関数にします。
38
+ ```C
39
+ #include <stdio.h>
40
+
41
+ void print(int P[8][8], int v, int d1, int d2, const char *s)
42
+ {
43
+ int i, j, *p = &i, *q = &j;
44
+ int a1 = 0, b1 = 8, c1 = 1, a2 = 0, b2 = 8, c2 = 1;
45
+ if (v) p = &j, q = &i;
46
+ if (d1) a1 = 7, b1 = -1, c1 = -1;
47
+ if (d2) a2 = 7, b2 = -1, c2 = -1;
48
+
49
+ printf("\n%s\n", s);
50
+ for (*p = a1; *p != b1; *p += c1) {
51
+ for (*q = a2; *q != b2; *q += c2)
52
+ printf(" %c", ".*"[P[i][j]]);
53
+ printf("\n");
54
+ }
55
+ }
56
+
57
+ int main(void)
58
+ {
59
+ static int P[8][8] = {
60
+ { 0, 1, 1, 1, 1, 0, 0, 0 },
61
+ { 0, 1, 0, 0, 0, 0, 0, 0 },
62
+ { 0, 1, 0, 0, 0, 0, 0, 0 },
63
+ { 0, 1, 1, 1, 0, 0, 0, 0 },
64
+ { 0, 1, 0, 0, 0, 0, 0, 0 },
65
+ { 0, 1, 0, 0, 0, 0, 0, 0 },
66
+ { 0, 1, 0, 0, 0, 0, 0, 0 },
67
+ { 0, 1, 0, 0, 0, 0, 0, 0 },
68
+ };
69
+ print(P, 0, 0, 0, "普通のF");
70
+ print(P, 1, 0, 1, "180度回転");
71
+ print(P, 0, 1, 1, "90度回転");
72
+ print(P, 1, 1, 0, "270度回転");
73
+
74
+ print(P, 0, 0, 1, "左右対称");
75
+ print(P, 0, 1, 0, "上下対称");
76
+ print(P, 1, 1, 1, "右上がり対角線対称");
77
+ print(P, 1, 0, 0, "右下がり対角線対称");
78
+ }
79
+ ```
80
+ 質問は、コードの貼り付けに失敗しています。
81
+ <code>タグを使って修正してください。
82
+
83
+ また、「for分」ではなく、「for文」です。