人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの簡単なプログラムに関しての質問です。
<?php
echo "整数を入力:";
$a = trim(fgets(STDIN));
$result = false;
$n = 2;
while($n <= $a / 2){
if ($a % $n == 0){
$result = true;
}
$n++;
}
if ($result){
echo $a . "は、素数じゃないです。";
} ・・・以下略
?>
上記は素数を判定するかんたんなPHPプログラムです。
入門書に記載あったものですが、説明が省略されているため
理解できない部分があった為質問させていただきました。
以下2点質問です。

1点目:4行目に $result = false; とありますが
いきなりresultという変数が登場していてその意図がわかりません。
またfalseとありますが何の二者択一に関してfalseなんでしょうか?

2点目:6?11行目のwhile文に関してですが
条件文の「変数aを2で割った値が変数n以上の場合」という部分は
理解できたのですが繰り返す処理のところがよくわかりません。
また{ $result = true; }と $n++;の部分のつながりがわかりません。
elseなどが無いので$n++;の部分は単にif文の次の処理で
関連性は無いものなのでしょうか?

質問文がわかりにくかったら申し訳ありません。
1時間ぐらい考えていたのですがよくわかりませんでした。
どうぞ宜しくお願いします。

●質問者: gutenmorgen
●カテゴリ:ウェブ制作
✍キーワード:echo PHP trim いもの プログラム
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● pyopyopyo
●100ポイント

順番に説明します。


まず1点目。4行目の $result 変数は、素数の判定結果を保存する為の変数です。

このプログラムでは $result 変数で

ということを表す様になってます。

つまり"素数"か"否か"の二者択一です。


だから後半で

if ($result){

echo $a . "は、素数じゃないです。";

} ・

という処理ができるのです。


2点目ですが、gutenmorgen さんの理解であってます

elseなどが無いので$n++;の部分は単にif文の次の処理です。

関連性もありません。

念の為、もうすこし細かく説明すると、

$n = 2;

while($n <= $a / 2){

$n++;

}

の部分でまず、 2,3,4,5,・・・,($a/2) と $n を順番に増加させていって

if ($a % $n == 0){

$result = true;

}

の部分で、 ($a % $n) がゼロの場合だけ $result = true としています。

このif 文は elseの部分は無いので、 ($a % $n) がゼロ以外の場合は、何も処理を行いません。

この部分で 一回でも if 文の所で $result= true;が実行されると、

$result の値が true になるので、この変数$a は素数では無い、という判定になります。


反対に、一度も $result = true;が実行されない場合は、

4行目の $result = false; の処理があるので、 $result の値は false になるので

この変数$a は素数、という判定になります

◎質問者からの返答

詳しくありがとうございます。

大変わかりやすい説明でだいぶん理解が進みました。

本のほうはまだ前半を読んでるところでして、また質問すると思うので

今後とも宜しくお願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