Avatar billede totalpc Seniormester
10. juli 2009 - 10:32 Der er 16 kommentarer og
1 løsning

Hjælp til function

Jeg er ikke så skrap til funktioner, men ville prøve at lave mig en lille beregner udfra noget kode jeg har fundet.

Jeg skal beregne en værdi udfra et input lenght
Det skal efterfølgende tjekkes om den værdi er større eller mindre end input HK.

Formlen hedder ((lenght * lenght) + 3) * 1,36 = resultat.
Efterfølgende skal der tjekkes om resultat < hk

Jeg har forsøgt nedenstående, får ingen fejl, men den regner ikke rigtigt tror jeg. Kan jeg få den til at vise resultatet i begge tilfælde eller kan nogen lige se hvad jeg gør galt?


<%
    function beregn(hk)
       
        beregn = (((lenght * lenght) + 3) * 1.36 )
   
    end function
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<%
    if request.ServerVariables("REQUEST_METHOD") = "POST" then
   
        ' kald funktion til udregning
       
          if (beregn(request.Form("lenght"))) < request.form("HK") then
              response.write "Du skal have et speedbådsbevis"
          else
              response.write "Du behøver ikke et speedbådsbevis"             
          End if
       
    end if
%>
       
<form method="post" action="" name="beregn">
   
    l = længde:<input type="text" value="" name="lenght" /><br />
    h = hk:<input type="text" value="" name="hk" /><br />
    <input type="submit" value="Udregn" name="beregn" />

</form>

</body>
</html>
Avatar billede softspot Forsker
10. juli 2009 - 11:02 #1
Såvidt jeg kan se har du flere problemer med din implementering.

1. du arbejder med både strenge og tal

2. du sender en parameter til din funktion men bruger den ikke til noget.

Jeg vil tro følgende vil fungere lidt bedre:

<%
    function beregn(length)
       
        beregn = (((length * length) + 3) * 1.36 )
   
    end function
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<%
    if request.ServerVariables("REQUEST_METHOD") = "POST" then
   
        ' kald funktion til udregning
       
          if (beregn(cdbl(request.Form("lenght")))) < cdbl(request.form("HK")) then
              response.write "Du skal have et speedbådsbevis"
          else
              response.write "Du behøver ikke et speedbådsbevis"             
          End if
       
    end if
%>
       
<form method="post" action="" name="beregn">
   
    l = længde:<input type="text" value="" name="lenght" /><br />
    h = hk:<input type="text" value="" name="hk" /><br />
    <input type="submit" value="Udregn" name="beregn" />

</form>

</body>
</html>


Her sørger jeg dels for at sammenligningen sker mellem to tal (dog er der stadig risiko for fejl, hvis der ikke indtastes tal i formularens felter!), dels er parameteren der sendes til funktionen rettet til length, som er den variabel der rent faktisk benyttes i funktionen.
Avatar billede totalpc Seniormester
10. juli 2009 - 11:16 #2
Hej
Okay..det kan jeg godt se nu.
Kunne ikke få hovedet og hale på det til sidste.
De her 2 kan vel også ændres fra :
l = længde:<input type="text" value="" name="lenght" /><br />
h = hk:<input type="text" value="" name="hk" /><br />

til blot:

længde:<input type="text" value="" name="lenght" /><br />
hk:<input type="text" value="" name="hk" /><br />

ikke?

Jeg har nu blot et sidste problem efter hvad jeg kan se.. jeg vil gerne kunne indtaste et komma tal i længde. Men så virker det ikke helt synes jeg!

www.team-emilie.dk/speed.asp

Kan jeg midlertidigt få skrevet resultatet af beregn ud sammen med teksten ?
Avatar billede totalpc Seniormester
10. juli 2009 - 11:19 #3
1
Undskyld det virker hvis man bruges . som komma. Kan jeg tjekke for at det bliver skrevet med . og ikke , ?

2
De her 2 kan vel også ændres fra :
l = længde:<input type="text" value="" name="lenght" /><br />
h = hk:<input type="text" value="" name="hk" /><br />
til blot:
længde:<input type="text" value="" name="lenght" /><br />
hk:<input type="text" value="" name="hk" /><br />
ikke?

3
Kan jeg midlertidigt få skrevet resultatet af beregn ud sammen med teksten ?
Avatar billede softspot Forsker
10. juli 2009 - 11:29 #4
Ad 1: Du kan udskifte komma med punktum inden der konverteres til double (generelt set bør der ligge et valideringscheck inden denne beregning og der kunne en evt. konvertering jo ske). Dette kan opnås således:

length = cdbl(replace(request.form("lenght"), ",", "."))


Ad 2: Ja, det er jo bare HTML, dvs. så længe du overholder HTML-formatet er det OK :-)

Ad 3: Jo, hvis du gemmer resultatet i en variabel, kan du udskrive den sammen med teksten. Eksempelvis:

