1. 知識問題(18)
1.1 (1)
配列と連想配列の主な違いはなんですか?
1.2 (1)
forループにおける、continueの意味はなんですか?
1.3 (2)
関数の中のコードは下記のうちどのタイミングで実行されますか?
該当するものをすべて答えよ
a. 定義したとき
b. 引数を与えられたとき
c. 関数名の後に()を記載したとき
1.5 (1)
hoo クラス に bar() という名前の関数があるとすると、関数を利用する際は
どの用に呼び出せばよいでしょうか?
1.6 (2)
下記の各行の出力を答えよ。
substr("kabushikigaisyawalker", 1, 2);
substr("kabushikigaisyawalker", 0, 3);
1.7 (3)
エスケープ文字とはなんですか
1.8 (1)
エスケープ文字の \n と \t はそれぞれ何を表しますか
1.9 (1)
文字列の先頭や末尾の空白文字を取り除く方法を答えよ。
1.11 (3)
function a() {
echo "a";
}
function b() {
echo "b";
return "b";
}
function c() {
// print(c)
echo "c";
echo b();
}
echo "c";
a();
c();
上記を実行したときの出力を答えよ
2 応用問題 (42)
2.1 (30)
下記のプログラムについて、下記の問に答えよ
function g($arr) {
$n = count($arr);
for ($i = 1; $i < $n; $i++) {
$key = $arr[$i];
$j = $i - 1;
while ($j >= 0 && $arr[$j] > $key) {
$arr[$j + 1] = $arr[$j];
$j--;
}
$arr[$j + 1] = $key;
}
return $arr;
}
2.1.1 (10)
下記の用に実行した結果場合の出力を回答せよ
$numbers = [9, 5, 1, 3, 8, 4, 7, 2, 6];
$x = g($numbers);
print_r($x);
を呼び出した場合の返り値を記載せよ。
2.1.2 (20)
g($arr)の役割を30字程度で簡潔に説明せよ。
3. 実技 (40)
3.1 (10)
連立方程式を解くプログラムを作成せよ
下記2式の連立方程式を解くとして、
$$ax + by + c = 0$$
$$dx + ey + f = 0$$
a, b, c, d, e, f を引数とし、解であるxとyをreturn するものとします。
function(a, b, c, d, e, f){
...
return x, y
}
ただし、連立方程式が解を持たない場合(null, null)をreturnするものとする。
3.2 (20)
モンテカルロ法を用いて円周率を求めていきます。
正方形と、それに内接する円を想定し、ランダムに点を打ち込むことで、正方形と円の面積比を求めることができます。
ここで測定された比を下記とする。
$$ 正方形の面積:円の面積 = A:B \cdots (式1)$$
また正方形の辺長を 2a とすると、
$$ 正方形の面積 =4a^{2} \cdots (式2)$$
$$ 円の面積=πa^{2} \cdots (式3)$$
式1,2,3 より、 円の面積を用いてπの値を求めることができる。
$$ π = 円の面積/a^{2} \cdots (式3)$$
すなわち、プログラムによって円の面積を近似することができれば、円周率を求めるプログラムを作成することができる。
3.2.1 (2)
下記は-1~1 を条件を満たす、ランダムな少数を出力する関数である。
下記において、 100で割り算をしている理由はなにか。
function generateRandomFloat() {
return mt_rand(-100, 100) / 100; // -1から1の範囲の乱数を生成
}
3.2.2 (3)
3.1.1 の 関数を利用し、下記の条件をみたす座標(x, y)を連想配列で出力する関数を作成せよ。
$$ -1 < x < 1 かつ -1 < y < 1 $$
出力例:
["x" => 0.21, "y" => -0.28];
3.2.3 (10)
2.1.2 で作成した座標が、内接円の中にあるか判定する関数を作成せよ。
円の式は下記である。
$$ x^2 + y^2 = 1 $$
3.2.4 (5)
2.1.3 で作成した判定を 10000回実行して、
内接円の中にあると判定された点の数を集計し、円周率を推定せよ。
3.3 (10)
数値の引数 n をひとつ持ち、以下の特徴を持つ関数 f(n)、g(n)を作成し、
g(5), g(396), g(3913) それぞれの結果を出力せよ。
関数 f(n)
n が 偶数なら n/2 を戻り値とする。
n が 奇数なら 3*n +1 を戻り値とする。
関数 g(n)
n を f(n)に渡し、結果を出力(echo)する。
更に、結果が1であれば処理を終了し、
1以外の値であれば結果を再度 g(n) に渡し、再起的に呼び出す。