中2数学一次関数の式を求めるには?

解決


カタオカ  2006-01-07 19:52:07  No: 129430

VB.net超初心者です。皆さんとても高度な質問されている中恥ずかしい質問ですみません。
私は点A点Bの二点を通る直線の式を求めるというプログラムを作っています。点A(a, b)点B(c, d)各x, y座標は乱数で-10〜10を振り分けています。
y=mx+nを求めるにあたり、
m=(b-d)/(a-c)を解いた上
n=b-maの式を解かせようと思ったのです。
しかし悲しいほどの力不足の結果
Dim a, b, c, d As Integer
Dim m As Integer =( b - d ) / ( a - c)
Dim n As Integer = b - (m * a)
と打とうとした所エラーとなってしまいました。数々の資料を見ても尚わかりません(…多分基本的すぎる内容だから?)
どのようにしたらよいのでしょうか教えていただけませんか?
あと、傾きmや切片nは分数として表記したいのですがその方法もぜひお願いします。長文かつ稚拙な質問ですがなにとぞお願い申し上げます。


Dental  2006-01-07 21:08:47  No: 129431

> 乱数で-10〜10を振り分けています。
振り分けた部分のコードが書かれていないようですが。

> Dim a, b, c, d As Integer
この時点で、a〜d には、全て「0」という値が格納されています。

> Dim m As Integer =( b - d ) / ( a - c)
なのでこれは、「0 / 0」の結果を m に格納しようとしている事になります。

この場合の 0 除算自体はエラーにはなりませんが、
  「負数÷ゼロ = 正の無限大(Double.NegativeInfinity)」
  「ゼロ÷ゼロ = 非数値(Double.NaN)」
  「正数÷ゼロ = 正の無限大(Double.PositiveInfinity)」
となりますので、演算結果を Integer型変数 m に代入する事ができません。
(a〜d が Integer ではなく、Decimal だった場合はエラーになる)

> エラーとなってしまいました。
そのような時は、「何と言うエラーになっているのか」を明記しましょう。

Option Strict On モードの時は、実行すらできないはずです。
「( b - d ) / ( a - c)」の結果は Double 型になりますので、それを
Integer 型に代入する事は型変換エラーとなり、コンパイルに失敗します。

Option Strict Off モードの時は、実行する事は可能でしょう。
ですが、非数値(NaN)を Integer 型にする事はできないので、
型変換時にオーバーフローエラーが発生するはずです。

> 分数として表記したいのですが
分母と分子を、別々の変数として計算すればよいのでは。

A  B  子
━÷━=━
C  D  母

の計算だとしたら、結果は「子=A*D」「母=B*C」ですよね?
約分の事は、とりあえず後回しで考えればよし。
(既約分数にせずとも、計算結果としては間違いではないのですし)


カタオカ  2006-01-07 21:43:13  No: 129432

非常に早いかつわかり易いご返答ありがとうございます。
>振り分けた部分のコードが書かれていないようですが。
乱数はボタン1を押したとき発生するものとし、点A(a=label1, b=label2)点B(c=label3, d=label4)にあらわすようにした上、
a = Int(Rnd() * 20) - 10
b = Int(Rnd() * 20) - 10
中略
Label4.text = d
'(1)
としています。
>なのでこれは、「0 / 0」の結果を m に格納しようとしている事になります。
ということは乱数が振り分けられた後'(1)に式を書けば良いわけですよね?と思いましたが頭の部分を

Dim m,  n As Integer
だけにして'(1)の部分に
m =( b - d ) / ( a - c)
n = b - (m * a)
と打とうとしたところmを打つとm()となります。宣言されてないという波線が出て宣言について調べるも理解しがたかったです…情けなくてすみません。
>分母と分子を、別々の変数として計算すればよいのでは
というと分母= h 分子= i といった変数も定義すればいいわけですね。ありがとうございます。
>エラー
まさにオーバーフローです…


Dental  2006-01-07 22:13:10  No: 129433

> 宣言されてないという波線が出て
変数の有効範囲をチェックしましょう。

たとえば下記の場合、Button1_Click 内で宣言された変数 B は、
Button1_Click 内でしか使えませんが、Subプロシージャの外で宣言された
変数 A は、Button1_Click でも Button2_Click でも使えます。

Public Class Form1
    :
  Private A As Integer
  Private Sub Button1_Click(・・・
    Dim B As Integer
  End Sub
  Private Sub Button2_Click(・・・
    Dim C As Integer
  End Sub
End Class


カタオカ  2006-01-08 00:32:51  No: 129434

無事解決できました!ありがとうございます。


じゃんぬねっと  URL  2006-01-09 00:46:48  No: 129435

乱数ですけど、こっちの方がお勧めです。
理由は浮動小数にならないからです。

乱数 (ランダムな数) を取得する
http://jeanne.wankuma.com/tips/random/next.html


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加