0. 前書き
@Nemesis さんのJavaで湯婆婆を実装してみるを他の言語でやってみた記事を見て、これはFortranでやらねばと思い記事にした次第です
1. 環境
以下の環境で動作確認しています
OS:Windows10 Home
$ gfortran --version
GNU Fortran (x86_64-posix-seh, Built by strawberryperl.com project) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Fortran環境が欲しいという方、とりあえずコンパイラ(gfortran
)があればよいです1
・Windows
このサイトを参考にしてください。きっと上手くいきます。試してないけど
・Linux
Ubuntuでやるならこんな感じですが、お好きなパッケージマネージャでそれっぽくインストールすれば手に入ります。
> sudo apt install gfortran
・mac
Macは(まだ)持っていないので詳しくは分かりませんが、こちらの記事を参考にお願いします
Mac (macOS Catalina, 10.15.2)にgfortranとPGI Fortran 19.10をインストールしたときの手順
2. いきなりコード
小細工満載ですが、以下がコードになります
ただですね、Windows環境でやる場合は、S-JISで保存してください(^q^)。
utf-8だと日本語が文字化けします(ネタではなく)。私が謝るのも変ですが、マジですみませんホントごめんなさい
program yubaba
implicit none
real :: rand
integer :: nRand
character(len=50):: originName
character(len=2):: newName
print*, "契約書だよ、そこに名前を書きな。"
read(*, *) originName
print*, len_trim(trim(adjustl(originName)))
print*, "フン。"//trim(adjustl(originName))//"というのかい。贅沢な名だねぇ。"
call random(rand)
nRand = 2*int(rand*len(trim(adjustl(originName)))/2) + 1
print*, nRand
newName = originName(nRand:nRand + 2)
print*, "今からお前の名前は"//trim(adjustl(newName))//"だ。"
print*, "いいかい、"//trim(adjustl(newName))//"だよ。分かったら返事をするんだ"//trim(adjustl(newName))//"!!"
contains
subroutine random(x)
implicit none
integer ::clock, seedsize
integer, allocatable :: seed(:)
real, intent(out) :: x
call random_seed(size = seedsize) !シードを格納するのに必要な配列サイズを取得.
allocate(seed(seedsize)) ! seed の配列数を決定
call system_clock(count=clock) !時間を取得
seed = clock
call random_seed(put=seed)
call random_number( x )
return
end subroutine random
end program yubaba
これをコピペしてコンパイルするとa.out
かa.exe
って実行ファイルが出来るので、そいつを実行してやれば動きます
> gfortran yubaba.f90
> ./a.out
契約書だよ、そこに名前を書きな。
山田太郎
フン。山田太郎というのかい。贅沢な名だねぇ。
今からお前の名前は太だ。
いいかい、太だよ。分かったら返事をするんだ太!!
3.解説
ここから先は、Fortran初めてだよって方向けにソースの解説に移ります。
coming soon!
-
自分の場合は、Latexの環境構築した時に入れたstrawberryperlのbuilt-inコンパイラをそのまま使ってて、Windowsでちゃんと環境構築した事ないです。。。 ↩