2011/10/11

たけしのコマ大数学科(2011年10月11日放送分)


# たけしのコマ大数学科(2011年10月11日放送分)
# 上2桁と下2桁の和の平方とそれ自身の数が同じ4桁の非負整数を求める

(1000..9999).each{ |n|
str = n.to_s
ab = str[0..1].to_i + str[2..3].to_i
if ab * ab == n
p n
end
}

答えは「2025」「3025」「9801」の3つ。
数学的アプローチとしては「2乗した数の1桁目に表れる数は限られているので、そこから絞り込む」「方程式にして2次方程式の解の公式を用いて解く」。録画しないとやっぱダメだな。

2011/09/23

CppUnitなんとか動きはしたものの・・・




ものすごく無理矢理実行できるようにした感じ。いいのかこれで?

  • Includesに「C:/cpplib/cppunit-1.12.1/include」を追加

  • Librariesに「cppunit」「cppunit.dll」を追加

  • Library Pathsに「C:\cpplib\cppunit-1.12.1\src\cppunit\.libs」を追加

  • 「\cppunit-1.12.1\src\cppunit\.libs\」にある「libcppunit-1-12-1.dll」をパスが通ってるところにコピー

  • ビルドして実行するとポップアップが出るが、強行する旨にチェック入れて続行する



g++のオプションがよくわかってない。Eclipseのオプションの「Includes」が「-I」に、「Libraries」が「-l」に、「Library Paths」が「-L」に対応しているらしい。あと「-l」で指定する対象はlibXXXX.aみたいに接頭辞と拡張子が決まってるらしい。で、「-l」で指定するときはその接頭辞と拡張子を削除した名前を指定する。つまりg++においては「.a」ファイルは命名規則が決まっている。

2011/09/19

CppUnitインストールでエラー(解決)

埒が明かないので、MinGWを再インストールしてからCygwinではなくMinGWのシェルからmakeしたらうまくいったっぽい。
しかしテストの作成はうまくいかない。多分C++の基礎の基礎がわかっていないのが原因だと思う。基礎的な学習を終わらせてから出直した方がいいような気がする。
いつもいつもツールのインストールやパスの設定とかそのあたりが鬼門だ。コードを書くこと自体は大した問題にならないことが多いのだけども。


2011/09/18

CppUnitインストールでエラー

CppUnitインストールしようとしたが、makeでエラーになるな。Cygwin+MinGWでもいけるはずだが? ちょっと調べる。


2011/08/30

2種類のプログラム

人間社会にとって必要欠くべからざるプログラムというのがある。金融系のシステムなどまさにそうだが、それは止まることによって人を不幸にすることはあっても、動くことによって人を幸せにすることはない。一方、人間社会にとってなくてもいいようなプログラムもあって、それは止まっても人を不幸にはしないが、動くことによって人を幸せにする。それはある種の芸術作品のようなものであって、例えば美しいガラス細工は、仮に床に落ちて砕け散っても一瞬人々を悲しませるだけで彼らの生活を根底から脅かしたりはしない。しかし存在し輝きを放つだけで人々を幸せにする。前者のプログラムは、まさに産業機械の歯車そのものであり、それが止まることによって人々は致命的な打撃を受けるが、その鈍い輝きが人を喜ばせることは決してない。

自分が作りたいのが後者のプログラムであり、前者のそれでないということだけは、今はっきりとしている。

2011/08/28

Blogger Syntax Highlighter

ここを参考に「Blogger Syntax Highlighter」を導入した。
これでコードが読みやすくなる。


public static void main(String args[])
{
System.out.println("hoge");
}

2010/01/11

Pythonでモジュールをインポートする方法

モジュールというのはとりあえずここでは .py ファイルのことだとする。
要するに他の .py ファイルで指定された変数や関数を使用するにはどうすればいいのかということ。
例えば、以下のような .py ファイルがあるとする。

# file1.py
def sample(text):
print text

この file1.py で宣言された関数である sample を対話型シェルから使いたい場合、以下のように importステートメントを使用する。

>>> import file1
>>> file1.sample("hello")
hello

このとき、関数名の頭に「file1」を付けたくなければ以下のよう fromステートメントを使用すればいい。

>>> from file1 import sample
>>> sample("hello")
hello

「file1.py」から現在の名前空間に sample という変数をコピーしてくる、という動きになる。
便利ではあるが、名前空間にすでに sample という変数が存在した場合はそれを上書きしてしまうので注意が必要。

なお Python においては、変数はオブジェクト(関数もオブジェクト)へのリファレンスを格納するものなので、すでに宣言しているsampleが関数で、名前空間にコピーした sample が「変数」ならば上書きは起こらないのではないか? という疑問に対する答えは No になる。

ちなみに、インポート対象となる .py ファイルは以下の4つの場所から探される。

  1. プログラムのホームディレクトリ

  2. 環境変数「PYTHONPATH」で指定されたディレクトリ

  3. 標準ライブラリモジュールのディレクトリ

  4. 「.pth」ファイルに記載されたディレクトリ


ここで「ホームディレクトリ」とは、importステートメントを記述しているファイルが存在するディレクトリ、または対話型シェルを実行しているディレクトリのことを示す。