Avatar billede mckim Nybegynder
02. november 2001 - 19:27 Der er 13 kommentarer og
1 løsning

Problem med udregning

Hvorfor viser den ikke noget nor man foreksempel trykke \"Vienna\" og \"Three stars\" ?

<?php
$Price=500;
$StarModifier=1;
$CityModifier=1;
if (Grade==\"Three\")
{
    if($destination==\"Barcelona\")
{
$CityModifier=2;
$Price = $Price * $CityModifier;
echo \"The cost for a week in $destination is $Price\";
}
elseif ($destination==\"Vienna\")
{
$CityModifier=3.5;
$Price = $Price * $CityModifier;
echo \"The cost for a week in $destination is $Price\";
}
elseif ($destination ==\"Prague\")
{
$Price = $Price * $CityModifier;
echo \"The cost for a week in $destination is $Price\";
}
else
{
echo (\"You\'we not entered a value for destinatin, go back and do id again\");
}
}
elseif ($Grade==\"Four\")
{
$StarModifier=2;
if ($destination ==\"Barcelona\")
{
$CityModifier=2.5;
$Price = $Price * $CityModifier * $StarModifier=2;
echo \"The cost for a week in $destination is $Price\";
}
elseif ($destination==\"Vienna\")
{
$StarModifier=4;
$Price = $Price * $CityModifier * $StarModifier;
echo \"The cost for a week in $destination is $Price\";
}
elseif ($destination==\"Prague\")
{
$Price = $Price * $CityModifier * $StarModifier;
echo (\"The cost for a week in $destination is $Price\");
}
else
{
echo (\"You\'we not entered a value for destinatin, go back and do id again\");
}
}
else
{
echo (\"You\'we not entered a value for destinatin, go back and do id again\");
}
?>
Avatar billede sukos Juniormester
02. november 2001 - 19:46 #1
Temmelig rodet kode du viser der.

Prøv lige at bruge = i stedet for ==
Avatar billede mckim Nybegynder
02. november 2001 - 19:51 #2
ang. ==

Det skal jeg jo bruge til at tjekke om noget er lig med noget.
eks:
($destination==\"Vienna\")
Avatar billede myplacedk Nybegynder
02. november 2001 - 20:26 #3
Det eneste jeg har ændret i det følgende er whitespace. Dvs. linjeskift, tabulatorer og mellemrum:

<?php
$Price=500;
$StarModifier=1;
$CityModifier=1;
if (Grade==\"Three\") {
    if($destination==\"Barcelona\") {
        $CityModifier=2;
        $Price = $Price * $CityModifier;
        echo \"The cost for a week in $destination is $Price\";
    } elseif ($destination==\"Vienna\") {
        $CityModifier=3.5;
        $Price = $Price * $CityModifier;
        echo \"The cost for a week in $destination is $Price\";
    } elseif ($destination ==\"Prague\") {
        $Price = $Price * $CityModifier;
        echo \"The cost for a week in $destination is $Price\";
    } else {
        echo (\"You\'we not entered a value for destinatin, go back and do id again\");
    }
} elseif ($Grade==\"Four\") {
    $StarModifier=2;
    if ($destination ==\"Barcelona\") {
    $CityModifier=2.5;
    $Price = $Price * $CityModifier * $StarModifier=2;
    echo \"The cost for a week in $destination is $Price\";
} elseif ($destination==\"Vienna\") {
    $StarModifier=4;
    $Price = $Price * $CityModifier * $StarModifier;
    echo \"The cost for a week in $destination is $Price\";
} elseif ($destination==\"Prague\") {
    $Price = $Price * $CityModifier * $StarModifier;
    echo (\"The cost for a week in $destination is $Price\");
} else {
    echo (\"You\'we not entered a value for destinatin, go back and do id again\");
}
} else {
    echo (\"You\'we not entered a value for destinatin, go back and do id again\");
}
?>

Enten har jeg gjort noget galt, eller også har du. Jeg synes i hvert fald det er rimeligt tydeligt, at det ikke hænger sammen. Især til sidst, hvor der står } i starten af to linjer i træk. Der er vist en } som ikke har en matchende {.

Du kan i øvrigt lige prøve at sætte error_reporting til E_ALL, så den også viser notices. Så vil du sikker få at vide, at der er et problem på denne linje:
if (Grade==\"Three\") {
- du har vist glemt et dollartegn!

/Niels Andersen
Avatar billede myplacedk Nybegynder
02. november 2001 - 20:29 #4
I øvrigt er hele den kodestump noget værre noget. :)
Du kan se, at du har valgt en uheldig løsning bla. fordi du skriver det samme igen og igen.
Vi har computeren til at klare de ensformige opgaver. ;-)

Kan du ikke lige prøve at fortælle *helt* præcist hvad ovenstående kode skal gøre, så skal jeg prøve at komme med en alternativ løsning, som er nemmere at overskue, og dermed nemmere at gøre fejlfri samt opdatere senere hen.

/Niels Andersen
Avatar billede mckim Nybegynder
02. november 2001 - 20:48 #5
Avatar billede mckim Nybegynder
02. november 2001 - 20:49 #6
Du havde iøvrigt ret i det med \"$\"
Avatar billede myplacedk Nybegynder
02. november 2001 - 21:05 #7
Hvis jeg skal komme med en ny måde at kode det på, må du fortælle mig præcist hvad koden skal gøre. :)
Avatar billede mckim Nybegynder
02. november 2001 - 21:22 #8
Jeg har fundet en anden løsning. Ved hjælp af \"switch\" og \"Case\". Sådan:

<?php
$Price=500;
$StarModifier=1;
$CityModifier=1;
$DestGrade = $destination.$Grade;
switch ($DestGrade) {
   
case \"BarcelonaThree\":
    $CityModifier=2;
    $Price = $Price * $CityModifier;
    echo \"The cost for a week in $destination is $Price\";
    break;

case \"BarcelonaFour\":
        $CityModifier=2;
        $StarModifier=2;
        $Price = $Price * $CityModifier * $StarModifier;
        echo \"The cost for a week in $destination is $Price\";
        break;

case \"ViennaThree\":
        $CityModifier=3.5;
        $Price = $Price * $CityModifier;
        echo \"The cost for a week in $destination is $Price\";
        break;

case \"ViennaFour\":
        $CityModifier=3.5;
        $StarModifier=2;
        $Price = $Price * $CityModifier * $StarModifier;
        echo \"The cost for a week in $destination is $Price\";   
        break;

case \"PragueThree\":
        $Price = $Price * $CityModifier;
        echo \"The cost for a week in $destination is $Price\";   
        break;

case \"PragueFour\":
        $StarModifier;
        $Price = $Price * $CityModifier * $StarModifier;
        echo \"The cost for a week in $destination is $Price\";   
        break;

default:
        echo (\"Go back and do it again\");
        break;
}
Avatar billede myplacedk Nybegynder
02. november 2001 - 22:26 #9
Ah ja, det hjalp en hel del. Nu kan jeg da gennemskue hvad der foregår... :)

Prøv at se dette:

<?php
$destinations = array(
    \'Barcelona\'=> array(2, 2),
    \'Vienna\' => array(3.5, 2),
    \'Prague\' => array(1, 1),
);
$price = 500;

function calcPrice($price, $modifiers, $grade) {
    if ($modifiers==null) return false;
    $destprice = $price * $modifiers[0];
    switch ($grade) {
        case \'Three\':
            break;
        case \'Four\':   
            $destprice *= $modifiers[1];
            break;
        default:
            return false;
    }
    return $destprice;
}

if (isset($destinations[$Dest])) {
    $destprice = calcPrice($price, $destinations[$Dest], $Grade);
    if ($destprice === false) {
        echo \"Illegale grade\";
    } else {
        echo \"The cost for a week in $Dest is $destprice\";
    }
} else {
    echo \"Destination not found\";
}
?>

Jaja, der er stadig plads til forbedring. Men allerede nu er det meget lettere at tilføje nye byer, eller ændre faktorer/satser. Og så står den samme sætning kun ét sted... ;-)

/Niels Andersen
Avatar billede mckim Nybegynder
08. november 2001 - 15:26 #10
Tja.. Jeg løste jo selv problemet :)
Avatar billede pcmagasinet Nybegynder
08. november 2001 - 15:31 #11
Du er idiot! Selvom du løste det selv, har han rettet en masse kode!... Du kunne i det mindste give ham fx. 20 point!....

taber..

myplacedk>> Glem ham en anden gang...
Avatar billede mckim Nybegynder
08. november 2001 - 15:33 #12
Okay, du har ret.. Jeg kigger på det. Hvis han vil have nogle point må han skrive her.
Avatar billede mckim Nybegynder
08. november 2001 - 15:35 #13
Skriv en mail, så finder vi ud af det :)
Avatar billede myplacedk Nybegynder
09. november 2001 - 18:52 #14
Tjah, jeg synes da også at jeg skulle have noget for besværet.
Men på den anden side er der ingen grund til at oprette et nyt spørgsmål for det.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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