Avatar billede jih Nybegynder
07. november 2003 - 07:59 Der er 25 kommentarer og
1 løsning

runder forkert op?

jeg har et lille andengradsligning-program.... det virker fint... en gang imellem.... det ser nogenlunde sådan ud:
forskriften står her (Ax^2+Bx+C)
textbox som man skal skrive A i:
textbox som man skal skrive B i:
textbox som man skal skrive C i:
den regner nulpunkter, rødder og toppunkt ud.... men... hvis jeg fx sætter 0,5 i "C-textboxen" viser den at toppunktet er "0.00 ; 0.00", hvilket jo er helt forkert... hmmm... jeg ved ik lige hvad det er jeg har gjort galt... er det noget med "Math.sqrt()" som runder op/ned, har det noget med "Format()" funktionen at gøre (bruger den som "Format(x5, "###,##0.00")" eller er det noget andet? jeg kan desværre ik give jer koden, pga. at vi ik har noget internet.... i hvert fald før den 12... så bliver jeg nødt til at spørge/svare i skolen... nogen som har et forslag om hvad det kan være? koder kan jeg ik rigtigt bruge til noget... jeg vil hellere gerne have en forklaring om hvorfor den runder op og hvordan man kan lave om på det.. uden koder... eller... gerne lige nogle enkelte funktioner, som evt. ku blive nyttige... på forhånd tak...

//WebPsycho
Avatar billede martin_moth Mester
07. november 2003 - 08:08 #1
Det er jo umuligt at sige hvor fejlen ligger i din kode, når vi ikek kan se den...

Enten er din formel for toppunktet forkert.
Eller så afrunder du forkert et sted
Eller så gemmer du et decimaltal som et heltal (fx. en Long eller Integer)
Eller så opfatter den noget du tror er et tal som en string
Eller...
Eller..

Math.Sqrt() - er det en VB funktion? Den har jeg aldrig hørt om! Men du kan jo regne kvadratroden ud på "gammeldags vis" , kvardraroden af X er X ^ 0.5
Avatar billede joern Nybegynder
07. november 2003 - 08:37 #2
Hej.

Har ikke prøvet med et eksempel, men du kan sikre dine udregninger med flere paranteser.  ((Ax)^2 + (Bx) + C)   
Værdier indtastet i tekstbokse kan man sikre bliver anvendt som tal med
Val(text1.text).

M.v.h.  Jørn
Avatar billede slo Nybegynder
07. november 2003 - 09:10 #3
Kan også være at indstillingen på din PC er sat til amerikansk decimalformat, dvs. "," bliver brugt som tusindadskiller, medens "." bliver brugt som komma.
Avatar billede joern Nybegynder
07. november 2003 - 09:14 #4
Hej igen.

Jeg ser at din notation - som jeg har gentaget - er fra matematikbogen og ikke korrekt som kildetekst, så skal der stå ((A * x)^2 + (B * x) + C)

M.v.h.  Jørn
Avatar billede martin_moth Mester
07. november 2003 - 10:03 #5
Bare for at slå det fast - en 2. grads ligning ser IKKE ud som jørn viser den, den korrekte form er:

f(x) = A * (x)^2 + B * x + C

:o)
Avatar billede jih Nybegynder
07. november 2003 - 11:58 #6
næh... den ser sådan ud: ((x ^ 2) * A) + (B * x) + C... det har jeg oz skrevet... men jeg vil skyde på at fejlen ligger i mine Integer eller Long typer, siden jeg har brugt Integer og Long, og ik Double eller noget... hvad er det jeg skal bruge til decimal-tal? fordi det er vist der, fejlen ligger... jeg tror at martin_moth har fat i det rigtige... og... jeg har lavet et hyperbel program på samme måde, så fejlen ku oz ligge på Math.sqr()(eller Math.sqrt) funktionen... kan ik huske hvad det var... og den findes... jeg har tjekket den, og den virker fint... når der ik er decimaltal med... altså... jeg har tjekket Math.sqr(t) funktionen, men ik med decimaltal.. jeg vil bare gerne vide hvor fejlen ligger... danke schön... jeg skriver igen senere... i morgen kan jeg svare om der er nogen af jer, der har hjulpet mig til det endelige indtil videre... jeg vil prøve og se om jeg kan tage koden med på diskette... så kan jeg skrive den ind imorgen... _hvis_ jeg finder en diskette.... tak for hjælpen indtil videre... men vil gerne have mere hjælp for en sikkerheds skyld... og gerne vide hvad for en type jeg skal sætte tallene til at være, hvis det skal være decimaltal... troede nemlig godt man ku bruge Integer og Long.. og så vil jeg gerne høre lidt mere med den Val() funktion... hvordan man bruger den... er det bare "Val(txtA.text)" eller skal det være noget med txtA.text, Integer eller hvad..? hmm... har det lige som om jeg skriver et brev, så jeg tror heller jeg smutter igen..!-)

