ishiducaの日記 このページをアンテナに追加 RSSフィード

2009-10-15

[][][]円の面積と円周を求める方法を考える 16:33 円の面積と円周を求める方法を考える - ishiducaの日記 を含むブックマーク はてなブックマーク - 円の面積と円周を求める方法を考える - ishiducaの日記 円の面積と円周を求める方法を考える - ishiducaの日記 のブックマークコメント

円の面積と円周を求める方法をいくつか。本当はオブジェクトつくってやりたいんだけど、さぼっていたのでリハビリのため、別の方法で書いてみた。

円周を求める関数( &ensyu($radius) ) と面積を求める関数( &menseki($radius) ) を使う

circle_pl

#!/usr/bin/perl -l
use strict;
use warnings;

my $rad = 3;    # 半径

print "半径 $rad";
print "円周 ", &ensyu( $rad );
print "面積 ", &menseki( $rad );

exit 0;

sub ensyu{
    my $r   = shift;
    my $pai = 3.14; # 円周率
    2 * $pai * $r;
}

sub menseki{
    my $r   = shift;
    my $pai = 3.14;
    $pai * $r ** 2;
}

結果

半径 3
円周 18.84
面積 28.26

難しいことをしてないので、悩まないでいいんだけど、別の円で(円周・面積)を求めるのに、毎回関数を呼び出すのが面倒だし、ここで求めた円周と面積が同一の円の要素かどうかは判別できない。このプログラムでは問題ないけど、たくさんの円を扱うようになると困るのかな〜って気がする。

なので、少し書き換えて、円をハッシュで定義して、円周と面積をこの円の要素にする方法を考えてみた

circle2_pl

my  $rad = 3;
my  %en  = &circle( $rad );

print "半径 $rad";
print "円周 ", $en{'ensyu'};
print "面積 ", $en{'menseki'};
exit 0;

sub circle{
    my $r   = shift;
    my $pai = 3.14;
    my $menseki = $pai * $r ** 2;
    (
        "radius",  $r,
        "ensyu",   2 * $pai * $r,
        "menseki", $menseki,
    );
}

上記の方法で個別の円を定義できたような気がする。ただ、一度円を定義すると半径を変更した場合、(例えば、半径を「5」にした場合)

$en{'radius'} = 5;

この方法だと面積・円周が変更前と変わらない。

なので更に、書き換えてみる。クロージャ(?)と無名のサブルーチンを使ってみた。

ハッシュを使うのは同じだけど、半径を変更したタイミング(じゃなくて、ハッシュのプロパティ(関数)を呼び出したタイミング)で、円周(もしくは面積)を変更できるものに

circle3_pl

#!/usr/bin/perl -l
use strict;
use warnings;

my $rad = 3;

sub circle{
    my $r   = shift;
    my $pai = 3.14;
    (
        'radius'  => sub{
            $r = shift if @_;
            $r;
        },
        'ensyu'   => sub{
            2 * $pai * $r;
        },
        'menseki' => sub{
            $pai * $r ** 2;
        },
    );
}

my %en = &circle( $rad );
print '半径 ', $en{'radius'}->();
print '円周 ', $en{'ensyu'}->();   # &{$en{'ensyu'}}と同じ
print '面積 ', $en{'menseki'}->();
print '';

# 半径を変更する
$en{'radius'}->(5);
print '半径 ', $en{'radius'}->();
print '円周 ', $en{'ensyu'}->();
print '面積 ', $en{'menseki'}->();
exit 0;

結果

半径 3
円周 18.84
面積 28.26

半径 5
円周 31.4
面積 78.5

Circleオブジェクト作れよって話ですね。...

MuchammatMuchammat2012/11/01 16:40Son of a gun, this is so hlepful!

skgaxalbmnskgaxalbmn2012/11/02 09:58JDG2Lm <a href="http://xzxepisbhkvz.com/">xzxepisbhkvz</a>

xdctjnxdctjn2012/11/04 23:134WkFUn <a href="http://vcffiznohtay.com/">vcffiznohtay</a>

fhfczzjfhfczzj2012/11/05 12:34ZHLIat , [url=http://qohvrqhbcoso.com/]qohvrqhbcoso[/url], [link=http://tqntyqxfqoxt.com/]tqntyqxfqoxt[/link], http://ztdvlyytdwon.com/

トラックバック - http://perl.g.hatena.ne.jp/ishiduca/20091015