-1

次のコードがあります

var total = 5;
var arr = new Array("750", "400", "432", "355", "263");
id = 0;
num = 100;
var ht = 310;
var max = 750;
var cm = 20;
var bHg = 0;
var wdt = 100;
var bm = 20;
for (var i = 0; i < total; i++) {
    ar = parseInt(arr[i]);
    // how to rewrite these equations
    **bHg = (ar * ht / max) / num * id;
    printfu(cm + 50 + (i * (wdt + bm)) + bm,
                cm + (ht - bHg), wdt, bHg);**
}

function printfu(a,b,c,d) {
    document.write(a + b + c + d + "\n");
}

学習目的から、同じ出力を生成するために異なる方程式で2行を書くにはどうすればよいですか

bHg = (ar * ht / max) / num * id;
printfu(cm + 50 + (i * (wdt + bm)) + bm, cm + (ht - bHg), wdt, bHg);

上記の出力

520 640 760 880 1000

4

2 に答える 2

1

この 2 行は次のように短縮できます。i * k1 + k2ここでk1、 とk2は定数です。

完全なソリューション:

var total = 5;
var arr = new Array("750", "400", "432", "355", "263");
id = 0;
num = 100;
var ht = 310;
var max = 750;
var cm = 20;
var bHg = 0;
var wdt = 100;
var bm = 20;

/*
// It helps to note the bHG is ar times some constant.

var k = ht / max * num * id
var kA = (i * (wdt + bm)) + bm + cm + 50;
var kB = cm + (ht - bHg);
var kC = wdt;
var kD = bHg;

// bHg = ar * k;
var sum = kA + kB + kC + kD;
//=> (i * (wdt + bm)) + bm + cm + 50 + cm + (ht - bHg) + wdt + bHg
//=> (i * (wdt + bm)) + bm + 2*cm + 50 + ht + wdt
*/

var k1 = wdt + bm;
var k2 = bm + 2*cm + 50 + ht + wdt;

for (var i = 0; i < total; i++) {
   document.write(i * k1 + k2 + "\n");
}

//function printfu(a,b,c,d) {
//    document.write(a + b + c + d + "\n");
//}
于 2012-05-28T01:32:59.383 に答える
0

一見すると、いくつかのことを事前に計算できると思います。私が間違っていなければ、printfu関数は数字を加算しますか? その場合、次のように簡略化されます。

cm + 50 + i * (wdt + bm) + bm + cm + ht - bHg + wdt + bHg
= 2*cm + i*(wdt + bm) + bm + ht + wdt + 50

これはもはや bHg に依存しないため、それも事前計算できます。したがって、これだけで機能します:

var pcp = ht * id / max / num,
    pcq = 2*cm + bm + ht + wdt + 50;
for( var i=0;...) {
    bHg = ar * pcp;
    document.write((pcq + i*(wdt+bm))+"\n");
}
于 2012-05-28T01:32:26.930 に答える