------------------------------------------------------------------------ 多項式処理システム Version 0.17 1996/08/10 ・ TAKu ------------------------------------------------------------------------ ■なにこれ?      一言で言えば、展開や因数分解など整式の計算をするプログラムです。     (x+y)^2と入力すれば、x^2+2x*y+y^2と答えがでてきます。値ではなく、     式がでてくるところがポイントです。 ■動作環境      DOS汎用です。また、日本語が表示できる環境が必要です。      KI-Shell(後述)があると操作性が非常に向上します。 ■実行方法      コマンドラインから        A:\>polyn リターン         ~~~~~ ~~~~     として実行すると、プログラム名などが表示されてプロンプトが表示さ     れます。ここで、展開したい式を打ち込みます。たとえば、次のように     入力します。        > (x+y)^2 リターン         ~~~~~~~ ~~~~        x^2 + 2x*y + y^2     そして、q:で終了します。        > q: リターン         ~~ ~~~~           石野恵一郎氏らによるKI-Shellを利用すると、本プログラムで行編集     機能およびヒストリ機能が利用出来るようになり、操作性が格段に向上     します。ぜひお試しください。      KSH(KI-Shellのプログラム名)を常駐させてない方は、        KSH -+     などとして、必ず、+オプションをつけてください。      KSHを既に常駐させている時は、+オプションを確認してください。常     駐時に+オプションをつけていない場合はコマンドラインから        //+     として+オプションを有効にしてください。      あとは、polyn.exeを起動するだけでKI-Shellの機能が利用出来ます。     エディタのように[←][→]が使え、[↑][↓]でヒストリが呼び出せます。     くわしくは、KI-Shellのドキュメントをお読みください。      KI-Shellは[NIFTY-Serve FGALTL LIB 9]などにあります。      また、リダイレクトを利用することもできます。        ex. polyn outfile.txt ■文  ●スペースとタブ      文字列を除く、文の中では、半角スペースとタブは無視されます。    <例>  2 * x - 1 0 + a b c → 2x-10+abc  ●コメント(; or #)      行の途中に # または ; が現れると、そこから行末までは無視されま     す。    <例>  (x+y+z)^2 ;展開する  ●メッセージ表示($)      行頭に $ があると、その行の実行の前に、$に続く文字列を表示しま     す。    <例1> $(x+y+z)^2 =        (x+y+z)^2        <例2> (x+y+z)^2 $(x+y+z)^2 =  ●行の継続(\)      途中に \ があると、そこから行末までを無視し、次の行をその後に     連結します。複雑な式をファイルから入力するときに便利です。    <例>  ;↓これは、1+2+3+4+5+6+7+8+9+10+100+1000+10000+abcdefと同じ        1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + \        9 + 10 + 100 + 1000 + 10 \        000 + abc\        def  ●変数の定義(変数名=式)      変数を定義します。変数は定義しない使い方もあるので、注意するこ     と。      実行方法の所の例((x+y)^2 -> x^2+2x*y+y^2)では、ある変数を使え     ば、その変数がそのまま出てきました。ここで説明する変数は定義して     使うものです。両者の違いを簡単に述べると、定義する方は代入のイメ     ージに近いとおもいます。ただ、ルールを考えているわけではないので、     ループとなる定義をしても、ある回数で打ちきります。    <例1> n:0 ;代入回数を0に設定        p = (x+1)^2 ;定義する        q = 10        p ;pが表示される        n:1 ;代入回数を1に設定        p ;pの内容である、x^2+2x+1が表示される        x=7 ;xも定義する        p ;でも、代入回数が1回だからx^2+2x+1と出る        n:1 ;代入回数を2に設定        p ;x=7に従って計算され、64と表示される    <例2> five = 5 ;変数名は文字列でも良い  ●式の展開(式)      式を展開します。n:で指定した回数だけ代入処理を行います。    <例>  (a+b+c+d)^3  ●コマンド      polynにはいくつかのコマンドがあります。       ・因数分解     i:式          式を因数分解します。n:の指定にしたがって代入処理を行い         ます。まだ、テスト段階ですので結果は保証できません。       ・素因数分解    s:定数          指定した数を素因数分解(素数の積で表す)します。       ・エラトステネスのふるい  e:定数-定数          指定した範囲のなかで素数であるものを表示します。       ・全変数のクリアー c:          すべての変数をクリアーします。       ・変数の表示    l:          使用している変数のリストを表示します。       ・ヘルプの表示   h:          ヘルプを表示します。       ・内部情報の表示  z:          各種情報を表示します。       ・代入回数の設定  n:定数          後述の定義の代入の回数を変更します。デフォルトは0回で、         変数への代入は行わない状態です。       ・終了       q:          プログラムを終了します。 ●式      式には、定数、変数、演算子が使えます。係数部分は、signed long型     (32bitパソコンで -2147483648〜2147483647)です。ただし、計算の途中     でオーバーフローが発生する場合がありますので十分注意してください。     指数部分は、unsigned int型(0 〜 65565)です。変数は、最大256個が使     用可能です。演算子は、単項+、単項-、+、-、*、/(商)、%(余剰)、^(べ     き乗)、(、)、の10種類が使用可能です。ただし、^の直後には定数以外     は書けません。優先順位は、()、^、*/%、+-の順です。また、(式)の直     前の*(乗算演算子)は省略が可能です。      式が正しくない場合、ほとんどの場合はエラーメッセージを出力しま     すが、結果が正しくない場合があります。  ●定数      定数は、正数のみが使用可能です。負号つきのものは、負の定数とで     はなく、式または項に負号がついたものとみなします。      また、一般に定数とは言いませんが、値として扱えるものは定数扱い     とし、以下の階乗や順列・組み合わせ関連の記号が使用可能です。(以     下ではCやDの左右に括弧を用いていますが、定数に括弧は使えませ     ん。)        階乗     n!     = 1*2*...*n        順列     nPr    = n*(n-1)*...*(n+r-1)        重複順列   nΠr    = n^r        組合せ    nCr    = nPr/(1*2*...*r)        重複組合せ  nHr    = (n+r-1)Cr        完全順列   nD     = (n-1)((n-1)D+(n-2)D) ■今後の予定      今後の予定には、        置き換えた後、更に因数分解する        (x^2+x+1)(x^4-x^2+1)の因数分解(2次(以上)式×3次(以上)式)        因数分解の範囲(レベル)を可変にする        ログをとる        変数のセーブ・ロードをする        因数分解の3変数対応        C++化して、係数を多倍長整数にする(桁数を増やす)        少し高速化     などがあります。おたのしみに。      あと、UNIXでコンパイルしなおして、WWW上で使えるようにするか     も。 ■その他      このプログラムは、メガソフトのエディタMIFES Ver 5.01で書かれ、     MicrosoftのCコンパイラQuick-Cでコンパイル・リンクされています。      それにしても、必ず因数分解できるプログラムが作れないということ     なら、このプログラムはいつになってもテスト版のままなのだろうか?     ううむ。 ■著作権・使用条件・配布条件      本プログラムおよびドキュメントの著作権はTAKuが保有していま     す。本プログラムはフリーソフトウェアです。本プログラムの使用によ     って引き起こされたいかなる事態に対しても作者は一切関知しません。     転載・再配布は自由ですが、作者に連絡の上アーカイブを変更せずに行     ってください。 ■バージョンアップ履歴    ・Version 0.17 1996/08/10      NIFTY-Serve FGALAP LIB 16にアップロード先を変更。      変数名を文字列対応にした。      変数の最大数を255個にした。(今回は52個までではないので・・・。)      p:を$に変更。      行頭からという制限を廃止。      メモリモデルを変更して、64KBを脱出。      その他、いろいろと細かい修正。    ・Version 0.16 1996/05/16      なぜか、バージョンと日付が一致(^^;      因数の最大数を64個にした。      変数の最大数を64個にした。(実は、アルファベットだけなので52個ま     でしかできないのだ。^^;)      複2次式の因数分解。      DOS function 0Ahの利用でKI-Shellと組み合わせると、行編集&ヒスト     リが使用できるようにした。      因数分解で1変数の場合の置き換えをサポート。(ex: x^4+2x^2+1)      素数判定で0の時のバグ修正。    ・Version 0.15 1996/02/12      %(余剰)のバグ修正。      2変数3次以上で定数項が0かつ各変数が対称なとき(ex: x^3-y^3)に     因数分解できないバグを修正。    ・Version 0.14 1996/02/11      2変数までのn次の因数分解に対応。      組合せ(nCr)の精度改善。    ・Version 0.13 1996/02/08      定義できる変数関連の機能を追加。      内部情報表示を追加。    ・Version 0.12      素因数分解・エラトステネスのふるいを追加。      順列・組み合わせ関係の記号を追加。    ・Version 0.11      プロンプト表示を追加。      大文字のコマンドも受け付けるようにした。      行の途中からのコメントに対応。    ・Version 0.10 1996/02/01      NIFTY-Serve FGALTL LIB 10にアップロード。 ■連絡先      作者の連絡先は以下のとおりです。御意見、御要望、バグ報告、動作     報告、御寄付、などなどありましたら、ご連絡ください。        NIFTY-Serve ID: VFE10364        Internet e-mail: sasao@mxs.meshnet.or.jp         Home Page URL: http://www2b.meshnet.or.jp/~taku/ ------------------------------------------------------------------------