• 検索結果がありません。

~モバイルを知る~ 日常生活とモバイルコンピューティング

N/A
N/A
Protected

Academic year: 2021

シェア "~モバイルを知る~ 日常生活とモバイルコンピューティング"

Copied!
25
0
0

読み込み中.... (全文を見る)

全文

(1)

Webプログラミングの基礎

PHPの基礎(8)

(2011/07/06)

政策情報学部

渡辺恭人

riho-m@cuc.ac.jp

メーリングリスト:riho-m-rg11@cuc.ac.jp:

資料ページ: http://www.cuc.ac.jp/~riho-m/rg11/

(2)

前回の課題

2

POSTでデータが送信されているかを確認 送信されていれば、sosu_check()関数の引数に渡す 送信されてなければ、初期の表示用文字列を作って下へ sosu_check()関数 引数が素数かどうかを 判定する 入力を促す初期メッセージを表示 フォームで判定したい数を入力させる ボタンをクリックしたら、データを自分自身に送信 “start”:ボタンが押された かどうか “target”:入力されたデータ

(3)

前回の課題:プログラム①

3

<?php if (isset($_POST["start"])) { $number = $_POST["target"]; sosu_check($number); $message = "続けて、素数かどうか調べたい数を入力してください。"; } else { $message = "素数かどうか調べたい数を入力してください。"; }

(4)

前回の課題:プログラム②

4

function sosu_check($a){

$s = "は素数です<br />";

for ($i = 2; $i <= ($a - 1); $i++){ if ($a % $i == 0) { $s = "は、素数ではありません<br />"; break; } } print $a . $s; } ?>

(5)

前回の課題:プログラム③

5

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head>

<body>

<?php print $message;?> <br>

<form method="post">

<input type="text" name="target" value=""><br /> <br>

<input type="submit" name="start" value="調べる"> </form>

</body> </html>

(6)

アルゴリズムの改善

• 情報システムの復習

• エラトステネスのふるいの定義通りのアルゴ

リズム

– 判定したい数はnを判定するための計算回数は、

• n-2

• これを改良して、時間を短縮させたい

– 計算回数を少なくする

– 例えば、判定したい数を2で割った数以上の数で

割る必要はない

6

(7)

どこを変更するか

• 繰り返し(for文)のところ

– 半分より小さい数だけで判定したい数を割る

– ($a - 1) のところ

• さらに改善されるアルゴリズムもある

– 判定したい数の平方根より小さい数で、判定した

い数を割る

7

(8)

文字化けについて

• Webアプリケーションでよく起きるトラブル

– データの入出力・メール送信などの個所で起きる

– Webブラウザ、Webサーバ、PHP、データベースサ

ーバなどの間で文字コードが正しく設定されてい

ないときに起こりうる

• 文字化けの原因

– 文字にはコードが多数ある(日本語にも数種類)

• 使う文字コードを統一するのも一つの方法

– PHPでどのように設定されているかを確認する

• Phpinfo()の表示のうち、mbstringカテゴリ

8

(9)

文字コード

• JIS(ISO-2022JP)

– 電子メールでの日本語

の文字コード

• SJIS(Shift JIS)

– WindowsやMS-DOS等で

普及した日本語の文字

コード

• EUC( Extended UNIX

Code)

– UNIXシステムで普及

• UTF-8

– コンピュータ上で多言語

の文字を単一の文字コ

ードで取り扱うために

1980年代に提唱された

文字コードである

Unicodeの一つ

9

(10)

PHPでの設定方法

• 3つ

– php.iniを設定

• 一般ユーザにはできない

– .htaccessを設定

• 使えないレンタルサーバもある

– PHPのスクリプト内で設定

10

(11)

PHPスクリプトの中で設定する

11

<?php

