ページ 11

右上が直角の三角形

Posted: 2013年3月22日(金) 20:32
by まるくま
右上が直角の直角三角形をつくりたいのですが、

コード:

#include <stdio.h>

int main(void)
{
	int i=0;
	int j=0;
    int In;

	printf("何段ですか:");
	scanf("%d", &In);
	
	for(i=1; i<=In; i++){
		for(j=1; j<=In-i; j++){
			putchar(' ');
		}
		for(j=1; j<=In-i; j++){
			putchar('*');
		}
		putchar('\n');
	}
	

	return(0);
}
とプログラムを書いてみたところ三角形にはなるんですが直角にならないです(汗
  ****
  ***
 **
*

こんな感じです。

for文の部分が間違ってるのは明らかですが
* を表示する部分がおかしいと思いますが、Inからiを引いた値を表示すればいいということでしょうか?
よくわかりません(汗

あと、前回の質問で読み込んだ数値を変更するのはよくないとご指摘がありましたが
これはやむを得ないんじゃないでしょうか? 教えてください(`・ω・´)

Re: 右上が直角の三角形

Posted: 2013年3月22日(金) 20:52
by ぱにしん
>読み込んだ数値を変更するのはよくない

前回の質問を見てないのでどういう状況下なのか分かりかねますが、とりあえず変更用の変数を用意すれば事足りるのでは?
この場合は使わないとは思いますが。。。

>* を表示する部分がおかしいと思いますが
出力を見た限りでは一段ごとに半角スペースを増やさなければいけないところを逆に減らしてしまっているので、増やせば良いんじゃないでしょうか。

質問文には書いてありませんが、入力した段数と出力される段数がずれてしまっていますよ。


追記
よく見たらコレ、別に読み込んだ数値に変更は加えられてませんよね

Re: 右上が直角の三角形

Posted: 2013年3月22日(金) 21:32
by 初級者
ちょっとした例です。

コード:

#include <stdio.h>
 
int main(void)
{
    int x, y, n;
 
    printf("何段ですか:");
    scanf("%d", &n);
    
    for (y = n - 1; y >= 0; y--) {
        for (x = 0; x < n; x++) {
            putchar((y >= -x + n - 1) ? '*' : ' ');
        }
        putchar('\n');
    }
    return 0;
}

Re: 右上が直角の三角形

Posted: 2013年3月22日(金) 21:36
by まるくま
初級者さん12行目の意味が分からないので

簡単に説明お願いします(`・ω・´)

Re: 右上が直角の三角形

Posted: 2013年3月22日(金) 21:46
by 初級者
n = 10の場合を例にとって説明します。
私のコードは、xy平面上の第1象限を意識したものになっています。
第1象限上で、
y = 9
x = 9
y = -x + 9
の3本の直線のグラフで囲んだ領域に'*'を、それ以外の領域には空白を、
それぞれ出力しています。

最後のy = -x + 9をy = xに変えれば、このトピックの最初の質問への
回答となります。

Re: 右上が直角の三角形

Posted: 2013年3月22日(金) 21:59
by 初級者
失礼しました。
先ほどの回答で「このトピックの先頭」と
書いたのは、誤りです。
「この前のトピック」(つまり、左上が直角になる三角形の書き方)が
正しいです。

Re: 右上が直角の三角形

Posted: 2013年3月23日(土) 08:26
by ホヅミ
参考までに
たぶんこれが一番想像しやすい方法かなと
難しいコードも書いてませんし

コード:

#include <stdio.h>
 
int main(void)
{
    int i, j, In;
 
	i=0;
	j=0;
    printf("何段ですか:");
    scanf("%d", &In);
    // 空白+'*'=5
	// 一番上は'*'が5個
	// 一番下は'*'が一個
    for(i=0;i<In;i++){
		// まずスペースを書く
		for(j=0;j<i;j++){
			printf(" ");
		}
		// スペースを書き終わったら'*'を書く
		for(j=0;j<In-i;j++){
			printf("*");
		}
		printf("\n");
	}
    return 0;
}

Re: 右上が直角の三角形

Posted: 2013年3月23日(土) 08:57
by まるくま
ばにしんさん、初級者さん、ホヅミさん、ありがとうございます。

初級者さんのは私にとってレベルが高いので
順次理解していこうと思います。(それとも今理解しなければならない(´・ω・`))

コード:

#include <stdio.h>

int main(void)
{
	 
	int i, j, n;

	printf("何段ですか:");
	scanf("%d", &n);

	for(i=0; i<n; i++){

		for(j=0; j<i; j++){
			putchar(' ');
		}
		for(j=1; j<=n-i; j++){
			putchar('*');
		}
		putchar('\n');
	}
	return (0);
}