学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

PHPプログラミング入門その15 計算練習プログラムの作成

>>この記事には書き直した新しいページがあります。<<


<<前  [TOP]  次>>


簡単な計算練習プログラムを作成してみます。


大まかな設計内容です。

  • 1桁あるいは2桁の足し算と引き算を練習するプログラム
  • 桁数と加減いずれの練習をするかはユーザが選択できる
  • 加減の指定がない場合は足し算だけ行う


    ファイル構成です。
  • 【set-drill.html】練習する桁数・加減の指定などを行うHTML。それら指定の値を「drill.php」にpostする
  • 【drill.php】「set-drill.html」の指定をもとに問題表示と解答欄を表示。
             解答がされたら、問題数・各問題の値・加減のいずれなのか・解答の値を「drill-ans.php」へpostする
  • 【drill-ans.php】「drill.php」から渡された問題と加減の情報ならびに解答のデータから、それらと正解/不正解を表示


    以下のHTMLファイルと2つのPHPプログラムをメモ帳で作成して、「phpsample」フォルダに保存して下さい。


    【set-drill.html】

    <p>どの範囲で問題を出題しますか?</p>
    
    <form action="drill.php" method="post">
    
    	<p>
    		問題桁数<br>
    		<input type="radio" name="keta" value="1" checked>0-9まで<br>
    		<input type="radio" name="keta" value="2">0-99まで<br>
    	</p>
    
    	<p>
    		演算指定(指定がないときは足し算のみ行われます)<br>
    		<input type="checkbox" name="ka" checked>足し算<br>
    		<input type="checkbox" name="gen">引き算<br>
    	</p>
    
    	<input type="submit">
    	<input type="reset">
    
    </form>
    



    【drill.php】

    <p>計算練習</p>
    
    <?php
    	if ($_POST['keta']==1) {
    		$max="9";
    	}
    	else {
    		$max="99";
    	}
    	print("選択したのは0-${max}までの問題です。<br>\n");
    
    	// POSTされた加減に応じて配列を作成
    	foreach ($_POST as $index=>$val) {
    
    		switch ($index) {
    			case "ka":
    				$ope['ka']="ka";
    				break;
    			case "gen":
    				$ope['gen']="gen";
    				break;
    		}
    	}
    
    	// いずれもチェックされていないときの処理
    	if (count($ope)==0) {
    		$ope['ka']="ka";
    	}
    
    	$num=5;
    	print("全部で${num}問出題します。<br>\n");
    ?>
    
    <p>
    	<form action="drill-ans.php" method="post">
    
    		<?php
    			// 隠しフィールドで問題数を送信
    			print("<input type=\"hidden\" name=\"num\" value=\"${num}\">\n");
    
    			for ($i=0; $i<$num; $i++) {
    				print(($i+1)."問目  ");
    				$a=rand(0, $max);
    				$b=rand(0, $max);
    
    				// array_rand()は配列の要素をランダムに抽出する関数
    				$o = array_rand($ope);
    
    				switch ($o) {
    					case "ka":
    						print("${a} + ${b} = ");
    						break;
    					case "gen":
    						print("${a} - ${b} = ");
    						break;
    				}
    
    				// 値を変数○問目の形式で送信
    				print("<input type=\"text\" name=\"ans${i}\"><br>\n");
    				print("<input type=\"hidden\" name=\"a${i}\" value=\"${a}\">\n");
    				print("<input type=\"hidden\" name=\"b${i}\" value=\"${b}\">\n");
    				print("<input type=\"hidden\" name=\"ope${i}\" value=\"${o}\">\n");
    			}
    		?>
    
    		<input type="submit">
    		<input type="reset">
    	</form>
    </p>
    



    【drill-ans.php】

    <p>計算練習結果</p>
    
    <?php
    	$num = $_POST['num'];
    
    	for ($i=0; $i<$num; $i++) {
    		print(($i+1)."問目  ");
    
    		// 送信されたフィールドの内容を代入
    		$a = $_POST['a'.$i];
    		$b = $_POST['b'.$i];
    		$ope = $_POST['ope'.$i];
    		$ans = $_POST['ans'.$i];
    
    		switch ($ope) {
    			case "ka":
    				print("${a} + ${b} = ${ans} ");
    				if ($a+$b == $ans) {
    					print(" ....正解<br>\n");
    				}
    				else {
    					print(" ....不正解。答えは".($a+$b)."<br>\n");
    				}
    				break;
    			case "gen":
    				print("${a} - ${b} = ${ans} ");
    				if ($a-$b == $ans) {
    					print(" ....正解<br>\n");
    				}
    				else {
    					print(" ....不正解。答えは".($a-$b)."<br>\n");
    				}
    				break;
    		}
    
    	}
    ?>
    



    Apacheを起動し、Webブラウザで「http://localhost/phpsample/set-drill.html」にアクセスして実行結果を確認してください。











    <<前  [TOP]  次>>