//WebPsycho
Avatar billede martin_moth Mester
07. november 2003 - 12:37 #7
Det er det samme - om der er paranteser eller ej ændrer intet - jeg ville bare rette førns ligning, hvor konstanten A også var i 2. potens...

Du kan læse om val() her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vafctval.asp


Og om andre funktioner her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vaidxconversion.asp

Integer og Long er begge variabeltyper der indeholder HELtal.
Double indeholder decimaltal.
Er du i tvivl om math.sqr(x) og math.sqrt(x) kan du bruge x ^ 2 og x ^ 0.5 i stedet for.

Hvorfor erklærer du variabler som variabeltyper du ikke ved hvad er?
Jeg mener, når du erklærer en varibal som fx. Long, må du da have en ide om hvad Long er for en type?

Er ikke klar over om du har fået svar på dine spørgsmål nu?
Avatar billede jih Nybegynder
07. november 2003 - 13:10 #8
det er jeg faktisk heller ik klar over... før senere... måske imorgen... lad mig se... grunden til at jeg sætter dem til Integer og Long er at jeg _TROEDE_ at det var alle tal (inkl. decimaltal).. altså... op til et vist.. kan bare ik huske det... og at Long var et meget stort tal (med decimaler) og Integer var et mindre tal... men ok... så prøver jeg med Double i stedet... men... dvs. at jeg skal skrive x ^ 0.5 istedet for Math.sqr(x)? (fandt ud af at det er Math.sqr())...
Avatar billede martin_moth Mester
07. november 2003 - 13:24 #9
Jeg har lige lavet en lille funktion der finder rødder ud fra konstanterne a, b, og c i ligningen f(x) = a * x^2 + b*x + c

Den kan du bruge til at teste op i mod - den regner rigtigt!!!

Sub FindRod(a As Long, b As Long, c As Long)
Dim Rod1 As Double
Dim Rod2 As Double
Dim Determinant

Determinant = b ^ 2 - 4 * a * c
Select Case Determinant
  Case Is < 0
    MsgBox "Ingen løsninger"
    Exit Sub
  Case Is = 0
    Rod1 = -b / (2 * a)
    MsgBox "Netop 1 løsning. Den er " & Rod1
  Case Else
    Rod1 = (-b + (Determinant) ^ 0.5) / (2 * a)
    Rod2 = (-b - (Determinant) ^ 0.5) / (2 * a)
    MsgBox "Rødderne er: " & Rod1 & " & " & Rod2
End Select
End Sub


Du kalder subben ved at skrive fx.

  FindRod 3, 2, -10

hvis du vil have løsningen for f(x) = 3*x^2 + 2*x -10
Avatar billede martin_moth Mester
07. november 2003 - 13:37 #10
Prøv at slå integer op i en engelsk-dansk ordbog - sørme om det ikke betyder HELtal...

En god ide er nok fremover at undersøge frem for bare at gætte når du programmere!!!

Du kan bruge hjælpen i VB til at finde mere info om de enkelte variabeltyper, eller fx. kikke her
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/office97/html/fundamentalvariabledatatypes.asp
Avatar billede joern Nybegynder
07. november 2003 - 20:05 #11
Hej.

Ja, andengrads-ligninger lærte jeg i skolen, siden har jeg ikke brugt det til noget, og det er 45 år siden.  Gad vide hvad man egentlig lærer det for?
Efter den retstavning der vises af en del brugere på 'Eksperten', skulle der måske bruges lidt mere tid på dansk.
Og jeg tilslutter mig Martin, der anbefaler at konsultere on-line hjælpen.  Dér står mange gode oplysninger.

M.v.h.  Jørn
Avatar billede martin_moth Mester
08. november 2003 - 10:18 #12
Jeg bruger skam 2. grads lininger engang i mellem. Mht. retstavning, er vi 100% enige! :o)
Avatar billede mikker Nybegynder
09. november 2003 - 10:51 #13
Martin>> 'Den kan du bruge til at teste op i mod - den regner rigtigt!!!' - Man sætter nok ikke sit lys under en skæppe !! :o)

