(5) 関数の定義と使い方

1.関数の定義と呼び出し

関数は
function 関数名(引数をカンマで区切って並べる){
  変数宣言や処理の内容
  return;
  }

と言う形で定義する。
引数は、関数の中で使いたい変数を受け渡す時に指定する。
return
の後ろに、計算式を記述するとその結果が関数の返す値になる。
呼び出す時は
関数名(引数をカンマで区切って並べる);


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>1.関数の定義と呼び出し</TITLE>
<SCRIPT language="JavaScript">
<!--
  function ooki(hensuu1,hensuu2){    //2つの数字の内、大きい方を返す関数の定義
    if(hensuu1>hensuu2){
      return hensuu1;
    }
    else{
      return hensuu2;
    }
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
<!--
document.open();         //これと、最後のdocument.close()を入れないと、ブラウザによっては表示処理が終了しない
document.write(ooki(10,20)); //上で定義した関数の呼び出し
document.close();
// -->
</SCRIPT>
<P align="center"><A href="JavaScript:window.close()">閉じる</A></P>
</BODY>
</HTML>


 




2.指定した個数の乱数を発生させる。

フォームのテキストボックスに入れた数字の個数だけ、乱数を表示する。
特に関数を定義するほどのものでもないが、練習、練習…


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 7.0.0.0 for Windows">
<META http-equiv="Content-Style-Type" content="text/css">
<title>2.指定した個数の乱数を発生させる</title>
<script language="JavaScript">
<!--

var Hairetu=new Array(0);


//============= 指定した個数の乱数を発生させて表示させる関数の定義
function RansuuHyouji(Hairetu,MaxNum){
  Hassei(Hairetu,MaxNum);   //乱数を発生させる関数を呼び出す。
  Hyouji(Hairetu,MaxNum);   //配列の内容を表示させる関数を呼び出す。
}

//============= 乱数で数字を発生させる関数の定義
function Hassei(Hairetu,MaxNum){
  for(var I=0; I<MaxNum; I++){
    Hairetu.unshift(Math.floor(Math.random()*100));
  }
}

//============= 配列の内容をtableとして表示させる関数の定義
function Hyouji(Hairetu,MaxNum){
  document.open();         //これと、最後のdocument.close()を入れないと、ブラウザによっては表示処理が終了しない

  document.write('<TABLE><TBODY><TR ALIGN="RIGHT"><TD WIDTH="30">');
  for(var I=0; I<MaxNum; I++){
    document.write(Hairetu[I]);
    if((I+1)%10==0){
      document.write('</TD></TR><TR ALIGN="RIGHT"><TD WIDTH="30">');
    }
    else{
      document.write('</TD><TD WIDTH="30">');
    }
  }
  document.write('</TBODY></TABLE><br>');
  document.write('<A href="JavaScript:window.close()">閉じる</a>');

document.close();

}

//-->
</script>
</head>
<body bgcolor="#FFFFFF">

<P align="center">指定した個数の乱数を発生させる</P>
<FORM name='Fm1'>数字の個数 <INPUT size="5" type="text" maxlength="3" name="Maxtxt" value="10">  <INPUT type="button" name="sort-btn" value="スタート" onclick='JavaScript:RansuuHyouji(Hairetu,Fm1.Maxtxt.value);'></FORM>
<P align="center"><A href="
JavaScript:window.close()">閉じる</A></P>
</body>
</html>


 




3.曜日を算出する

曜日は Date オブジェクトの getDay メソッドで簡単に求められるが、ここでは関数の定義と呼び出しの練習のために、わざわざ計算させてみる。
また、本来カエサル暦とグレゴリオ暦の使い分けが必要だが、ここでは単純化のためにグレゴリオ暦のルールだけを使う。
グレゴリオ暦のルールを簡単に説明すると

  1. 400で割り切れる年は必ず閏年とする。
  2. それら以外で100で割り切れる年は閏年ではない。
  3. それら以外で4で割り切れる年は閏年とする。

一見ややこしいルールだが、たった3つのルールで恒星年とのずれがほとんど無くなるという優れたルールでもある。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>2.曜日を算出する</TITLE>
<SCRIPT language="JavaScript">
<!--

//============= グローバル変数の宣言

  //              1 2 3 4 5 6 7 8  9 10 11 12
  var MDay=new Array(31,28,31,30,31,30,31,31,30,31,30,31);  //各月が何日あるか(2月はプログラム中で調整)
  var WDay=new Array('月','火','水','木','金','土','日');         //曜日の文字の配列

//============= メイン関数
  function FKeisan(){
    var Y1 = parseInt(document.YoubiFLM.InpNen.value);
    var M1 = parseInt(document.YoubiFLM.InpGatsu.value);
    var D1 = parseInt(document.YoubiFLM.InpHi.value);

    document.YoubiFLM.Youbi.value=WDay[FGrDay(Y1,M1,D1) % 7];
    return
  }

//============= 西暦1年1月1日からのグレゴリオ暦での日数
  function FGrDay(Y,M,D){

    return (Y-1) * 365 + FGrUruuDay(Y) + FGrMDay(Y,M) + D-1;
  }

//============= その年までにグレゴリオ暦で閏日が何日あったか(その年は含まない)
  function FGrUruuDay(Y){
    Y--; //その年は含まないので1を引く
    //400で割り切れる年の数 - 100で割り切れる年の数 + 4で割り切れる年の数
    return parseInt(Y / 400) - parseInt(Y / 100) + parseInt(Y / 4);
  }


//============= 1月1日からその月の前の月末までのグレゴリオ暦での日数
  function FGrMDay(Y,M){
    var MD=0; //MD初期化
    for (var I=0; I<M-1; I++){ //1月から当該月の前まで
      MD+=MDay[I]; //各月の日数を足して行く
    }
    if (FGrUruu(Y) && M>2) MD++; //閏年で3月以降なら1を足す
    return MD;
  }

//============= その年がグレゴリオ暦で閏年かどうか
  function FGrUruu(Y){
    var UR=false;
    if(Y % 400 == 0)
        return true;     //400で割り切れれば閏年
    else if (Y % 100 == 0)
        return false;    //それ以外で100で割り切れれば平年
    else if (Y % 4 == 0)
        return true;    //それ以外で4で割り切れれば閏年
    else
       return false;     //それ以外は平年
}

// -->
</SCRIPT>
</HEAD>
<BODY bgcolor="#FFFFFF">
<h1>指定年月日が何曜日か?</h1>
グレゴリオ暦(1582年10月15日以降)にしか対応していません。<br>
数字の範囲チェックもしていません。<br>
まあ、その内...<BR>
<FORM name="YoubiFLM">
 <pre>
  <input type="text" name="InpNen" value="20" size="5">年
  <input type="text" name="InpGatsu" value="" size="2.5">月
  <input type="text" name="InpHi" value="" size="2.5">日は
  <input type="button" name="Go" value="計算" size="10"
onClick="FKeisan()">
  <input type="text" name="Youbi" value="?" size="2.5">曜日です。
 </pre>
</FORM>
<P align="center"><A href="jvs-5.html">戻る</A></P>
</BODY>
</HTML>


 




戻る 進む