length = cdbl(replace(request.form("lenght"), ",", "."))
hk = cdbl(replace(request.form("HK"), ",", "."))

res = beregn(length)
if (length < hk) then
  response.write "Du skal have et speedbådsbevis - " & res
else
  response.write "Du behøver ikke et speedbådsbevis - " & res
End if


Hvis ellers det er det du mener :-)
Avatar billede totalpc Seniormester
10. juli 2009 - 11:34 #5
Det besvarer alle mine spørgsmål.
Jeg takker endnu engang for dine altid perfekte og brugbare svar :)

Smid et svar
Avatar billede softspot Forsker
10. juli 2009 - 11:36 #6
Velbekomme :-)
Avatar billede softspot Forsker
10. juli 2009 - 11:56 #7
Tak for point :-)
Avatar billede totalpc Seniormester
10. juli 2009 - 12:27 #8
Jeg ved ikke om jeg skal oprette et nyt spgm eller du stadig vil give input, men der er altså en lille bug stadig..

jeg valgte at bruge løsning ad3 www.team-emilie.dk/speed2.asp

Men hvis nu jeg taster 5.7 i længde og 75 i hk så viser den resultatet 4422,72 men efter min beregning giver det 48,2664

Desuden synes jeg det giver problemer hvis man blot fortsætter med at prøve nye beregninger.

Kode:
Avatar billede totalpc Seniormester
10. juli 2009 - 12:28 #9
<%
    function beregn(length)
        beregn = (((length * length) + 3) * 1.36 )
    end function
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Speedbådsbevis</title>
</head>

<body>
<%
if request.ServerVariables("REQUEST_METHOD") = "POST" then
        ' kald funktion til udregning
        length = cdbl(replace(request.form("lenght"), ",", "."))
        hk = cdbl(replace(request.form("HK"), ",", "."))
        res = beregn(length)

if (length < hk) then
  response.write "<b>Du skal have et speedbådsbevis for at sejle denne kombination af båd & motor</b>"
  response.write "<br>"
  response.write "Du skal under : " & res &" hk på denne båd hvis du vil undgå at skulle have speedbådsbevis!"
else
  response.write "<b>Du skal ikke have et speedbådsbevis for at sejle denne kombination af båd & motor</b>"
  response.write "<br>"
  response.write "Du skal over : " & res &" hk på denne båd for at skulle have speedbådsbevis!"
End if
       
    end if
%>
       
<form method="post" action="" name="beregn">
   
    Længde i meter:<input type="text" value="" name="lenght" /><br />
    Antal HK:<input type="text" value="" name="hk" /><br />
    <input type="submit" value="Udregn" name="beregn" />

</form>

</body>
</html>
Avatar billede softspot Forsker
10. juli 2009 - 12:38 #10
Det er jo oplagt fordi den bruger 57 i stedet for 5,7 i length, så det med udskiftning af komma fungerer åbenbart ikke efter hensigten...

Prøv evt. at undlade denne udskiftning i forbindelse med konverteringen:

length = cdbl(request.form("lenght"))
hk = cdbl(request.form("HK"))
Avatar billede totalpc Seniormester
10. juli 2009 - 12:38 #11
jeg har fundet ud af at når jeg indtaster længde som kommatal uanset om det er med . eller, så fjerne den blot tegnet og i stedet for 5,7 eller 5.7 kommer der til at stå 57
Avatar billede totalpc Seniormester
10. juli 2009 - 12:42 #12
length = request.form("length")
hk = request.form("hk")
res = beregn(length)

så virker det så længe jeg slet ikke bruger kommatal.. men det vil jeg jo gerne. Kan det ikke laves?
Avatar billede softspot Forsker
10. juli 2009 - 12:43 #13
Se indlæg #10
Avatar billede totalpc Seniormester
10. juli 2009 - 12:44 #14
tror det er løst...der må gerne være , og ikke . så har byttet om på replace sætningen og nu ser det ud til at virke
Avatar billede totalpc Seniormester
10. juli 2009 - 12:46 #15
ja undskyld. så det godt, men misforstod..
Det virker nu ser det ud til med :

length = cdbl(replace(request.form("length"), ".", ","))
Avatar billede softspot Forsker
10. juli 2009 - 12:52 #16
OK, fint nok. Vær dog opmærksom på at dette kun fungerer så længe serverens regionale indstillinger står til et land, hvor komma er decimalseparator (såsom dansk). Hvis det kommer til at ligge på en server hvor regionale indstillinger er sat til engelsk eller amerikansk, så vil det ikke fungere længere, da CDbl-funktionen så tager udgangspunkt i punktum som decimalseparator... men det er givetvis ikke så relevant for dig lige i øjeblikket :-)
Avatar billede totalpc Seniormester
10. juli 2009 - 12:56 #17
Okay.
Perfekt, det er ikke så relevant lige nu da det kører på min egen server. Men rart nok at vide. Takker!
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