はじめに
この特集もいよいよ最終回となりました。今回は、
では、
時間がかかる処理の例
前回まで取り上げてきたサンプルプログラムは
今回扱うのは
時間がかかる処理のサンプルとして、
<HTMLM><HEAD><TITLE>factorization in prime numbers</TITLE>
<SCRIPT type="text/javascript"><!--
var inputnumber = 0;
var current = 0;
var divider = 0;
function int_t0()
{
for (var i=0; i<100; i++) {
if (divider == 0)
return;
if (divider > current) {
document.getElementById("output").innerHTML += ";";
divider = 0;
return;
}
if ((current % divider)) {
divider++;
continue;
}
current /= divider;
s = document.getElementById("output").innerHTML;
if (s != "")
s += " * ";
s += divider;
document.getElementById("output").innerHTML = s;
}
}
function press(val)
{
if (val < 0)
inputnumber = 0;
else
inputnumber = inputnumber * 10 + val;
document.getElementById("input").innerHTML = inputnumber + " = ";
document.getElementById("output").innerHTML = "";
current = inputnumber;
divider = 2;
}
function init()
{
setInterval(int_t0, 100);
}
// --></SCRIPT>
</HEAD><BODY onload="init()">
<H1>factorization in prime numbers</H1>
<P><SPAN id="input">
<SCRIPT type="text/javascript"><!--
document.write(inputnumber);
// --></SCRIPT>
</SPAN><SPAN id="output"></SPAN></P>
<P><BIG><BIG>
<SCRIPT type="text/javascript"><!--
for (var i=0; i<10; i++)
document.write('<SPAN onmousedown="press(' + i + ')">[' + i + ']</SPAN>');
// --></SCRIPT>
<SPAN onmousedown="press(-1)">[C]</SPAN>
</BIG></BIG></P>
</BODY></HTML>
テンキー部分をクリックすると、
プログラムは、
処理を分割するやり方ですが、
計算途中で数字が入力されたときは、
ソートアルゴリズムの比較デモ
ちょっと特殊な例ですが、
バブルソート、
同時進行させるには、
キューイングの例
最後に、
そこで、
<HTMLM><HEAD><TITLE>dial</TITLE>
<SCRIPT type="text/javascript"><!--
var buffersize = 80;
var buffer = new Array(buffersize);
var rpos = 0;
var wpos = 0;
function putbuffer(val)
{
buffer[wpos++] = val;
if (wpos >= buffersize)
wpos = 0;
}
function getbuffer()
{
var val = buffer[rpos++];
if (rpos >= buffersize)
rpos = 0;
return val;
}
function isempty()
{
return (rpos == wpos);
}
function int_t0()
{
if (isempty())
return;
if ((getbuffer()))
document.getElementById("box").style.background = "#ff0";
else
document.getElementById("box").style.background = "#000";
}
function press(val)
{
for (var i=0; i<val; i++) {
putbuffer(1);
putbuffer(0);
}
putbuffer(0);
putbuffer(0);
putbuffer(0);
putbuffer(0);
putbuffer(0);
}
function init()
{
setInterval(int_t0, 200);
}
// --></SCRIPT>
</HEAD><BODY onload="init()">
<H1>dial</H1>
<DIV id="box" style="width:50px; height:50px; background:#000;">
</DIV>
<P><BIG><BIG>
<SCRIPT type="text/javascript"><!--
for (var i=1; i<=10; i++)
document.write('<SPAN onmousedown="press(' + i + ')">[' + (i % 10) + ']</SPAN>');
// --></SCRIPT>
</BIG></BIG></P>
</BODY></HTML>
このサンプルプログラムは、
リングバッファの仕組みは以下の通りです。まず、
プログラムですが、
今回はオーバーフローの対策をしていないので、
終わりに
3回に渡ってお送りしてまいりました
今から四半世紀も昔、
現在はCPUも速くなり、
これらのテクニックが、