Avatar billede Gudiik Nybegynder
03. december 2009 - 18:21 Der er 12 kommentarer og
1 løsning

Hjælp til at regne ud (Calc)

Hej allesammen, er ved at lave noget hvor jeg skal regne noget ud. Det som skal regnes ud indtastesi 3 input felter, og gemmes i vars.

$var1 = 1;
$var2 = +;
$var3 = 2;

Altså den gemmer første tal i var1, +,-,/,* i var2, og andet tal i var3.

Mit problem er sådan når jeg ligger dem sammen:

$calc = ($var1 $var2 $var3);
Også udskriver det:
echo $calc;

Så skriver den bare:
1 + 2

istedet for at regne det ud. Håber nogle af jer kan hjælpe mig med hvordan jeg får den til at regne det ud, i stedet for at skrive det..

På Forhånd mange tak.
Avatar billede nemlig Professor
03. december 2009 - 19:03 #1
Du kan løse det på denne her måde:

<?php
$var1 = 1;
$var2 = '/';
$var3 = 2;

if($var2 == '+') {
$calc = ($var1 +$var3);
} elseif ($var2 == '-') {
$calc = ($var1 - $var3);
} elseif ($var2 == '*') {
$calc = ($var1 * $var3);
} elseif ($var2 == '/') {
$calc = ($var1 / $var3);
}

echo $calc;
?>
Avatar billede nemlig Professor
03. december 2009 - 19:03 #2
<?php
$var1 = 1;
$var2 = '/';
$var3 = 2;

if($var2 == '+') {
$calc = ($var1 +$var3);
} elseif ($var2 == '-') {
$calc = ($var1 - $var3);
} elseif ($var2 == '*') {
$calc = ($var1 * $var3);
} elseif ($var2 == '/') {
$calc = ($var1 / $var3);
}

echo $calc;
?>
Avatar billede nemlig Professor
03. december 2009 - 19:05 #3
Hov - hvad sker der. Jeg havde postet #2, men det kom ikke med. Jeg genindlæste siden med Ctrl + F5, og det var stadig ikke med. Derfor postede jeg indholdet igen, og nu er den med 2 gange. Hmmm...
Avatar billede Gudiik Nybegynder
03. december 2009 - 19:06 #4
nemlig. Ja det kan jeg ved sådan en enkelt løsning som det her. Men det jeg skal have lavet skal det være muligt at indtaste mange tal, og det er også let nok, for så skal det bare køres i while.

Men så kommer det svære, det er når jeg skal have den til at gange/dividere før alt andet (Matematisk regel), og jeg stadig dog stadig væk have den til at løbe den i den rigtige rækkefølge for at få det rigtige resultat.
Avatar billede nemlig Professor
03. december 2009 - 19:41 #5
Sorry - det er en tand for teknisk for mig. Håber for dig, at en anden tager over med en god løsning til dig.
Avatar billede Gudiik Nybegynder
03. december 2009 - 19:47 #6
nemlig -> Ja det er pænt teknisk, har siddet siden klokken 1 i eftermiddags, og rodet med det, på flere 1000 forskellige måder men kan virkelig ikke finde en måde som regner det som det skal. PHP regner det i sig selv godt nok, men da jeg ikke bare kan indtaste variablerne er det svært.

Håber jeg finder en løsning på et tidspunkt så skal jeg nok smide et svar herinde.
Avatar billede horizon Nybegynder
03. december 2009 - 20:19 #7
Så skal du have den til at løbe alle tallene igennem og se efter "*" eller "/" tegn og så regne tallet før og efter ud


Jeg lavede engang en lommeregner i java hvor jeg smed operatøren ind før tallet så det blev noget i stil med $input = array("+1","+3","*2","+2");

Synes det gjorde det lettere, men det er nok en smagssag.

Jeg løb så alle inputtene igennem og hvis jeg fandt en gange eller dividere operatør fandt jeg variablen før og hentede tallet, udførte udregningen og opdaterede de to variabler i input listen igen så jeg fik $input = array("+1","+6","+0","+2")
Så er det bare at lægge sammen til sidst.

Håber det gav mening og gav dig et skub. Og ja, der findes nok smartere måder, men det var vores første opgave på skolen så vores kendskab til java var meget begrænset, og du kan snilt gøre det samme i php som i java.
Avatar billede Gudiik Nybegynder
03. december 2009 - 20:22 #8
horizon tror mig jeg har været i gennem det.
Men jeg skal også have valgt hvor det skal placeres for at regne det helt rigtigt ud.

F.eks (4 * 7) - 13 + ((32 / 4) * 8)
Avatar billede horizon Nybegynder
03. december 2009 - 21:17 #9
Så skal du til at lege med reg.exp. og det er jeg langt fra stærk i. Du skal søge efter patterns i stil med "(0-9[*|/]0-9)" (har ingen idé om det er rigtig syntax) og så udregne det og indsætte det i stedet for parantesen.

Smid det i en løkke indtil alle paranteserne er ordnet (skal så også udbygges til at søge efter paranteser med +/- operatør) og så burde der kun være + og - tilbage.
Avatar billede wanze Nybegynder
04. december 2009 - 00:36 #10
Hvad med blot at bruge eval() - noget i stil med:
    <form method="get" action="">
    <input type="text" name="calc" value="" />
    <input type="submit" value="Beregn" />
    </form>
    <?php
    $s = $_GET['calc'];
    if(preg_match("@^[0-9\+\-\.\%\*\(\)\/ ]+$@",$s))
        print @eval("return $s;");
    else
        print "Fejl";
    ?>


Jeg laver et regex-tjek først for at sikre mig, at der ikke kan afvikles php-kommandoer o.lign. Dog kan brugeren godt skabe Divison by zero-error på den her måde - disse bliver dog undertrykt ved at sætte @ foran eval().
Avatar billede Gudiik Nybegynder
04. december 2009 - 21:33 #11
wanze - Mange tak skal du have. Mig og min mate har fanme siddet helt fra bunden af og prøvet at bygge en hel "lommeregner" op, men vi fik det ikke til at lykkes, også kan det bare gøres så let ;-). Tusind tak, lig et svar.
Avatar billede wanze Nybegynder
04. december 2009 - 22:02 #12
Velbekomme. :) Ja, PHP kan meget selv!
Avatar billede wanze Nybegynder
04. december 2009 - 22:03 #13
Det skulle så være et svar. Anyway, du kan jo også sagtens skrive
$var = 2 + 4;

Nå, svar her!
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