- 締切済み
C言語について
#include_<stdio.h> void_gyouRtn(int_hen,int_ln,int_maxl); int_main(void){ __int___hen;__//_辺の長さ(文字数) __int___ln;___//_出力行番号(1,2,..,maxl) __int___maxl;_//_出力行数 __//_最初の入力 __printf("数字2~9を入力してください:"); __scanf("%d",_&hen); __//_規則外の入力への対応 __while(hen_<_2_||_hen_>_9){ ____printf("※入力エラー!!_2~9を入力してください:"); ____scanf("%d",_&hen); __} __//_計算と出力 __maxl_=_3*hen-2;_____________//_行数=3*辺の桁数-2 __for(ln=1;ln<=maxl;ln++)_{___//_行1から逐一実行 ____gyouRtn(hen,ln,maxl);_____//_行の一括処理出力 __} __//_終了 __return_0; } //_行ごとの出力半巾(桁)を与えます //_中心位置±半巾の位置に●を置く予定 int_maxkRtn(int_hen,int_ln,int_maxl){ __int___maxk;_//_半巾の文字数 __//_垂直辺を無視した巾 __if(ln<=maxl/2)_{__//_上半分のとき ____maxk_=_ln-1;____//_lnと共に増加、最初は0 __}_else_{__________//_下半分のとき ____maxk_=_maxl-ln;_//_lnと共に減少、最後は0 __} __//_垂直辺で切る __if(maxk>hen-1)_maxk_=_hen-1; __//_水平辺の半分を加える __maxk_+=_hen/2;____//_hen_が偶数ならmaxk*2==hen ____________________//_奇数なら_maxk*2_==_hen-1 __return_maxk; } //_行の準備と出力を制御、実行します void_gyouRtn(int_hen,int_ln,int_maxl){ __int_kt;___//_桁(文字)位置 __int_maxk;_//_行lnでの半巾、後に行の右端 __int_mink;_//_行での図形の左端位置 __int_cent;_//_縦の中心軸の位置 __maxk_=_maxkRtn(hen,ln,maxl);_//_この行での半巾 __if(hen==2*(hen/2))_{____//_辺が偶数桁 ____cent_=_maxl/2;________//_左半分の右端 ____mink_=_cent-maxk+1;___//_図形の左端 __}_else_{________________//_辺が奇数桁 ____cent_=_maxl/2+1;______//_左と右の間の1桁 ____mink_=_cent-maxk;_____//_図形の左端 __} __maxk_=_cent+maxk;_______//_図形の右端 __//_出力開始 __kt_=_1; __while(kt_<=_maxk){ ____if(1<ln_&&_ln<maxl)_{_//_上下辺以外 ______if(kt_!=_mink_&&_kt_!=_maxk){_//_図形位置以外 ________printf("□"); ______}else{________________________//_図形位置 ________printf("●"); ______} ____}_else_{______________//_上下辺 ______if(kt<mink)_{_________________//_図形位置以外 ________printf("□"); ______}_else_{______________________//_図形位置 ________printf("●"); ______} ____} ____kt++; __} __printf("\n"); } これは添付画像の八角形を表示するプログラムなのですが、これと同様のプログラムで添付画像の*形を表示するプログラムを教えてください。 (「同様」というのは、これ以上の"機能"を一切使わないという意味です。) mainの部分は上記のプログラムとほぼ同じなので大丈夫なのですが、下部の関数部分がわかりません。 関数部分で今考えているアルゴリズムは… (1)行ごとの出力桁数を与える(中心線±(n-1)/2) (2)1行目から中心行の前までは、左端・中心・右端に"●"を出力 (3)中心行には、n個だけ"●"を出力 (4)それ以降の行は、(2)と同じ …という感じです。 もちろん、(1)で出力桁数を与える時には、1行目~(n/2-1)行目までは左右1ずつ幅が減り、(n/2+1)行目~n行目までは左右1ずつ増えるようにします。 このアルゴリズムでプログラムを組みたいのですが、どうも難しくてできません。どうか教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- goosyu
- ベストアンサー率58% (36/62)
お礼
すごく解りやすいです。ありがとうございましたッ!! …で、プログラムを作ってみたは良いのですが、何分、C言語初心者の為、上手くいきませんでした…。 修正箇所をお教えいただけると嬉しいです。 よろしくお願いいたします。 http://okwave.jp/qa5241790.html