二重ループ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
falco

二重ループ

#1

投稿記事 by falco » 14年前

SetPixelを使って(99,0)(99,99)(0,99)の三角形をかくために

コード:

 SetPixel(hdc,99,0,RGB(0,0,0));
		
	SetPixel(hdc,99,1,RGB(0,0,0));
	SetPixel(hdc,98,1,RGB(0,0,0));
		
	SetPixel(hdc,99,2,RGB(0,0,0));
	SetPixel(hdc,98,2,RGB(0,0,0));
	SetPixel(hdc,97,2,RGB(0,0,0));

	SetPixel(hdc,99,3,RGB(0,0,0));
	SetPixel(hdc,98,3,RGB(0,0,0));
	SetPixel(hdc,97,3,RGB(0,0,0));
	SetPixel(hdc,96,3,RGB(0,0,0));
               :
これをループ処理しようとして

コード:

int     x,y;
        for(y=0; y<100; y++)
        {   for(x=99; x>=y; x--)
            {
                SetPixel(hdc,x,y,RGB(0,0,0));
            }
        }
としたのですがうまくいきません。間違いをおしえてください。

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 二重ループ

#2

投稿記事 by bitter_fox » 14年前

falco さんが書きました:SetPixelを使って(99,0)(99,99)(0,99)の三角形をかくために

コード:

 SetPixel(hdc,99,0,RGB(0,0,0));
		
	SetPixel(hdc,99,1,RGB(0,0,0));
	SetPixel(hdc,98,1,RGB(0,0,0));
		
	SetPixel(hdc,99,2,RGB(0,0,0));
	SetPixel(hdc,98,2,RGB(0,0,0));
	SetPixel(hdc,97,2,RGB(0,0,0));

	SetPixel(hdc,99,3,RGB(0,0,0));
	SetPixel(hdc,98,3,RGB(0,0,0));
	SetPixel(hdc,97,3,RGB(0,0,0));
	SetPixel(hdc,96,3,RGB(0,0,0));
               :
これを細かく見ると、
y = 0のときは
一回、点を打つ
y = 1のときは
二回、点を打つ
y = 2のときは
三回、点を打つ

それをy = 99まで繰り返すので、

コード:

	for (y = 0; y <= 99; y++)
	{
		for (x = 0; x <= y; x++)
		{
			//
		}
	}
このようになりますね。

さらに、
y = 0の時のX座標の集合は
X = {99}
(x = 0)

y = 1の時のX座標の集合は
X = {99, 98}
(x = 0, 1)

y = 2の時のX座標の集合は
X = {99, 98, 97}
(x = 0, 1, 2)

となり、
個々のxについてみると、
x = 0の時
X = 99

x = 1の時
X = 98

x = 2の時
X = 97

となって、コードで表すと以下のようになります。

コード:

	for (y = 0; y <= 99; y++)
	{
		for (x = 0; x <= y; x++)
		{
			SetPixel(hdc, 99 - x, y, RGB(0, 0, 0));
		}
	}
[hr][修正]
RGB(255, 255, 255) ==> RBG(0, 0, 0)

falco

Re: 二重ループ

#3

投稿記事 by falco » 14年前

なるほど。わかりやすい説明ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る