6.if 文(判断文)             [もくじへ] [トップページへ]

===================================================

プログラム例題9

二次方程式 において、a = 1, b = 4, c = 3 のときの

解をもとめよ。また、 a = 1, b = 3, c = 4 のときは虚数解となるが、判

別式 を求め、d < 0 のときは虚数解と表示せよ。

=========================================================

<HTML>
<HEAD>
   <TITLE>例題9</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
        
var d, x1, x2;

//   入力データ
        var a = 1;
        var b = 4;
        
var c = 3;

//   
判別式 d の計算
        d = Math.pow(b,2) - 4*a*c;

//   解の判断と表示
        document.write ("<br>");

        
if (d < 0) {
                document.write ("虚数解");
        
}
        
else {
                
x1 = (-b + Math.sqrt(d))/(2*a);
                
x2 = (-b - Math.sqrt(d))/(2*a);
                
document.write ("x1=",x1,"<BR>");
                
document.write ("x2=",x2);
        
}

// -->
</SCRIPT>
</BODY>
</HTML>

 

a = 1, b = 4, c = 3 のときの、実行結果は、次のようになります。

x1=-1
x2=-3

a = 1, b = 3, c = 4 のときの、実行結果は、次のようになります。

虚数解

二次方程式の解は、 です。

もし、√の中が負のときはエラーになります。これを回避するために

判別式を先に計算し、d<0 のときは虚数解と表示させる

のです。

if (d < 0) {
        document.write ("虚数解");
}
else {
        
x1 = (-b + Math.sqrt(d))/(2*a);
        
x2 = (-b - Math.sqrt(d))/(2*a);
        
document.write ("x1=",x1,"<BR>");
        
document.write ("x2=",x2);
}

判断文です。もし( if d<0 のときは、虚数解と表示します。そうでな

ければ( else )、2つの解を計算しそれらを表示し、判断を終了します。

判断文の基本の形は、次のようになります。

 

   if ( 条件 ) {
     条件にあてはまるとき実行される文
   }
   else {
     条件にあてはまらないとき実行される文
   }

 

条件判断の関係演算子には、次の6つがあります。

 

  関係演算子    意味

   >       大きい
   <       小さい
   >=      大きいか等しい
   <=      小さいか等しい
   ==      等しい
   !=       等しくない

 

if 文の中で実行される文はいくつあっても構いません。if 文では、始ま

りを示す( { )と、終わりを示す( } )を書きます。また、( { )や( } )の後

には( ; )は必要ありません。

また、次のように( {  } )や else を書かないこともあります。

If ( a = 0 ) b = 1;

もし、a = 0 ならば b = 1 とせよという文です。このときは、( ; )が必要

です。

 


7.for文(繰り返し文)          [もくじへ] [トップページへ]

7.1 その1

===================================================

プログラム例題10

10の階乗(10!)を求めよ。

10! = 10×9×8×7×6×5×4×3×2×1

である。

=========================================================

<HTML>
<HEAD>
   <TITLE>例題10</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--

//   入力データ
        
var n = 10;

//   
計算

        var i;
        var
nk=1;

        for (i = 1; i <= n; i++) {
                
nk = nk*i;
        
}

        
document.write ("<BR>");
        
document.write (n," の階乗 = ",nk);

// -->
</SCRIPT>
</BODY>
</HTML>

 

実行結果は、次のようになります。

10 の階乗 = 3628800

 

for (最初の値; 終わりの値; 数え方) {

  繰り返し実行される文
}

{ )と( } )にはさまれた文を、最初の値から、終わりの値になるまで繰り

返します。「数え方」は通常1つずつ数えるので、i++ になっています。これ

は、変数 i を使って1つずつカウントするカウンタの働きをします。「最初の

値」は、変数 i に数え始めの数値を設定します。「終わりの値」は、変数 i

がいくつになるまで繰り返させるのかを設定します。

繰り返しをループともいいます。

nk = nk*i

nk に最初 1 が代入されていますので、

     i = 1 のとき、nk = 1 * 1 = 1

     i = 2 のとき、nk = 1 * 2 = 2

     i = 3 のとき、nk = 2 * 3 = 6

     i = 4 のとき、nk = 6 * 4 = 24

     i = 5 のとき、nk = 24 * 5 = 120

        ・・・・・

のようにして、nkn の階乗が計算されていきます。

 

 


