dポイントプレゼントキャンペーン実施中!

長さ3,000mm 直径は50mm と仮定して、(比重は0.0167)
この棒を重さは15kg~25kgの間になるような均等の長さに分けたいと思います。
正確な重さと均等な長さ(割り切れる長さ)を求める式はどうしたら出るのでしょうか?
数当て計算すると1500mmX2本で重さ23.15293kgになりますがこれをxを直径、長さをl、で function kinntou(){、、、のうなjavascriptで書けますでしょうか?また、回答がいくつか出た場合は一番25kgに近い長さを取り、均等に分けられないときは均等に一番近い長さを計算するようにはできないでしょうか?超初心者で数学は小学校以来勉強したことがないようなものですのでできるだけ具体的に教えていただければ幸いです。どうかよろしくお願いいたします。

A 回答 (11件中1~10件)

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;
}

この回答への補足

お忙しところご親切な詳しい内容の具体的なご回答ありがとうございます。お礼が送れて申し訳ありません。ご回答内容を勉強させて頂いていますが、このままだとエラーが出るので、上から7行部分を削除してDcument.write(calc(3000,50))としてHTMLに貼り付けても[object Object] となってしまいます。いろいろ自分でエラーを見つけようとしてもわかりませんでした。もしよろしければどうやってHTMLに貼り付けたら動作するの教えて頂けませんでしょうか?どうぞよろしくお願いいたします。

補足日時:2009/07/13 10:46
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。何回も申し訳ありません。ご回答を見直したところできました。すべて解決いたしました!すばらしいご回答ありがとうございました。Dcument.write(calc(3000,50))で[object Object] になるのは当たり前ですね。
また何かありましたらどうぞよろしくお願いいたします。

お礼日時:2009/07/13 12:38

#10です。


もし
長さ(割り切れる長さ)
というのがmmで表した場合の整数のみという意味なら、
#10の回答は無視してください。
    • good
    • 0

>均等に分けられないときは均等に一番近い長さを計算する


均等に分けられない場合というのは、どんな場合ですか?
あり得ないので、この記述は無意味ですよね。
>回答がいくつか出た場合は一番25kgに近い長さ
は小学校レベルの算数で以下のように計算できます。
a=棒の重量÷25kg
aが整数の場合 
一本の長さ=棒の長さ÷a
一本の重さ=棒の重さ÷a

aが整数でない場合
一本の長さ=棒の長さ÷(a+1)
一本の重さ=棒の重さ÷(a+1)
ここで一本の重さ<15kgであれば解なし

for文とか使う必要は全くありません。

この回答への補足

お忙しいところご解答ありがとうございます。確かに小学生レベルの問題だと思うのですが、私自身その程度のレベルですのでこのご説明だと余計によくわからなくなります。できましたら具体的にfor文等をまったく使わず動くプログラムを実際にどのように書いたらよいのか教えていただけませんでしょうか?どうぞよろしくお願い致します。

補足日時:2009/07/10 16:43
    • good
    • 0

#5です。


円周率を掛けるのを忘れてましたね。
var 全重 = 直径 * 直径 * 長さ * 比重 * 3.14 / 4000;
割り算を後にするのは計算誤差が小さくなる確率が高いからです。
    • good
    • 0

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)」みたいに分割数とその長さが文字列で返ります。

この回答への補足

お忙しところご親切な詳しい内容の具体的なご回答ありがとうございます。お礼が送れて申し訳ありません。ご回答内容を勉強させていただき後日お礼申し上げます。ありがとうございました。

補足日時:2009/07/13 10:40
    • good
    • 0

入力をどのようにするとか


HTMLの中に組み込んで処理させるのか スクリプトをコマンドラインから起動するのか
分割する数はいくつなのか

>1500mmX2で重さ23.15293kg
?? おかしくないですか
2.5*2.5*PI*150*0.0167 って 49.1855... になりませんか
逆に 23.15293kgから逆算すると 半径が1.772(cm)になってしまいますよ ... 円周率の平方根ぽい数値

この回答への補足

お忙しところご回答ありがとうございます。そのとうり変でした!大変申し訳ありません私、比重を0.00617で計算していました。私ミスです。申し訳ありません。面目ない。
htmlの中に組み込んで処理したいと思っています。
どうぞよろしくお願いいたします。

補足日時:2009/07/09 17:50
    • good
    • 0

>重さ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でも構いません。教えていただいた事を割り当てて試してみようと思いますので自分にできましたら時間をいただいた後、再度お返事いたします。本当にありがとうございました。

補足日時:2009/07/09 17:48
    • good
    • 0

もう少しインプトとアウトプットをプログラム仕様的に定義すると


以下であってますか。

(入力する値)
長さ 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様のとおりでも構わないと思いますが
範囲を絞った方が簡単であれば上記ぐらいの範囲内の式で結構です。
また、私にはわかりませんが、半径が必要なのでしょうか?(直径の代わりでしょうか?)
ほんとうにありがとうございます。どうぞよろしくお願いいたします。

補足日時:2009/07/09 17:33
    • good
    • 0

書き込もう・・と思ったのですが、


「直径は50mm」 <- この時点で、「正確な重さ」が出ないし、割り切れない・・・

逆に考えると、所詮は2等分(もしくは数等分程度)にしか分けられないのであれば、
全部答えを出して一覧表にして、目で選ぶ、でよいのでは?

それが出来れば、「一番近い」というプログラムに発展するのは難しくない
と思います。

この回答への補足

お忙しいところご親切なご回答ありがとうございます。
50mmにこだわらず直径300mm長さ6,000mmだとどうなるのでしょうか?
等分するには何ミリに分ければ等分でき(あまりがなく)15k~25kgに収まるのでしょうか?
ボタン一発で計算できるjavascriptでの書き方はこ難しいのでしょうか?もしよろしければ教えてください。どうぞよろしくお願いいたします。

補足日時:2009/07/09 16:03
    • good
    • 0

計算式を知りたいのか、javascriptを知りたいのか、どちらなのでしょうか?


(ちなみに、ここはjavascriptに関するカテゴリーです)

>15kg~25kgの間になるような均等の長さに分けたい~
全体が25kgを超えて30kg未満の時には、そのままだと25kgを超えてしまうし2等分すると15kg以下になってしまうので、条件を満たす解が存在しないことになります。

ご質問文に記載の条件だけで計算式を組むと、↑のような時にはエラーになるか、誤った答えが出ることになってしまいます。

この回答への補足

お忙しところご回答ありがとうございます。
javascriptで計算するjavascriptでの書き方を知りたいと思っています。
確かにエラーが出る範囲が多々あると思います。
そのときはエラーアラート等で結構です。
どうぞよろしくお願いいたします。

補足日時:2009/07/09 16:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!