新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

円の面積から円周率PIEを出してみる。シンプソン法。

2021-12-10 20:28:08 | Ruby

上は台形の公式を使って求めたもの。四季が単純で分かりやすいかも。

 X軸は0から100まで、区分は120個。C言語のサンプルがありました。ネットから拝借しました。3.14まで合ってます。一番驚いたのが、PDFファイルからCOPYできるようになっていたことです。

分割数を250個にあげてみました。3.141で一桁上がりました。

分割数を500に上げても3.141までしか合ってません。

分割数を1000に上げても、3.1415止まり。C言語では小数点以下6桁が限度かも。

 上のC言語のサンプルを参考にRubyでやってみました。for i in rangeでiは単に繰り返しで使ってるだけで、それでもOKのようです。r=100000にして、分割数200000。繰り返しのrange = 1..199999になることに注意ですかね。この数値の組み合わせでエラーになることもありました。追求してません。3.14159265まで合ってますかね。

 

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

円の面積からPIEを出してみる

2021-12-07 22:03:27 | Ruby

 円の方程式x*x + y*y =r*rですので、円の四分の一だけの面積を計算します。一個右との平均をとったつもりが、台形公式でした。ここでは小数点以下2桁まであってます。手間取ったのが、区分を小さくしようとすると、エラーになります。Rangeを大きくして、円の大きさも大きくすると、うまくいきました。

 東大教養学部のテキストを図書館借りてそのまま継続で借りて、半分しか読んでません。そのテキスト「Pythonによるプログラング入門」に、昔学生のときに見たこと有る、モンテカルロ法によるPIEの計算、がありました。それって円の面積とあまり変わらない、S=pai*pai*r*rで面積を数値積分すればPIEがでる。もっともarctangentだったか?使えると、単に計算で出るようですけど。

 Pythonのテキスト2冊借り続けてます。誰も借りないので、継続できます。今の図書館はよく出来てますね。借りるのも簡単。ネットを通りして自宅から借りたい本の予約もできます。借りるのと返すのは、図書館に行かないとならない。ネットからダウンロードで借りられるともっと便利かも。

小数点以下4桁まであってます。

小数点以下5桁まであってます。

小数点以下7桁まであってます。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EmacsでRubyのソースを書いてみる。

2021-11-25 14:53:00 | Ruby

 コンパイラさえ用意できていれば、ソースを書いて、M-x compile ruby testrb.rbと書いただけで、実行できました。デバッグできないと、使い物にならないのですけどね。

コメント (4)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

前回のトークン解析、一部おかしなところありました。

2021-11-07 08:41:17 | Ruby

 isdigitとisalphaには、nilの場合、falseを返しました。変数は基本、グローバルです。参考書ではそうなってます。が理由ですが、必要でないかも知れません。

 ”Others"となっている部分があり、不明でした。”EofToken"に換えたら、最後に不明の10がでなくなりました。def next_tokenはif分だらけの、少し長めです。

main部分です。

 実行は参考書と同じですので、トークン解析が終わりました。オブジェクトは一個しか作ってないようです。配列でも作ってそうですが、そうではないようです。配列にするのは簡単かもしれません。tokenとcodeをappendすればいいだけでしょう。appendでなく、pushでした。それより<<の方が、間違わないかも知れません。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

トークン解析、ネタ本(C言語)からRubyで書いてみました。

2021-11-06 08:35:44 | Ruby

 なんとかかんとか、それっぽく出来たと思います。これに続いて、逆ポーランド記法へ持っていくとこがあるので、それに持っていけるか?とにかく出来るとこから始めてみます。Eclipseはエラーが起きなくなると、使えますが、エラーが起きると、何が原因か不明で、困ります。とにかく、プロジェクトのクリーン、それでも駄目なら、再起動。でなんとか出来ました。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

何をやったら良いのか?迷ってました。

2021-11-03 22:09:18 | Ruby

 上は、ネタ本「C言語によるアルゴリズム入門」の電卓プログラムの前段、トークン解析をRubyに置き換えてみようかと、始めました。良くわからないので、出きれば同じようにやってみようと思ってますが、Rubyに無いenumとかで引っかかってましたが、結論としては、整数値と単語をつないでいるだけだと思い、Hashでも良いかも?或いは、配列の添字でも良いかもと思いました。

 とにかく、分かる範囲で、始めないと、進みませんから。

関数の定義と実行、これで出来たんですかね?

 その他に、図書館からPythonの参考書を2冊借りてますが、手一杯でできないかも?自分は昔買った本を見てますが、図書館のは新しい。「入門者のPython」と「Pythonによるプログラミング入門」、どっちも良いようですが、特に後者は、サンプルが短いが、お互いが関連性を持っている問題が、関数プログラミングを彷彿?とさせます。前者は例題が長いのですが、プログラムの開発のステップを踏んだ感じが良いと思います。自分はAnacondaを入れて、Spyderを使ってやってます。後者はitaとかいうライブラリを使っているためか?Spyderでは駄目で、IDLEを使う必要がありました。

 どちらも中断中です。(笑)

コメント (4)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Studentクラスで遊んでました。

2021-10-27 21:13:50 | Ruby

Structを使って、Studentクラスを作るようですが、不明な点がありました。

コメントアウトしてある部分とStructを使う場合、ほぼ同じということでしたが…。

p xとp x.nameで部分的に出力できましたが、kokugoやsansuにアクセスできませんでした。しかもp nameのnameはどこから来ているの?悩みます。

