課題で*を使って三角形を描画するプログラムを作るんですが、ネットで見たかぎり、
#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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba 実数および実数タイプの変...
-
あるプログラムのコマンドライ...
-
パックマンプログラム
-
VBAにてメール作成した際、一部...
-
Excelに埋め込んだVBAのプログ...
-
VBAでユーザーフォームが自動的...
-
プログラムの例外処理について
-
Excelで4096点以上のFFTの方法
-
読み込み中にアクセス違反が発...
-
UWSCで指定のフォルダを開きたい。
-
VBでのPublic変数につ...
-
VBAが止まります。
-
特定のwebサイトのタイトルや記...
-
RSAのCプログラム
-
ドロップダウンリストの文字を...
-
「Outlookが他のプログラムによ...
-
プログラムのループの周期を設...
-
寿命
-
VBで環境変数をSETする方法
-
3つの整数を読み込み昇順に並べ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
「Outlookが他のプログラムによ...
-
Excelに埋め込んだVBAのプログ...
-
VBAにてメール作成した際、一部...
-
Notepad++の関数リスト表示でC...
-
自動クエリとはどういうもので...
-
読み込み中にアクセス違反が発...
-
PICマイコンのコピー(クローン...
-
XnViewにwebpを「いつも開く」...
-
未使用の変数を一括検索する方法
-
VBAでユーザーフォームが自動的...
-
UWSCで指定のフォルダを開きたい。
-
パックマンプログラム
-
このプログラミング誰か教えて...
-
モジュール、アプリケーション...
-
Vba UserFormを前面に出す方法...
-
特定のwebサイトのタイトルや記...
-
ドロップダウンリストの文字を...
-
テキストボックスのエンターキ...
おすすめ情報