C言語関係掲示板

過去ログ

No.477.三角形を表示するプログラム

[戻る] [ホームページ]
No.3441

教えてもらえませんか?
投稿者---ヤス(2002/11/12 21:42:39)


このプログラムと同じ実行結果のプログラムを教えてもらえませんか。
#include <stdio.h>
main()
{
int i,j,k,l,m,n,o,p,q,r,s;
for(j=1;;j++)
{
scanf("%d",&n);
if(n>0)
{
for(i=1;i<=n-1;i++)
{
for(k=1;k<=n-i;k++)
{
printf(" ");
}
if(i==1)
{
printf("*\n");
}
else if(i>1)
{
printf("*");
for(l=1;l<=2*i-3;l++)
{
printf(" ");
}
printf("*\n");
}
}
for(m=1;m<=n-1;m++)
{
printf("* ");
}
printf("*\n");
}
else if(n<0)
{
for(o=1;o<-n;o++)
{
printf("* ");
}
printf("*\n");
for(p=1;p<=-n-2;p++)
{
for(q=1;q<=p;q++)
{
printf(" ");
}
printf("*");
for(r=1;r<=-2*n-2*p-3;r++)
{
printf(" ");
}
printf("*\n");
}
for(s=1;s<=-n-1;s++)
{
printf(" ");
}
printf("*\n");
}
else
{
break;
}
}
}


No.3442

Re:教えてもらえませんか?
投稿者---かずま(2002/11/12 22:34:03)


> このプログラムと同じ実行結果のプログラムを教えてもらえませんか。
#include <stdio.h>

int main(void)
{
    int n, i;

    while (scanf("%d", &n) == 1 && n != 0)
        if (n > 0) {
            if (n > 1)
                printf("%*c\n", n, '*');
            for (i = 1; i < n-1; i++)
                printf("%*c%*c\n", n-i, '*', i*2, '*');
            for (i = 1; i < n; i++)
                printf("* ");
            puts("*");
        } else {
            for (i = 1; i < -n; i++)
                printf("* ");
            puts("*");
            for (i = -n-2; i > 0; i--)
                printf("%*c%*c\n", -n-i, '*', i*2, '*');
            if (n < -1)
                printf("%*c\n", -n, '*');
        }
    return 0;
}


No.3447

Re:教えてもらえませんか?
投稿者---aki(2002/11/13 01:56:25)


#include <stdio.h>
#include <stdlib.h>

#define TEN " * * * * * * * * * *"

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

    while (scanf("%d", &n) == 1 && (nline = abs(n)) != 0)
        for (i = (n > 0) ? 0 : nline - 1; 0 <= i && i < nline; n > 0 ? i++ : i--)
            printf("%*s%*.*s\n", nline - i, "*", 
                i * 2, (0 < i && i < nline - 1) ? 2 : i * 2, TEN TEN TEN TEN);
    return 0;
}


No.3453

Re:教えてもらえませんか?
投稿者---かずま(2002/11/13 16:34:57)


> #define TEN " * * * * * * * * * *"

面白いプログラムですね。

n が 42以上でもよいプログラムにしてみました。
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, i, k, d;

    while (scanf("%d", &n) == 1 && n)
        for (n > 0 ? (i = 0, d = 1) : (n = -n, i = n*2-2, d = -1),
                k = n; (unsigned)i < n*2-1u; i += d)
            printf("%*c%*.*s%c", max(n-i, 1), '*',
                (i<n-1)*i*2, (i<n-1)*i*2, "*", " \n"[i<n-1 || !--k]);
    return 0;
}