Elikkäs, pitäisi laskea paraabeli mutta mun osaaminen ei riitä siihen että osaisin laskea yhtälön jossa on enemmän kuin yksi tuntematon vb:llä.
eli pitäisi laskea a ja b yhtälöistä
6a + b = 0 ja 3a + b = 1
vb:n avulla..
paperilla tuo meni hienosti mutta minä en vain keksi että miten tuo tehdään vb:llä.
Osaisitteko auttaa?
Pitääkö koodin toimia vain noilla funktioilla vai yleensäkkin kaikissa?
no tälläisessa sen pitäisi oikeastaan toimia:
y=ax^2 + bx
joista x ja y on tiedossa
Täytyy tuntea kaksi pistettä, jotta a ja b on ratkaistavissa. Tehtävä on ensin ratkaistava matemaattisesti ja sitten koodattava ratkaisu VB:lle
d = x1^2 - x2^2 a = (y1 - y2)/d b = (y1*x1^2 - y2*x2^2)/d
Tuossa ensimmäisessä viestissäni olen jo antanut kaksi pistettä ja supistellut ja laskenut mutta en osaa koodata sitä visual basicilla. Ja y on muuttuva välillä -10 ja 10 joten en viitsisi lähteä käsin jokaista laskemaan..
Muuttuuko todella y vai x. Jos y muuttuu, saadaan a:lle ja b:lle 2 eri ratkaisua. Jos taas pisteet ovat saman parabelin pisteitä, riittää kun niistä valitaan kaksi.
Elikkäs olen tekemässä kuvioo jonka käyrää voi muuttaa pystysuuntaseseti sliderien avulla.
Minulla on 10 slideriä ja olen jakanut kuvion 10 osaan eli joka sliderille oma käyrä.
x muuttuu aina yhdellä isommaksi kuvion edetessä ja sen hetkisen sliderin lukeman pitäsisi olla käyrän ylä / alaraja.
Jos yhtälöt ovat aina muotoa xa + yb = c, niin yhtälöparin voi ratkaista seuraavalla tavalla. Menetelmä on aivan sama kuin paperilla sijoituskeinon käyttö.
'xa + yb = c Private Type YHTALO x As Single y As Single z As Single End Type Private Sub Form_Load() Dim eka As YHTALO, aeka As YHTALO, toka As YHTALO Dim a As Single, b As Single '6a + 2b = 5 eka.x = 6: eka.y = 2: eka.z = 5 '3a - 7b = 4 toka.x = 3: toka.y = -7: toka.z = 4 toka.x = toka.x - toka.y * (eka.x / eka.y) toka.z = toka.z - toka.y * (eka.z / eka.y) a = toka.z / toka.x b = (eka.z - eka.x * a) / eka.y MsgBox "a = " & a & " ja b = " & b End Sub
edit: Sievensin laskutoimituksia.
Tässä on jonkinlainen esimerkki QB:lle. Sen saa kai aika helposti VB:lle sovellettua. Se on tosin vasta esimerkki ja ainoastaan plus ja miinus -laskut pelaavat.
DECLARE SUB Divide () DECLARE SUB Count () DECLARE SUB Arrange () DECLARE FUNCTION VaihdaEtumerkki$ (em$) DECLARE SUB Show () COMMON SHARED vp() AS STRING COMMON SHARED op() AS STRING DIM vp(1 TO 10, 1 TO 3) AS STRING DIM op(1 TO 10, 1 TO 3) AS STRING CLS vp(1, 1) = "+": vp(1, 2) = "4": vp(1, 3) = "x" vp(2, 1) = "-": vp(2, 2) = "5": vp(2, 3) = "1" op(1, 1) = "+": op(1, 2) = "9": op(1, 3) = "1" op(2, 1) = "-": op(2, 2) = "2": op(2, 3) = "x" LOCATE 7, 15 Show Arrange LOCATE 9, 15 Show Count LOCATE 11, 15 Show Divide LOCATE 13, 15 Show SUB Arrange FOR a = 1 TO 10 IF op(a, 3) = "x" THEN FOR b = 1 TO 10 IF vp(b, 1) = "" THEN vp(b, 1) = VaihdaEtumerkki$(op(a, 1)) vp(b, 2) = op(a, 2) vp(b, 3) = op(a, 3) op(a, 1) = "" op(a, 2) = "" op(a, 3) = "" END IF NEXT b END IF IF vp(a, 3) = "1" THEN FOR b = 1 TO 10 IF op(b, 1) = "" THEN op(b, 1) = VaihdaEtumerkki$(vp(a, 1)) op(b, 2) = vp(a, 2) op(b, 3) = vp(a, 3) vp(a, 1) = "" vp(a, 2) = "" vp(a, 3) = "" END IF NEXT b END IF NEXT a END SUB SUB Count luku = 0 m$ = vp(1, 1) FOR a = 1 TO 10 IF vp(a, 1) = "+" THEN luku = luku + VAL(vp(a, 2)) IF vp(a, 1) = "-" THEN luku = luku - VAL(vp(a, 2)) vp(a, 1) = "" vp(a, 2) = "" vp(a, 3) = "" NEXT a IF luku > 0 THEN vp(1, 1) = "+": vp(1, 2) = MID$(STR$(ABS(luku)), 2, 2): vp(1, 3) = "x" IF luku < 0 THEN vp(1, 1) = "-": vp(1, 2) = MID$(STR$(ABS(luku)), 2, 2): vp(1, 3) = "x" luku = 0 FOR a = 1 TO 10 IF op(a, 1) = "+" THEN luku = luku + VAL(op(a, 2)) IF op(a, 1) = "-" THEN luku = luku - VAL(op(a, 2)) op(a, 1) = "" op(a, 2) = "" op(a, 3) = "" NEXT a IF luku > 0 THEN op(1, 1) = "+": op(1, 2) = MID$(STR$(ABS(luku)), 2, 2): op(1, 3) = "1" IF luku < 0 THEN op(1, 1) = "-": op(1, 2) = MID$(STR$(ABS(luku)), 2, 2): op(1, 3) = "1" END SUB SUB Divide LOCATE 23, 1 tulos$ = STR$(VAL(op(1, 2)) / VAL(vp(1, 2))) vp(1, 2) = "1" op(1, 2) = MID$(tulos$, 2, 4) END SUB SUB Show FOR a = 1 TO 10 IF vp(a, 1) <> "" THEN PRINT vp(a, 1); IF vp(a, 2) <> "1" THEN PRINT vp(a, 2); IF vp(a, 3) = "x" THEN PRINT vp(a, 3); PRINT " "; END IF NEXT a PRINT "= "; FOR a = 1 TO 10 IF op(a, 1) <> "" THEN PRINT op(a, 1); op(a, 2); IF op(a, 3) = "x" THEN PRINT op(a, 3); PRINT " "; END IF NEXT a END SUB FUNCTION VaihdaEtumerkki$ (em$) SELECT CASE em$ CASE "+" VaihdaEtumerkki$ = "-" CASE "-" VaihdaEtumerkki$ = "+" END SELECT END FUNCTION
Aihe on jo aika vanha, joten et voi enää vastata siihen.