mb_internal_encoding ("

UTF-8

");

mb_http_output("

UTF-8

");

ob_start("mb_output_handler");

header("Content-Type: text/html; charset=

UTF-8

");

print "日本語を出力する";

?>

EmEditorで保存するときに、文字コードをUTF-8に

(12)

.htaccessファイルで設定する

• .htaccessファイル

– WebサーバのApacheの設定やPHPの設定、ユー

ザの認証を設定する

– Windowsでは、ドット「.」で始まるファイル名はつく

れないので、ドットのないファイル名で作成し、

www2に転送してから変更する

• 次の1行をhtaccessというファイル名で作成す

– WinSCPで転送して、ファイル名を .htaccessに変更

12

(13)

文字コードの確認

• 以下のプログラムを入力・保存し、WinSCPで

www2に転送してください

• Internet Explorerで実行する

• default_charsetの欄を見る

13

<?php

phpinfo();

?>

(14)

コンピュータとじゃんけん

• 手順

– グーを0、チョキーを1、パーを2とする。

– 人間はキーボードから手を数値で入力→変数A

– コンピュータは出す手を考える(ランダム)→変数B

– AとBを比較して、どちらが勝ちかを判断

– 結果を表示

• どちらが勝ちか判断するところがカギ!(アルゴリズ

ム)

– 条件の作り方

• いかに処理を簡単にするか→プログラムの実行速度も速くなる

14

(15)

15

じゃんけんの勝ち負け判定表

Aの値 Bの値 判定 0 (グー) 0 (グー) あいこ 0 (グー) 1 (チョキ) Aの勝ち 0 (グー) 2 (パー) Bの勝ち 1 (チョキ) 0 (グー) Bの勝ち 1 (チョキ) 1 (チョキ) あいこ 1 (チョキ) 2 (パー) Aの勝ち 2 (パー) 0 (グー) Aの勝ち 2 (パー) 1 (チョキ) Bの勝ち 2 (パー) 2 (パー) あいこ

(16)

16

条件を簡単にする

• 表をよく見る

– AとBが等しければ「あいこ」

– Bが勝ちの場合

• Aが0 (グー) かつ Bが2 (パー)、または

• Aが1 (チョキ) かつ Bが0 (グー)、または

• Aが2 (パー) かつ Bが1 (チョキ)

– 上記以外のとき「Aが勝ち」

• 消去法みたいなもの

(17)

17

条件をもっと簡単にできる

• 慣れも必要

• Bが勝ちの場合を数式化

– Aが0 (グー) かつ Bが2 (パー)、または

– Aが1 (チョキ) かつ Bが0 (グー)、または

– Aが2 (パー) かつ Bが1 (チョキ)

– 並べ替えや、四則演算や剰余の組み合わせで成立しないか考

える

• B+1を3で割った余りがAになる

– 3行の条件が1行になった

(18)

PHPでWeb版じゃんけんを作る

• 実は、おみくじプログラムと変わらない。

• 前半PHP

– POSTで自分自身に送信されたデータ(人間が入力した手

)があれば

• コンピュータの手をランダムで決める • 勝ち負けを判定し、$messageに結果を代入

– そうでなれければ、$messageに初期メッセージを代入

• 後半HTML

– ゲームタイトル等を表示

– Formのtextareaを使って、$messageを表示させる

– Formのラジオボタンで、グー、チョキ、パーを選ばせる

– ボタンを押すと、POSTで自分に送信

18

(19)

janken.php①

19

<?php if (isset($_POST["start"])) { $hand[] = "グー"; $hand[] = "チョキ"; $hand[] = "パー"; $myhand = rand(0, 2); $message = "あなたの手は" . $hand[$_POST["yourhand"]] . "ですね¥n"; $message .= "私の手は" . $hand[$myhand] . "です。¥n";

(20)

janken.php ②

20

if ($_POST["yourhand"] == $myhand){

$message .= "あいこです¥n";

} elseif ($_POST["yourhand"] == ($myhand + 1) % 3){

$message .= "私の勝ちです¥n";

} else {

$message .= "あなたの勝ちです¥n";

}

} else {

$message = "ここに結果が表示されます";

}

?>

(21)

janken.php ③

21

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>じゃんけんプログラム</title>

</head> <body>

<h2>コンピュータとじゃんけん</h2>

(22)

janken.php ④

22

<form method="post">

<textarea name="result" rows="5" cols="40"><?php print $message;?></textarea> <br>

<input type="radio" name="yourhand" value="0">グー <input type="radio" name="yourhand" value="1">チョキ <input type="radio" name="yourhand" value="2">パー

<input type="submit" name="start" value="じゃんけんをする"> </form>

</body> </html>

(23)

課題(1)

• 【基本】じゃんけんのプログラムを説明し、実

行結果を報告してください

• 【できればやってみて】5回対戦して、最後に

その結果を表示させるように改造してみてく

ださい

23

(24)

課題(2)

• 【基本】前回課題のプログラムを、改善された

アルゴリズムで改造し、動作を確認しなさい

• 【測定】オリジナルと上のプログラムの性能差

を確認するため、それぞれのプログラムのfor

文の前後に時間を計測する関数を入れ、そ

の差から、実行時間がどれくらいかを計測し

、その結果について報告しなさい

– ヒント: microtime()関数のマニュアルを見る

– 判定したい数: 9999991

– 実行回数:それぞれ10回

24

(25)

課題

• 提出方法

– メールで、riho-m-rg11@cuc.ac.jpに送る

• 形式

– Word等で、A4サイズ、枚数は上限なし

– 実行結果の画像などがあれば貼り付ける

– ファイル名:kadai0706-学籍番号.docx

• 締切

– 07/12 23:59

25

参照

関連したドキュメント

2021] .さらに対応するプログラミング言語も作

WAKE_IN ピンを Low から High にして DeepSleep モードから Active モードに移行し、. 16ch*8byte のデータ送信を行い、送信完了後に

この課題のパート 2 では、 Packet Tracer のシミュレーション モードを使用して、ローカル

題が検出されると、トラブルシューティングを開始するために必要なシステム状態の情報が Dell に送 信されます。SupportAssist は、 Windows

この chart の surface braid の closure が 2-twist spun terfoil と呼ばれている 2-knot に ambient isotopic で ある.4個の white vertex をもつ minimal chart

つの表が報告されているが︑その表題を示すと次のとおりである︒ 森秀雄 ︵北海道大学 ・当時︶によって発表されている ︒そこでは ︑五

○関計画課長

使用済自動車に搭載されているエアコンディショナーに冷媒としてフロン類が含まれている かどうかを確認する次の体制を記入してください。 (1又は2に○印をつけてください。 )