Autor Zpráva
muhch
Profil
Dobrý den, měl bych na vás takovou prosbu. Vytvořil jsem si kalkulačku a chtěl bych do ní ještě doplnit závorky a paměti, ale nevím si vůbec rady jak to tam dostat a hlavne co :D , napadl me eval ale nvm dávám sem kod. díky moc všem co se na to podívají

<link rel='stylesheet' type='text/css' href='kalkul.css'>
<h1> _Kalkulacka_</h1>
<?php

if(isset($_GET["tl"]))    {$cudlik = $_GET["tl"];}    else {$cudlik = "";}
if(isset($_GET["txt1"]))  {$cislo1 = $_GET["txt1"];}  else {$cislo1 = "";}
if(isset($_GET["txt2"]))  {$cislo2 = $_GET["txt2"];}  else {$cislo2 = "";}
if(isset($_GET["txt3"]))  {$cislo3 = $_GET["txt3"];}  else {$cislo3 = "";}

switch ($cudlik) 
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
        $cislo1 = $_GET["txt1"]*10 + $_GET["tl"];
        break;

    case "plus":
    $cislo2 = $cislo1;
    $cislo1 = "";
    $cislo3 = $_GET["tl"];
    break;

    case "minus":
    $cislo2 = $cislo1;
    $cislo1 = "";
    $cislo3 = $_GET["tl"];
    break;

    case "krat":
    $cislo2 = $cislo1;
    $cislo1 = "";
    $cislo3 = $_GET["tl"];
    break;

    case "deleno":
    $cislo2 = $cislo1;
    $cislo1 = "";
    $cislo3 = $_GET["tl"];
    break;

    case "rovno":
    if($cislo3 == "plus") {
        $cislo1 = $cislo2 + $cislo1;
        $cislo2 = "";
        $cislo3 = ""; }
    if($cislo3 == "minus") {
        $cislo1 = $cislo2 - $cislo1;
        $cislo2 = "";
        $cislo3 = ""; }
    if($cislo3 == "krat") {
        $cislo1 = $cislo2 * $cislo1;
        $cislo2 = "";
        $cislo3 = ""; }
    if($cislo3 == "deleno") {
        $cislo1 = $cislo2 / $cislo1;
        $cislo2 = "";
        $cislo3 = ""; }
    break;
}


echo "
<form>
<div id='tlacitka'>
<p class='txt1'>
<input type='text' name='txt1' size='20' value='$cislo1'>
</p><p class='jedna'>
<button type='submit' value='1' name='tl'>1</button>
</p><p class='dva'>
<button type='submit' value='2' name='tl'>2</button>
</p><p class='tri'>
<button type='submit' value='3' name='tl'>3</button>
</p><p class='ctyri'>
<button type='submit' value='4' name='tl'>4</button>
</p><p class='pet'>
<button type='submit' value='5' name='tl'>5</button>
</p><p class='sest'>
<button type='submit' value='6' name='tl'>6</button>
</p><p class='sedm'>
<button type='submit' value='7' name='tl'>7</button>
</p><p class='osm'>
<button type='submit' value='8' name='tl'>8</button>
</p><p class='devet'>
<button type='submit' value='9' name='tl'>9</button>
</p><p class='plus'>
<button type='submit' value='plus' name='tl'>+</button>
</p><p class='minus'>
<button type='submit' value='minus' name='tl'>-</button>
</p><p class='krat'>
<button type='submit' value='krat' name='tl'>*</button>
</p><p class='deleno'>
<button type='submit' value='deleno' name='tl'>/</button>
</p><p class='rovno'>
<button type='submit' value='rovno' name='tl'>=</button>
</p><p class='txt2'>
<input type='text' name='txt2' size='20' value='$cislo2'>
</p><p class='txt3'>
<input type='text' name='txt3' size='20' value='$cislo3'>
</p>
</div>
</form>
";
?>
nemeja
Profil
na závorky budeš potřebovat asi regulární výraz, nejdřív vypočítat to co je v závorce a pak místo té závorky dosadit výsledek no a na tu pamět použij třeba cookies, nebo session, popřípadě bys to mohl dát do nějakýho hidden inputu, ale to se pak dá editovat, nicméně pokud to chceš jen pro sebe, tak ten hidden input bude stačit
muhch
Profil
nemeja:
Ok , něco jsem ted zkousel ale vyhodilo mi to hned error tak nevim no, uvidim nejak to musim vymslet
nemeja
Profil
Když nám sem hodíš kod, tak ti rádi pomůžem ;)
muhch
Profil
nemeja:
Cely kod co jsem psal je pod mim prvni komentarem :D