普通に、classを使ったほうが、思い通り動くようです。どんど晴れ。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

cametan-42さんのブログを見て、ハッとしました。

2021-10-27 13:37:42 | Ruby

 ハッとしたcametan-42さんのブログです。結構長くて、Pythonはよく分かりませんが、swapに付いてです。RubyとPythonは似ているとこも結構あります。

「C言語による実用アルゴリズム入門」の前半にSortのプログラムが何種類か載ってます。最も単純な、単純ソート法。値を入れ替える書き方が同じです。

 最も、Sortに関しては、メソッドがあるので、いじくり回す必要がないでしょう。でも、cametan_42さんによれば、添字を使わなくてできるのであれば、使わないのが、今風ということですので、sortを使うのが正解なんでしょう。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyのクラスで遊んでました。superの役割?

2021-10-25 15:23:28 | Ruby

superの役割は、派生クラスで基底クラスと同じメソッドを使う場合、superと書くと、基底クラスの同名のメソッドが呼ばれる。

派生クラスのinitializeが基底クラスのinitializeを呼んでいる。引数を指定できる。HyoujiとSetGoukeiがインスタンスに対応して、呼ばれている。

 上は、原田信一郎著の「Rubyプログラミング入門」のサンプルですが、3行ですが、内容が深い。未だスッキリしません。関数の定義もsuperの使い方も、どちらもです。superを使っているので、基底クラスが有るはず。||はORだと思いますが、どういうことなんですかね?関数の定義はセッターのように見えますが?

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyのクラスで遊んでました。attr_accessorに至るまで。

2021-10-24 19:46:19 | Ruby

インスタンスに初期値を与えて、確保する。

セッターとゲッターを使うとこんな感じ。

セッターの書き方に注意。関数を変数みたいに使える。でも、長くなってしまう。

attr_accessorを使うと、セッターとゲッターを作ったように、インスタンス変数(メンバー変数)と、言うようです。に、アクセスできますが、@goukeiだけは@無しでは駄目でした?。何故か?

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

まだ、素数で遊んでます!

2021-10-21 08:55:24 | Ruby

 この時点で、インタープリタはRuby27でした。最後の123456787654321で時間がかかったので、ハングアップかと思いましたので、停止しました。

 別にプロジェクトを作って、インタープリタもRuby30に換えました。123456787654321までは正常に処理。12345678987654321でハングアプと思いました。

 初めのプロジェクトに戻したので、Ruby27と思ってましたが、Ruby30に変わってました。しかも12345678987654321はハングアップするように見えたのですが、時間がかかっただけでした。良きに計らってくれてましたね。!。しかし、プロジェクト単位で、インタープリタを変えるっことが出来ると思ってました。どっかで手違いが有ったのかも知れません。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

素数で遊んでます。追記しました。

2021-10-20 10:35:43 | Ruby

 前回、素数かどうか判断するスクリプトでは、入力した数まで素数か?調べてました。でも、実際はそうではなくて、例えば101の場合だと11までの素数で割り切れないときは素数です。なので、素数のリストも小さくなりますし、その大きさの分だけ調べればいいので、速くなると思います。

 もう1個やってみたいのが、BigDecimal。123454321でハングアップするので、正しく実行できれば、嬉しいですね。本当はこの辺も良きに計らえ、でやってもらえると嬉しいですね。

追記)

 ネットで調べると、Bignumは予期に計らってくれる、ということです。VS Codeでやってみました。入力できないので、配列で入力に変えます。どうしたことか、123454321でもエラーになりません!eclipseのインタプリタが2.7だったので活けなかったのでしょうか?

cametan_42さんのコメントから、2つの数値間の素数は?上のようです。

 

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

cametan_42さんからコメント頂きました。御礼にサンプルを変更してみました。追記しました、

2021-10-17 15:13:32 | Ruby

 素数の取り扱いについてのサンプルを頂きましたので、入力した数が素数か?調べてみましたが、Rubyでは123454321の数値を入力するとハングアップするようです。良きに計らってくれないようです。

 それとtake_while{|x| x < 10000}.forceで、x > 500 and x < 10000とかは出来ないんですね。

 変数primesとPrimesの違いがあります。関数の外で宣言されていると、primesだと、関数の内部では参照できない。Primesだと出来る。$primesでも出来る。微妙な違いがあります。

コメント (2)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

cametan_42さんの練習問題twentyoneをRubyで書いてみる。

2021-10-15 07:51:35 | Ruby

cametan_42さんがPythonのリスト内包表記の練習問題の回答含みで書いてます。今回は21回目。

これくらい短いと、やっていることが分かりやすい。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

cametan_42さんの練習問題twentyをRubyで書いてみる。

2021-10-14 09:06:14 | Ruby

cametan_42さんがPythonのリスト内包表記の練習問題の回答含みで書いてます。今回は20回目。

単に数字を入力して、平均と合計を求めるにしては、ゴチャゴチャしてます。配列のインデックスを使わない、つもりでやってます。

 一方のcametan_42さんの回答を見ると、関数twentyにすべて含まれてます。これと同じにするには、ローカルクラスに対応してないと出来ないと思います。クラスを関数以外に持つと、インスタンスを作る必要があるし、最低でも1個のメンバー関数、メソッドが必要だと思うからです。

 上は何をしたかったのでしょうか?敢えて言うなら、普通にループを使えば、単純な問題です。でもeachを使っているので、同じでは?と思いつつ、whileは使いませんでした、と言える。三項演算子的、文章になりました。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする