for文内の数値を幾度となく調整したり、for文の{}の行位置の調整を行いました。
調整することでどう変わるのかを想像しながら作業すれば理解できるようになるでしょう。
まずは、i, j, k の変数がどう変化してその時どこに□/■が書かれるのかを紙に書いて一つづつ確認すればよいと思います。
・質問内容
C言語で正方形をコンソール画面に出力し、以下の図形が表示出来るようにしたいです。初歩的なミスがあるかもしれませんが、お願いします。
(ただし、配列は使いません)
□■■■■■■■■■
■□■■■■■■■■
■■□■■■■■■■
■■■□■■■■■■
■■■■□■■■■■
■■■■■□■■■■
■■■■■■□■■■
■■■■■■■□■■
■■■■■■■■□■
■■■■■■■■■□
・現在の状況
開発環境はeclipseで、どこをどう手直ししても最後の一行だけ出力されなかったり、余分に一行表示されてしまいます。
使用言語は通常のC言語です。
#include
int main(void){
int i,j,k;
for(k=0; k<9; k++){
for(j=0; j<=k; j++){
if(j==k){
printf("□");
}
printf("■");
}
for(i=8; i>k; i--){
printf("■");
}
printf("\n");
}
return 0;
}
・試したこと
for文内の数値を幾度となく調整したり、for文の{}の行位置の調整を行いました。
for文内の数値を幾度となく調整したり、for文の{}の行位置の調整を行いました。
調整することでどう変わるのかを想像しながら作業すれば理解できるようになるでしょう。
まずは、i, j, k の変数がどう変化してその時どこに□/■が書かれるのかを紙に書いて一つづつ確認すればよいと思います。
#include <stdio.h>
int main(void){
int i,j,k;
for(k=0; k<10; k++){
for(j=0; j<k; j++){
printf("■");
}
printf("□");
for(i=9; i>k; i--){
printf("■");
}
printf("\n");
}
return 0;
}
@beginner11
Questioner皆さん教えていただきありがとうございます!
今後もしっかり学んでいけたらと思います。
上のコードを理解できた ということでしょうか。
解決でよければ、当Q&Aをクローズしてください。
試行されている方法論を否定するものではありませんが,
現在のやり方でご自身が混乱するようであれば,まずはもっとシンプルな方法でやってみるのも良いのでは.
□
か ■
のいずれかであるという話でしょうから,これを愚直にコードに書き起こすとしたら,例えば
for( int y=0; y<10; ++y )
{
for( int x=0; x<10; ++x )
{
//xとyの値に基づいてどちらの文字を表示するのかを決めて→それを表示する
}
printf( "\n" ); //改行
}
みたいな感じになるように思います.
この場合,コメント部分を埋めることには比較的混乱は少ないであろうと思います.
↓
で,こういうシンプルなのができたら,ご自身の考えた方法と比較してみれば問題点(というか 誤解/混乱 していたような場所)が見えてくるのではないでしょうか.
@beginner11
Questionerここまでシンプルにまとめることができるとは……。教えていただきありがとうございます!
シンプルにまとめる
文内にて「愚直」という言葉を使っているように,むしろ「全くまとまってない」とでも言うか,
「最も最初に思いつくような / 何も頭使ってない / 効率とか何とかいう話は微塵も考えてない / etc...」な状態っていうのがコレじゃないかな? というのが私の感覚です.
で,この真っ先に思いつく方法に関して「どっちの四角形を表示するのか? というのを全100か所で毎度毎度ご丁寧に判定するってのはどうなん? いかにも馬鹿っぽいというか何も考えてないというか.ちょっとは効率(?)とか考えようよ,大人なんだからさ」とか何とかいう話が頭に浮かんで → そしたらもうちょっとマシな方法は無いのか考えるか…… みたいな順序になるんじゃないかなー,みたいな.