=========================  数式グラフ黒板 BBGraph For Win10 v0.01  CopyRight 2025 May  http://kazutomimiyama.sakura.ne.jp  KazutomiMiyamaSub@gmail.com =========================  はじめに  これは約10年前、VB6で作った同ソフトのWIN10用移 植版です。  どちらかといえば、筆者の研鑽用に行った試みになり ます。  論理上自分の経験の中では難産の部類にあたるソフト で、今回は、再びの動作検証としていつでも動かせるよ うにwin10/.NET環境に移植するのが目的でした。  前回の製作もまた実験の部類が強ったのでユーザ氏に 対してはあまり実用上は寄与することも出来ないのかも しれません。おもちゃです。ご容赦ください。  研鑽なので、ソースのテキストをコピーして開発した のではなく紙のプリントアウトから一文字づつ打ち込ん で製作しました。事実上のハードコピーなので何も新し い機能は盛り込んでいません。  前回は、困難なブレークスルーのためやっつけ仕事だ ったので、付け足しやきりだしで無理に削ったところが あちこちに散見されます。  今回は、冗長なコードの整理整頓のたたき台の意味合 いも強いです。  コードがわかる人には読んでもらいたくはないのが本 音です。gotoエスケープ文があちこちにあります。  まだ構造化プログラミングに慣れていない、理解して いなかったふしがあちこちにあります。そのわりにはデ ータの継承に聞きかじりのクラスの概念をもちいていた り、今回まるで生きた化石をみるような気分でした。 :ですからこのコードの存在が忙しかった10年間つね に気になっていました。  ただ全体的な概念はおぼえていますが、個々の細かい 変数が言ったいなにを制御しているのか、細かいところ は全く分かりません。  実績のあるコードのハードコピーであるので動作して いるだけです。  異星人の遺跡から発掘した動作エンジンです。  <しつこい。笑  ーーーーー  使用条件  フリーソフトです。  使用配布は自由です。  動作条件  WIN10、vb2017で製作してあります。  WIN7、8、10、11で動作するはずです。  ーーーーー  使用方法  要素を組み合わせた任意の関数を計算し、またグラフ に目安図を出力します。  動作の段階としては、  横長の方程式を入力する窓にテキストベースで関数の 方程式を入力し、分析ボタンを押すとその式を論理分解 し、機械の内部に覚えこませます。  その覚えこんだ論理複合関数に対し、  ・素朴に電卓のように使用できます。  ・グラフを黒板相当画面に描画します。  ファイルの入出力の操作機能はありません。  グラフはPrintScreenなどで画面コピーし、  またグラフのための区間計算のデータは小さなテキス ト窓に出力するようにしてありますので、(csv形式) ctrl+Cなどでコピーしてください。  ・解析画面  sin(x)+cos(x)  のようにinputTXTの窓にキーボードから打ち込みます。 テキストボックスなのでctrl+vも使えます。  Alt+Lで、機械に認識させ、表示が出るのを確認しま す。  画面は下から  数式入力窓  不適切な文字を一次的に除去する窓  数式として成り立っているか判断する窓  機械が分析しておぼえこんだ数式論理を再 構成して表示した窓  分断化された数式論理のモジュールとして の表示  です。  一番下の数式入力以外の窓は皆モニター窓です。そこ から割り込み的にシステムにデータの入力を渡すことは できません。  この状態で、  x値入力窓と計算ボタンAlt+Cを使うことができます。 outputの画面に電卓のように数値が出ます。  グラフィックの画面に小さい丸がでるのは解析された 子関数の論理的な順番と優先順位としての深度を意味し ています。  煩雑になるので通常は関数グラフ画面は表示されてい ません。鍵の意味もあるチェックボックスをAlt+Uで外 し、グラフボタンを押すと:Alt+G:描画画面が表示さ れます。  ・グラフ描画画面  グラフは背景色と線の色をプルダウンで選択できます。  デフォルトでは計算ステップは1000演算になって います。細かい指定をしたい場合には設定窓とボタンで 設定してください。  Alt+1で1000ステップ固定のチェックを外せます。  ステップ数値入力窓で任意の数値を入力できます。  許可閾値として、10万ステップまで入力することが できるように作ってありますが、動作が極端に遅くなり ますので2万程度が実際上上限です。  Calcボタン Alt+Cでステップ数に基づいて演算し、 配列メモリに格納し、:つまりまだ描画されません。表 示ボタンAlt+Eで初めて描画します。  ピクチャクリアボタン、Alt+Lで画面を消去し、xy 基準線を引き直します。基準線は描画範囲にしたがって 引かれます。  マウスで画面をクリックすればその座標の数値を表示 します。  描画範囲の指定について  x、y軸両方とも指定します。  小さい画面で数値を入力します。  上から  x最小値 薄い青  x最大値 濃い  y最小値 薄い橙  y最大値 濃い  同じ数値を入力するとアラートが出ます。  注意  範囲は自在に選択できますが、たとえば、  x軸方向に10、  y軸方向に100  の区間で指定すると、正方形の表示画面にその領域を 押し込みますので、例えばこの数値だと縦に圧縮された、 あたかも高重力の天体の扁平な生物のような形にゆがみ ます。ご注意ください。範囲値が同じならゆがみません。  データ値の出力  画面右下の小さな窓に縦二柱相当のcsvテキストが 出ます。カットアンドペーストctrl+Cで切り出せます。  ・そのほかの注意事項  +ー*・^などの演算子の優先を判断する機能は持っ ていません。  積を優先することもなく前の方から加法だろうがなん だろうが演算してしまいます。  積や累乗を優先させるときはカッコでくくってくださ い。  例  たとえば次のような入力を認識します。  (log(6.5^x)+sin(x))^2.5 +3  指数関数は e(x)のようにカッコでくくってください。 対数は自然対数です。  3のような単数字は、たとえば3を計数としてもつ 「1」という関数として認識しています。  表示可能な関数  sin()、cos()、tan()、hsin()、hcos()  三角、双曲線関数  e() log()  指数関数、対数関数  使用可能な演算子  + - * / ^ :優先順位なし  円周率やネイピア数は記号としては持っていません。 近似値を数値で入力してください。  オーバーフローについて  内部演算が無限大論理を示すとプログラムは強制終了 されます。  関数にはタンジェントや対数のように、数値の入力に よっては無限大に発散するものがあり、また0で除法し そうな論理についてはできるかぎり蓋をしたつもりです が:結果が1になるばあいはそうです。それでももれが あるかもしれません。  ーーーーー  内部構造について  か弱い生命体なので、あまりいじめないでください。 (笑)意地の悪い書き方で入力すると認識を間違えます。  動作構造  これは、内部にごく細かい演算用作業メモリを確保し ています。  それぞれが数式の前カッコに、配列のインデックスと して紐づけられ、その前カッコに割り当てられた微細領 域間で演算データを加減剰余します。  作ってみて後から気が付きましたが、C言語などの概 念としてのカッコ区切りと発想は全く同じです。  画面の一番上の窓に表示された記号が各前カッコの子 関数の詳細を示しています。  これはクラス構造体として管理され、  コロンの前の番号が配列のインデックスになります。  1:+s()1  背番号1番    前の構造体に加法でデータを渡す     sin関数      係数値=1  関数略号  v ボイド関数  カッコ内部の入れ子関数をそのまま親に渡します。  n 整数関数 カッコ内部の入れ子関数に整数を掛け て渡します。中身がない場合はn*x^0のように振 舞います。  s サイン  c コサイン  t タンジェント  $ 双曲線サイン  & 双曲線コサイン  e 指数関数  l 対数関数  :小文字のL  かっこと計算優先順位深度との関係は旧作のreadmeに 詳しいです。  内部論理流れ図 ' テキストコントロール ' ' InputTXT        <これだけ入力用 ' RMVUnSuitableCHRTXT ' FuncAsOneCHRTXT ' SourceE'uationTXT ' AnalysisTXT ' BracketLogicTXT ' ' :FunctionAnalyze ' '    イベントとプロシージャ   仲介引数       テキスト窓 ' ' WatchSTR logic InputTXT_TextChanged      <- InputTXT.text ' | : Change EachTimes ' v ' RMVUnSuitCHRSTR -> RMVUnSuitableCHRTXT.text ' | ' v v ' CreateCHRasFunc() <----- RMVUnSuitCHRSTR ' | ' <---------------> FuncAsOneCHRSTR -> FuncAsOneCHRTXT.text ' | ' V ' CHKEquationFormatSuit() -----------------------------> SourceEquationTXT.text ' v ' ExtractNumSTRToArr_declare ' NVoidFuncToSequenceSTR() ' & ' InputDataToBracketMemoryLogic() ' | ' | ' --------> [[Each FunctionBracket(Arr) and each proparty]] ' ' | ' v ' ExpressEquationResultAnalysis() -> AnalysisTXT.text ' & ' ExpressText_DrawPicDepthLogical() -> BracketLogicTXT.text ' -> BracketLogic Picture ' ' ----- ' XinputTXT.text ' v ' -----------> RealEngineFuncComplex() <> [[Each FunctionBracket(Arr)] ' /---< :Interface ' v ' CalcOutTXT.text ' ----- ' :Graphic ' ' GrapicForm. ' V ' x parameters region loop ' | ' |<-----loop-------> LogicForm.RealEngineFuncComplex() <> [[EachBracket ARR]] ' v ' ' YpointData(arr some1000times step) ' ' |A ' V| Loop call ' ' GForm. >> Graphic Drawing ====================  ドキュメントの終わり ====================