Autor | Zpráva | ||
---|---|---|---|
Nadan Profil |
#1 · Zasláno: 23. 1. 2009, 16:58:03
Ehm, snažím se učit v php a zkouším takovou "kalkulačku". Nevím, jak mám udělat výpočet, zatím jsem přišel na:
<?php if ($znamenko == "-") {$znam == "-";} elseif ($znamenko == "+") {$znam == "+";} elseif ($znamenko == "*") {$znam == "*";} elseif ($znamenko == "x") {$znam == "*";} elseif ($znamenko == "/") {$znam == "/";} elseif ($znamenko == ":") {$znam == "/";} ?> Výsledek: <?php echo $x."$znamenko".$y."=".($x $znam $y); ?> |
||
nightfish Profil |
#2 · Zasláno: 23. 1. 2009, 17:04:40 · Upravil/a: nightfish
lepší bude
<?php if ($znamenko == "+") { $vysledek = $x + $y; } else if ($znamenko == "*") { $vysledek = $x * $y; } ... |
||
Nadan Profil |
#3 · Zasláno: 23. 1. 2009, 17:09:09
Oooo, děkuju.
|
||
Joker Profil |
#4 · Zasláno: 23. 1. 2009, 17:27:35
nightfish
Ještě lépe: <?php if ($znamenko == "+") { $vysledek = $x + $y; } else if (($znamenko == "*") || ($znamenko == "x")) { $vysledek = $x * $y; } ... |
||
Nadan Profil |
#5 · Zasláno: 23. 1. 2009, 17:30:54
Joker
Aha.... Takže ty || znamená v podstatě +? |
||
Majkl578 Profil |
#6 · Zasláno: 23. 1. 2009, 17:37:05
|| je or, motas podminky s aritmetickymi operatory
|
||
Nadan Profil |
#7 · Zasláno: 23. 1. 2009, 17:37:39
Majkl578
Promiň, s php začínám... |
||
DJ Miky Profil |
#8 · Zasláno: 23. 1. 2009, 18:44:02
Ty || znamenají, pokud je znaménko "*" nebo "x", tak se násobí.
|
||
Nadan Profil |
#9 · Zasláno: 23. 1. 2009, 18:52:39
DJ Miky
To vím. A ještě jeden problém. Jak víte, nulou nelze dělit, ale když to někdo zkusí, tak mi to píše errorovou hlášku. Hezčí by byl normální text. Jak to tam mám napasovat, aby mi to napsalo, když někdo bude chtít dělit nulou, "Nulou nepodělíš"? |
||
Majkl578 Profil |
#10 · Zasláno: 23. 1. 2009, 18:53:12 · Upravil/a: Majkl578
osobne bych to cele udelal treba takto:
function mathOperation($x, $y, $op) { $x = (float) $x; $y = (float) $y; switch($op) { case '+' : return $x + $y; break; case '-' : return $x - $y; break; case '*' : case 'x' : return $x * $y; break; case '/' : case '÷' : if($y == 0) { die('Division by zero is forbidden.'); } return $x / $y; break; case '^' : return pow($x, $y); break; default : die('No math operation defined, exiting'); break; } edit: deleni nulou osetreno |
||
Nadan Profil |
#11 · Zasláno: 23. 1. 2009, 18:55:48
Majkl578
Aha, to je chytré... Zas tak pokročilý, abych tohle sesmolil nejsem, ale je to dobré... |
||
Nadan Profil |
#12 · Zasláno: 23. 1. 2009, 19:12:09 · Upravil/a: Nadan
Hmmm, nějak to hapruje...
<?php function mathOperation($x, $y, $op) { $x = (float) $x; $y = (float) $y; switch($op) { case '+' : return $x + $y; break; case '-' : return $x - $y; break; case '*' : case 'x' : return $x * $y; break; case '/' : case '÷' : if($y == 0) { die('Dělení nulou je zakázané.'); } return $x / $y; break; case '^' : return pow($x, $y); break; default : { die('Nebylo zadáno žádné číslo.');} break; ?> |
||
Měsíček Profil |
#13 · Zasláno: 23. 1. 2009, 19:14:00
Ty očividně neumíš kopírovat ..
|
||
Nadan Profil |
#14 · Zasláno: 23. 1. 2009, 19:16:36 · Upravil/a: Nadan
Měsíček
Ano, to už je upravené. Je to sice možná blbost, ale to, co poslal Majkl578 taky nefungovalo... EDIT: Píše mi to: Parse error: syntax error, unexpected $end in /home/free/yc.cz/m/mamlas/root/www/kalku/vysledek.php on line 46 |
||
Měsíček Profil |
#15 · Zasláno: 23. 1. 2009, 19:20:41
Kecáš, neučíš se ..
<?php function mathOperation($x, $y, $op) { $x = (float) $x; $y = (float) $y; switch($op) { case '+' : return $x + $y; break; case '-' : return $x - $y; break; case '*' : case 'x' : return $x * $y; break; case '/' : case '÷' : if($y == 0) { die('Dělení nulou je zakázané!'); } return $x / $y; break; case '^' : return pow($x, $y); break; default : die('Nebylo zadané žádné číslo'); break; } } echo (mathOperation(4,2,"*")); ?> |
||
Nadan Profil |
#16 · Zasláno: 23. 1. 2009, 19:24:43
Měsíček
A proč jsou echo (mathOperation(4,2,"*")); tady určitá čísla a násobení? Co to udělá? |
||
Měsíček Profil |
#17 · Zasláno: 23. 1. 2009, 19:25:51
To ti ukazuje jak výše napsanou funkci použít. Vypíše součin čísel 4 a 2 (proto "*").
|
||
Nadan Profil |
#18 · Zasláno: 23. 1. 2009, 19:27:02
Měsíček
Ale pak mi to při jakémkoli příkladu vyhazuje 8. Mám to poslední tedy smazat, nebo upravit...? |
||
Měsíček Profil |
#19 · Zasláno: 23. 1. 2009, 19:35:58
"Ale pak mi to při jakémkoli příkladu vyhazuje 8. Mám to poslední tedy smazat, nebo upravit...?"
Ani jedno. Skoč si do vany napuštěné ledovou vodou pak si přečti alespoň základy PHP a teprve poté se k tomu vrať, jinak to nemá smysl - věř mi. |
||
Nadan Profil |
#20 · Zasláno: 23. 1. 2009, 19:38:31
Měsíček
:) Tak to fakt dík. Vím, že by tam mělo být echo, nejspíše s proměnnou, která vyplyne z té funkce, ale já tam vidím jen tři proměnné a to: x, y a op. Takže nevím. S funkcemi jsem se ještě nesetkal... |
||
DoubleThink Profil * |
#21 · Zasláno: 23. 1. 2009, 19:40:21
„Mám to poslední tedy smazat, nebo upravit...?“
Nejlépe naučit se elementární základy syntaxe PHP. |
||
Nadan Profil |
#22 · Zasláno: 23. 1. 2009, 19:47:09
Hu, už to mám...
Díky DoubleThink Díky Měsíček |
||
Majkl578 Profil |
#23 · Zasláno: 23. 1. 2009, 19:59:30 · Upravil/a: Majkl578
hm tak znovu, tentokrat plne funkcni kod i s formularem:
<?php if(isset($_POST['x'], $_POST['y'], $_POST['operator'])) { echo mathOperation($_POST['x'], $_POST['y'], $_POST['operator']); } else { echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">první číslo: <input type="text" name="x" /><br />druhé číslo: <input type="text" name="y" /><br />operátor: <select name="operator"><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option><option value="^">^</option></select><br /><input type="submit" value="Count" />'; } function mathOperation($x, $y, $op) { $x = (float) $x; $y = (float) $y; switch($op) { case '+' : return $x + $y; break; case '-' : return $x - $y; break; case '*' : case 'x' : return $x * $y; break; case '/' : case '÷' : if($y == 0) { die('Division by zero is forbidden.'); } return $x / $y; break; case '^' : return pow($x, $y); break; default : die('No math operation defined, exiting'); break; } } ?> |
||
Nadan Profil |
#24 · Zasláno: 23. 1. 2009, 20:28:47
Majkl578
Já to mám jinak: index.php <form id="form1" name="form1" method="post" action="vysledek.php"> <table width="306" border="0" cellspacing="0" bordercolor="#000000"> <tr> <td width="71">Číslo 1 </td> <td width="126">Znaménko</td> <td width="87">Číslo 2 </td> </tr> <tr> <td><label for="textfield"></label> <input type="text" name="x" id="x" /></td> <td><input type="text" name="op" id="op" /></td> <td><input type="text" name="y" id="y" /></td> </tr> </table> <div> <p><label for="Submit"></label> <input type="submit" name="Submit" value="Vypočítat" id="Submit" /> </p> </div> </form> vysledek.php <?php function mathOperation($x, $y, $op) { $x = (float) $x; $y = (float) $y; switch($op) { case '+' : return $x + $y; break; case '-' : return $x - $y; break; case '*' : case 'x' : return $x * $y; break; case '/' : case '÷' : if($y == 0) { die('Delení nulou je zakázané!'); } return $x / $y; break; case '^' : return pow($x, $y); break; default : die('Nebylo zadané žádné císlo'); break; } } echo mathOperation($x, $y, $op) ?> |
||
Majkl578 Profil |
#25 · Zasláno: 23. 1. 2009, 20:35:02
Nadan
to je sice hezky, ale mas to spatne. to die v default neznaci (ne)zadani cisla, ale spatneho operatoru. u toho echo mathOperation(...) ti chybi strednik na konci hochu jeste se mas co ucit (i html) :) btw zkus to moje, popr. si to uprav. |
||
Nadan Profil |
#26 · Zasláno: 23. 1. 2009, 20:36:36 · Upravil/a: Nadan
Majkl578
Já to špatně nemám, jede mi to normálně... A ten středník není povinný, opkud tam nebudu něco připisovat. EDIT: A nevím, proč bych se měl učit HTML... |
||
TomášK Profil |
#27 · Zasláno: 23. 1. 2009, 20:48:26 · Upravil/a: TomášK
Jen poznámka na okraj - všechny 'break;' se můžou vyhodit. Vždy je před nimi 'return;' nebo 'die();', který tu funkci ukončí, a na break se nikdy nedostane.
|
||
Majkl578 Profil |
#28 · Zasláno: 23. 1. 2009, 23:11:07
TomášK
ááá tak pan chytrej. takze kdyz budu mocnit, tak mi to vrati vysledek scitani, coz je prvni return. fakt mas kvalitni logicke uvazovani. |
||
AM Profil * |
#29 · Zasláno: 24. 1. 2009, 09:12:32
Majkl578
Mám nejradši lidi, co se vysmějou ostatním a vůbec nemají pravdu :) breaky lze skutečně vyhodit, jen si to zkus. Switch se zastaví u prvního case, který platí (řekněme když mocníš, case '^'), a vzhledem k tomu, že hned další příkaz je return, ukončí se celá funkce a vrátí výsledek mocnění (nevím, jak jsi přišel na to, že by interpret šel v kódu nahoru a vrátil sčítání. Spíš ty máš nějak pokřivenou logiku). Obecně není špatný zvyk tam breaky nechávat, řekněme, že by se programátor po čase rozhodl do určité větve dát jiný příkaz, než return, a mohl by zapomenout tam break vrátit. V takhle jednoduché věci bych si je ale zcela bez obav dovolil smazat :) |
||
Joker Profil |
#30 · Zasláno: 24. 1. 2009, 09:16:13
Majkl578
Ale on má TomášK pravdu. Za return nemusí být break, protože ten return tak jako tak vyskočí z funkce. Ale možná bych tam ty break stejně dal, naformátované tak, aby bylo vidět, kde končí který case. Je to IMHO přehlednější. |
||
Téma pokračuje na další straně.
|
0