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

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

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

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

3回答

1207閲覧

processing.正方形を横に6つ描画。for文。

ichijininetai

総合スコア2

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2022/05/25 08:54

for文を用いた繰り返し処理に悩んでいます。

条件は以下です。
正方形を6つ以下の条件に沿って最初の(40,40)の正方形の横に描画します。
for文内は 6回繰り返していることがわかるように記述することも条件です。
for(int i=0; i<6; i++)
もしくは
for(int i=1; i<=6; i++)

(1) ウィンドウのサイズは 350×200
(2) 左端の正方形の頂点の座標は(40, 40)
(3) 正方形の一辺の長さは 40
/////////////////////////////////////////////////////////////////////////

for文を使わずに記述した場合このような形で書けばよいかと思います。

size(350, 200);
rect(40, 40, 40, 40);
rect(80, 40, 40, 40);
rect(120, 40, 40, 40);
rect(160, 40, 40, 40);
rect(200, 40, 40, 40);
rect(240, 40, 40, 40);
rect(280, 40, 40, 40);

これをfor文にしたいのですが、途端にどう記述してよいかわからず質問いたしました。
全くの素人で、ご教授お願いできればと思います。

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

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

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

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

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

guest

回答3

0

for文を使わずに記述した場合

それだと四角が7つ描かれる...というのは一応突っ込んでおきますね。

で、既に回答はでていますが、あるいは、こんなのでも。

size(350, 200); int x=40; for (int i=0; i<6; i++) { square(x, 40, 40); x+=40; }

これだとちょっと「やりすぎ」?

size(350, 200); for (int i=0; i<6; i++) { square(40, 40, 40); translate(40,0); }

やり方はいくつもあったりするので、特にそのレベルでは一つのやり方だけで満足しないほうがいいかも。

投稿2022/05/25 11:52

thkana

総合スコア7610

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

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

TN8001

2022/05/25 12:04 編集

> それだと四角が7つ描かれる...というのは一応突っ込んでおきますね。 > 正方形を6つ以下の条件に沿って最初の(40,40)の正方形の横に描画します。 正方形6つを for文を使って 最初の正方形の横に描画 なので7個でいいのかな~と思ったんですが、1対2で負けてるので私の解釈が間違いですかね?^^;
thkana

2022/05/27 04:06

> 正方形6つを > 最初の正方形の横に描画 うむ、それもありか。 なぜか知らないけれど、最初の一個は繰り返しで書きたくない...ならその理由も説明して欲しくなりますね。
guest

0

ベストアンサー

多分、rect関数の第一引数をfor文内でカウンタ変数iを使い変化させたいのであると考えて、回答します。

考え方について

まず、第一引数において、40->80->...->280と初項が40で公差が40で、末項が280となる数式を考えます。
この時、等差数列の一般項の求め方は、a_n=a+(n-1)d [a_nが末項の値、aが初項、nが数式の数、dが公差]という式で表せます。数式については、「等差数列」と調べると、詳しい説明があります。
つまり、この問題では等差数列を使いfor文を書くのが適切かと思います。

実装について

この問題は、先ほど述べた、等差数列の考え方に沿って実装していきます。
初項が40、公差が40となります。
ゆえに、数式としては
40+(n-1)*40
となります。
より、わかりやすい式に置き換えると
初めの数+(カウンタ変数{iが1から始めたとき}-1)*1ループごとに増えていく数
このことより、

processing

1 for(int i=1; i<=6; i++)

こちらの、for文で考えます。
上の式で述べた、nはfor文内では、iと置換できます。
よってそのまま式を使用すると、

processing

1 for(int i=1; i<=6; i++){ 2 rect(40+(i-1)*40,40,40,40); 3}

ということで、for文内で変化する値としては

shell

140 280 3120 4160 5200 6240

と求められました!

投稿2022/05/25 11:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

rectywidthheightはすべて40でいいのは自明ですね?
xが80,120,160,200,240,280と、順に変わってくれれば良いわけですね。

こういった場合はまず増分(いくつずつ増えているか)を考えます。
40ずつ増えていますね。

for文でiは1ずつ増えますから、i * 40とすると40ずつ増える数値になります(0,40,80,120,160,200)
for文で描きたい最初の四角は、80に描きたいですから80を足します(i * 40 + 80
そうするとすべて80ずつずれて、80,120,160,200,240,280になりました!

for(int i = 1; i <= 6; i++)の時はどうなるか考えてみましょう^^

Processing

1void setup() { 2 size(350, 200); 3 rect(40, 40, 40, 40); 4 5 for (int i = 0; i < 6; i++) { 6 rect(i * 40 + 80, 40, 40, 40); 7 } 8 9 //rect(80, 40, 40, 40); 10 //rect(120, 40, 40, 40); 11 //rect(160, 40, 40, 40); 12 //rect(200, 40, 40, 40); 13 //rect(240, 40, 40, 40); 14 //rect(280, 40, 40, 40); 15}

投稿2022/05/25 10:44

TN8001

総合スコア9244

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問