右上が直角の三角形

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
まるくま
記事: 39
登録日時: 7年前
住所: 群馬県

右上が直角の三角形

#1

投稿記事 by まるくま » 7年前

右上が直角の直角三角形をつくりたいのですが、

コード:

#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を引いた値を表示すればいいということでしょうか?
よくわかりません(汗

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

アバター
ぱにしん
記事: 58
登録日時: 8年前
住所: 滋賀

Re: 右上が直角の三角形

#2

投稿記事 by ぱにしん » 7年前

>読み込んだ数値を変更するのはよくない

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

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

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


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

初級者
記事: 200
登録日時: 9年前

Re: 右上が直角の三角形

#3

投稿記事 by 初級者 » 7年前

ちょっとした例です。

コード:

#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;
}

まるくま
記事: 39
登録日時: 7年前
住所: 群馬県

Re: 右上が直角の三角形

#4

投稿記事 by まるくま » 7年前

初級者さん12行目の意味が分からないので

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

初級者
記事: 200
登録日時: 9年前

Re: 右上が直角の三角形

#5

投稿記事 by 初級者 » 7年前

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

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

初級者
記事: 200
登録日時: 9年前

Re: 右上が直角の三角形

#6

投稿記事 by 初級者 » 7年前

失礼しました。
先ほどの回答で「このトピックの先頭」と
書いたのは、誤りです。
「この前のトピック」(つまり、左上が直角になる三角形の書き方)が
正しいです。

ホヅミ
記事: 110
登録日時: 9年前

Re: 右上が直角の三角形

#7

投稿記事 by ホヅミ » 7年前

参考までに
たぶんこれが一番想像しやすい方法かなと
難しいコードも書いてませんし

コード:

#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;
}

まるくま
記事: 39
登録日時: 7年前
住所: 群馬県

Re: 右上が直角の三角形

#8

投稿記事 by まるくま » 7年前

ばにしんさん、初級者さん、ホヅミさん、ありがとうございます。

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

コード:

#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);
}

閉鎖

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