7.2 その2(2重ループ)         [もくじへ] [トップページへ]

===================================================

プログラム例題11

次のような表を作れ。

i      j

1     1
1     2

2     1
2     2

3     1
3     2

=========================================================

<HTML>
<HEAD>
   <TITLE>例題11</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
        
var i, j;

//   
表示

        document.write ("<BR>");
        document.write (" i     j","<BR>");
        document.write ("<BR>");

        for ( i = 1; i <= 3; i++) {
                
for ( j = 1; j <=2; j++) {
                        document.write (i, "    ", j, "<BR>");
                }
                document.write ("<BR>");
        }

        
document.write ("<BR>");

// -->
</SCRIPT>
</BODY>
</HTML>

 

実行結果は、次のようになります。

i     j

1    1
1    2

2    1
2    2

3    1
3    2

 

for ( i = 1; i <= 3; i++ ) {
        
for ( j = 1; j <= 2; j++ ) {
                document.write (i, "    ", j, "<BR>");
        }
        document.write ("<BR>");
}

i のループの中に j のループが入った入れ子の構造になっています。

このプログラムでは for 文が2重になっているので、2重ループといい

ます。

     i = 1 のまま、j = 1

              j = 2

     i = 2 のまま、j = 1

              j = 2

     i = 3 のまま、j = 1

              j = 2

i 3 回繰り返す間に、j はそれぞれ 2 回繰り返します。

このように、for 文の中に入れる文は、少し頭下げ(インデント)した方

が見やすくなります。

 

 


8.配列                   [もくじへ] [トップページへ]

8.1 その1(一次元配列)

===================================================

プログラム例題12

次の10個のデータの、合計と平均をもとめよ。

123.43, 123.48, 123.42, 123.40, 123.44

123.41, 123.49, 123.45, 123.47, 123.46

=========================================================

<HTML>
<HEAD>
   <TITLE>例題12</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
        
var i, s, av;
        
var n = 10;

        d = new Array(10);



//   入力データ

        
d[1]=123.43;
        
d[2]=123.48;
        
d[3]=123.42;
        
d[4]=123.40;
        
d[5]=123.44;
        
d[6]=123.41;
        
d[7]=123.49;
        
d[8]=123.45;
        
d[9]=123.47;
        
d[10]=123.46;

//   
計算
        s = 0;

        for (i = 1; i<=n; i++) {
                
s = s + d[i];
        
}
        
av = s/n;

        
document.write ("<BR>");
        
document.write ("合計 = ",s);
        
document.write ("<BR>");
        
document.write ("平均 = ",av);

// -->
</SCRIPT>
</BODY>
</HTML>

 

実行結果は、次のようになります。

合計 = 1234.45
平均 = 123.44500000000001

※ 平均で、コンピュータの変換誤差が出ています。

 

d = new Array(10);

配列とは、添え字のついた変数のことです。添え字が一個の配列を一次

元配列といいます。配列を用いるにはあらかじめ、いくつ用いるかの宣言

をしなくてはなりません。この場合 d[0] 〜 d[10] まで11個の変数が使え

るようになります。ここでは、d[0] は使用していません。

s = 0;

JavaScriptでは、変数の宣言をするとデータはクリアされ、数値変数の場

0 になるのですが、安全のため合計する変数 s に初期値として 0 を代

入しておきます。

for (i = 1; i<=n; i++) {
        
s = s + d[i];
}

配列の便利なところは、一つの変数名で多くのデータが扱えるということ

と、添え字に変数が使えるということです。

s = s + d[1], s = s + d[2], ・・・ などとデータの個数の数だけ書かなけ

ればならないところを、このように for 文と組み合わせてわずか3行で書

けます。データの個数がこれ以上になっても同じ行数で済みます。

s = s + d[i]d[i] の合計のプログラムです。よく使われますので次の

表で理解しておきましょう。

     i   d[i]       s(旧) + d[i] = s(新)

     1  123.43     0   + 123.43 = 123.43

     2  123.48   123.43 + 123.48 = 246.91

     3  123.42   246.91 + 123.42 = 370.33

 

av = s/n;

合計をデータの個数 n で除して、平均を求めます。

 


8.2 その2(二次元配列)       [もくじへ] [トップページへ]

===================================================

プログラム例題13

次の行列AとBの和をもとめよ。

