• ベストアンサー

C言語です。

「下のように、読み込んだ整数の段数を持つピラミッドを表示するプログラムを作成せよ」 例) ピラミッドを作りましょう。 何段ですか:3 *         (←本当は左に半角2個分の空白) ***        (←本当は左に半角1個分の空白) ***** いろいろ試行錯誤してプログラムを作ってみたのですが、うまく表示されません。 分かる方、教えて頂けませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

こっちの方が、お望みに近いかもしれません。 #include <stdio.h> void draw(int n) { int x, y, c; for (c = n - 1, y = c; y >= 0; y--) { for (x = -c; y <= -x + c; x++) { putchar(y <= x + c ? '*' : ' '); } putchar('\n'); } } int main(void) { int n; printf("ピラミッドを作りましょう。\n"); do { printf("何段ですか:"), scanf("%d", &n); } while (n <= 0); draw(n); return 0; }

hitosashi
質問者

補足

回答して頂いて申し訳ないのですが、私は初心者なものでまだ int main(void) しか分かりません。 void draw(int n) とはどういったものですか?

その他の回答 (4)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.5

>void draw(int n) とはどういったものですか? 引数 n で与えた段数分だけ、ピラミッドを描画する関数です。

hitosashi
質問者

お礼

ありがとうございます。 参考になりました(^^)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

> うまく表示されません。 何がどう「うまくいかない」のかを分析することが、プログラミングのコツです。 自分で考えるにしても、人に聞くにしても、正確に現状を把握しないとできません。 あなたが作ったプログラムをここに貼り付けて、間違い箇所を指摘てもらうのもよいでしょう。 考え方の一例です。 1段のとき 空白 0, * 1 2段のとき 空白 1, * 1 空白 0←*が左に1増えた分空白を1減らす, * 3←左右に*が加わるので、上の段+2 3段のとき 空白 2, * 1 空白 1, * 3 空白 0, * 5 ... と、 n段のとき,i段目(1≦i≦n)の空白と*は 空白 n-1, n-2, ... , n - i, ... , 2, 1, 0 * 1, 3, 5, ...、 1 + 2 * (i-1), .... , 1+2*(n - 1) となっているのがわかります。(数学で言う等差数列です) ということは i(1≦i≦n)について、以下を実行する  空白を i番目に必要な数出力  *を i番目に必要な数出力  改行 /* ← 横にずらーっと並んでしまうのは、これを忘れています */ というのが、プログラムの流れになります。 あとは、それぞれをC言語で記述するだけです。 「i(1≦i≦n)について、以下を実行する」とか「決まった数だけ繰り返す」とかは、どうすればいいか、わかりますね?

hitosashi
質問者

お礼

ありがとうございます。 参考になりました。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

#include <stdio.h> void draw(int n) { int x, y, c; for (c = n - 1, y = c; y >= 0; y--) { for (x = -c; x <= c; x++) { putchar((y <= x + c && y <= -x + c) ? '*' : ' '); } putchar('\n'); } } int main(void) { int n; printf("ピラミッドを作りましょう。\n"); do { printf("何段ですか:"), scanf("%d", &n); } while (n <= 0); draw(n); return 0; }

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

テストできるJavaで作りました。 import java.util.*; import java.io.*; public class test11 { public static void main(String args[]) { int n = (args.length > 0)? Integer.parseInt(args[0]):10; for(int i=0;i<n;i++) { for(int j=0;j<n-i-1;j++) { System.out.print(" "); } for(int j=0;j<i*2+1;j++) { System.out.print("*"); } System.out.println(" "); } } }

hitosashi
質問者

お礼

ありがとうございます。 参考になります。

関連するQ&A

専門家に質問してみよう