質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

607閲覧

直角三角形の斜辺が整数かどうか

hoshino2424

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/02/26 11:43

編集2021/02/26 11:44

直角三角形の斜辺が整数かどうか調べたいです。

斜辺を求めるのに試した関数は

$syahen=hypot($teihen,$takasa); $syahen=sqrt($teihen*$teihen + $takasa*$takasa);

の二つです。
整数かどうか求めるのに使った関数はis_intとis_numericの二つです。

斜辺を求めることはできましたが、型がfloatだからか整数かどうかの判断がつきません。
良い方法を知っている方がいましたら教えていただけると嬉しいです。

設問:直角三角形の底辺が1から5の整数、高さが1から5の整数で動くときに斜辺が整数になるときの斜辺の値を求めよ。
期待する出力:5

for($tei=1;$tei<=5;$tei++){ for($taka=1;$taka<=5;$taka++){ $sya=hypot($tei,$taka); if(is_int($sya)){ echo $sya; } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

is_intは型が整数型か否かを判定する関数ですので、値が整数か否かを判定する役には立ちません。
https://www.php.net/manual/ja/function.is-int.php
floatの値が整数か否かを判定するための関数は無さそうですので、ceilやfloorをかけた値が自身と等しいかどうかで判断するのがよいかと思います。
ただ、答えが整数になるはずの平方根をコンピュータで計算して正しく整数になる保証はありません。
PHPがどうかは知りませんが、Windows10の電卓では以前4の平方根が2にならない仕様がありました。
「Windowsの標準電卓で4の平方根が2でなかった仕様がようやく修正」の件について

投稿2021/02/26 17:37

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshino2424

2021/02/27 08:45

詳しい解説ありがとうございます。勉強になりました。 ご回答ありがとうございました。
guest

0

総当たり系で書いてみた。

php

1<?php 2$teihen_max = 5000; 3$takasa_max = 5000; 4for($teihen = 1; $teihen <= $teihen_max; ++$teihen){ 5 $syahen = $teihen + 1; 6 for($takasa = 1; $takasa <= $takasa_max; ++$takasa){ 7 while(($tmp = $teihen ** 2 + $takasa ** 2) >= $syahen ** 2){ 8 if($tmp === $syahen++ ** 2)echo $teihen . ', ' . $takasa . PHP_EOL; 9 } 10 } 11}

投稿2021/02/26 13:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/26 14:00

これなら float いらね。
hoshino2424

2021/02/27 08:44

こういう方法もあるのですね。勉強になります。 ご回答有り難うございました。
guest

0

ベストアンサー

この設問であれば、こんな感じでとりあえず答えは出ます。

PHP

1<?php 2 3for($tei=1;$tei<=5;$tei++){ 4 5 for($taka=1;$taka<=5;$taka++){ 6 7 $sya=hypot($tei,$taka); 8 9 if($sya == intval($sya) ){ 10 $answer[] = $sya; 11 } 12 } 13} 14 15//縦と横が逆の場合にも判定を通るので重複するのを排除 16var_dump(array_unique($answer)); 17

PHPで整数を判定するのは割とめんどくさいので
PHP 整数 判定あたりをキーワードにして調べてみる&それぞれの関数をPHPマニュアルの右上の検索窓で調べてみると、
質問中に提示されているコードで判定が出来なかった理由が分かるかと思います。

投稿2021/02/26 13:47

tanat

総合スコア18709

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshino2424

2021/02/27 08:43

phpで整数を判定するのは難しいんですね。intvalを通したものと等しいかどうかを判定するという発想がなかったので大変助かりました。ご回答有り難うございました。
guest

0

$syahen=sqrt($teihen*$teihen + $takasa*$takasa);

発想が簡単な方法としては、sqrtに通す前の二乗和の値を持っておいて、sqrt→整数に丸める→二乗して元の二乗和と一致するか比較する、というのはどうでしょうか?

投稿2021/02/26 11:48

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshino2424

2021/02/26 11:55

ご回答ありがとうございます。 試したところ斜辺がfloatになって整数かどうかの判断はつきませんでした。 整数かどうかの判断部分が間違っているのでしょうか・・・?
maisumakun

2021/02/26 11:57

> 試したところ斜辺がfloatになって整数かどうかの判断はつきませんでした。 自分の回答内で、「整数かどうか判断する」部分はないかと思うのですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問