a jinak jsem skosel tohle ale nejak mi to blbne asi jsem to narval blbe nekam :D
if (isset($_GET['pamet_n']))
{
   $pamet_n=$_GET['pamet_n'];
    if($pamet_n == 17)         //M+
    {
      if(!empty($pamet))
      {
        if(!empty($cislopred))
        {
        $pamet = $pamet + $cislopred; 
        }
        else
        {
        $pamet = $pamet + $cislo;
        $cislo="";
        }
      }
      else
      if(!empty($cislopred))
      { 
     $pamet = $cislopred;
     $cislo= "";
      }
     else
     {
     $pamet= $cislo;
     } 
    } 


  <input type='hidden' name='pamet' value=<?php if(isset($pamet)){echo $pamet;} ?>>
  
  <button type='submit' value='17' name='pamet_n'>M+</button>
nemeja
Profil
cky já ti tu pamět napíšu, abys viděl moje řešení a podle se nějak natuknul
muhch
Profil
nemeja:
diky moc
nemeja
Profil
Tak jsem to rozchodil, ale přes ty inputy, je to dost hrozivý, musíš vždycky u každýho stisknutí všechno vypsat, doporučil bych ti udělat to spíš přes ty cookies, nebo sessions. Pokud tam chceš udělat ještě závorky, tak to by ses s tímhle zbláznil, komentovat to nebudu je to furt to samý, kdyžtak se zeptej. Jestli budeš chtít, klidně ti pak ještě pomůžu s tou další variantou ;) Doufám, že ten kod pochopíš. M se vyvolá v případě, že je prazdnej display a zapíše se pokud na display je nějaké číslo. Pokud máš nějaké číslo na displayi a zmáčkneš další, tak se přidá, jakmile zmáčkneš operátor, tak pak můžeš psát a on si pamatuje to předchozí a jakmile zmáčkneš rovnítko, tak to spočítá. MC vynuluje pamět.

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method = "POST">
    <table>
      <tr> 
        <td colspan="4">
<?php
  if(isset($_POST['tlacitko'])){ 
    switch($_POST['tlacitko']){
        case "+":
          echo "<input type=\"hidden\" name=\"pomocny\" value=\"".$_POST['display']."\">";
          echo "<input type=\"hidden\" name=\"znamenko\" value=\"+\">";
          echo "<input type=\"hidden\" name=\"display\" value=\"\">\n";
          echo "<input type=\"hidden\" name=\"pamet1\" value=\"".@$_POST['pamet1']."\">\n";
          break;
        case "-":
          echo "<input type=\"hidden\" name=\"pomocny\" value=\"".$_POST['display']."\">";
          echo "<input type=\"hidden\" name=\"znamenko\" value=\"-\">";
          echo "<input type=\"hidden\" name=\"display\" value=\"\">\n";
          echo "<input type=\"hidden\" name=\"pamet1\" value=\"".@$_POST['pamet1']."\">\n";
          break;
        case "=":
          switch($_POST['znamenko']){
            case "+":
              $vysledek = (int)$_POST['pomocny'] + (int) $_POST['display'];
              echo "<input type=\"hidden\" name=\"pomocny\" value=\"$vysledek\">\n";
              echo "<input type=\"text\" name=\"display\" value=\"$vysledek\">\n";
              echo "<input type=\"hidden\" name=\"pamet1\" value=\"".$_POST['pamet1']."\">\n";
              break;
            case "-":
              $vysledek = (int)$_POST['pomocny'] - (int) $_POST['display'];
              echo "<input type=\"hidden\" name=\"pomocny\" value=\"$vysledek\">\n";
              echo "<input type=\"text\" name=\"display\" value=\"$vysledek\">\n";
              echo "<input type=\"hidden\" name=\"pamet1\" value=\"".$_POST['pamet1']."\">\n";
              break; 
          }  
          break;                                                               
        case "M1":
          if($_POST['display'] != ""){
            echo "<input type=\"hidden\" name=\"pamet1\" value=\"".$_POST['display']."\">\n";
            echo "<input type=\"hidden\" name=\"pomocny\" value=\"".@$_POST['pomocny']."\">\n";
            echo "<input type=\"hidden\" name=\"znamenko\" value=\"".@$_POST['znamenko']."\">\n";
            echo "<input type=\"text\" name=\"display\" value=\"".$_POST['display']."\">\n";
          } else {
            echo "<input type=\"hidden\" name=\"pamet1\" value=\"".$_POST['pamet1']."\">\n";
            echo "<input type=\"hidden\" name=\"pomocny\" value=\"".@$_POST['pomocny']."\">\n";
            echo "<input type=\"hidden\" name=\"znamenko\" value=\"".@$_POST['znamenko']."\">\n";
            echo "<input type=\"text\" name=\"display\" value=\"".$_POST['pamet1']."\">\n";  
          }
          break;
        case "C":
          echo "<input type=\"text\" name=\"display\" value=\"\">\n";
          echo "<input type=\"hidden\" name=\"pamet1\" value=\"".$_POST['pamet1']."\">\n";
          break;
        case "MC":
          echo "<input type=\"hidden\" name=\"pomocny\" value=\"".@$_POST['pomocny']."\">\n";
          echo "<input type=\"hidden\" name=\"znamenko\" value=\"".@$_POST['znamenko']."\">\n";
          echo "<input type=\"text\" name=\"display\" value=\"".$_POST['display']."\">\n";
          break;
        default:
          echo "<input type=\"hidden\" name=\"pamet1\" value=\"".@$_POST['pamet1']."\">\n";
          echo "<input type=\"hidden\" name=\"pomocny\" value=\"".@$_POST['pomocny']."\">\n";
          echo "<input type=\"hidden\" name=\"znamenko\" value=\"".@$_POST['znamenko']."\">\n";
          if((int)$_POST['tlacitko'] <= 9 && (int)$_POST['tlacitko'] >= 0){
            echo "<input type=\"text\" name=\"display\" value=\"".@$_POST['display'].$_POST['tlacitko']."\">\n";                
          } else {
            echo "chyba" ;
            break;     
          }   
      }
  }
