• 締切済み

円弧の描画について

ある参考書の内容について分からない点があります。(VB6です。) '変数と定数の定義 Dim startAngle As Double Dim endAngle As Double Const pi = 3.14152965 '角度の初期値 startAngle = 90 endAngle = 315 '線の色の指定 ForeColor = QBColor(4) '円弧の描画 circle (2000,1500) , 1000, , startAngle * pi / 180, endAngle * pi/180 End Sub 変数の定義で、startAngleとendAngleがDouble型で宣言されているのに、初期値は小数ではなく整数なのはなぜでしょうか。たぶん、初期値は整数だけど、startAngle * pi / 180, endAngle * pi / 180が小数になるからDouble型にしていると思うのですが、このあたりのことを教えていただけますか。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> 初期値は小数ではなく整数なのはなぜでしょうか。 質問が、 Q1)Double型にint型の値を入れてるのはなぜ? Q2)90とか150という整数の値を入れてるのはなぜ? Q3)Circleのパラメータ型はSingle型なのに、Double型を利用しているのはなぜ? ――を尋ねているのだとしたら、 A1)言語処理系が(コンパイル時もしくは実行時に)Double型にしてくれるから、.0とかキーを打つ手間を省いた。 A2)Circleは、円弧の始まりと終わりをラジアン単位で与える必要があるけど、読者のことを考えて平易な度(degree)で記述しているだけ。 A3)途中の計算精度を保ちたかったから。 ――なのでは。あてずっぽうですが。

asggvcd
質問者

お礼

