回転処理についての問題です。よろしくお願いいたします。
http://www.fastpic.jp/images/002/4220408704.jpg
http://www.fastpic.jp/images/527/4742754125.jpg
http://www.fastpic.jp/images/184/6458414777.jpg
回転処理について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 回転処理について
知恵袋とマルチポストになっていますので相互リンクをお願いします。
相互リンクは、どちらの掲示板の回答者からも別の掲示板でどのような回答が行わているか分かるようにするためのものです。知恵袋の相互リンクは補足をお使いください。
詳しくはフォーラムルールご覧下さい。
http://dixq.net/board/board.html
あとこちらの掲示板は丸投げ禁止なので、穴埋め問題は自分なりの答えとなぜそれを選んだの書いていただけますか?
相互リンクは、どちらの掲示板の回答者からも別の掲示板でどのような回答が行わているか分かるようにするためのものです。知恵袋の相互リンクは補足をお使いください。
詳しくはフォーラムルールご覧下さい。
http://dixq.net/board/board.html
あとこちらの掲示板は丸投げ禁止なので、穴埋め問題は自分なりの答えとなぜそれを選んだの書いていただけますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 回転処理について
突然ですが、申し訳ありません。上記の問題は、その他の掲示板にのっていないため、マルチポストになっていないと思います。softya(ソフト屋) さんが書きました:知恵袋とマルチポストになっていますので相互リンクをお願いします。
相互リンクは、どちらの掲示板の回答者からも別の掲示板でどのような回答が行わているか分かるようにするためのものです。知恵袋の相互リンクは補足をお使いください。
詳しくはフォーラムルールご覧下さい。
http://dixq.net/board/board.html
あとこちらの掲示板は丸投げ禁止なので、穴埋め問題は自分なりの答えとなぜそれを選んだの書いていただけますか?
それに、穴埋め問題ですが、正解を張り付けています。しかし、なぜこれが正解かわかりません。恐れ入りますが、これでも丸投げでしょうか。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 回転処理について
失礼しました。まったく同じ質問の仕方だったので同じ質問だと勘違いしておりました。申し訳ありません。
>それに、穴埋め問題ですが、正解を張り付けています。しかし、なぜこれが正解かわかりません。恐れ入りますが、これでも丸投げでしょうか。
それだと3枚目は必要ないって事ですね?穴埋めされているの訳ですから。
では肝心の考え方だけ説明します。
右90度回転のポイントは、
wrk[j][4-i] = num[j]
ですがまず行と列の添字が違うのが分かると思います。
これで面倒ですが、for( i=0; i<5 ; i++ ) {とor( j=0; j<5 ;ji++ ) {のループでwrk[?][?] = num[?][?]のパターンを全部書きだしてみてください。理解するのに必要なことなので25パターンです。
(例)
wrk[0][4] = num[0][0]
これで配列がどのようにコピーされているか手作業で書いてみると分かります。
もう一つの
num[j]=wrk[j];
については回転が終わった図形がwrkに入っているので、numに書き戻しているだけです。
「何故コピーだけで済むのか」と言えば、既に回転しているのがwrkに入っているからとしか言えません。
numを直接回転せずにwrkを使って回転させているかというとnumを壊すからです。
>それに、穴埋め問題ですが、正解を張り付けています。しかし、なぜこれが正解かわかりません。恐れ入りますが、これでも丸投げでしょうか。
それだと3枚目は必要ないって事ですね?穴埋めされているの訳ですから。
では肝心の考え方だけ説明します。
右90度回転のポイントは、
wrk[j][4-i] = num[j]
ですがまず行と列の添字が違うのが分かると思います。
これで面倒ですが、for( i=0; i<5 ; i++ ) {とor( j=0; j<5 ;ji++ ) {のループでwrk[?][?] = num[?][?]のパターンを全部書きだしてみてください。理解するのに必要なことなので25パターンです。
(例)
wrk[0][4] = num[0][0]
これで配列がどのようにコピーされているか手作業で書いてみると分かります。
もう一つの
num[j]=wrk[j];
については回転が終わった図形がwrkに入っているので、numに書き戻しているだけです。
「何故コピーだけで済むのか」と言えば、既に回転しているのがwrkに入っているからとしか言えません。
numを直接回転せずにwrkを使って回転させているかというとnumを壊すからです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 回転処理について
softya(ソフト屋) さんが書きました:失礼しました。まったく同じ質問の仕方だったので同じ質問だと勘違いしておりました。申し訳ありません。
もう一つの
num[j]=wrk[j];
については回転が終わった図形がwrkに入っているので、numに書き戻しているだけです。
「何故コピーだけで済むのか」と言えば、既に回転しているのがwrkに入っているからとしか言えません。
numを直接回転せずにwrkを使って回転させているかというとnumを壊すからです。
丁寧なご回答ありがとうございます。
numを壊すことはどういうことでしょうか。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 回転処理について
タイミング的に同時に全部の添字の要素を動かすことが出来ませんから順番にコピーすることになりますが、その時に動かす前の値に動かした後の値を書きこんでしまうからです。rayor さんが書きました:丁寧なご回答ありがとうございます。
numを壊すことはどういうことでしょうか。
これも試してみれば分かります。 として後ろの配列コピーを止めてみてください。
プログラムは動かして、いろいろ変えてみて初めて理解できるものなので疑問があったら納得するまでいじり倒すのが正解です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 回転処理について
ご回答ありがとうございます。上記のコードで試してみたところ、全部空白になってしまいました。実行の流れはどうなっているのでしょうか。たびたびの質問で申し訳ありません。softya(ソフト屋) さんが書きました:タイミング的に同時に全部の添字の要素を動かすことが出来ませんから順番にコピーすることになりますが、その時に動かす前の値に動かした後の値を書きこんでしまうからです。rayor さんが書きました:丁寧なご回答ありがとうございます。
numを壊すことはどういうことでしょうか。
これも試してみれば分かります。 として後ろの配列コピーを止めてみてください。
プログラムは動かして、いろいろ変えてみて初めて理解できるものなので疑問があったら納得するまでいじり倒すのが正解です。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 回転処理について
全部手書きでやっても分かると思うのですが、ここは賢くプログラムを使って状況を確認します。
これを実行して確認してみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。