課題で*を使って三角形を描画するプログラムを作るんですが、ネットで見たかぎり、
#include<stdio.h>
int main()
{
int n, i, j, k, l;
printf("段数を入力してください:");
scanf("%d", &n);
for(i = 0; i < n; i ++) {
for(j = 0; j < n; j ++) {
for(k = 0; k < n*n-i*n-j-1; k ++)
printf(" ");
for(k = 0; k < i; k ++) {
for(l = 0; l < j*2+1; l ++)
printf("*");
for(; l < n*2; l ++)
printf(" ");
}
for(k = 0; k < j*2+1; k ++)
printf("*");
printf("\n");
}
}
return 0;
}
となっているのが、
段数を入力してください:2
*
***
* *
*** ***
という風に表示されるので、これを
段数を入力してください:2
*
***
という形に表示させられるよう変更すべき箇所を教えてください。
No.5ベストアンサー
- 回答日時:
*
***
を
*
*** と左詰として「回答」します。
>という形に表示させられるよう変更すべき箇所を教えてください。
他の回答者さんも言っているとおり、「新しく作った方が」・・。
《ポイント》
・変数名を判り易くする。
・2段のとき、3段のときの状況を紙に描く。
・その違いから、各行の必要空白・*数を求める「式」◆を考える。
《ヒント》
・各行の*数は奇数です。
★全部ソースに書いてはマズイかな。+++++ の部分を考えて・・。
#include <stdio.h>
void main()
{
int iDansu, iY, iX, iSpaceSu, iPekeSu;
printf( "段数を入力してください:" );
scanf( "%d", &iDansu );
for( iY = 0; iY < iDansu; iY++ ){ // 上段から下段へ
iSpaceSu = ++++ - ++++ - ++++; // 左空白数◆
iPekeSu = ++++ * ++++ + ++++; // *数◆
for( iX = 0; iX < iSpaceSu; iX++ ) printf(" ");
for( iX = 0; iX < iPekeSu; iX++ ) printf("*");
printf( "\n" );
}
}
注:インデントに全角空白を用いています。
No.4
- 回答日時:
>質問内容を少し変更します。
>上記のプログラムがどのように描画処理をしているのかを教えてください。
いい質問です。
とはいえ、元のプログラムはなかなか複雑ですので元々の課題について解説していきます。
これがわかれば、質問に書いてある(やや複雑な)プログラムが何をしているかは理解できるようになるでしょう。複雑ですけれど考え方は同じですから。
まず小手調べその1です。次のプログラムは何をしているか理解できますか?
int kosuu = 10;
int i;
for (i = 0; i < kosuu; i++) {
printf("*");
}
printf("\n");
作りたいプログラムの仕様がわからないのですけれど、入力された段数が5だとするとこんな感じの三角形を描けばいいのですか?
*
***
*****
*******
*********
これを書く前に小手調べその2として、直角三角形を描いてみましょう。段数が5の時はこんな感じです。
*
***
*****
*******
*********
最初の行には"*"が何個ありますか?次の行は何個ですか?その次は?
n番目の行には"*"が何個ありますか?nを使った式で表してください。
小手調べその1のプログラムを参考にして、n行目の"*"の並びを描くプログラムを書けますか?(←プログラムA)
ところで、これは段数が5の時の直角三角形でしたが、何行ありますか?m段の三角形は何行ですか?mを使った式で表してください。
ここでちょっとだけ難しくなります。プログラムで、繰り返しはfor構文を使って記述します。
仮に世の中に「n段目の"*"の並びを描くプログラム」があったとします。次のプログラムの意味していることはわかりますか?
for (n = 1; n <= m; n++) {
(ここに「n段目の"*"の並びを描くプログラム」が入る)
}
ここまで書いたことと上で書いた(プログラムA)をヒントにして、小手調べその2の直角三角形を描くプログラムを書けますか?
ここまで読んで「ああ、そうか」と思って最後まで自分でやれたらそれはそれでOKです。
ここまでの問いには答えられるけれど、「それでその先は?」ということであれば、先を解説します。
ここまでの問いもよくわからないようであれば、わからないところを教えてください。また、わからないなりに考えて自分の考えを答えてみてください。
No.3
- 回答日時:
★アドバイス
・どんな三角形でしょうか?
直角三角形、二等辺三角形。
内部は塗りつぶすのですか?
良く分かりませんので簡単な直角三角形の表示を載せておきます。
サンプル:
int i, len = 5; ←scanfなどで入力しておく
for ( len = 1 ; len <= n ; len++ ){
for ( i = 0 ; i < len ; i++ ){
printf( "*" );
}
printf( "\n" );
}
実行結果:
*
**
***
****
*****
もし次の三角形なら工夫が必要です。
*
***
*****
仕組みは『*』文字を表示する前に空白文字を2個、1個、0個と出せばよい。
これを参考にお考え下さい。
No.2
- 回答日時:
変更するのは難しいですね
新しく作った方が楽です
使えそうなところは
for(k = 0; k < j*2+1; k ++)
printf("*");
printf("\n");
ぐらいです。
No.1
- 回答日時:
このプログラムはどこから持ってきたのでしょう?質問内容からするとご自分で書かれたわけではないですよね?
「ネットで見た限り」と書いてあるから、検索して探したら見つかったとかでしょうか。
作りたいプログラムの仕様が正確にわからないのですけれど、元のプログラムは作りたいプログラムと比較するとなかなかに複雑な気がします。
考え方の参考にするにはいいですが、これをちょっと直して目的のプログラムにするというよりは考え方を生かして自分で書いた方が早いと思いました。
この課題を満たすプログラムくらいは自分で考えて書けないとだめだと思いますよ。
この回答への補足
質問内容を少し変更します。
上記のプログラムがどのように描画処理をしているのかを教えてください。(数値入力によってどの位置に何が入るのか等・・・)
理解如何によっては自分でも組めそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
PICマイコンのコピー(クローン...
-
Excelで4096点以上のFFTの方法
-
ホームページのプログラムの見...
-
main関数を先頭に置くデメリット
-
モジュール、アプリケーション...
-
TMBMSRV.exeによるCPU使用率上昇
-
エクセルとワードをデスクトッ...
-
VBAでユーザーフォームが自動的...
-
未使用の変数を一括検索する方法
-
XnViewにwebpを「いつも開く」...
-
VBAにてメール作成した際、一部...
-
COBOLでBLOCK CONTAINS句につい...
-
ラベルのアドレスを知る方法は...
-
Javaで2の0乗から-8乗まで表示...
-
AutoCADを用いて板金展開図を自...
-
「Outlookが他のプログラムによ...
-
ドロップダウンリストの文字を...
-
powered byの表記について
-
argc < 2 → argcは2以上であ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
PICマイコンのコピー(クローン...
-
VBAにてメール作成した際、一部...
-
自動クエリとはどういうもので...
-
読み込み中にアクセス違反が発...
-
「Outlookが他のプログラムによ...
-
VBAでユーザーフォームが自動的...
-
未使用の変数を一括検索する方法
-
ゲーミングPCに入っているAlris...
-
モジュール、アプリケーション...
-
XnViewにwebpを「いつも開く」...
-
Excelに埋め込んだVBAのプログ...
-
binファイルってiphone専用です...
-
excelのexe化について
-
ドロップダウンリストの文字を...
-
画像を読み込むのと取り込むの...
-
Google カレンダーの商用利用
-
UWSCで指定のフォルダを開きたい。
-
exeファイルしかないプログラム...
おすすめ情報