apare o modificare misterioasa a valorii unei variabile in VB6
Last Updated: Mar 22 2009 17:20, Started by
cipriuss
, Mar 22 2009 13:48
·
0
#1
Posted 22 March 2009 - 13:48
Ma confrunt de cateva zile cu o misterioasa problema in VB6.
Incerc sa fac o mica aplicatie pt a calcula niste caracteristici legate de o bobina electro-magnetica, adica incarc sa gasesc numarul minim de spire folosind voltajul cel mai mic pt a avea un camp magnetic cat mai mare...o simpla problema de matematica, insa in VB nu sunt chiar expert asa ca au aparut niste probleme. La un moment dat imi apare un overflow...asa ca am intrat in debug...executarea pas cu pas a liniilor de cod si urmarind valorile tuturor variabilelor.Totul e OK, pana la un moment dat cand una din variabile isi capata valoarea super misterioasa de 446428.6 in loc de 175.312. Aceasta modificare apare dupa itineratia 140 si ceva. Va rog un pic de ajutor ca sa aflu de ce apare modificarea asta a valorii respective. Pt a vedea aplicatia in stadiul eu de functionare, trebuie facuta modifificarea din "For i=0 To 6" in "For i=0 To 5" P.S.proiectul e lucrat in Visual Basic v6 am introdus si commenturi in liniile de cod pt mai multa claritate Fm= forta electromotoare N= nr spire a bobinei I=intensitatea curentului U=voltajul la capetele litei R=rezistenta litei p= puterea un watti L= ar trebui sa fie lungimea litei de cupru conform formulei de aici cifrele din dreptul scrollurilor reprezinta indexul array-urilor ce contin valorile variabilelor. de ex valoare primului scroll v-a fi introdusa in variabila val(0) ,valoarea scrolului al 2-lea in val(1)....etc Attached Files |
#2
Posted 22 March 2009 - 16:07
untitled.JPG 30.81K
7 downloads
Dim val(6) As Single 'valorile corespunzatoare celor 7 scroll-uri Dim coef(6) As Single ' Dim d_lita As Single 'diametru lita (metri) Dim d_bobina As Single 'diametru bobina (metri) Dim a_lita As Single 'sectiune lita (metri) Dim rho As Single Const PI = 3.14159265358979 Private Sub Form_Load() d_lita = 0.5 / 1000 'initial lita are 0.5mm d_bobina = 10 / 1000 'initial bobina are 10mm diametru a_lita = PI * (d_lita / 2) ^ 2 'sectiunea litei Text2.Text = d_lita * 1000 'transforma m in mm si afiseaza rezultatul Text3.Text = d_bobina * 1000 'transforma in mm si afiseaza rezultatul rho = 0.0000000168 val(0) = 4000 val(1) = 5000 val(2) = 0.8 val(3) = 12 val(4) = 15 val(5) = 9.6 val(6) = val(4) * a_lita / rho coef(0) = 1 'coeficient care ajuta la setarea.. coef(1) = 1 '..pozitiei scrollului functie de.. coef(2) = 0.0005 '..valorile din "spatele" scrollurilor coef(3) = 0.1 coef(4) = 0.01 coef(5) = 0.002 coef(6) = 0.001 For Index = 0 To 5 'seteaza 0 To 5 pt Text1(Index) = val(Index) ' populeaza textboxurile cu valorile din spatele scrolurilor HScroll1(Index).Value = val(Index) / coef(Index) 'pozitioneaza scrollurile functie de valoare Next Index End Sub Private Sub Command1_Click() d_lita = Text2.Text / 1000 'transforma din mm in metri valoarea din textbox si o asigneaza variabilei d_bobina = Text3.Text / 1000 'transforma din mm in metri valoarea din textbox si o asigneaza variabilei Label14.Caption = d_lita 'pt debug Label15.Caption = d_bobina 'pt debug End Sub Private Sub HScroll1_Change(Index As Integer) Call Calculare(Index) End Sub Private Sub HScroll1_Scroll(Index As Integer) Call Calculare(Index) End Sub Private Sub Calculare(Index As Integer) Text1(Index).Text = HScroll1(Index).Value * coef(Index) val(Index) = HScroll1(Index).Value * coef(Index) Select Case Index Case 0 val(1) = val(0) / val(2) Case 1 val(2) = val(0) / val(1) Case 2 val(0) = val(1) * val(2) val(4) = val(3) / val(2) Case 3 val(5) = val(2) * val(3) val(4) = val(3) / val(2) Case 4 val(2) = val(3) / val(4) val(5) = val(2) * val(3) val(6) = val(4) * d_lita / rho '!!! AICI APARE EROAREA !!!!!!!! End Select For i = 0 To 5 If (val(i) * 1 / coef(i)) > 10000 Then 'daca valoarea scrollurului e depasta.. Beep '..fundalul textboxului de vine rosu si se aude un BEEP : Text1(i).BackColor = &HC0C0FF Else HScroll1(i) = val(i) / coef(i) 'daca totul e in limite normale face calcularea.. Text1(i).BackColor = &HFFFFFF '..si se asigura ca fundalul textboxurilor e cea de default End If Next i End Sub |
#3
Posted 22 March 2009 - 16:11
In loc de d_lita = Text2.Text / 1000 se foloseste d_lita = Val(Text2.Text) / 1000 la fel pentru toate cazurile cand vrei sa asociezi unei variabile continutul unui textbox.
Foloseste double in loc de single la toate variabilele si vezi daca iti mai da eroarea. |
#4
Posted 22 March 2009 - 17:20
mersi mult, am rezolvat problema Am confundat variabila d_lita cu a_lita, acum valoarea rezultata e cea care trebuie. mersi mult
|
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users