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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
pimpernel

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

#1

投稿記事 by pimpernel » 1年前

初めまして。プログラミング初心者なのでこの文章にも至らない点が多々あるかもしれませんがアドバイスお願いします。

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

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

アバター
usao
記事: 1887
登録日時: 11年前

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

#2

投稿記事 by usao » 1年前

こういう話でしょう.

コード:

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] );	}  //配列添え字でどうの

box
記事: 2002
登録日時: 13年前

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

#3

投稿記事 by box » 1年前

こんなことがしたいんかな?

コード:

#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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。


返信

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