Faktisk er det ganske forfærdeligt at være vidne til det danske sprogs forfald i den grad vi oplever i øjeblikket.
Men istedet for at lære folk at stave - så laver ændrer man bare stavemåden. Mayonnaise er blevet til Majonæse !!?? HVAD F..... ER DET DER SKER?

Nu er det da efterhånen en DEL år siden (10) jeg gik ud af gymnasiet og jeg ved med mig selv, at mine stavefærdigheder så absolut ikke er hvad de har været. Så meget desto værre er det når jeg dagligt læser den ene officielle mail efter den anden, der knapt nok er til at forstå.
Tegnsætning har jeg til gengæld aldrig forstået mig på :o)

Blot et udbrud !

- Mikker
Avatar billede mikker Nybegynder
09. november 2003 - 10:52 #14
'så laver ændrer man bare stavemåden'
laver ændrer ...???
Forfærdeligt først at opdage DEN fejl NU ! :o)

- Mikker
Avatar billede martin_moth Mester
09. november 2003 - 11:56 #15
He he - jamen, jeg ved jo at den regner tigtigt - så er der vel ingen grund til at være beskeden ;o)

Nu skal jeg heller ikke opfattes som en gammel nisse der får ondt i øjnene når jeg ser en stavefejl. Men der ER altså mange groteske stavefejl (ikke slåfejl, men stavefejl - ingen nævnt ingen glemt). Men det handler dette forum jo ikke om.

Jeg skal forsøge mig med kun at besvare VB-spørgsmål og ikke komme med kommentarer til stavemåder :o)

PS: Men at en bjørnetjeneste også kan opfattes som en stor og god tjeneste, det vil jeg dog opponere kraftigt i mod til min dødsdag ;o)

PPS: Vi blev vist studenter samtidigt

Og SÅ ikke mere pladder - webpsyco, har du fået de svar du skal have?
Avatar billede jih Nybegynder
10. november 2003 - 09:05 #16
tjae... nu gider jeg ik helt at læse det hele igennem, men jeg har koden her... har time, så jeg skal lige skynde mig:
---
Private Sub cmdCalc_Click()
Dim a As Double, b As Double, c As Double, x5 As Double
Dim y1 As Double, d As Double, x1 As Double, x2 As Double
Dim x3 As String, x4 As String, strPress As String
Dim xx As Long

  If (txtA.Text = "") Then
    strPress = MsgBox("You must enter a value for A", vbCritical, "Missing Number")
    txtA.SetFocus
    Exit Sub
  ElseIf (txtB.Text = "") Then
    strPress = MsgBox("You must enter a value for B", vbCritical, "Missing Number")
    txtB.SetFocus
    Exit Sub
  ElseIf (txtC.Text = "") Then
    strPress = MsgBox("You must enter a value for C", vbCritical, "Missing Number")
    txtC.SetFocus
    Exit Sub
  End If

