Sc283(1) 情報科学応用演習I 資料 (Part 8) 

[解説] 配列

(参考: 配列(Array) in とほほのJavaScriptリファレンス)

複数の変数をひとまとめにして通し番号を付け, その番号で指定した「変数」をアクセスする仕掛けを配列と呼ぶ.

配列 (Array) オブジェクト

配列オブジェクトは,複数の変数をひとまとめにして通し番号を付けた構造体で, new 演算子を Array(n) 関数に作用させて生成する. このときの Array(n) 関数の引数 n は,作成する配列オブジェクトの大きさ (変数の数) で, 通し番号は,0 〜 n-1 となる.

new 演算子で生成された配列オブジェクトは,通常,変数に代入して用いる. 変数 x に代入した配列オブジェクトの i 番の要素 (変数) は, x[i] と表わす.

var x, y;

// 大きさ10の配列オブジェクトを生成して
// 変数 x に代入
x = new Array(10);  

// xに代入された配列オブジェクトの
// 最初の要素 (変数) に100を代入する
x[0] = 100;

y = x[0]/100;
配列

また,変数 x 中の配列オブジェクトの大きさ (長さ; 変数の数) は x.length という表現で得られる.

配列リテラル

new 演算子と Array(n) 関数を用いる方法のほかに,あらかじめ初期値が定まっている配列は, その初期値をコンマで区切って並べ,[ ] で括って表現することもできる. 例えば以下の (A), (B) は等価である.

(A)
var mtable = new Array(13);     // mtable[0]〜mtable[12]
mtable[0] = undefined;
mtable[1] = "January";      mtable[2] = "February";
mtable[3] = "March";        mtable[4] = "April";
mtable[5] = "May";          mtable[6] = "June";
mtable[7] = "July";         mtable[8] = "August";
mtable[9] = "September";    mtable[10] = "October";
mtable[11] = "November";    mtable[12] = "December";
(B)
var mtable = [ undefined,
    "Janumary", "February", "March",     "April",   "May",      "June",
    "July",     "August",   "September", "October", "November", "December" ];

[タスク] 月の英語訳

概要

月を 1〜12 の数で入力して,その英語訳の単語を返すプログラムを, switch を使わずに,配列を使って実現する.

ヒント

以下に例を示す.リンクをクリックすれば実行できる.(別ウィンドウで実行される)

js08-1a.html雛形,例のコード


[タスク] フィボナッチ数列

概要

フィボナッチ数列の最初の10項を計算して表示する. フィボナッチ数列とは,以下の漸化式にしたがう数列である.

{
a1 = a2 = 1
ai = ai-1 + ai-2 , (i≥3)

ヒント

以下に例を示す.リンクをクリックすれば実行できる.(別ウィンドウで実行される)

js08-2a.html雛形,例のコードと流れ図


[解説] onload イベント

Webページを画面表示するときに,表示が完了してから何らかの処理を行いたい時がある. 例えば,ページ内にテキストボックスがあり,そこにプログラムで計算した値を書き込みたいとき, <script></script> の中で行おうとすると, その時点ではまだテキストボックスそのものが生成されて(表示されて)おらず, 書きこむべき対象が存在しないため,エラーになってしまう.(下のコード (A) 参照)

そのような場合,表示が完了した時に発生するイベント (= onload イベント)のイベントハンドラで書き込みを行えばよい.(下のコード (B) 参照)

この onload イベントのイベントハンドラは,<body> タグの onload= 属性に記述する. この onload イベントは,window オブジェクトで発生するイベントであるが, イベントハンドラを記述するときは <body> タグに記述する. (下のコード (B)参照)

(A)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>JavaScript Sample 8-A</title>
<script type="text/javascript">
<!--
alert(document.f);      /* document.f はまだ未定義 */
document.f.prob1.value = "10 + 2 =";    /* これはエラーになる */
//-->
</script>
<body>
<form name="f" action="">
<input name="prob1" size="9" type="text" readonly>
</form>
</body>

(B)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>JavaScript Sample 8-B</title>
<script type="text/javascript">
<!--
function init() {       /* onload イベント時に実行される */
  alert(document.f);    /* onload イベント時には document.f は存在する */
  document.f.prob1.value = "10 + 2 =";
}
//-->
</script>
<body onload="init();"> <!-- onload イベントハンドラはここで記述する -->
<form name="f" action="">
<input name="prob1" size="9" type="text" readonly>
</form>
</body>

実行可能な例 (例のコード)


[課題] 計算練習プログラム(2) その1

課題番号: 8-1
課題名: 計算練習プログラム(2) その1
ファイル名:task08-1.html
締切: 次回の演習日の直前の日曜日,18:00まで

プログラム概要

下図のような計算練習のプログラム「計算練習プログラム(2)」の作成を考える.

フォーム

課題内容

ヒント

報告について

Moodle の課題ページからファイルを提出すること.ファイル名はすべて半角文字とする.