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

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

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

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Q&A

解決済

3回答

1872閲覧

c言語 for分 回転 図形描画

abctata

総合スコア2

C

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

0グッド

1クリップ

投稿2021/06/11 12:37

編集2021/06/11 12:43

*でFを作ってそれを回転させたいのですが180度と270度回転させるfor分の式がわかりません
for分の(???)の部分を教えていただきたいです

#include<stdio.h>
int main(void)
{
int i, j;

int P[8][8] = { {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, }; printf("\n"); printf("普通のF\n"); printf("\n"); for(i = 0; i <= 7; i++) { for(j = 0; j <= 7; j++) { if (P[i][j] == 1) { printf("*"); } else { printf(" "); } } printf("\n"); } printf("\n"); printf("90度回転"); printf("\n"); for (j = 0; j <= 7; j++) { for (i = 7; i >= 0; i--) { if (P[i][j] == 1) { printf("*"); } else { printf(" "); } } printf("\n"); } printf("\n"); printf("180度回転"); printf("\n"); for (???) { for (???) { if (P[i][j] == 1) { printf("*"); } else { printf(" "); } } printf("\n"); } printf("\n"); printf("270度回転"); printf("\n"); for (???) { for (???) { if (P[i][j] == 1) { printf("*"); } else { printf(" "); } } printf("\n"); } return 0;

}

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

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

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

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

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

guest

回答3

0

ベストアンサー

なぜ、90度が書けて、180度と270度が書けないんでしょうか?

90度で書いているのは

text

1P[7][0], P[6][0], P[5][0], ... , P[0][0] 2P[7][1], P[6][1], P[5][1], ... , P[0][1] 3 ... 4P[7][7], P[6][7], P[5][7], ... , P[0][7]

だから、j = 0, 1, ... , 7 で、i = 7, 6, 5, ... , 0

180度だったら、

text

1P[7][7], P[7][6], P[7][5], ... , P[7][0] 2P[6][7], P[6][6], P[6][5], ... , P[6][0] 3 ... 4P[0][7], P[0][6], P[0][5], ... , P[0][0]

だから、i = 7, 6, ... , 0 で、j = 7, 6, 5, ... , 0

270度だったら、

text

1P[0][7], P[1][7], P[2][7], ... , P[7][7] 2P[0][6], P[1][6], P[2][6], ... , P[7][6] 3 ... 4P[0][0], P[1][0], P[2][0], ... , P[7][0]

だから、j = 7, 6, ... , 0 で、i = 0, 1, 2, ... , 7

追記
解決済みになりましたね。

同じようなことを何度も書くのが嫌な場合は、
違いだけを引数で切り替える関数にします。

C

1#include <stdio.h> 2 3void print(int P[8][8], int v, int d1, int d2, const char *s) 4{ 5 int i, j, *p = &i, *q = &j; 6 int a1 = 0, b1 = 8, c1 = 1, a2 = 0, b2 = 8, c2 = 1; 7 if (v) p = &j, q = &i; 8 if (d1) a1 = 7, b1 = -1, c1 = -1; 9 if (d2) a2 = 7, b2 = -1, c2 = -1; 10 11 printf("\n%s\n", s); 12 for (*p = a1; *p != b1; *p += c1) { 13 for (*q = a2; *q != b2; *q += c2) 14 printf(" %c", ".*"[P[i][j]]); 15 printf("\n"); 16 } 17} 18 19int main(void) 20{ 21 static int P[8][8] = { 22 { 0, 1, 1, 1, 1, 0, 0, 0 }, 23 { 0, 1, 0, 0, 0, 0, 0, 0 }, 24 { 0, 1, 0, 0, 0, 0, 0, 0 }, 25 { 0, 1, 1, 1, 0, 0, 0, 0 }, 26 { 0, 1, 0, 0, 0, 0, 0, 0 }, 27 { 0, 1, 0, 0, 0, 0, 0, 0 }, 28 { 0, 1, 0, 0, 0, 0, 0, 0 }, 29 { 0, 1, 0, 0, 0, 0, 0, 0 }, 30 }; 31 print(P, 0, 0, 0, "普通のF"); 32 print(P, 1, 0, 1, "180度回転"); 33 print(P, 0, 1, 1, "90度回転"); 34 print(P, 1, 1, 0, "270度回転"); 35 36 print(P, 0, 0, 1, "左右対称"); 37 print(P, 0, 1, 0, "上下対称"); 38 print(P, 1, 1, 1, "右上がり対角線対称"); 39 print(P, 1, 0, 0, "右下がり対角線対称"); 40}

質問は、コードの貼り付けに失敗しています。
<code>タグを使って修正してください。

また、「for分」ではなく、「for文」です。

投稿2021/06/12 06:45

編集2021/06/12 07:29
kazuma-s

総合スコア8224

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

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

0

あなたが手作業でその配列の並び替えをするときにはどうするのか、ってのを考えてみましょう。
そのとおりにコードを書けばいいです

投稿2021/06/11 23:30

y_waiwai

総合スコア87782

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

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

0

int P[8][8]

とりあえずパターンは88の正方形サイズであるみたいですから,
回転量が180度だろうが270度だろうが,出力するサイズは8
8でよいのではありませんか?

であれば,少なくとも

for (???)

の ??? の部分に関しては悩む必要はないように思います.

for( 8*8箇所の出力先についてループ ) //2重ループだろうけど,ここは他と一緒だよね { 考えるべきは, この箇所に表示すべき文字を定めるには P[][] のどの要素を参照すればよいか? というところ. }

出力位置 (i行, j列) に関して,P[a][b] を参照するのだとして,
(a,b)を(i,j)から算出する式をループの内側に書けばよい.

投稿2021/06/11 14:47

編集2021/06/11 14:50
fana

総合スコア11661

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問