ページ 11

C言語でピラミッドをつくる課題のアドバイスをいただきたいです

Posted: 2022年6月30日(木) 11:49
by pimpernel
初めまして。プログラミング初心者なのでこの文章にも至らない点が多々あるかもしれませんがアドバイスお願いします。

模様を選択して、1 段から 20 段の範囲で入力された段数のピラミッドを表示するプログラム
を作成するという課題なのですが、1を入力したときは〇、2のときは△、3のときは□を使ってピラミッドを作成したいです。ピラミッドを書く模様(〇や△)は配列を用いて、指定された模様の番号を添字として用いて作成するようです。先生からはfor文を使うと良いというアドバイスをいただきました。
そのあとピラミッドの段数を入力して、先ほどの模様でピラミッドを作ります。
最後の入力した数の段数でピラミッドをつくるのは何とか少しわかりそうなのですが、最初の模様を選択するところが全く分かりません。アドバイスをお願いいたします。

<stdio.h>でmain関数を使っています。

Re: C言語でピラミッドをつくる課題のアドバイスをいただきたいです

Posted: 2022年6月30日(木) 13:18
by usao
こういう話でしょう.

コード:

const char Circle[] = "○";
const char Triangle[] = "△";
const char Square[] = "□";
const char * const Shapes[3] = { Circle, Triangle, Square };  //配列

for( int i=0; i<3; ++i )
{	printf( "%s\n", Shapes[i] );	}  //配列添え字でどうの

Re: C言語でピラミッドをつくる課題のアドバイスをいただきたいです

Posted: 2022年6月30日(木) 14:48
by box
こんなことがしたいんかな?

コード:

#include <stdio.h>

void getShapeAndHeight(int *s, int *h)
{
    do {
        printf("形は?(1:○, 2:△, 3:□)"), scanf("%d", s);
    } while (!(1 <= *s && *s <= 3));
    do {
        printf("段数は?(1から20)"), scanf("%d", h);
    } while (!(1 <= *h && *h <= 20));
}

void drawPyramid(int n, int h)
{
    char *s[] = { "", "○", "△", "□" };
    int x, y;

    for (y = 0; y > -h; y--) {
        for (x = -h + 1; x <= h - 1; x++) {
            printf("%s", (y <= x && y <= -x) ? s[n] : "  ");
        }
        putchar('\n');
    }
}

int main(void)
{
    int shape, height;

    getShapeAndHeight(&shape, &height);
    drawPyramid(shape, height);
    return 0;
}

Re: C言語でピラミッドをつくる課題のアドバイスをいただきたいです

Posted: 2022年7月03日(日) 09:50
by pimpernel
usaoさん、boxさんありがとうございます。