- ベストアンサー
計算式を教えてください。
長さ3,000mm 直径は50mm と仮定して、(比重は0.0167) この棒を重さは15kg~25kgの間になるような均等の長さに分けたいと思います。 正確な重さと均等な長さ(割り切れる長さ)を求める式はどうしたら出るのでしょうか? 数当て計算すると1500mmX2本で重さ23.15293kgになりますがこれをxを直径、長さをl、で function kinntou(){、、、のうなjavascriptで書けますでしょうか?また、回答がいくつか出た場合は一番25kgに近い長さを取り、均等に分けられないときは均等に一番近い長さを計算するようにはできないでしょうか?超初心者で数学は小学校以来勉強したことがないようなものですのでできるだけ具体的に教えていただければ幸いです。どうかよろしくお願いいたします。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
No4.です出来ました。 var kotae = calc(3000,50); if kotae.len > 0 { alert("答え 長さ:" + kotae.len + "mm 重さ:" + kotae.w + "Kg"); }else{ alert("答え 無し"); } } function calc(in_length,in_rad){ var d = 0.0167; var weight = {len:0,w:0}; var w = 0; var area = Math.pow(in_rad/10, 2) * Math.PI; for(i=1;i<in_length;i++){ if((in_length % i) == 0){ w = i/10 * area * d; if (w > 15.0 && w <= 25.0){ weight.len = i; weight.w = Math.max(weight.w, w); } } } return weight; }
その他の回答 (10)
- prophetok
- ベストアンサー率44% (13/29)
#10です。 もし 長さ(割り切れる長さ) というのがmmで表した場合の整数のみという意味なら、 #10の回答は無視してください。
- prophetok
- ベストアンサー率44% (13/29)
>均等に分けられないときは均等に一番近い長さを計算する 均等に分けられない場合というのは、どんな場合ですか? あり得ないので、この記述は無意味ですよね。 >回答がいくつか出た場合は一番25kgに近い長さ は小学校レベルの算数で以下のように計算できます。 a=棒の重量÷25kg aが整数の場合 一本の長さ=棒の長さ÷a 一本の重さ=棒の重さ÷a aが整数でない場合 一本の長さ=棒の長さ÷(a+1) 一本の重さ=棒の重さ÷(a+1) ここで一本の重さ<15kgであれば解なし for文とか使う必要は全くありません。
補足
お忙しいところご解答ありがとうございます。確かに小学生レベルの問題だと思うのですが、私自身その程度のレベルですのでこのご説明だと余計によくわからなくなります。できましたら具体的にfor文等をまったく使わず動くプログラムを実際にどのように書いたらよいのか教えていただけませんでしょうか?どうぞよろしくお願い致します。
- nda23
- ベストアンサー率54% (777/1415)
#5です。 円周率を掛けるのを忘れてましたね。 var 全重 = 直径 * 直径 * 長さ * 比重 * 3.14 / 4000; 割り算を後にするのは計算誤差が小さくなる確率が高いからです。
- fujillin
- ベストアンサー率61% (1594/2576)
No2です。 >確かにエラーが出る範囲が多々あると思います。 >そのときはエラーアラート等で結構です。 スクリプトの書き方を考える前に、どのような処理手順で(エラー処理も含めて)計算をするかを決めておかなければ、書き方は決まりません。 >そのときはエラーアラート等で結構です。 そのときってどういうときでしょうか? 「エラーになったとき」と言うお答えが目に浮かびますが、エラーになった時にはスクリプトは既に停止しているのが通常ですので、アラーとは出せません。(ブラウザがアラートを出してくれる場合もありますが) どういうときに、アラートを出すのかも含めて考えておくというのが、↑で説明したことです。 これが終わらないうちは、スクリプトを書き始めても無駄になってしまいます。 まずは、#1様の回答の意味をよく考えてください。 >数当て計算すると1500mmX2本で重さ23.15293kg~~ スクリプトで数当て計算するにはどのような論理(ロジック)で行えばよいかを考えておく必要があります。 >javascriptで計算するjavascriptでの書き方を知りたいと思っています。 とりあえず、適当に書くならこんな感じでしょうか? (HTMLなどで通常利用されているjavascriptです。Adobe社製品などで用いられているjavascriptではありません。) function calc() { var l = 3000; //長さ(mm) var r = 50; //直径(mm) var q = 0.0167; //比重 var qt = r*r*Math.PI/4*l*q, d1 = qt/25000, d2; d2 = Math.floor(d1); d2 += d1>d2?1:0; return (qt/d2<15000)?'解答不能':(''+d2+'分割('+l/d2+'mm)'); } 戻り値は、「○分割(××mm)」みたいに分割数とその長さが文字列で返ります。
補足
お忙しところご親切な詳しい内容の具体的なご回答ありがとうございます。お礼が送れて申し訳ありません。ご回答内容を勉強させていただき後日お礼申し上げます。ありがとうございました。
- redfox63
- ベストアンサー率71% (1325/1856)
入力をどのようにするとか HTMLの中に組み込んで処理させるのか スクリプトをコマンドラインから起動するのか 分割する数はいくつなのか >1500mmX2で重さ23.15293kg ?? おかしくないですか 2.5*2.5*PI*150*0.0167 って 49.1855... になりませんか 逆に 23.15293kgから逆算すると 半径が1.772(cm)になってしまいますよ ... 円周率の平方根ぽい数値
補足
お忙しところご回答ありがとうございます。そのとうり変でした!大変申し訳ありません私、比重を0.00617で計算していました。私ミスです。申し訳ありません。面目ない。 htmlの中に組み込んで処理したいと思っています。 どうぞよろしくお願いいたします。
- nda23
- ベストアンサー率54% (777/1415)
>重さ23.15293kg 私の計算では31.3125Kgなんですが、ヘンですね。 先ず、全体の重量ですが、(直径*直径/4)*長さ/1000*比重では? 次に理論の組み立てを行います。 (1)分割数の初期値を1とする。 (2)長さを分割数で割る。剰余が出た(割り切れない)場合は(4)へ (3)全体の重量を分割数で割る。この値が25Kg以下なら、この時の (長さ÷分割数)が回答、25Kgより大きければ(4)へ ---------------------------------- (4)分割数を1増やす。分割数>長さなら答えはないので中止する。 (2)から繰り返す。 function 均等(直径,長さ,比重) { var 全重 = 直径 * 直径 * 長さ * 比重 / 4000; for ( var 分割数 = 1 ; 分割数 <= 長さ ; 分割数++ ) { var 分割長 = 長さ / 分割数; if ( 分割長 == floor(分割長) ) { //割り切れた場合 if ( (全重 / 分割数) <= 25000 ) { return 分割長; //25Kg以下の最大長を返す } } } return 0; //最後まで来た時は回答がない } ※インデントに漢字空白を使っています。 但し、WindowsでJavaScriptを稼動する場合は漢字空白はOKで、 漢字の変数名、関数名も使用可能です。
補足
お忙しところご親切な詳しい内容のご回答ありがとうございます。そのとうり変でした!大変申し訳ありません私、比重を0.00617で計算していました。私ミスです。申し訳ありません。 この場合は比重は固定ですので0.5でも0.15でも構いません。教えていただいた事を割り当てて試してみようと思いますので自分にできましたら時間をいただいた後、再度お返事いたします。本当にありがとうございました。
- yyr446
- ベストアンサー率65% (870/1330)
もう少しインプトとアウトプットをプログラム仕様的に定義すると 以下であってますか。 (入力する値) 長さ in_length : 1~∞ 単位(mm) 半径 in_rad :1~∞ 単位(mm) 比重 d:0.0167に固定 単位({KG/1000}/{1000*mm*mm*mm}) (出力されるもの) 長さ out_length: 1~∞ 単位(mm) 重さ out_weight:1~∞ 単位(KG) (条件) ・out_lengthはin_lengthの整数倍 ・15 < out_weight < 25 この条件で最大のout_lengthとout_weightを計算する
補足
お忙しいところご親切な ご回答をいただきありがとうございます。 (入力する値) 長さ in_length : 1,000~7,000 単位(mm) 半径 in_rad :10~200 単位(mm) 比重 d:0.0167に固定 単位({KG/1000}/{1000*mm*mm*mm}) (出力されるもの) 長さ out_length: 10~∞ 単位(mm) 重さ out_weight:1~∞ 単位(KG) (条件) ・out_lengthはin_lengthの整数倍 ・15 < out_weight < 25 この条件で最大のout_lengthとout_weightを計算する 上記、書き足させていただきました。 ご回答に書いていただいたyyr446様のとおりでも構わないと思いますが 範囲を絞った方が簡単であれば上記ぐらいの範囲内の式で結構です。 また、私にはわかりませんが、半径が必要なのでしょうか?(直径の代わりでしょうか?) ほんとうにありがとうございます。どうぞよろしくお願いいたします。
- dyna_1550
- ベストアンサー率34% (122/353)
書き込もう・・と思ったのですが、 「直径は50mm」 <- この時点で、「正確な重さ」が出ないし、割り切れない・・・ 逆に考えると、所詮は2等分(もしくは数等分程度)にしか分けられないのであれば、 全部答えを出して一覧表にして、目で選ぶ、でよいのでは? それが出来れば、「一番近い」というプログラムに発展するのは難しくない と思います。
補足
お忙しいところご親切なご回答ありがとうございます。 50mmにこだわらず直径300mm長さ6,000mmだとどうなるのでしょうか? 等分するには何ミリに分ければ等分でき(あまりがなく)15k~25kgに収まるのでしょうか? ボタン一発で計算できるjavascriptでの書き方はこ難しいのでしょうか?もしよろしければ教えてください。どうぞよろしくお願いいたします。
- fujillin
- ベストアンサー率61% (1594/2576)
計算式を知りたいのか、javascriptを知りたいのか、どちらなのでしょうか? (ちなみに、ここはjavascriptに関するカテゴリーです) >15kg~25kgの間になるような均等の長さに分けたい~ 全体が25kgを超えて30kg未満の時には、そのままだと25kgを超えてしまうし2等分すると15kg以下になってしまうので、条件を満たす解が存在しないことになります。 ご質問文に記載の条件だけで計算式を組むと、↑のような時にはエラーになるか、誤った答えが出ることになってしまいます。
補足
お忙しところご回答ありがとうございます。 javascriptで計算するjavascriptでの書き方を知りたいと思っています。 確かにエラーが出る範囲が多々あると思います。 そのときはエラーアラート等で結構です。 どうぞよろしくお願いいたします。
- redfox63
- ベストアンサー率71% (1325/1856)
数学というより算数の世界のように思います 最初に 与えられた条件の物体の重さをどのように求めればいいのかを考えて見ましょう その中で 15から25kgにするために変化させるlを考えてみればいいように思いますが 物体の重さは その体積に比重を乗算すれば出ますよね 体積は底面積と長さ(高さ)の乗算で出来ます 円柱の底面は円ですので 半径x半径x円周率で出ます このとき 与えられた条件の単位系にも配慮しましょう
補足
ご回答ありがとうございます。 確かに算数ですね。おしゃっる事はよくわかります。 比重や体積の計算は私でも頭悪いながらよく存じておりますので長さや直径等がわかれば比重にて計算できます。私の質問がわかりにくいのかもしれませんが質問内容をjavascriptにて計算したいのです。 よろしくお願いいたします。
お礼
ご回答ありがとうございます。何回も申し訳ありません。ご回答を見直したところできました。すべて解決いたしました!すばらしいご回答ありがとうございました。Dcument.write(calc(3000,50))で[object Object] になるのは当たり前ですね。 また何かありましたらどうぞよろしくお願いいたします。
補足
お忙しところご親切な詳しい内容の具体的なご回答ありがとうございます。お礼が送れて申し訳ありません。ご回答内容を勉強させて頂いていますが、このままだとエラーが出るので、上から7行部分を削除してDcument.write(calc(3000,50))としてHTMLに貼り付けても[object Object] となってしまいます。いろいろ自分でエラーを見つけようとしてもわかりませんでした。もしよろしければどうやってHTMLに貼り付けたら動作するの教えて頂けませんでしょうか?どうぞよろしくお願いいたします。