?>  
      </td>
      </tr>
      <tr>
      <?php
        $tlacitka = array("=","MC","0","C","+","1","2","3","-","4","5","6","M1","7","8","9"); // tlačítka kalkulačky
        $radek = 4; // pocet tlacitek na radek
        $aktualne_tlacitek = 0; // aktualní počet tlačítek na řádku
        for($i = (count($tlacitka) - 1); $i >= 0; $i--){
          $aktualne_tlacitek++;
          echo "<td><input type=\"submit\" name=\"tlacitko\" value=\"".$tlacitka[$i]."\"";
          if($tlacitka[$i] == ""){
            echo "disabled";
          }
          echo "></td>\n";
          if($aktualne_tlacitek == $radek){
            echo "\n</tr>\n<tr>";
            $aktualne_tlacitek = 0;
          }  
        }
      ?>
      </tr>
    </table>
  </form>
Joker
Profil
muhch:
Mně v první řadě přijde nepohodlné dělat kalkulačku na straně serveru a při každém stisknutí tlačítka si přeposílat data mezi klientem a serverem, když stejná funkčnost je k dispozici i na klientovi (v Javascriptu).

Když už by výraz měl vyhodnocovat server a navíc umět pokročilejší věci jako závorky, asi by bylo lepší to udělat tak, že by uživatel napsal na klientovi celý výraz a až pak by ho poslal na server, který by měl nějaký parser na to.
Samozřejmě by to ale bylo složitější na programování. Jednodušší by mi přišel ten Javascript.
Ugo
Profil
tohle předně není žádná kalkulačka, základní kalkulačka (co bere v potaz přednosti, ale závorky, paměti atp. nemá) vypadá nějak takhle, je to tvorba tak před 3-4 lety, myslím že pokud si vemeš koncept (asi udělat jinak, nevim) toho že to má bejt kalkulačka a doplníš tam funkční závorky, tak to bude bomba :) žel když na tohle koukám tak v tom se nevyzná už ani prase :D

<html>
<head>
<link rel="shortcut icon" href="http://www.ocv.wz.cz/images/ocv.bmp" type="image/x-icon" />
<title>OCV-software</title>
<style>
.tlacitko{width:45px;height:33px;font-weight:900;background-color:fff1b;background-image:url(http://ocv.wz.cz/calc/tlacitko.png);border:0;color:#cecece}
.tlacitko2{width:95px;height:33px;font-weight:900;background-image:url(http://ocv.wz.cz/calc/tlacitko2.png);}
</style>
</head>
<body>

<?php
$vysledek = "";
if(!empty($_POST['pole'])) 
{
$pole=$_POST['pole'];
$delkapole=strlen($pole);
$i=1;
$znacka=0;
while($i<=$delkapole):
$ii=$znacka+1;
if (ord(substr($pole,$i,1))=="43") {
    $delkaprvniho=0;                            
    while($ii<=$i):
        if(ord(substr($pole,$ii,1))=="45") $delkaprvniho=$delkaprvniho+1;
        if(ord(substr($pole,$ii,1))=="46") $delkaprvniho=$delkaprvniho+1;
        if(ord(substr($pole,$ii,1))>=48 and ord(substr($pole,$ii,1))<=57) $delkaprvniho=$delkaprvniho+1;
        $ii++;
    endwhile;
    $iii=$i+1;
    $ii=$znacka+1;    
    $delkadruheho=0;                    
    while($iii<=$delkapole):
        if(ord(substr($pole,$iii,1))=="45") $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))=="46") $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))>=48 and ord(substr($pole,$iii,1))<=57) $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))=="45") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="43") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="42") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="47") $iii=$delkapole;        
        $iii++;
    endwhile;
