ページ 11

ピラミッドアート

Posted: 2011年6月28日(火) 15:28
by kirara
visual studio2008でこのプログラムを実行してみたのですが。どうしてもきれいなピラミッドになりません。
ご指摘お願いします。

#include <stdio.h>
int main (void)
{
int a,j,i,o;
printf("段数を入れるんだお:");
scanf("%d",&a);
printf("\n");
printf("     /⌒  ⌒\\n");
printf("   /( ●)  (●)\\n");
printf("  /::::⌒(__人__)⌒::: \ ピラミッドを作るお!\n");
printf("  |     |r┬-|     |\n");
printf("  \      `ー'´     /\n");
printf("\n\n");

j=1;
while (j<=a){
i=0;
while(i< a-1) {
printf(" ");
i++;
}
o=0;
while(o<2*j-1){
printf("*");
o++;
}
printf("\n");
j++;
}

return(0);
}

Re: ピラミッドアート

Posted: 2011年6月28日(火) 16:40
by non

コード:

	j=1;
	while (j<=a){
		i=0;
		while(i< a-1) {
			printf(" ");
			i++;
		}
		o=0;
		while(o<2*j-1){
			printf("*");
			o++;
		}
		printf("\n");
		j++;
	}
上の部分がピラミッドを作っている部分ですが,スペースの数が常に一定になっていることに
問題があります。
jが行数(上からの段数)を示しているのですから,ループ回数にjが影響することが必要です。
すなわちこの部分です。
>while(i< a-1) {

不思議に私が思うのは,このプログラムを自分で作ったのなら,こんな間違いはしないだろうという
ことです。どうみても,他人のプログラムを入力して,間違って入力したとしか思えない。

Re: ピラミッドアート

Posted: 2011年6月28日(火) 23:09
by box
kirara さんが書きました:どうしてもきれいなピラミッドになりません。
きれいなピラミッド、というのはどういう出力結果を指すのでしょうか。
それを正しく説明できれば、プログラムの正しいロジックが見えるかもしれません。

Re: ピラミッドアート

Posted: 2011年6月28日(火) 23:35
by bitter_fox
http://hassawey.blog15.fc2.com/blog-entry-402.html

このサイトからの引用のようですね。
ただ、既にこのサイトの方で誤りが生じてしまっているようです。

Re: ピラミッドアート

Posted: 2011年6月30日(木) 22:15
by 初級者
こんなコードがころがっていました。

コード:

#include <stdio.h>

void draw(int x, int y, int n)
{
    putchar((y <= x + n - 1 && y >= -x - n + 1) ? '*' : ' ');
}

void pyramid(void)
{
    int n, x, y;

    printf("段数:"); scanf("%d", &n);
    for (x = -n + 1; x <= 0; x++) {
        for (y = -n + 1; y <= n - 1; y++)
            draw(x, y, n);
        putchar('\n');
    }
}

int main(void)
{
    pyramid();
    return 0;
}