orについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
きょう

orについて

#1

投稿記事 by きょう » 12年前

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("#");
がわかりません。どうして四角形の縁を#で囲むようになるのでしょうか?

よろしくお願いします。

box
記事: 2002
登録日時: 14年前

Re: orについて

#2

投稿記事 by box » 12年前

きょう さんが書きました: if(i==1||j==1||i==a||j==b)
がわかりません。どうして四角形の縁を#で囲むようになるのでしょうか?
i == 1 : いちばん上の行ならば
j == 1 : いちばん左の列ならば
i == a : いちばん下の行ならば
j == b : いちばん右の列ならば
これらの条件のいずれかを満たしたとき、すなわち、
長方形の周囲の場合について'#'を出力するようになっています。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
雨ガエル
記事: 34
登録日時: 13年前
住所: 新潟
連絡を取る:

Re: orについて

#3

投稿記事 by 雨ガエル » 12年前

コードはcodeタグで囲んでください。

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

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

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

きょう

Re: orについて

#4

投稿記事 by きょう » 12年前

boxさんご回答ありがとうございます。

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

きょう

Re: orについて

#5

投稿記事 by きょう » 12年前

雨ガエルさん、ご回答ありがとうございます。

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


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

アバター
雨ガエル
記事: 34
登録日時: 13年前
住所: 新潟
連絡を取る:

Re: orについて

#6

投稿記事 by 雨ガエル » 12年前

>>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 なので
####
#...#
####
のように出力されるのです。

box
記事: 2002
登録日時: 14年前

Re: orについて

#7

投稿記事 by box » 12年前

きょう さんが書きました: どうしてiが行、jが列を表すと言えるのでしょうか?
iは外側のループを制御していて、jは内側のループを制御しているからです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

きょう

Re: orについて

#8

投稿記事 by きょう » 12年前

お二人様の詳しい回答ありがとうございます。 理解できました。 あいrがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る