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;
}
?>
•由表單任意輸入兩正整數,並由這兩個數字間隨機產生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;
}
?>