Autor Zpráva
Pegak
Profil *
Zdravím,
jsem začínající programátor (učím se v PHP) a abych se pořádně něco naučil rozhodl jsem se začít tvořit nějaké nástroje pro jistou hru. Nyní tvořím kalkulačku pro výpočet cen vlastností. Zde je kód, dále popíši problémy.
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Výpočet cen vlastností</title>
    <style>
    <!--
      p {width: 15%; float: left; line-height: 25px;}
      td {width: 50px;} 
    //-->
    </style>
  </head>
  <body>
    <form action="vlastnost.php" name="vypocet" method="post">
      <p>
        Počáteční stupeň vlastnosti<br>
        Koncový stupeň vlastnosti
      </p>
      <p>
        <input type="number" name="minvl" min="11" maxlenght="3">
        <input type="number" name="maxvl" min="12" maxlength="3">
        <input type="hidden" name="formular" value="1">
        <input type="submit" name="submit" value="Odeslat"> 
      </p>
    </form>
    <p>
      <table>
        <?php
        if (isset($_POST['formular'])) {
          $minvl = $_POST['minvl'] ;
          $maxvl = $_POST['maxvl'] ;
          $hodnota = 1000 ;
          while ($minvl <= $maxvl) {
            if ($minvl < 50) {
              echo "<tr><td>". $minvl. "</td>" ;
              echo "<td>". floor($hodnota). "$</td></tr>" ;
              $hodnota *= 1.1 ;              
            }
            elseif ($minvl < 100) {
              echo "<tr><td>". $minvl. "</td>" ;
              echo "<td>". floor($hodnota). "$</td></tr>" ;
              $hodnota *= 1.05 ;              
            }
            elseif ($minvl < 150) {
              echo "<tr><td>". $minvl. "</td>" ;
              echo "<td>". floor($hodnota). "$</td></tr>" ;
              $hodnota *= 1.03 ;              
            }
            elseif ($minvl < 200) {
              echo "<tr><td>". $minvl. "</td>" ;
              echo "<td>". floor($hodnota). "$</td></tr>" ;
              $hodnota *= 1.02 ;              
            }
            else {
              echo "<tr><td>". $minvl. "</td>" ;
              echo "<td>". floor($hodnota). "$</td></tr>" ;
              $hodnota *= 1.01 ;              
            }
            ++$minvl ;
          }
        }
        ?>
      </table>
    </p>                          
  </body>
</html>

A [b]zde{/b] je funkční ukázka

První problém, na který jsem narazil je tento, vždy při přechodu podmínky vznikne nepřesnost v zaokrouhlení (nezaokrouhlí se dolů, ale nahoru, i když tam je funkce floor, která zaokrouhluje dolů). Vzniká tak malá, ale přesto odchylka. Kupříkladu na přechodu z vlastnosti 50 na stupeň 51, kalkulačka vyhodí hodnotu 43 201,2, ale po spuštění kódu je vidět, že se zobrazí hodnota 43 202 (i po zaokrouhlení dolů).

Druhý problém je, že v případě, že uživatel zadá hodnotu vyšší než je základní možná tak program počítá od původní hodnoty (od 1000$), ovšem vlastnost na úrovni např. 60 nestojí 1000, ale mnohem více.

Třetí spíše kosmetický problém je, že bych rád přidal aby se tabulka řadila do více sloupců a nepřesahovala tak stránku, bohužel nevím jak si s tímto poradit jinak než druhou tabulkou. Leda bych řadil hodnoty vedle sebe, ale s tím by v případě zadání velkého rozpětí opět vyvstal onen problém.

Předem děkuji za případné rady. Nemusíte mi vypsat přesné řešení (i když se nebudu zlobit), stačilo by mne spíše popostrčit správným směrem, abych to pak zvládl já sám a přitom to pochopil.
tiso
Profil
1. problém je inde - ty celý čas rátaš s nezaokrúhleným číslom, iba vypisuješ zaokrúhlené. Takže nie 41144 * 1,05 = 43 201,2, ale 41144,777789251 * 1,05 = 43202,016678714
2. najjednoduchšie tak, že by si počítal od prvého levelu, ale vypisoval až od $minvl. Pomohlo by, ak by si oddelil výpočet od výpisu, napríklad vytvorením funkcií.
3. mrkni na Výpis výsledků z databáze (nebo z jiného zdroje) do tabulky o více sloupcích
Pegak
Profil *
Díky, upravím to a hodím zde kód :)

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: