- ベストアンサー
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"); } } }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
なるべく原形をとどめたい気持ちはあったんですが 原型なくなってしまったって話があるかもしれません (きれいなコードではないのであくまで参考程度に) >(下から順番に表示できればと思っただけですので。) ループの順番変えれば変わるんじゃないかなと・・・(確認してません) #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"); }
その他の回答 (3)
- kumonomoto
- ベストアンサー率41% (12/29)
面白そうだったので、なるべく短いプログラムになるようにしてみました。 こういう組み方もあるんだと参考にしてみて下さい。 #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個に置換して下さい。
お礼
ありがとうございます! わからない表現もありますが参考にしてみます。
- asuncion
- ベストアンサー率33% (2127/6289)
>プログラムを●と□と改行と空白の4つに分けて構成しようとしていて、 >4は空白を表示できたらと作ったものです。 これは、 >4を与えたときにはどういう結果がほしいですか? に対する答えになっていないです。 どういう結果がほしいか、図示できますか? また、5を与えたときにはどんな結果がほしいか、図示できますか?
補足
すみません!意味をはき違えていました。 4を与えた場合は ● □● ●□● □●□● です。5列の場合は ● □● ●□● □●□● ●□●□● です。
- asuncion
- ベストアンサー率33% (2127/6289)
>(例)3列 > > ●(この行を最後として) > □● >●□● この行を最後として、の意味がわかりません。教えてください。 また、他の入力、例えば4を与えたときにはどういう結果がほしいですか?
補足
申し訳ございません。(この行を最後として)は気にしなくていいです。(下から順番に表示できればと思っただけですので。) プログラムを●と□と改行と空白の4つに分けて構成しようとしていて、4は空白を表示できたらと作ったものです。
お礼
ありがとうございます! Forを逆順にいじったら目的の形になりました。 とても参考になります。