- ベストアンサー
C言語です。
「下のように、読み込んだ整数の段数を持つピラミッドを表示するプログラムを作成せよ」 例) ピラミッドを作りましょう。 何段ですか:3 * (←本当は左に半角2個分の空白) *** (←本当は左に半角1個分の空白) ***** いろいろ試行錯誤してプログラムを作ってみたのですが、うまく表示されません。 分かる方、教えて頂けませんか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こっちの方が、お望みに近いかもしれません。 #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; }
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6289)
>void draw(int n) とはどういったものですか? 引数 n で与えた段数分だけ、ピラミッドを描画する関数です。
お礼
ありがとうございます。 参考になりました(^^)
- kmee
- ベストアンサー率55% (1857/3366)
> うまく表示されません。 何がどう「うまくいかない」のかを分析することが、プログラミングのコツです。 自分で考えるにしても、人に聞くにしても、正確に現状を把握しないとできません。 あなたが作ったプログラムをここに貼り付けて、間違い箇所を指摘てもらうのもよいでしょう。 考え方の一例です。 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)について、以下を実行する」とか「決まった数だけ繰り返す」とかは、どうすればいいか、わかりますね?
お礼
ありがとうございます。 参考になりました。
- asuncion
- ベストアンサー率33% (2127/6289)
#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)
テストできる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(" "); } } }
お礼
ありがとうございます。 参考になります。
補足
回答して頂いて申し訳ないのですが、私は初心者なものでまだ int main(void) しか分かりません。 void draw(int n) とはどういったものですか?