ページ 11

orについて

Posted: 2013年4月24日(水) 22:54
by きょう
http://judge.u-aizu.ac.jp/onlinejudge/d ... ないところがあります

#include<stdio.h>

int main(void)
{
int a,b,i,j;/*aは縦、bは横*/
while(1)
{scanf("%d,%d",&a,&b);

if(a == 0 && b == 0) break;
for(i=1;i<=a;i++)
{
for(j=1;j<=b;j++)
{
if(i==1||j==1||i==a||j==b)

printf("#");

else

printf(".");

}
printf("\n");
}


}return 0;
}


for(i=1;i<=a;i++)
{
for(j=1;j<=b;j++)
{
if(i==1||j==1||i==a||j==b)

printf("#");
がわかりません。どうして四角形の縁を#で囲むようになるのでしょうか?

よろしくお願いします。

Re: orについて

Posted: 2013年4月24日(水) 23:33
by box
きょう さんが書きました: if(i==1||j==1||i==a||j==b)
がわかりません。どうして四角形の縁を#で囲むようになるのでしょうか?
i == 1 : いちばん上の行ならば
j == 1 : いちばん左の列ならば
i == a : いちばん下の行ならば
j == b : いちばん右の列ならば
これらの条件のいずれかを満たしたとき、すなわち、
長方形の周囲の場合について'#'を出力するようになっています。

Re: orについて

Posted: 2013年4月24日(水) 23:37
by 雨ガエル
コードはcodeタグで囲んでください。

printf("#");が実行されるのは
i が 1 の時
j が 1 の時
i が a の時
j が b の時
ですよね?

一番上の列ではiが常に1なので、すべて#が出力されます。
一番下の列ではiが常にaなので、すべて#が出力されます。
その他の列ではiは1でもaでもありませんが、jが1の時と、jがbの時は#が出力され、
そのほかは.が出力されます。

よって四角の枠のように#が並べられます。

Re: orについて

Posted: 2013年4月24日(水) 23:45
by きょう
boxさんご回答ありがとうございます。

一つわからないのですが、
i == 1 : いちばん上の行ならば
j == 1 : いちばん左の列ならば
i == a : いちばん下の行ならば
j == b : いちばん右の列ならば
どうしてiが行、jが列を表すと言えるのでしょうか?
よろしくお願いします。

Re: orについて

Posted: 2013年4月24日(水) 23:50
by きょう
雨ガエルさん、ご回答ありがとうございます。

コードの件はすみませんでした。


一つわからないところがあるのですが、
一番上の列ではiが常に1なので、すべて#が出力されます。
一番下の列ではiが常にaなので、すべて#が出力されます。
その他の列ではiは1でもaでもありませんが、jが1の時と、jがbの時は#が出力され、
そのほかは.が出力されます。
のところで、aは1から打ち込んだ値まで値が変化するので、aが2、3、・・・となるとすべての四角形が#になると思うのですが、どうでしょうか?
よろしくお願いします。

Re: orについて

Posted: 2013年4月25日(木) 00:35
by 雨ガエル
>>aは1から打ち込んだ値まで値が変化するので
aは入力した値のまま変わりませんね。
変わるのはiです。iは1から入力した値(a)まで、1 2 3 4 ・・・と増えていきます。
jについても同じです。

(例としてa = 3, b = 4だったとしましょう。)

コード:

for(i=1; i<=3; i++)
{
	for(j=1; j<=4; j++)
	{
		if( i==1 || j==1 || i==a || j==b )
		{
			printf("#");
		}
		else 
		{
			printf(".");
		}
	}
	printf("\n"); //次の列に移る
}
この二重のforループでは
〇→→→\n
→→→→\n
→→→〇
のように出力していきます。
このとき、iとjは次のように変化します。


[i=3, j=3][i=3, j=4]
ここで#が出力される条件は、
i == 1 と i == a と j == 1 と j == b なので
####
#...#
####
のように出力されるのです。

Re: orについて

Posted: 2013年4月25日(木) 08:38
by box
きょう さんが書きました: どうしてiが行、jが列を表すと言えるのでしょうか?
iは外側のループを制御していて、jは内側のループを制御しているからです。

Re: orについて

Posted: 2013年4月25日(木) 16:58
by きょう
お二人様の詳しい回答ありがとうございます。 理解できました。 あいrがとうございます。