質問の意図は、Q1)Double型にint型の値を入れてるのはなぜ? です。 質問を3つに分けて答えていただいたので頭の中が整理されました。 総合的に考えるとDouble型というデータ型が一番最適ですよね。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Vbscriptで変数の宣言の仕方・・・こんなのできないのですか?

    Const AAA = 3 Dim gnHensuu(AAA) というような配列変数を使いたいのですが、 実行するとコンパイルエラー 整数型の定数がありませんと なってしまいます。 できないのでしょうか? VBscript Windows2000

  • 初歩的な質問ですいません

    Dim i As Integer この場合、iを整数の変数として定義する。 だと思うのですが、 Dim i(10000) As Integer この場合どういう意味ですか? 教えていただきたいです。

  • VBAの変数変換のことです

    VBAの変数変換のことです 整数変数=実数変数や実数変数=整数変数でCIntやCSng関数を使わないでOKでしょうか? Dim VAR(20) As Single '単精度浮動小数点数型 (Single) Dim IVARO(20) As Integer '整数型 (Integer) Dim IVAROC(20) As Integer '整数型 (Integer) IVARO(NCD) = VAR(NCD) 'Single to Integer IVAROC(NCD) = CInt(VAR(NCD)) 'Single to Integer これで、IVARO(NCD)とIVAROC(NCD)には同じ値が入っているのですが、 整数=実数でCInt関数を使わないで整数にする構文はOKでしょうか?

  • VBAで変数定義を変更する方法

    Data_Typeという変数の中に文字列doubleが入っていたら、 AIyyという変数をdoubleで定義、 longが入っていたらlongで定義するというプログラムを作りたいのですが If Data_Type = "double" Then Dim AIyy As Double ElseIf Data_Type = "long" Then Dim AIyy As Long End If と書くと、定義が重複しているというエラーが表示されてうまくいきません。 これはどうすれば良いでしょうか? それと一度integerで定義した変数をlongなどに定義を変更したい場合どのようにすれば良いでしょうか?

  • ExcelVBAで初期値のセット

    ExcelVBAで初期値のセット Typeで定義したデータタイプの変数にConstで初期値をセットしたいのですがどのようにしたら良いのでしょうか。 例えば Public Const Sdata As String = "AAAAA" Public Const Idata As Long = 1 これはできますが、 Type typeA Sdata As String Idata As Long End Type Public Const Adata As typeA = "AAAAA",1 これはできません。 Typeで定義したデータ型にいるれ方法をお教えください。 ExcelVBA Type Const で検索してみましたが見つけきれませんでした。

  • ニュートンラプソン法が収束しない

    次のVBAコードを実行しても収束しません。これはコード上の問題ではなく、数学上の問題と思い、ここに投稿しました。特に微分式が間違っていないかを含めてご教示お願いします。 Sub Newton() Dim a As Double Dim b As Double Dim k As Double Dim θ As Double Dim θ1 As Double Dim Df As Double Dim Dfd As Double Dim pi As Double a = 100 b = 10 pi = 3.14159265358979 k = 1 - (b ^ 2 / a ^ 2) θ1 = pi / 4 Df = 0 Dfd = 0 Do θ = θ1 Df = (1 - k * (Sin(θ) ^ 2)) ^ 0.5 Dfθ = (-2 * k) * Sin(θ) * Cos(θ) / (2 * (1 - k ^ 2 * Sin(θ)) ^ 0.5) θ1 = θ - Df / Dfθ Loop Until Abs(θ - θ1) < 0.000000001 MsgBox Df End Sub

  • このコードであってますでしょうか?

    重量を格納する変数(Weight)を宣言する。重量テキストボックスの入力値はMath.Ceilingメソッドで小数点以下を切り上げて整数値とし、これをWeightに代入して初期化する。 この文章をプログラムになおすと Dim Weight As Integer = Math.Ceiling(CDbl(Weight As Integer)) これでいいのでしょうか??

  • マクロ変数 single で小数点計算が狂います

    Windows8.1 エクセル2010です。 マクロを使っており、小数点の計算をしたいため、初めてsingle double の変数を使いました。 例として、 Sub シングル() Dim 足される As Single Dim 足す As Single Dim 合計 As Single 足される = Range("a1").Value 足す = Range("b1").Value 合計 = 足される + 足す Range("c1").Select ActiveCell.FormulaR1C1 = 合計 End Sub A1=2.1 B1=5.1 普通は7.2となるのですが、7.19999980926513 と出ました。 doubleに変数を切り替えたら、ちゃんと7.2と出ました。 singleの仕組みがよくわかりません。 有効桁数数は「7桁」なら、小数点第7位まで扱える…という単純なものではないのでしょうか?

  • VBAでは角度はどっち回りですか?

    VBAでインボリュート曲線を描画するプログラムを書いたのですがなぜか時計回りになってしまいます。 自分は角度は3時の方向から反時計回りで増えていくと思っているのですがVBAでは逆回転なのでしょうか。 どっち回りか教えてください。 参考に作ったプログラムを書きます Sub インボリュート() '---------変数の宣言 Dim x1 As Double Dim y1 As Double Dim x2 As Double Dim y2 As Double Dim pai As Double Dim R As Integer '半径 Dim L As Double '-----値を初期設定 R = 50    L = 0 pai = 3.1415926535897 For θ = 0 To 3 * pai Step (pai / 1000) L = θ * R x1 = R * Cos(θ) y1 = R * Sin(θ) x2 = x1 + L * Cos(θ + 3 / 2 * pai) y2 = y1 + L * Sin(θ + 3 / 2 * pai) '---------シート上に図形を描画する ActiveSheet.Shapes.AddShape msoShapeOval, 500 + x1, 500 + y1, 1, 1 ActiveSheet.Shapes.AddShape msoShapeOval, 500 + x2, 500 + y2, 1, 1 Next θ End Sub ちなみにExcel2000です

  • Delphiの定数とローカル変数の初期化

    Embarcadero RAD Studio 2010 Architect Trialというお試し版を使っています。 constを使って定義した定数をローカル変数の初期化の際に以下のようになります。 [DCC エラー] Test.pas(39): E2026 定数式が必要です これでは、定数を1箇所で定義しても定数が使えず即値なので、 プログラム作成やメンテナンスに困ると思うのですが、 昔、Delphiを使っていたのですが忘れてしまって、どうしていたか思い出せませんでした。 皆さんは定数をどのように定義して、どのように使っているのでしょうか? //■定義 unit DEFUnit; interface // 定数・変数 const DAT1 :Integer = 10; const DAT2 :Integer = 20; const DAT3 :Integer = 30; implementation // なし end. //■利用 unit TestUnit; interface uses DEFUnit; var data : Array [0..2, 0..1] of Integer = ( // 先手駒 (DAT1, 1), (DAT2, 2), (DA3T, 3) ); implementation end.

このQ&Aのポイント
  • EP-806ABを使用中、廃インク吸収パッドの吸収量が限界に達しました。エプソンの修理窓口に交換を依頼してください、の表示が出ています。
  • EP-806ABの廃インク吸収パッドがいっぱいになり、交換が必要です。エプソンの修理窓口に連絡して、パッドの交換を依頼しましょう。
  • EP-806ABの廃インク吸収パッドが満杯になりました。エプソンの修理サービスに連絡して、新しいパッドと交換してもらいましょう。
回答を見る

専門家に質問してみよう