ページ 11

無題

Posted: 2008年3月03日(月) 17:10
by taro
とても初歩的な質問なのですがvisualC++でfor文をつかって縦、横の大きさを入力すると*によって枠だけの四角形を描くようなプログラムを作りたいのですが、お願いいたします。
(実行例) 4 5
      *****
            
            *   *

            *   *

            *****

Re:無題

Posted: 2008年3月03日(月) 17:14
by box
手で書くとしたらどういう手順を踏むかを考えてみてください。

Re:無題

Posted: 2008年3月03日(月) 17:18
by taro
すいません、、、 よくわからないです。 本当に初心者なもので、、

Re:無題

Posted: 2008年3月03日(月) 17:38
by やそ
boxさんがおっしゃっているのは、
処理の流れを一つ一つ順を追って書き出してみると良い。
と言うことです。

*を使った四角形の表示。
まずは*で塗りつぶす四角形を考えてみてください。

それが出来ればあとちょっとの工夫で出来るはずです。

たて、横の数値の入力はとりあえずscanf()関数でも使って入力させてみては?
その数字が取得できればfor文でまわしてあげるだけですね。
int i, j, tate, yoko;

scanf("たて",&tate);
scanf("よこ",&yoko);

for(i=0;i<tate;i++){
  for(j=0;j<yoko;j++){
    printf("*");
  }
  printf("\n");
}
ご参考まで^^

Re:無題

Posted: 2008年3月03日(月) 17:38
by 管理人
実行例がちゃんとかけてなかったので書き直しておきました。
また、プログラムでかけなくとも、taroさんは手ではかけますよね。
手で書くときどうやって書くか詳しく書いてみればわかってくるでしょう。

Re:無題

Posted: 2008年3月03日(月) 17:49
by taro
ありがとうございます。*で塗りつぶす四角形は書けるのですが、、どうしても枠だけにするのができません。

Re:無題

Posted: 2008年3月03日(月) 17:54
by 管理人
塗りつぶしたくない時に、塗りつぶさないようにすればいいだけです。
taroさんは「いつ」塗りつぶしたいのですか?
それをよく考えてみて下さい。



答え
y=0
y=3の直線と
x=0
x=4の直線上にあるとき

Re:無題

Posted: 2008年3月03日(月) 18:01
by 管理人
ほぼ答えになってしまいますが、
例えば10x10のエリア上にy<=xかつy>=x-4の範囲で塗りつぶしたい時は以下のようにかけますよね。
#include <stdio.h>

int main(void)
{
	int i,j;
	int x_Length=10, y_Length=10;
	for(i=0;i<y_Length;i++){
		for(j=0;j<x_Length;j++){
			if(j>=i && j<=i+4)
				printf("*");
			else
				printf(" ");
		}
		printf("\n");
	}
	printf("\n");
    return 0;
}


実行結果

*****
 *****
  *****
   *****
    *****
     *****
      ****
       ***
        **
         *

Re:無題

Posted: 2008年3月03日(月) 18:03
by taro
やりたいことはわかっているのですがプログラムにすることができません、、、。すいません未熟者で、、

Re:無題

Posted: 2008年3月03日(月) 18:06
by 通りすがり
質問者はわからないわからないばかりじゃなく、質問しているのなら、
回答者のアドバイスや指示通りまずやってみたらどうですか?

いくらなんでも手で書く手順位分ると思いますよ。

Re:無題

Posted: 2008年3月03日(月) 18:10
by taro
ありがとうございました。 ようやく完成することができました。お手数掛けました。