Differences

This shows you the differences between two versions of the page.

Link to this comparison view

stack_rpn [2017-09-01 14:54]
stack_rpn [2022-07-18 13:20] (current)
Line 1: Line 1:
 +===== Uppgift Miniräknare =====
 +Gör en webbsida som jobbar med omvänd polsk notation. Detta sätt att evaluera uttryck tycker jag är överlägset det traditionella sättet (HP:s räknedosor använder ofta detta sätt).
 +Det räcker att er räknare klarar de fyra räknesätten och att nollställa räknaren, dvs tömma stacken (+,-,*,/,c)
 +
 +ex.
 +
 +  Uttrycket (4+5)*(6-7) 
 +  slår man in på följande sätt 
 +  4 ¶ 5 ¶ + ¶ 6 ¶ 7 ¶ - ¶ * ¶ 
 +  Där ¶ betyder "ENTER",
 +
 +Stacken kommer att se ut som följande under inmatningen.
 +
 +Stackens utseende.
 +  7
 +  5 6 6 -1
 +  4 4 9 9 9 9 -9
 +  
 +Krav:\\
 +1. Ni skall göra en egen stack, det är med hjälp av denna stack som ni skall lösa uppgiften. Stacken skall ha följande funktioner.
 +<code php>
 +Pop()        // tar bort det översta
 +Top()        // returnerar det översta
 +Push($item)  // lägger in item överst i stacken
 +Size()       // returnerar hur många som finns i stacken
 +IsEmpty()    // returnerar true om stacken är tom
 +PrintStack() // Skriver ut en stack, brukar inte finnas men ni kommer att behöva den.
 +</code>
 +2. Man skall kunna se stacken efter varje inmatning på er sida.
 +
 +Tips 1! 
 +Eftersom ni nu läser programmering C så skulle ni kunna göra stacken som en klass. Jag tror inte att det blir svårare och ni kommer då även få lite träning på ProgC
 +<code php>
 +$s->Pop()        // tar bort det översta
 +$s->Top()        // returnerar det översta i stacken
 +$s->Push($item)  // Lägger in $item överst i stacken
 +$s->Size()        // returnerar hur många som finns i stacken
 +$s->IsEmpty()    // returnerar true om stacken är tom
 +$s->PrintStack() // Skriver ut stacken, brukar inte finnas men ni kommer att behöva den.
 +</code>
 +
 +Tips 2!
 +Som vanligt kan man spara en hel del tid genom att kolla vilka färdiga funktioner som finns i php (php.net)
 +
 +Tips 3!
 +För att lösa denna uppgift så kan det vara klokt att lagra stacken i en $_SESSION variabel. tex $_SESSION['stack'][array]\\
 +Om ni vill är det helt OK att utgå från min service_session och lägga till funktionerna.
 +<code php>
 +$session->sPop()        // tar bort det översta
 +$session->sTop()        // returnerar det översta i stacken
 +$session->sPush($item)  // Lägger in $item överst i stacken
 +$sessino->sSize()       // returnerar hur många som finns i stacken
 +$session->sIsEmpty()    // returnerar true om stacken är tom
 +$session->sPrintStack() // Skriver ut stacken, brukar inte finnas men ni kommer att behöva den.
 +</code>
 +
 +Ett körbart [[http://student.oedu.se/~jf/ex/rpn_calc.exe|program]] eller  [[http://student.oedu.se/~jf/code/rpn.php|web]] för att bättre förstå hur din räknare skall funka.
 +
 +En sida [[http://www.calculator.org/rpn.html|Reverse Polish Notation]] med lite mer info.
 +