a = txtA.Text
b = txtB.Text
c = txtC.Text
d = (b ^ 2) - (4 * a * c)
x5 = (-b) / (2 * a)
y1 = (-d) / (4 * a)

  If (d > 0) Then
    x1 = (-b + Math.Sqr(d)) / (2 * a)
    x2 = (-b - Math.Sqr(d)) / (2 * a)
  ElseIf (d = 0) Then
    x1 = (-b) / (2 * a)
    x4 = "Kun et nulpunkt"
  Else
    x3 = "Intet nulpunkt"
    x4 = "Intet nulpunkt"
  End If
 
  If (d > 0) Then
    txtXs.Text = "X1 = " & Format(x1, "###,##0.00") & vbNewLine & vbNewLine & "X2 = " & Format(x2, "###,#0.00")
    txtTop.Text = Format(x5, "###,##0.00") & " ; " & Format(y1, "###,##0.00")
  ElseIf (d = 0) Then
    txtXs.Text = "X1 = " & Format(x1, "###,##0.00")
    txtTop.Text = Format(x5, "###,##0.00") & " ; " & Format(y1, "###,##0.00")
  Else
    txtXs.Text = "X1 = " & Format(x3, "###,##0.00") & vbNewLine & vbNewLine & "X2 = " & Format(x4, "###,#0.00")
    txtTop.Text = Format(x5, "###,##0.00") & " ; " & Format(y1, "###,##0.00")
  End If
  lblPkter.Caption = "Punkter fra: " & Format(x5 - 4, "###,#0.00") & " til " & Format(x5 + 4, "###,#0.00")
  txtPkter.Text = Format(x5 - 4, "###,#0.00") & " ; " & Format(((((x5 - 4) ^ 2) * a) + ((x5 - 4) * b) + c), "###,##0.00") & _
                  vbNewLine & Format(x5 - 3, "###,##0.00") & " ; " & Format(((((x5 - 3) ^ 2) * a) + ((x5 - 3) * b) + c), "###,##0.00") & _
                  vbNewLine & Format(x5 - 2, "###,##0.00") & " ; " & Format(((((x5 - 2) ^ 2) * a) + ((x5 - 2) * b) + c), "###,##0.00") & _
                  vbNewLine & Format(x5 - 1, "###,##0.00") & " ; " & Format(((((x5 - 1) ^ 2) * a) + ((x5 - 1) * b) + c), "###,##0.00") & _
                  vbNewLine & Format(x5, "###,##0.00") & " ; " & Format((((x5 ^ 2) * a) + (x5 * b) + c), "###,##0.00") & _
                  vbNewLine & Format(x5 + 1, "###,##0.00") & " ; " & Format(((((x5 + 1) ^ 2) * a) + ((x5 + 1) * b) + c), "###,##0.00") & _
                  vbNewLine & Format(x5 + 2, "###,##0.00") & " ; " & Format(((((x5 + 2) ^ 2) * a) + ((x5 + 2) * b) + c), "###,##0.00") & _
                  vbNewLine & Format(x5 + 3, "###,##0.00") & " ; " & Format(((((x5 + 3) ^ 2) * a) + ((x5 + 3) * b) + c), "###,##0.00") & _
                  vbNewLine & Format(x5 + 4, "###,##0.00") & " ; " & Format(((((x5 + 4) ^ 2) * a) + ((x5 + 4) * b) + c), "###,##0.00")
  If (chkInt.Value = 1) Then
    lblPkter.Caption = "Punkter fra: " & Format(xx - 4, "###,#0.00") & " til " & Format(xx + 4, "###,#0.00")
    txtPkter.Text = xx - 4 & " ; " & ((((xx - 4) ^ 2) * a) + ((xx - 4) * b) + c) & _
                  vbNewLine & xx - 3 & " ; " & ((((xx - 3) ^ 2) * a) + ((xx - 3) * b) + c) & _
                  vbNewLine & xx - 2 & " ; " & ((((xx - 2) ^ 2) * a) + ((xx - 2) * b) + c) & _
                  vbNewLine & xx - 1 & " ; " & ((((xx - 1) ^ 2) * a) + ((xx - 1) * b) + c) & _
                  vbNewLine & xx & " ; " & (((xx ^ 2) * a) + (xx * b) + c) & _
                  vbNewLine & xx + 1 & " ; " & ((((xx + 1) ^ 2) * a) + ((xx + 1) * b) + c) & _
                  vbNewLine & xx + 2 & " ; " & ((((xx + 2) ^ 2) * a) + ((xx + 2) * b) + c) & _
                  vbNewLine & xx + 3 & " ; " & ((((xx + 3) ^ 2) * a) + ((xx + 3) * b) + c) & _
                  vbNewLine & xx + 4 & " ; " & ((((xx + 4) ^ 2) * a) + ((xx + 4) * b) + c)
  End If
  End Sub

Private Sub Form_Load()
txtXs.Text = "X1 = " & vbNewLine & vbNewLine & "X2 = "
txtPkter.Text = "X1 , Y1" & vbNewLine & "X2 , Y2" & vbNewLine & "X3 , Y3" & vbNewLine & _
                "X4 , Y4" & vbNewLine & "T o P P u N K T" & vbNewLine & "X5 , Y5" & _
                vbNewLine & "X6 , Y6" & vbNewLine & "X7 , Y7" & vbNewLine & "X8 , Y8"
End Sub

Private Sub txtA_GotFocus()
  If Not (txtA.Text = "") Then
    txtusA.Caption = txtA.Text
    txtA.Text = ""
  End If
End Sub

Private Sub txtA_LostFocus()
  If (txtA.Text = "") Then
    txtA.Text = txtusA.Caption
  End If
End Sub

