プレイ日記
おちゃめ ochame_nako
連立方程式を解くプログラムを作りました。X、Yを使った2つの式(どんな複雑な式でもOK)を入力するだけで解を分数で表示します。
11そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
公開キーは【 QDVDDXXD 】 です。 プログラムもこんな感じで比較的コンパクトです。 仕組みは単純でX、Yの係数を求めてそれから中学の数学の授業で習う加減法によって解いているだけです。(入力する式はプチコン3号で実行可能な形式に限り、4Xは4*Xのように記述する) なお、このプログラムは0~3のどのプログラムスロットに置いても動作するように作られていますが、作業用に動作スロットの1つ次のスロットも使用します。(スロット1で動作させる場合はスロット2を作業用に使用)
2そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
このプログラムが簡単に作れたのは式を評価するRVAL関数、分数計算を可能にするFRAC関数のお陰です。 RVAL関数はスロットの場所に依存しているので現在動作するスロットを取得できるSLOT関数も併用しています。上記公開キーにはこれら3つの自作関数のプログラムも同梱しています。 これらの自作関数は私が過去に作ったものであり詳細は下記のリンクを見てください。 RVAL関数 https://miiverse.nintendo.net/posts/AYMHAAADAAB2V0fZKWc_BQ FRAC関数 https://miiverse.nintendo.net/posts/AYMHAAADAAB2V0fZg_mRMQ SLOT関数 https://miiverse.nintendo.net/posts/AYIHAAAEAACHVRTs1c4kFA
2そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
このプログラムは単に二元一次連立方程式を解くだけのプログラムですが行列を使って多元一次連立方程式を解くように改造したり、(大幅な改造が必要ですが)自由な式を入力するだけで平方根の状態で表示できる二次方程式を解くプログラムを作るというようなことも可能なので興味がある人はチャレンジしてみてはいかがでしょうか。
2そうだね
プレイ済み
返信[4]
親投稿
NAGI KOUCHA_PAN
式評価するプログラムをつくるひつようがあったのでこういうのたすかります
0そうだね
プレイ済み
返信[5]
親投稿
RVAL()とSLOT()は相性が良いですよね。 ボクもよく使っています。
1そうだね
プレイ済み
返信[6]
親投稿
そひ ladixsofiya
度々 式を評価 という言葉を目にして来たけど この式すげー 88888 と プログラムで褒めてくれる様なモノだろう と未だに思ってます。
2そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
NAGIさんへ RVAL()関数は非常にサイズが小さくプチコン3号の(自作関数を含む)すべての関数、演算子、システム変数、定数リテラルに対応しているというメリットがある反面で標準では変数には対応していない、基本的にスロット0での動作になってしまうというデメリットもあります。 前者のデメリットは簡易関数電卓やこの連立方程式を解くプログラムのように特定の変数のみ対応させることは可能で後者のデメリットはSLOT()関数を併用することで対応が可能です。 あとRVAL()関数は仕様上プログラムスロットを動作用とは別に作業用に1つ使ってしまいますが、それがどうしても気になるならばMIKIさんのYYEVAL()をお使いください。 https://miiverse.nintendo.net/posts/AYIHAAAEAABEVRTuNIUIpQ
1そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
MIKIさんのYYEVAL()のプログラムを見れば真っ当な方法で式を評価するというのがどれだけ大変なのかが分かると思うし、これを見た後だとRVAL()がいかに単純なものかが分かると思います。        《 仕様比較表 》        RVAL()  YYEVAL() 自作関数    ○     × 組み込み関数  ○     ○ 演算子     ○     ○ システム変数  ○     × 定数リテラル  ○     ○ 変数      ×     ○ 速度※    147μs   241μs 特長   超コンパクト プログラムスロットを別途使用しない ※速度比較は"1+1"で行いましたが、複雑な式でも速度が落ちにくいRVAL()と比べてYYEVAL()はリアルタイムの構文解析のため複雑な式だとどんどん遅くなります。("1+1+1+1+1"だと156μsと575μsとなる)
1そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
これを見ての通りRVAL()とYYEVAL()はそれぞれメリット、デメリットが異なるのでどちらが良いかというより自分に合った方を使うと良いです。 RVAL()は自作関数に対応しているというメリットを活かして簡易関数電卓QSPに自由な機能を追加させたりOSもどきとして活用したりということも可能となりました。(特定の変数を数個対応させるだけならばわずかな改造だけで済むので簡単だし)
1そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
こういちさんへ RVAL()関数はメリット、デメリットの両面があり使いどころが難しい関数ですが、SLOT()と組み合わせることで使いどころがかなり増えますからね。 私は今までに様々な自作関数を作ってきましたが、合わせ技でここまで便利になる自作関数はなかなかありません。(合わせ技前提のSUFFIX()関数は例外ですが) ちなみに私が良く使う自作関数はRVAL()、SLOT()、PSTR$()、SUFFIX()あたりですね。 TIMER()、NEW3DS()、INFNAN()などもよく使っていましたが、MILLISEC、HARDWARE、CLASSIFY()登場で不要になりました。 Miiverseが無くなると今まで作った自作関数の大半が検索不能になってしまうためそれまでには自サイトの方で今まで作った自作関数をまとめたいと思います。
0そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
ちなみにINFNAN()関数はこんな簡単なプログラムです。 DEF INFNAN(A) RETURN (A!=A)+(A*0!=A*0) END これでCLASSIFY()と同様にinfならば1、nanならば2を返すことで判定可能です。興味があれば、なぜ、そのような動作になるのかを考えてみると良いかもしれません。
1そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
そひさんへ 式の評価という観点からすると私のRVAL()よりMIKIさんのYYEVAL()の方が遙かにすごいことをしています。 あくまで私の方は一発芸みたいなもので式の評価そのものはプチコン3号が行ってくれているのでそれを活用させてもらっているだけにすぎません。 「工夫次第でこんな短い処理でこんなことができる」というのを作るのが私にとっての喜びであるため私自身はこれで問題ないと思っていますが。(というか、昔ポケコンで真っ当に式の評価をするプログラムを書いたことがあるだけに真っ当なものは大変なのが分かっていて作る気がしなかった)
0そうだね
プレイ済み
返信[13]
親投稿
おちゃめ ochame_nako
個人的にはRVAL()のプログラムには特に問題はないと思っているのですが、ver.2.0を作った時にはエラーチェックがないからセキュリティ上の問題があると意味不明な意見をもらいました。 当時から思っていましたが、今見てもこの大量のコメントはギャグで言っているとしか思えません。 https://miiverse.nintendo.net/posts/AYIHAAAEAAArVRTrtY_eMQ EVAL系は脆弱性の元となるため一般的には使用しないことが推奨されているけどプチコン3号においてはこれは当てはまりません。
0そうだね
プレイ済み
返信[14]
親投稿
NAGI KOUCHA_PAN
要素数の異なる複数の配列をサフィックスで一括管理するスクリプトを書けないかと思ってたのですが(疑似オブジェクト指向的な)、別スロットを使うという性質上変数を使うのは難しいようですね。YYEVAL()のほうはポリゴンモデルの描画速度向上という目的なので難しいかも
0そうだね
プレイ済み
返信[15]
親投稿
おちゃめ ochame_nako
NAGIさんへ プチコン3号はグローバル変数でもプログラムスロットごとに別に管理されているためRVAL()のように別スロットで動作させる場合にはスロット間の値のやりとりが必要になります。 これは最初から使う変数が決まっている場合は簡単に対応が可能であるもののそうでない場合には構文解析が必要になり「ユーザーの手による構文解析が不要であるため非常にコンパクトで式の評価プログラムとしては比較的高速」というRVAL()のメリットが台無しになってしまいます。 速度面を考えると普通に記述するのが一番だと思います。
1そうだね
プレイ済み
返信[16]
親投稿
REN立方程式を解くプログラム… キルヒホックの第二法則を使って回路を解くときに便利そうですね。 (二元一次にするところまでは自力で)
2そうだね
プレイ済み
返信[17]
親投稿
Hanzo rzsense
・・・キルヒホッフでは?
2そうだね
プレイ済み
返信[18]
親投稿
NAGI KOUCHA_PAN
こういちさんは電子工学好きなんですか?さいきん3DSラ○ン製作しようとしてみごとに失敗しました
1そうだね
プレイ済み
返信[19]
親投稿
hanzoさん はうぅ。間違えた。恥ずかしいですぅ。 NAGIさん 電子工学ももちろん好きですが、最近一番はまっているのは無線工学です。
2そうだね
プレイ済み
返信[20]
親投稿
Hanzo rzsense
前述の指摘をネタバレにせず、恐縮です。 「ラジオの製作」から「マイコンBASICマガジン」がスピンオフした過渡期を覚えている者としては、電子・無線工学と、コンピュータープログラミングの相性が抜群なのは、ごく自然なことに思えます。
1そうだね
プレイ済み
返信[21]
親投稿
NAGI KOUCHA_PAN
BASICマガジンてラジオの製作のスピンオフだったのかー
0そうだね
プレイ済み
返信[22]
親投稿
おちゃめ ochame_nako
電子工作の話題で盛り上がっていますね~ 私は電子工作はあまり得意ではないですが、RVAL()は様々な計算プログラムに活用できると思います。
1そうだね
プレイ済み