=========================================================

考え方

JavaScript には、今のところ二次元配列がサポートされていません。ここ

では、一次元配列を二次元配列のように使ってみます。

まず、3行3列の配列を例にとると、二次元配列の1行1列目を一次元配

列の1番目に、以下1行2列目を2番目、1行3列目を3番目のように割り

当てます。全体は次の表のようになります。

これを、 n行m列で一般化します。次の表の3行1列目は、 2m + 1 ですが、

m の係数 2 は i - 1 で、また +1 j で表されることがわかります。した

がって、二次元配列の ij 列目は、一次元配列の ( i - 1 )× m + j

番目になります。

以上の変換式を、考えてプログラミングすると次のようになります。

 

 

<HTML>
<HEAD>
   <TITLE>例題13</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
        
var i, j, ij;
        
var n = 3;
        
var m = 3;

        
a = new Array(3*3);
        
b = new Array(3*3);
        
c = new Array(3*3);

//   入力データ

        
a[1]=3;
        
a[2]=6;
        
a[3]=9;
        
a[4]=2;
        
a[5]=4;
        
a[6]=4;
        
a[7]=6;
        
a[8]=3;
        
a[9]=5;

        
b[1]=4;
        
b[2]=3;
        
b[3]=6;
        
b[4]=0;
        
b[5]=6;
        
b[6]=8;
        
b[7]=3;
        
b[8]=7;
        
b[9]=2;

//   
計算

        for (i = 1; i<=n; i++) {
                
for (j = 1; j<=m; j++) {
                        
ij=(i-1)*m + j;
                        c[ij]=a[ij] + b[ij];
                }
        }

//   表示


        
document.write ("<BR>");
        
for (i = 1; i<=n; i++) {
                
for (j = 1; j<=m; j++) {
                        ij=(i-1)*m + j;
                        document.write (c[ij], " ");
                
}
                document.write ("<BR>");
        
}

// -->
</SCRIPT>
</BODY>
</HTML>

 

実行結果は、次のようになります。

7 9 15
2 10 12
9 10 7

 

a = new Array(3*3);

3行3列の行列のデータ 3 × 3 = 9 個を格納する配列を、一次元配列 a

で宣言します。

二次元配列は、この例題のような行列計算でよく用います。測量でも、観

測方程式の厳密解を求める計算などに応用できるでしょう。

for (i = 1; i<=n; i++) {
        
for (j = 1; j<=m; j++) {
                
ij=(i-1)*m + j;
                c[ij]=a[ij] + b[ij];
        }
}

ij の二重ループになっています。外側の i のループは行のループで、

内側の j のループは列のループです。変数 ij には、二次元配列の添え字

i j を一次元配列の添え字に変換した値が入ります。

順に追いかけてみると、次のようになります。

 

      i = 1 で j = 1 のとき ij = (1-1)*3 + 1 = 1

                 c[1] = a[1] + b[1]

             j = 2 のとき ij = (1-1)*3 + 2 = 2

                 c[2] = a[2] + b[2]

             j = 3 のとき ij = (1-1)*3 + 3 = 3

                 c[3] = a[3] + b[3]

      i = 2 で j = 1 のとき ij = (2-1)*3 + 1 = 4

                 c[4] = a[4] + b[4]

             j = 2 のとき ij = (2-1)*3 + 2 = 5

                 c[5] = a[5] + b[5]

             j = 3 のとき ij = (2-1)*3 + 3 = 6

                 c[6] = a[6] + b[6]

      i = 3 で j = 1 のとき ij = (3-1)*3 + 1 = 7

                 c[7] = a[7] + b[7]

             j = 2 のとき ij = (3-1)*3 + 2 = 8

                 c[8] = a[8] + b[8]

             j = 3 のとき ij = (3-1)*3 + 3 = 9

                 c[9] = a[9] + b[9]

 

 

document.write ("<BR>");
for (i = 1; i<=n; i++) {
        
for (j = 1; j<=m; j++) {
                ij=(i-1)*m + j;
                document.write (c[ij], " ");
        
}
        document.write ("<BR>");
}

配列 c を画面出力させていますが、c[ij] の後の " " は、数値間にスペー

スをとるためです。また、document.write ("<BR>") で一行分出力した後、

改行します。

 


[もくじへ] [トップページへ] [次ページへ]