• ベストアンサー

C言語の問題がわからないです。

C言語のプログラムで、列数を自分で決めて、 (例)3列         ●(この行を最後として)   □● ●□● 上記のプログラムを作りたいのですが、 上手くいきません。途中まで作ったのですが、なかなか思うようにいかないです。どうすれば上記のようになりますでしょうか? #include <stdio.h> void disp(int x, int y); main() { int i,n; printf("表示する列:"); scanf("%d",&n); disp(3,3); for(i=1;i<=n;i++){ if(i%2==0){ disp(n-i,4); disp(i,2); } else{ disp(n-i,4); disp(i,1); } disp(1,3); } } void disp(int x, int y) { int i; for(i=0;i<x;i++){ if(y==1){ printf("●"); } else if(y==2){ printf("□"); } else if(y==3){ printf("\n"); } else{ printf("\0"); } } }

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

  • ベストアンサー
  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.2

なるべく原形をとどめたい気持ちはあったんですが 原型なくなってしまったって話があるかもしれません (きれいなコードではないのであくまで参考程度に) >(下から順番に表示できればと思っただけですので。) ループの順番変えれば変わるんじゃないかなと・・・(確認してません) #include <stdio.h> void disp(int x, int y); main() { int i,n; printf("表示する列:"); scanf("%d",&n); for(i=1;i<=n;i++){ disp(i, n); } } void disp(int x, int y) { int i; for(i=1;i<=y;i++){ if (i >= x) { if((i % 2)==0){ printf("□"); } else { printf("●"); } } else printf(" "); } printf("\n"); }

rarand
質問者

お礼

ありがとうございます! Forを逆順にいじったら目的の形になりました。 とても参考になります。

その他の回答 (3)

回答No.4

面白そうだったので、なるべく短いプログラムになるようにしてみました。 こういう組み方もあるんだと参考にしてみて下さい。 #include <stdio.h> main() {   int x, y, n;   char cImg[2][3][3] =   {     { " ", "●", "□" }, //{ cImg[0][0], cImg[0][1], cImg[0][2] }     { " ", "□", "●" }  //{ cImg[1][0], cImg[1][1], cImg[1][2] }   };   printf( "数値を入力して下さい。" );   scanf( "%d", &n );   for( y = 1 ; y <= n ; y++ ){     for( x = 1 ; x <= n ; x++ ){       //左側、(x > (n - y))……真の時()内は1、偽の時は0です       //右側、(x % 2 + 1)………xが偶数の時は1、奇数の時は2です       printf( "%s", cImg[n % 2][(x > (n - y)) * (x % 2 + 1)] );     }     printf( "\n" );   } } 見やすいように半角スペース2個を全角スペース1個に置き換えてます。 使う時には全角スペースを半角スペース2個に置換して下さい。

rarand
質問者

お礼

ありがとうございます! わからない表現もありますが参考にしてみます。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

>プログラムを●と□と改行と空白の4つに分けて構成しようとしていて、 >4は空白を表示できたらと作ったものです。 これは、 >4を与えたときにはどういう結果がほしいですか? に対する答えになっていないです。 どういう結果がほしいか、図示できますか? また、5を与えたときにはどんな結果がほしいか、図示できますか?

rarand
質問者

補足

すみません!意味をはき違えていました。 4を与えた場合は         ●    □●   ●□● □●□● です。5列の場合は        ●      □●    ●□●   □●□● ●□●□● です。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>(例)3列 >     >   ●(この行を最後として) >  □● >●□● この行を最後として、の意味がわかりません。教えてください。 また、他の入力、例えば4を与えたときにはどういう結果がほしいですか?

rarand
質問者

補足

申し訳ございません。(この行を最後として)は気にしなくていいです。(下から順番に表示できればと思っただけですので。) プログラムを●と□と改行と空白の4つに分けて構成しようとしていて、4は空白を表示できたらと作ったものです。

関連するQ&A