Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB, VB6: yhtälöitä vb:llä

Sivun loppuun

Lazu [04.01.2004 13:19:26]

#

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?

Hellami [04.01.2004 13:30:49]

#

Pitääkö koodin toimia vain noilla funktioilla vai yleensäkkin kaikissa?

Lazu [04.01.2004 13:36:29]

#

no tälläisessa sen pitäisi oikeastaan toimia:

y=ax^2 + bx

joista x ja y on tiedossa

setä [04.01.2004 13:53:05]

#

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

Lazu [04.01.2004 13:59:04]

#

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..

setä [04.01.2004 14:14:40]

#

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.

Lazu [04.01.2004 14:28:53]

#

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.

Antti Laaksonen [04.01.2004 15:15:51]

#

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.

hunajavohveli [04.01.2004 22:09:51]

#

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

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta