ようこそ、初心者です。さん
「宿題」と言うことなのでどうしようかと思ったのですが。C言語の説明をしたページは山ほどありますので、検索サイト
で調べるといいと思います。
1.\tは「エスケープ文字」、%は「演算子」、%%は「書式指定子」と「C言語」で調べてみてください。
2.プログラムを作成してみましょう。(空白は全角です。)
#include <stdio.h>
int main(void)
{
int a = 2, b = 3, c;
double x = 2.0, y = 3.0, z;
c = a / b;
z = x / y;
printf("c=%d\nz=%f\n", c, z);
return 0;
}
3.「C言語」と「定数」で検索してみましょう。
4.「C言語」と「書式指定子」で検索してみましょう。または、2.のリストのprintf関数のz=%fの%fを「%13.10f」、
「%13.9f」、「%13.8f」など値を変更して結果を見てみましょう。
以上、解答にはなっていませんがテキストを読み返したり、ネットで調べて見てください。
それでは、またいつでもどうぞ。
ちなみに、座標データをText1と配列XP, YPにも保存しようとしているのでしょうが
ICの値が変わらないのでいつもXP(0)とYP(0)に格納されまし、モジュールがEnd Subで
終了するとモジュール内で宣言した変数・配列は破棄されます。
そこで、IC,XP,YPをモジュールの外側で宣言します。
Dim IC As Single
Dim XP(5000) As Single, YP(5000) As Single
Private Sub Form_MouseDown( …
もう一つ、Dim XP(5000), YP(5000) As Single では、YPはSingle型ですが、
XPはSingle型にはなりませんのでご注意を!!
また、IC=IC+1も忘れないように!!
それでは、またいつでもどうぞ。
ようこそ、syatiさん
数字キーを押した後に=キーまたはクリアキーを押した処理を同じものにしているので、質問のような状態になります。
そこで、数字の後の=とクリアの処理を分けます。しかし、このままでは区別が付きませんので「= → 数字 → =」のとき
の1つ目の=を記憶しておき、「= → 数字 → =」のとき途中の数字を無視するようにします。
グローバル変数として=キー用を追加します。
Dim EQUFlag As Boolean '=キー用
Form_LoadとcmdClear_Clickプロシージャで初期化します。
EQUFlag = False
演算キーを押したときの処理を次のように修正します。
Private Sub cmdEnzan_Click(Index As Integer)
If SuuFlag = True Then '数字キーが押された後
If EFlag = False And EQUFlag = False Then '※1 クリアキー以後初めての演算キー
dData1 = Val(txtDisplay.Text) '1つ目数値記憶
EFlag = True
ElseIf EQUFlag = False Then '※2
dData2 = Val(txtDisplay.Text) '2つ目数値記憶
End If
If Index <> EQU Then
Keisan
Enzan = Index '演算種類記憶
dData2 = 0
Else
Keisan
EFlag = False
EQUFlag = True '※3
End If
txtDisplay.Text = Trim(Str(dData1))
ElseIf Index = EQU Then
If dData2 = 0 Then
dData2 = dData1
End If
Keisan
txtDisplay.Text = Trim(Str(dData1))
EFlag = False
EQUFlag = True '※3
Else
dData1 = Val(txtDisplay.Text) '1つ目数値記憶
dData2 = 0
Enzan = Index '演算種類記憶
EFlag = True
EQUFlag = False '※3
End If
SuuFlag = False
End Sub
※1でクリアのときだけ表示されている数字をdata1に記憶する。
※2でクリアと=以外のとき表示されている数字をdata2に記憶する。
※3はEQUFlagの設定である。
最後に、数字キーの処理を次のように修正する。
Private Sub cmdNum_Click(Index As Integer)
Dim num As Double
'0が1文字だけ、または、演算キーを押した後の時
If txtDisplay.Text = "0" Or SuuFlag = False Then
txtDisplay.Text = "" '0を消す
'dData2 = 0 '※削除する
End If
w=aa[0];
for(n=1; n<=3; ++n)
w=w*xx+aa[n];
return(w);
}
(3)の式は y = ax3 + bx2 + cx + d を変形したものです。
y = x * (x * (a*x + b) + c) + d となります。
mainの読み込みも省略しました。
ようこそ、ブルーさん。
さて、私の電卓プログラムでは、‘=’と‘C’キーを同じ扱いにしているためにおたずねのようなことになります。そこで、‘=’と‘C’キーの処理を分けるためのフラグを用意します。また、‘=’キーのあと数字キーを押して、さらにどの演算キーを押したかによっても処理を分ける必要があると思います。実際に組んでみないと確かなこと言えないのですが、リストを見る限りそのように思います。
数字キー押したときのcmdNum_Clickプロシージャで、表示を消している部分でdData2の値も0にしている部分は削除する必要があります。
If txtDisplay.Text = "0" Or SuuFlag = False Then
txtDisplay.Text = "" '0を消す
'dData2 = 0
End If
数字キーを押した時点でdData2が0になり、‘C’と‘=’の処理を分けてもどんどん加算されなくなるためです。