• ベストアンサー

C言語です。

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

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答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% (2126/6288)
回答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% (2126/6288)
回答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/6970)
回答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

  • c言語 プログラム ピラミッド

    プログラミングについて教えてください プログラムは ピラミッドの図形をユーザーが指定した数字で正三角形の ピラミッドの段数を指定できるプログラムです 例えば「5」と打てば ********* ■ ********■■■ ******■■■■■ ****■■■■■■■ **■■■■■■■■■ このような感じに表示されます *の部分は空白です #include<stdio.h> int main (void) { int num,i,j,h; printf("ピラミッドの高さを入力してください : "); scanf("%d" ,&num); for(i=1; i<=num; i++){ for(j=num; j>=i+1; j--){ printf(" ",j); } for(h=1; h<=j; h++){ printf("■"); } printf("\n"); } return 0; } ここまで出来ています、詰まっているのでご教授ください よろしくお願いします

  • C言語についてなんですが

    プログラムの作成で分からないところがあります。 「二つの整数値を読み込み、小さいほうの数以上で大きい数以下の 整数を全て加えた値を表示するプログラムをdo文を使って 作成せよ。」 下の図のようにしたいです。 2つの整数を入力せよ。 整数A:37 整数B:28 28以上37以下の全整数の和は325です。 よろしくお願いします。

  • C言語をお願いします

    関数の使い方が分かりません、お知恵を貸してください 問題 一桁の整数を入力。 その数を起点として5の段までの九九の表を表示するプログラムを作成。 条件が4つ。 ・下記の実行結果のように表示しなさい。 ・タイトル行(1・・・5)の表示は、main 関数で行う。 ・入力した数を起点とした5の段までの九九の表を表示する関数 func99 を作る。 ・そのうち乗算部分は、func_mul 関数を作る。 5(入力) 実行例 1 2 3 4 5 //ここはプリントで出力 5 10 15 20 25 6 12 18 24 30 7 14 21 28 35 8 16 24 32 40 9 18 27 36 45 10 20 30 40 50 数字部分は%5dでお願いします

  • 【数学・物理】10段ピラミッドのMAX負荷を教えて

    【数学・物理】10段ピラミッドのMAX負荷を教えてください。 10段ピラミッド問題について質問です。 10段ピラミッドで1番負荷が掛かるのは1段目の真ん中の5、6の人らしいです。 で、5、6の人に掛かる負荷は大体上の段数の上9段なので9人分の体重が掛かるとの説明でした。 本当ですか? で、10段ピラミッド問題の解決方法は真ん中の中央の土台部分は教師が入ると良いのではないでしょうか。 どう思いますか? 1 12 123 1234 12345 123456 1234567 12345678 123456789 1234567890 10段ピラミッドのMAX負荷を教えてください。

  • C言語の勉強しています。教えてください

    私は現在大学生でC言語が面白そうなので独学しているのですが、分からない点があり、参考書に解答も付属していないのでどなたか教えていただけると非常に助かります。 (参考書名:新版 明解C言語 入門編 著者:柴田望洋) p65の演習4-3 問題:2つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ。 (例)このように表示させたい 2つの整数を入力して下さい。 整数1:37(←例です。ここの数はscanfを利用して手動で打ち込みます) 整数2:28 28以上37以下の全整数の和は325です。 これまでに学習した事を利用して解きたいのでまず、自分でプログラムを書いてみますので訂正していただければ非常に助かります。 どうかお願いします

  • ★C言語の問題です★

    C言語のプログラムの問題なんですが、どなたか以下の問題の1問でも解ける方がいればご回答おねがいします! または、アドバイスだけでもいいのでよろしくお願いします。 【問題】 1 西暦1868年から2007年までの年号を入力して和暦に変更して出力するプログ  ラムを作成するプログラム。  例 入力 1868  出力 明治元年       2007     平成19年 2 整数配列が-32768から32767の範囲の数しか扱えないとしたとき、10桁の整数同士  の足し算を行うプログラム。 3 3桁の整数の値を入力していき、-9999が入力されたところで、それまでに入力  された数の個数と合計を整数で、平均を浮動小数点数で出力するプログラム。 4 3つの文字列”Happy”と“New”と“Year”をつないで1つの文字列として出力する  プログラム。 5 学籍番号、氏名、出席からなる10人分のデータがある。出席の悪いものから並び替  えて表示するプログラム。  例  CA180002 山田太郎 70  CA170001 山田次郎 60  データは、適当なものを使います。

  • C言語の問題で困っています。

    C言語の問題で困っています。 誰か教えてください。 下の問題ですが、intがiだけでプログラムするにはどうしたら良いでしょうか? (a)から(d)に入るプログラムをすいませんが教えてください。 お願いします。 【問題】 1以上10以下の整数を昇順に区切って表示するプログラムです。 実行例 1 2 3 4 5 #include <stdio.h> int main (void) { int i; (A) while ((b)){ (c); (d); } printf("¥n"); return(0); }

  • 不具合が発生(API・C言語)

    WINDOWS APIをc言語でプログラムしているものです。 こちらのプログラムを書いたのですが、 http://onegaisimasune.web.fc2.com/main8.txt 左クリックで線を引くのですが、 線を引いていると普通の文字は消えないのですが、 ある操作をした整数を表示させるようにすると、 その整数が変わってしまいます。 どうしたら直るのでしょうか。 宜しくお願い致します。

  • C言語のプログラムについて

    大学のテストの確認をしているのですが、この問題の回答がどうしても分かりません。どなたか教えてください。 9桁以内の整数を入力し、int型の変数に格納し表示するプログラムを作成しなさい。 ただし、先頭は、数字か「+」か「-」とし、それ以外はすべて数字とする。この条件に合わないものおよび10桁以上のものは、「入力エラー」として表示後、再入力を行うこと。 例えば「-123456」や「45678989」は、整数としてint型の変数に格納し、「abcd」や「123-234」は、「入力エラー 」を表示し、再入力を行う。 ---------------------------------------------------------------- また、自動判定の都合上、表示は以下の表示例に準拠すること。 【 23-234 *12345 -123456 を入力した例】 入力エラー 入力エラー 整数は、-123456 です。 お願いします

  • C言語について。初心者です。

    参考書の問題で、「整数値以下である正の偶数を照準に表示するプログラムを作成せよ」 例)整数を入力してください:19   2 4 6 8 10 12 14 16 18 とあり、自分で以下のプログラムを作ってみたのですが「222222・・・・・・・・・・・・・・・・・・」となるだけです。どう変えればちゃんと表示されるようになりますか?ちなみにwhile文を使うのが条件です。 #include<stdio.h> int main(void) {       int na; int nb=0; printf("整数を入力してください。:"); scanf("%d",&na); while(nb<na) printf("%d",nb+2); putchar('\n'); return 0; }

専門家に質問してみよう