LoginSignup
0
0

php習熟度テスト

Posted at

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) に渡し、再起的に呼び出す。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0