sub_set01へ戻る

名称 ・・・・・・・

2次式の解法(解の公式)

ルーチン名 ・・・・・・・

Formula2D

スクリプトNo ・・・・・・・ sub_set01- 014
file名 ・・・・・・・ ScriptSet01.lzh
sub_set01のページからセットごとダウンロードしてください。
概略 ・・・・・・・

1次式について各項の係数から解を求める。

使用前提 ・・・・・・・

結果(戻り値)を受ける通常のバリアント変数を用意(宣言)しておく。

依存関係 ・・・・・・・

特に無し

引数説明 ・・・・・・・

a
b
c

(in)2次式の2次の項の係数。
(in)2次式の1次の項の係数。
(in)2次式の定数項。

戻り値説明 ・・・・・・・

2次式の解(0〜2個)戻る。
要素0は判定用に使われるので、要素1以降に解の個数に応じて結果(解)が格納される。

変数説明 ・・・・・・・

D
nd
t()

判別式の結果用の変数
解の数を保管する変数
処理の成否(要素0)と解(要素1以降)が格納される。

注意点 ・・・・・・・

複数解の可能性があるので変数tの配列要素数は動的に確保する。
解が無い場合も想定して、戻り値の配列要素0には成否結果を格納するようにした。

 
スクリプト
'--------------2次式の解法(解の公式)
function Formula2D(a,b,c)
'2次式の解を求める。
'戻値---解(tパラメータ) 配列(1次元)0番目は成否に使用する。
'引数---
' a   :(in)2次式の2次の項の係数
' b   :(in)2次式の1次の項の係数
' c   :(in)2次式の定数項

  Dim D                  '判別式の結果用の変数
  Dim nd                 '解の数を保管する変数
  Dim t()                '解(tパラメータ)用変数

  D=round((b^2-4*a*c)*1000000)/1000000
  if D>0 then
    nd=2
    Redim t(nd)
    t(0)=true
    t(1)=(-b+sqr(b^2-4*a*c))/(2*a)
    t(2)=(-b-sqr(b^2-4*a*c))/(2*a)
  elseif D=0 then
    nd=1
    redim t(nd)
    t(0)=true
    t(1)=(-b+sqr(b^2-4*a*c))/(2*a)
  elseif D<0 then
    nd=0
    Redim t(nd)
    t(0)=false
  end if

  Formula2D=t
end function
使用例
主サブルーチンの例題を参照してください。

sub_set01へ戻る