$iii=$i+1;
$prvni=substr($pole,$ii,$delkaprvniho);
$druhy=substr($pole,$iii,$delkadruheho);
if(ord(substr($pole,$iii+$delkadruheho,1))=="42") $druhy=0;
if(ord(substr($pole,$iii+$delkadruheho,1))=="47") $druhy=0;
if($znacka=="0") {$vysledek=$vysledek+($prvni+$druhy);}
elseif($znacka>0) {$vysledek=$vysledek+$druhy;}
$znacka=$i;


} elseif (ord(substr($pole,$i,1))=="45") {                    
    $delkaprvniho=0;                            
    while($ii<=$i):
        if(ord(substr($pole,$ii,1))=="45") $delkaprvniho=$delkaprvniho+1;
        if(ord(substr($pole,$ii,1))=="46") $delkaprvniho=$delkaprvniho+1;
        if(ord(substr($pole,$ii,1))>=48 and ord(substr($pole,$ii,1))<=57) $delkaprvniho=$delkaprvniho+1;
        $ii++;
    endwhile;
    $iii=$i+1;
    $ii=$znacka+1;    
    $delkadruheho=0;                    
    while($iii<=$delkapole):
        if(ord(substr($pole,$iii,1))=="45") $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))=="46") $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))>=48 and ord(substr($pole,$iii,1))<=57) $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))=="45") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="43") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="42") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="47") $iii=$delkapole;        
        $iii++;
    endwhile;
$iii=$i+1;
$prvni=substr($pole,$ii,$delkaprvniho);
$druhy=substr($pole,$iii,$delkadruheho);
if(ord(substr($pole,$iii+$delkadruheho,1))=="42") {$druhy=0;}
if(ord(substr($pole,$iii+$delkadruheho,1))=="47") {$druhy=0;}
if($znacka=="0") {$vysledek=$vysledek+($prvni-$druhy);}
elseif($znacka>0) {$vysledek=$vysledek-$druhy;}
$znacka=$i;
} elseif (ord(substr($pole,$i,1))=="42") {                    
    $delkaprvniho=0;                            
    while($ii<=$i):
        if(ord(substr($pole,$ii,1))=="45") $delkaprvniho=$delkaprvniho+1;
        if(ord(substr($pole,$ii,1))=="46") $delkaprvniho=$delkaprvniho+1;
        if(ord(substr($pole,$ii,1))>=48 and ord(substr($pole,$ii,1))<=57) $delkaprvniho=$delkaprvniho+1;
        $ii++;
    endwhile;
    $iii=$i+1;
    $ii=$znacka+1;    
    $delkadruheho=0;                    
    while($iii<=$delkapole):
        if(ord(substr($pole,$iii,1))=="45") $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))=="46") $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))>=48 and ord(substr($pole,$iii,1))<=57) $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))=="45") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="43") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="42") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="47") $iii=$delkapole;        
        $iii++;
    endwhile;
