LoginSignup
30
31

More than 5 years have passed since last update.

初心者なのでPHPで円の面積を求めてみた

Last updated at Posted at 2016-03-11

整数で値をひとつ読み込み、それを半径とする円の面積を求めて表示するプログラムを作成しなさい。 円周率は3.14とし、計算結果は、小数第2位を四捨五入して小数第一位まで表示すること。

知恵袋方面に上記のプログラムをPHPで書きたい人がいるという噂を聞きました。世の中にはPHPの宿題が出る学校があったりするのかもしれません。PHPなら任せろー、というわけでPHPのLua拡張を利用して書いてみましょう。LuaもLua拡張も初心者ですが、がんばります!

まず手元のPHPのバージョンを確認します。今回はPHP 7.0.4を使います。

$ php -v
PHP 7.0.4 (cli) (built: Mar  9 2016 16:14:46) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans

手元のマシンはMacなのでLuaをHomebrewでインストール。

$ brew install lua

Lua拡張は2.0.0からPHP 7に対応しているので、これをダウンロード&ビルドします。

$ wget https://pecl.php.net/get/lua-2.0.0.tgz
$ tar xvzf lua-2.0.0.tgz
$ cd lua-2.0.0
$ phpize
$ ./configure --with-lua=$(brew --prefix lua)
$ make
$ make install

インストールできました。

$ php -dextension=lua.so -i |grep -C2 -i '^lua'
libXML streams => enabled

lua

--

lua support => enabled
lua extension version => 2.0.0
lua release => Lua 5.2.4
lua copyright => Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
lua authors => R. Ierusalimschy, L. H. de Figueiredo, W. Celes

mbstring

どうやら動きそうです。さっそく問題を解いてみましょう。

lua.php
<?php
if ($_SERVER['argc'] === 1) die();
$l = new lua();
$l->assign('input', $_SERVER['argv'][1]);
$l->eval(<<<'CODE'
    function round (x)
        return x>=0 and math.floor(x+0.5) or math.ceil(x-0.5)
    end

    pi_x100=314
    area_of_circle=round(pi_x100*input*input/10)/10
    print(string.format("%.1f\n", area_of_circle))
CODE
);

PHP(とLua)のプロの人ならスラスラ書けるのかもしれませんが、初心者なので割と時間がかかりました。では動かしてみましょう。

$ php -dextension=lua.so ./lua.php 1
3.1
$ php -dextension=lua.so ./lua.php 2
12.6
$ php -dextension=lua.so ./lua.php 3
28.3
$ php -dextension=lua.so ./lua.php 4
50.2

やった!初心者だけど出来ちゃった!

30
31
1

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
30
31