Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Denon AVR 1804

Texte și mesaje funny pe sit...

Recomandari carti non-fictiune

Cat costa un pui la rotisor?
 cum leg firele de la o pompa subm...

PC Voltage +3.3V Red!

Cum conectez la net o centrala Fe...

w11 nu mentine profil power proce...
 DIGI se lanseaza in Belgia cu ser...

Setari XMP ram pentru 5900x - BSO...

Iphone 13, 14 sau 15?

Dune: Prophecy (2024 _ ...)
 DMSS problema

Montare parchet in balcon

Exista doar ... si restul

Instagram - sunt eu batran, sau...
 

apare o modificare misterioasa a valorii unei variabile in VB6

- - - - -
  • Please log in to reply
3 replies to this topic

#1
cipriuss

cipriuss

    New Member

  • Grup: Members
  • Posts: 23
  • Înscris: 26.09.2008
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
cipriuss

cipriuss

    New Member

  • Grup: Members
  • Posts: 23
  • Înscris: 26.09.2008
Attached File  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
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,259
  • Înscris: 24.02.2007
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
cipriuss

cipriuss

    New Member

  • Grup: Members
  • Posts: 23
  • Înscris: 26.09.2008
mersi mult, am rezolvat problema :peacefingers:  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

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate