-
29ページ,最後のアルゴリズムのwhileの条件: 「または,前回のループで交換が起らなかった」->「または,前回のループで交換が起った」
-
37ページ,演習問題(2), ifの条件:「i番目の要素はxと等しいかxよりも前である」->「i番目の要素はxと等しいかxよりも後である」, 「i番目の要素はxと等しいかxよりも後である」->「i番目の要素はxと等しいかxよりも前である」
-
107ページ,アルゴリズムの最後にelse部が必要
else
NOを出力する;
教科書のプログラムは今でも問題なく動作しますが,JavaScriptも変化しており,新しい書き方や機能が追加されています. 以下に,現在のJavaScriptの仕様に即したプログラムを掲載します. (参考:MDN web docs)
一番重要な点は,変数を宣言するためのキーワードvarの代わりに,letを使うようにした点です.
宣言された変数が有効なプログラムの範囲をスコープといいますが,小さい方がプログラムの理解が容易になります.
varよりletの方がスコープを小さくできます.
具体的には,letの場合は,ブロックという{と}で囲まれた範囲の中で用いられれば,スコープがそのブロックの中に限定されます.
また,forに続く( )の部分で用いられた場合は,forループの本体がスコープです.
(なお,再代入しない変数にはletではなくconstを使うべきなのですが,覚えることを少なくしたいのでletで代用しています.)
あと,古いJavaScriptでも同様なのですが,記述ミスや誤解を少なくするため,ループの本体や,if構造,if-else構造のステップは,
1文しかなくても,{と}で囲んだ方がよいでしょう.
以下,各章からいくつか例を挙げます.
3ページ
let i = 0;
while (i < 10) {
document.write('Hello ');
document.write('World!');
document.write('<br>');
i += 1;
}13ページ
let x, y;
x = parseFloat(prompt('Celsius?'));
// ファーレンハイト度 = 1.8 * セルシアス度 + 32
y = 1.8 * x + 32;
document.write(x + ' deg C = ' + y + ' deg F');21ページ
let a = [20, 4, 32, 18, 17];
let max = a[0];
for (let i = 1; i < a.length; i += 1) {
if (a[i] > max) {
max = a[i];
}
}
document.write(max);(参考)教科書のfor, in は for, of で表現できるようになりました.
let a = [20, 4, 32, 18, 17];
let max = a[0];
for (const element of a) {
if (element > max) {
max = element;
}
}
document.write(max);23ページ. 教科書のプログラムは4行目でmodを明示的に宣言すべきでした.
(下ではletで宣言していますが,再代入しないのでconstの方が本当はよいです.)
let x = 51;
let y = 27;
while (y > 0) {
let mod = x % y;
x = y;
y = mod;
}
document.write('Answer: ' + x);35~36ページ.教科書のプログラムはiを明示的に宣言すべきでした.
let a = [4, 8, 9, 16, 25, 32, 49, 64, 81, 100];
let x = parseInt(prompt('x?'), 10);
let found = false;
let low = 0;
let high = a.length - 1;
while (low <= high) {
let i = low + Math.floor((high - low) / 2);
if (a[i] === x) {
found = true;
break;
}
if (x < a[i]) {
high = i - 1;
} else {
low = i + 1;
}
}
document.write(found);iなお,分かりやすさ優先なら,iは以下のように計算できます(参考.low, highの値が巨大な場合,オーバーフローする危険性あり.)
let i = Math.floor((low + high) / 2);以降については,適宜追加します.