Private Sub txtB_GotFocus()
  If Not (txtB.Text = "") Then
    txtusB.Caption = txtB.Text
    txtB.Text = ""
  End If
End Sub

Private Sub txtB_LostFocus()
  If (txtB.Text = "") Then
    txtB.Text = txtusB.Caption
  End If
End Sub

Private Sub txtC_GotFocus()
  If Not (txtC.Text = "") Then
    txtusC.Caption = txtC.Text
    txtC.Text = ""
  End If
End Sub

Private Sub txtC_LostFocus()
  If (txtC.Text = "") Then
    txtC.Text = txtusC.Caption
  End If
End Sub
---
Der er så det hele... alt som det er.... tror det virker nu (efter jeg har sat alle "Integer" til at være "Double"... men jeg ville da blive meget glad, hvis en af jer kunne lige se det igennem, og teste det for fejl... tror jeg har det hele rigtigt... har testet lidt med alle mulige mærkelige værdier... men ja... Det vil så sige at martin_moth har svaret på mit spm... men jeg venter lige med at acceptere, før jeg får at vide om nogen lige gider at teste mit program igennem.. hygge..

//WebPsycho
Avatar billede martin_moth Mester
10. november 2003 - 09:09 #17
Hvis du ikke engang gider læse mine svar, gider jeg da slet ikke læse din kode. Farveller...
Avatar billede mikker Nybegynder
10. november 2003 - 18:56 #18
Forståeligt nok Martin.

- Mikker
Avatar billede jih Nybegynder
11. november 2003 - 11:28 #19
hmmm... martin... jeg har skam læst dit svar... men... det var ik det jeg ledte efter.... jeg gad ik at læse hele diskutionen, som I havde, igennem... hvis du ser hvad jeg mener... men jaja.... whatever... jeg kan godt se det er enkelt og nemt, men mit VB (don't ask why) vil ik helt med funktioner... fatter ik helt hvorfor... og... jeg sagde at jeg ik ledte efter koder... kun svar om hvad der kunne være galt.. - UDEN koder... fordi jeg kan jo ik kopiere dem over, og jeg har korttidshukommelse, så jeg kan ik huske dem til jeg kommer hjem... derfor.. hvis du overhovedet læser det her selvf... nå... men jeg smutter igen... venter lige lidt med at acceptere endnu... hvis der tilfældigvis skulle være nogen som gider at læse min kode igennem, og teste for fejl.... hygge...
Avatar billede martin_moth Mester
11. november 2003 - 11:37 #20
Hvad vil du have testet for?
Fejlen var, at du brugte integers til at gemme decimaltal i.
Løsningen på dette og fremtidige lignende problemer er ikke at skrive kode, hvis betydning du kun gætter på, men at slå op når du er i tvivl...
Avatar billede jih Nybegynder
12. november 2003 - 10:11 #21
altså.... det er der mit problem ligger... jeg ved ik engang hvad jeg vil have testet... men.. jeg vil bare gerne se om der er nogen fejl.. og det er det jeg gerne vil have du/I vil teste for mig... MEN... det er ik nødvendigt.. kan godt undvære det, så hvis du/I ikke gider/har tid/orker eller på nogen anden måde ik vil, så er det i orden, og jeg lukker spørgsmålet (accepterer dit svar)... så! er det noget du vil kigge på eller..?

//WebPsycho
Avatar billede martin_moth Mester
12. november 2003 - 10:24 #22
Du beder om hjælp, men ved ikke hvad du vil have hjælp til?

Hmmm - kan du så hjælpe mig med følgende:

    Hvor langt er et stykke snor?

/Martin
Avatar billede jih Nybegynder
12. november 2003 - 10:35 #23
tjae... det er jo det.... men nu når jeg siger... jeg vil gerne have testet mit program for fejl... så vil det sige.. om der er nogen som helst fejl.. altså... bare en eller anden lille bug, som jeg skal have rettet op på... det kan stort set være ligemeget hvor, bare det er en fejl... såeh... frisk?
Avatar billede martin_moth Mester
12. november 2003 - 10:38 #24
Ikke frisk...

Held og lykke :o)
Avatar billede jih Nybegynder
12. november 2003 - 11:04 #25
hehe.... helt i orden... takker... og takker for points!-)

Hygge

//WebPsycho OuT!
Avatar billede jih Nybegynder
12. november 2003 - 11:05 #26
lol.... ik takker for points.... takker for svaret :P :P hehe... stener lidt ;)

hygge
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester