2013-04-02 23:15:00Morris

[PHP][作業] 陣列使用

題目內容:

•由表單任意輸入兩正整數,並由這兩個數字間隨機產生20個不重覆的正整數,並判斷每一個數字是否為質數,顯示出來(使用陣列、函式與引入檔,降低程式複雜度)。
•1.若是兩個數字間不足20個,或是有一個數字為0或負數,請顯式錯誤重新輸入。
•2.全部檔案數為三個,表單輸入頁,結果輸出頁,函式頁。








作業分成三個檔案 hw3.php, hw3_2.php, hw3_inc.php

也就是依序下面幾個分隔線之間的檔案
由於流程上有點怪怪的
,也就是在重新輸入的處理上,要怎麼進行跳轉頁面?
結果很奇怪地先呼叫 hw3.php 之後再 hw3_2.php 進行 loop,然後在 hw3_2 include
hw3_inc.php。

檢查重複的部分偷偷使用 array() 中的預設值 0, 然後用 hash 的方式去查找是否使用過,而不是儲存在陣列中,然後依序比較。


<html>
    <head>
        <title></title>
    </head>
    <body>
        <form method="GET" action="hw3_2.php">
            <?php
                echo '<input type="text" name="num1">第一個數字<br>';
                echo '<input type="text" name="num2">第二個數字<br>';
                echo '<input name="xx" type="submit" value="Submit"/>';
                echo '<input type="reset" value="Clear"/>';
            ?>
        </form>
    </body>
</html>


<html>
    <head>
        <title></title>
    </head>
    <body>
        <form method="GET" action="hw3_2.php">
            <?php
                $errorflag = false;
                if($_GET['num1'] != null && $_GET['num2'] != null) {
                    $L = min($_GET['num1'], $_GET['num2']);
                    $R = max($_GET['num1'], $_GET['num2']);
                    if($L <= 0 || $R <= 0 || $R-$L+1 < 20)
                        $errorflag = true;
                }
                if($_GET['xx'] == null || $_GET['num1'] == null || $_GET['num2'] == null || $errorflag) {
                    echo '<input type="text" name="num1">第一個數字<br>';
                    echo '<input type="text" name="num2">第二個數字<br>';
                    echo '<input name="xx" type="submit" value="Submit"/>';
                    echo '<input type="reset" value="Clear"/>';
                    echo '<br>請重新輸入<br>';
                } else {
                    echo '<br>';
                    include "hw3_inc.php";
                    $mark_array = array();
                    for($i = 1; $i <= 20; $i++) {
                        do {
                            $x = rand($L, $R);
                        } while($mark_array[$x] == 1);
                        $mark_array[$x] = 1;
                        echo "第 $i 個數 $x<br>";
                        echo "$x";
                        if(!isPrime($x))
                            echo "不";
                        echo "是質數<br><br>";
                    }
                }
            ?>
        </form>
    </body>
</html>


<?php
    function isPrime($n) {
        if($n < 2)
            return 0;
        for($i = 2; $i*$i <= $n; $i++) {
            if($n % $i == 0)
                return 0;
        }
        return 1;
    }
?>