$iii=$i+1;
$prvni=substr($pole,$ii,$delkaprvniho);
$druhy=substr($pole,$iii,$delkadruheho);
if($znacka=="0") {
if(ord(substr($pole,$ii-'1',1))=="61"){$vysledek=$vysledek+($prvni*$druhy);}
if(ord(substr($pole,$ii-'1',1))=="43"){$vysledek=$vysledek+($prvni*$druhy);}
if(ord(substr($pole,$ii-'1',1))=="45"){$vysledek=$vysledek-($prvni*$druhy);}
}
elseif($znacka>0) {
if(ord(substr($pole,$ii-'1',1))=="61"){$vysledek=$vysledek+($prvni*$druhy);}
if(ord(substr($pole,$ii-'1',1))=="43"){$vysledek=$vysledek+($prvni*$druhy);}
if(ord(substr($pole,$ii-'1',1))=="45"){$vysledek=$vysledek-($prvni*$druhy);}
if(ord(substr($pole,$ii-'1',1))=="42"){$vysledek=$vysledek*$druhy;}
if(ord(substr($pole,$ii-'1',1))=="47"){$vysledek=$vysledek*$druhy;}
}
$znacka=$i;
} elseif (ord(substr($pole,$i,1))=="47") {                    
    $delkaprvniho=0;                            
    while($ii<=$i):
        if(ord(substr($pole,$ii,1))=="45") $delkaprvniho=$delkaprvniho+1;
        if(ord(substr($pole,$ii,1))=="46") $delkaprvniho=$delkaprvniho+1;
        if(ord(substr($pole,$ii,1))>=48 and ord(substr($pole,$ii,1))<=57) $delkaprvniho=$delkaprvniho+1;
        $ii++;
    endwhile;
    $iii=$i+1;
    $ii=$znacka+1;    
    $delkadruheho=0;                    
    while($iii<=$delkapole):
        if(ord(substr($pole,$iii,1))=="45") $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))=="46") $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))>=48 and ord(substr($pole,$iii,1))<=57) $delkadruheho=$delkadruheho+1;
        if(ord(substr($pole,$iii,1))=="45") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="43") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="42") $iii=$delkapole;
        if(ord(substr($pole,$iii,1))=="47") $iii=$delkapole;        
        $iii++;
    endwhile;
$iii=$i+1;
$prvni=substr($pole,$ii,$delkaprvniho);
$druhy=substr($pole,$iii,$delkadruheho);
if($znacka=="0") {
if(ord(substr($pole,$ii-'1',1))=="61"){$vysledek=$vysledek+($prvni/$druhy);}
if(ord(substr($pole,$ii-'1',1))=="43"){$vysledek=$vysledek+($prvni/$druhy);}
if(ord(substr($pole,$ii-'1',1))=="45"){$vysledek=$vysledek-($prvni/$druhy);}
}
elseif($znacka>0) {
if(ord(substr($pole,$ii-'1',1))=="61"){$vysledek=$vysledek+($prvni/$druhy);}
if(ord(substr($pole,$ii-'1',1))=="43"){$vysledek=$vysledek+($prvni/$druhy);}
if(ord(substr($pole,$ii-'1',1))=="45"){$vysledek=$vysledek-($prvni/$druhy);}
if(ord(substr($pole,$ii-'1',1))=="42"){$vysledek=$vysledek/$druhy;}
if(ord(substr($pole,$ii-'1',1))=="47"){$vysledek=$vysledek/$druhy;}
}
$znacka=$i;


}
$i++;
endwhile;
}
?>


<form action="" method="post">
<table align="center" style="border:1px black solid;background-color:grey">
<tr><td colspan="3">
<input value="=<?php echo $vysledek ?>" name="pole" id="a" type="text" style="text-align:right;height:32;font-size:20" size="12">
<td>
<input type="button" class="tlacitko" value="C" onclick="a.value='='">

<tr>
<td>
<input type="button" class="tlacitko" value="7" onclick="a.value=a.value+'7'">
<td>
<input type="button" class="tlacitko" value="8" onclick="a.value=a.value+'8'">
<td>
<input type="button" class="tlacitko" value="9" onclick="a.value=a.value+'9'">
<td>
<input type="button" class="tlacitko" value="+" onclick="a.value=a.value+'+'">
<tr>
<td>
<input type="button" class="tlacitko" value="4" onclick="a.value=a.value+'4'">
<td>
<input type="button" class="tlacitko" value="5" onclick="a.value=a.value+'5'">
<td>
<input type="button" class="tlacitko" value="6" onclick="a.value=a.value+'6'">
<td>
<input type="button" class="tlacitko" value="-" onclick="a.value=a.value+'-'">

<tr>
<td>
<input type="button" class="tlacitko" value="1" onclick="a.value=a.value+'1'">
<td>
<input type="button" class="tlacitko" value="2" onclick="a.value=a.value+'2'">
<td>
<input type="button" class="tlacitko" value="3" onclick="a.value=a.value+'3'">
<td>
<input type="button" class="tlacitko" value="x" onclick="a.value=a.value+'*'">

<tr>
<td>
<input type="button" class="tlacitko" value="0" onclick="a.value=a.value+'0'">
<td>
<input type="button" class="tlacitko" value="." onclick="a.value=a.value+'.'">
<td>
<input type="submit" class="tlacitko" value="=">
<td>
<input type="button" class="tlacitko" value="/" onclick="a.value=a.value+'/'">
<td>

</table>


</body>
</html>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: