07. november 2003 - 07:59Der 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...
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
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
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).
Kan også være at indstillingen på din PC er sat til amerikansk decimalformat, dvs. "," bliver brugt som tusindadskiller, medens "." bliver brugt som komma.
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..!-)
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?
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())...
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
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.
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)
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?
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..
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...
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...
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..?
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?
lol.... ik takker for points.... takker for svaret :P :P hehe... stener lidt ;)
hygge
Synes godt om
Ny brugerNybegynder
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.